Skip to main content

How an operator takes a pick task

What this shows. What pick_dispatch_next does when an operator asks for work on the RF terminal, up to the moment a task becomes Assigned.

Reading the diagram​

  • The two RF entries are Discrete Pick (PICK01, no area named) and Pick by Area (PKAA, then PKAE and PKAEL, then PKA00). Only PKA00 sends work_area_code, equipment_profile_code or on_foot.
  • Without a named area the search covers every area where the operator has a Pick right. With a named area it covers only that area. Both read the pool in the same order.
  • The pool order is: order priority (smaller first), then the Route Sequence of the source location (empty last), then oldest, then id.
  • The operator must be active (OperatorNotActive otherwise).
  • The generic task_claim does not work for Pick. It refuses with SourceOwnedDispatch.
  • A candidate that fails a source rule stays Created. It is skipped only in this search. The codes go to diagnostics: PICK_EXECUTION_ROLLOUT_DISABLED, PICK_NOT_RELEASED, ORDER_NOT_RELEASED, ORDER_TERMINAL, LOCATION_MISSING, LOCATION_BLOCKED, INVENTORY_HOLD, CARTONIZATION_PENDING, CARTONIZATION_BLOCKED, CARTONIZATION_INVALID, IN_CONTINUATION, WRONG_TASK_TYPE, UNSUPPORTED_SOURCE, SOURCE_MISSING, SOURCE_TASK_MISMATCH, TASK_SNAPSHOT_MISMATCH. The RF shows only No eligible Pick work (PICK01) or No eligible Pick work in the area (PKA00).
  • drop_to_close names the pallet of the operator when it holds goods and the answer does not go onto it. The RF then opens PICK13 (close pallet) first.
  • A task already held is returned first, with its lease renewed. If it is no longer executable the dispatch refuses with AssignedSourceIneligible. If it is a task of another type it refuses with OtherTaskActive.
  • When there is no right in any area the answer is NoWorkArea. When rights exist but only tasks too heavy for the equipment remain, the answer is TooHeavyForEquipment.

Where it comes from​

WhatSource
Order of the steps, queue, resume, named areacrates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:220-300
Equipment saved on the operatorcrates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:332-380
Carrier area: held task or ScanCarriercrates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:272-300
drop_to_closecrates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:465-496
Operator active, own task first, limit check, zones, phases, lock and assigncrates/libs/wms-tasks/src/service/candidate.rs:271-470
Pool filter and ordercrates/libs/wms-lib-core/src/model/tasks/task.rs:618-650 and :999-1027
Reachable zonescrates/libs/wms-lib-core/src/model/tasks/operator_task_permission.rs:155-182
Pick Execution gate and the other source rulescrates/libs/wms-outbound/src/picking/infrastructure/dispatch.rs:221-275 and :115-206
Assign with leasecrates/libs/wms-lib-core/src/model/tasks/task.rs:654-678
Pick refused by the generic claimcrates/libs/wms-tasks/src/service/claim.rs:291-312
RF entries and the screens' payloadscrates/libs/wms-lib-sql/sql/rf-screens/095_uc_pick_assignment.sql, crates/libs/wms-lib-sql/sql/rf-screens/110_uc_pick_aggregated_cart.sql
API methoddocs-obsidian/user-guide/api/openrpc.json (pick_dispatch_next)