How a held pick task leaves its operator
What this shows. Every door that takes a pick task away from the operator who holds it, who uses the door, and in which state the task is afterwards.
Reading the diagram
- Every door except
Delete TaskandSkipasks the source first. For a pick the source is the Pick guard. It refuses when the SKU has an open serial scan and itsPick Episode ReassignmentisBlock, when a serial scan isAbandoned, and when the pick is in a live cart (PICK_ASSIGNMENT_LIVE: use the dissolve instead). WithHandoverorCancelAndRestarta return is allowed. A reassign hands the scan over or cancels it. pick_rejectis the only way an operator gives back a single pick task. The generictask_skiprefuses a pick (SourceOwnedLifecycle).HandedBackis therefore written by cart doors only: the holder's dissolve, a box closed full, and the hand-over to recovery.pick_rejectis allowed only before anything is picked, needs a reason (at most 80 characters) and the task version. Two switches can forbid it. For a pick on a cart it is the flagAllow Task Releaseof the area of the assignment. For a discrete pick the RF screenPICK11sends no work area, so only the system settingTASK_ALLOW_RELEASE_DEFAULTapplies (the area flag is read only when a caller of the API nameswork_area_id).- After
Refusedthe task is hidden forTASK_SKIP_COOLDOWN_MINminutes. AfterTASK_SKIP_ESCALATE_AFTERrefusals it leaves the pool until a supervisor reassigns it. See Task settings. Seized,HandedBackandExpiredset no cooldown and do not count as a refusal. A task returned byReturn to Poolcan be offered at once.- The holder may dissolve their own cart before the first commit alone. After a commit a supervisor must confirm on the RF with a one-time grant. A supervisor can dissolve a cart in any live status except
Delivering, and not while a position waits for carton recovery (CARTON_REPLAN_REQUIRED). Reassignworks onAssignedandInProgresstasks and onCreatedtasks that were escalated. It resets the refusal counter, clears the escalation and sets a new lease. The code checks only that the target is an active operator. It does not check the target's task rights,Pick Execution, zones or equipment.- The lease reaper does not take a task whose source refuses. A pick under
Blockwith an open serial scan stays with its holder until the scan is finished or a supervisor closes it. Skipon a cart moves the stop to the end of the route. It does not change the task, its lease or its status.
Where it comes from
| What | Source |
|---|---|
| Operator return, area gate, escalation counter | crates/libs/wms-tasks/src/service/release.rs:121-190 |
| Generic skip refuses a pick | crates/libs/wms-tasks/src/service/release.rs:66-77 and :690-720 |
pick_reject | crates/libs/wms-outbound/src/picking/commands/reject.rs:1-60 and :130-200 |
| Return to pool: SQL | crates/libs/wms-lib-core/src/model/tasks/task.rs:1512-1575 |
| Reassign: rules and SQL | crates/libs/wms-tasks/src/service/release.rs:223-300 and crates/libs/wms-lib-core/src/model/tasks/task.rs:1617-1647 |
| Return to Pool by a supervisor | crates/libs/wms-tasks/src/service/release.rs:304-370 and crates/libs/wms-lib-core/src/model/tasks/task.rs:1685-1706 |
| Source may refuse (serial rule, live cart) | crates/libs/wms-outbound/src/picking/infrastructure/holder_change.rs:1-60 and :90-135 |
| Lease reaper | crates/libs/wms-tasks/src/service/reap.rs:1-100 and crates/libs/wms-lib-core/src/model/tasks/task.rs:1886-1923 |
| Reaper and cart sweeper loop (60 s) | crates/services/app-server/src/services/cleanup_tasks.rs:142 and :908-965 |
| Cart sweeper | crates/libs/wms-outbound/src/picking/lease.rs:1-110 |
| Who may dissolve and when | crates/libs/wms-outbound/src/domain/pick_assignment/aggregate.rs:520-581 |
| Dissolve: holder, supervisor, sweeper | crates/libs/wms-outbound/src/picking/commands/dissolve.rs:1-120 and :505-520 |
| Delete Task | crates/libs/wms-outbound/src/service/status_manager/delete_task.rs:1-60 |
| Skip on a cart | crates/libs/wms-outbound/src/picking/commands/skip.rs:1-30 |
| RF screens | crates/libs/wms-lib-sql/sql/rf-screens/094_uc_pick.sql, crates/libs/wms-lib-sql/sql/rf-screens/096_uc_pick_route.sql |