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) andPick by Area(PKAA, thenPKAEandPKAEL, thenPKA00). OnlyPKA00sendswork_area_code,equipment_profile_codeoron_foot. - Without a named area the search covers every area where the operator has a
Pickright. 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 Sequenceof the source location (empty last), then oldest, then id. - The operator must be active (
OperatorNotActiveotherwise). - The generic
task_claimdoes not work forPick. It refuses withSourceOwnedDispatch. - A candidate that fails a source rule stays
Created. It is skipped only in this search. The codes go todiagnostics: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 onlyNo eligible Pick work(PICK01) orNo eligible Pick work in the area(PKA00). drop_to_closenames the pallet of the operator when it holds goods and the answer does not go onto it. The RF then opensPICK13(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 withOtherTaskActive. - 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 isTooHeavyForEquipment.
Where it comes from
| What | Source |
|---|---|
| Order of the steps, queue, resume, named area | crates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:220-300 |
| Equipment saved on the operator | crates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:332-380 |
Carrier area: held task or ScanCarrier | crates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:272-300 |
drop_to_close | crates/libs/wms-outbound/src/picking/commands/dispatch_next.rs:465-496 |
| Operator active, own task first, limit check, zones, phases, lock and assign | crates/libs/wms-tasks/src/service/candidate.rs:271-470 |
| Pool filter and order | crates/libs/wms-lib-core/src/model/tasks/task.rs:618-650 and :999-1027 |
| Reachable zones | crates/libs/wms-lib-core/src/model/tasks/operator_task_permission.rs:155-182 |
Pick Execution gate and the other source rules | crates/libs/wms-outbound/src/picking/infrastructure/dispatch.rs:221-275 and :115-206 |
| Assign with lease | crates/libs/wms-lib-core/src/model/tasks/task.rs:654-678 |
| Pick refused by the generic claim | crates/libs/wms-tasks/src/service/claim.rs:291-312 |
| RF entries and the screens' payloads | crates/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 method | docs-obsidian/user-guide/api/openrpc.json (pick_dispatch_next) |