In a simplistic way, I envision all orchestrations to have four phases:
- Supervisor (or WMS automation) triggers the start of an orchestration.
- Orchestration is broken down into a sequence of tasks.
- Pick-station operator is notified of an incoming task.
- Pick-station operator executes said task, and then signals its completion.
- Pick-station operator repeats steps 3, 4 until the orchestration is complete.
UI Flows / Roles | Legacy UI | Operator UI | Supervisor UI |
---|---|---|---|
Order fulfillment | N/A | ✔ | ❌ |
Order fulfillment (by order ID) | ❔ | ❌ | ❌ |
Bin purging | ✔ | ❌ | ❌ |
Material inward (single bin) | ✔ | ❌ | ❌ |
Material inward (multiple bins) | ✔ | ❌ | ❌ |
Replenishment | N/A | ❌ | ❌ |
Cycle Counting | N/A | ❌ | ❌ |
Order Fulfillment
High Level Details
- How is the orchestration started?
- Supervisor (or WMS automation) generates an order and then triggers the orchestration by calling the
/api/Wms/{orderReferenceId}/releaseBinToFulfillOrder
API. - Today all this is done via the
OpSimulator
program.
- Supervisor (or WMS automation) generates an order and then triggers the orchestration by calling the
- How is the operator notified of their task?
- No push notifications available. ⚠
- Instead, the Operator’s UI periodically polls the
/api/PickStation/pickItems
API for available pick-tasks.
- How does the operator signal completion?
- Operator’s UI calls the
/api/PickStation/signalPick/{pickTaskId}
API to signal completion.
- Operator’s UI calls the
Supervisor UI Flow ⚠
- Currently nothing is implemented. ⚠
Operator UI Flow ✔
- UI will periodically poll the API until it sees an available pick-task request.
- The pick-station operator will click on the
Start
button to start the available pick-task. - The pick-station operator will then use their barcode scanner to scan the highlighted pickup bin whose ID is shown on the screen.
- The operator can also manually select/acknowledge the bin, bypassing the barcode scanner.
- The pickup bins section will be the source bins laid out in a 4 x 2 grid.
- The screen will then update to show the image of an item SKU, along with the required quantity.
- The drop bin section will be the sole destination bin.
- Initially, the
Done
button will be inactive.
- The pick-station operator will then use their barcode scanner to scan one quantity of the item SKU from the bin (and place that item in the drop/destination bin).
- The screen will accordingly update the
quantity count
of that item. - The pick-station operator will repeat step 4 until the
quantity count
reachesquantity needed
. - At this point, the “Done” button will become active.
- The pick-station operator will click on the
Done
button to indicate that the pick-task request has been fulfilled.- A pick-task request being completed does not necessarily mean the parent order is completed. An order can (and most likely will contain multiple pick requests).
- The pick-station operator will not know (and is not required to know) how many pick tasks are required to fulfill any given order. All that will be tracked in the backend system.
Legacy UI Flow
- N/A
Order Fulfillment (by order ID)
High Level Details
Supervisor UI Flow ⚠
- Currently nothing is implemented. ⚠
Operator UI Flow ⚠
- Currently nothing is implemented. ⚠
Legacy UI Flow
- N/A
Bin Purging
The high level
- How is the orchestration started?
- Supervisor calls the
/api/BinMaster/{binId}/startPurge
API to trigger the bin purge. - Unfortunately, today, the
OpSimulator
program doesn’t initiate bin purge requests. ⚠
- Supervisor calls the
- How is the operator notified?
- No push notifications available. ⚠
- Instead, the Operator’s UI periodically polls the
/api/Wms/purgeBinTasks
API for available purge-tasks.
- How does the operator signal completion?
- Operator’s UI calls the
/api/BinMaster/completePurge/{binId}
API to signal completion.
- Operator’s UI calls the
Supervisor UI Flow ⚠
- Currently nothing is implemented. ⚠
Operator UI Flow ⚠
- Currently nothing is implemented. ⚠
Legacy UI Flow ✔
- Operator enters the
binId
in the UI (note: this is the bin to purge). - Operator clicks on the
Purge Bin
button.- The UI internally calls
/api/BinMaster/{binId}/startPurge
API to trigger the bin purge.
- The UI internally calls
- The UI polls/waits for the bin to arrive at the pick station.
- The UI periodically (say every 10 seconds) calls the
/api/Wms/purgeBinTasks
API to get list of unfulfilled bin-purge tasks (i.e. bin has arrived at pick station, but not been purged yet).- If response is empty array, then keep polling after interval
- If response is non-empty array, then get first item (index 0) from the array. The
binId
should match.
- The UI periodically (say every 10 seconds) calls the
- Then the operator manually purges the bin.
- Operator clicks on the
Confirm Purge
button to acknowledge that the bin has been purged.- The UI calls the
/api/BinMaster/{binId}/completePurge
API to confirm that bin purge is completed. - The UI shows some notification/message acknowledging the bin purge.
- The UI calls the
Material Inward (single bin)
The high level
- How is the orchestration started?
- Note: The bins to be inwarded:
- Are already accessible to the pick station operator (i.e. they don’t need orchestration to bring them to the pick station).
- Are not yet placed on the pick-station gates (i.e. they don’t yet have a pick-station gate/slot assigned).
- Are new, empty bins, not previously in the carteplus system.
- Supervisor generates material inward requests by calling
/api/BinMaster/{binId}/items/{skuId}/{quantity}
API. This basically mentions thequantity
ofskuId
to be inwarded in a specificbinId
.- Unfortunately, today, the
OpSimulator
program doesn’t initiate material inward requests. ⚠
- Unfortunately, today, the
- Note: The bins to be inwarded:
- How is the operator notified?
- No push notifications available.
- Instead, the Operator’s UI periodically polls the
/api/PickStation/inwardTasks
API for available inward-tasks.
- How does the operator signal completion?
- The operator physically inwards specified
quantity
ofskuId
intobinId
. - The
bindId
is placed on a pick station gate (slot). - Operator’s UI calls
/api/Slot/bins/{binId}/inductBinFromLocation/{purpose}
API with the slot coordinates in the request body.
- The operator physically inwards specified
Supervisor UI Flow ⚠
- Currently nothing is implemented. ⚠
Operator UI Flow ⚠
- Not yet implemented fully. ⚠
Legacy UI Flow ✔
- @TODO
Material Inward (multiple bins)
The high level
- Exactly the same as material inwarding with single bin (see section above), but in the final step, the operator’s UI calls
/api/Slot/bins/{binId}/inductBinFromLocation/{purpose}
API in parallel, once for each of the 8 bin.
Supervisor UI Flow ⚠
Operator UI Flow
Legacy UI Flow ✔
- Operator uploads a CSV file containing
binId
,skuId
,quantity
map.- The UI (with help of the legacy java APIs) parse this CSV file.
- Internally, for each of the
binId
in the CSV, the UI will call/api/BinMaster/{binId}/items/{skuId}/{quantity}
API to ingest these details. - Once all calls have succeeded, the next section will get displayed/activated/unhidden on screen.
- Operator inputs the
binId
<->slot
map details.- Note: there will be 8
binId
s, one for each of the 8 locations/gates/slots at the pick-station (details here).
- Note: there will be 8
- Operator clicks on the
Inward Bins
button to trigger the bulk material inwarding.- Internally, for each of the
binId
, the UI calls/api/Slot/bins/{binId}/inductBinFromLocation/{purpose}
API in parallel. - UI shows a message/notification when all 8 calls have succeeded.
- Internally, for each of the
Replenishment
The high level
Supervisor UI Flow
Operator UI Flow
Legacy UI Flow
Cycle Counting
The high level
Supervisor UI Flow
Operator UI Flow
Legacy UI Flow
Open Questions and Challenges
- [Resolved] The challenge is that the
/api/BinMaster/{binId}/purge
API is NOT a long-running orchestration. Hence it does not have the ability to await an external signal/acknowledgement (i.e. operator signaling bin purge complete).
Decisions
- Some related decisions taken
- #57
- #58
- #59
- #73
- #68
- Some related decisions still pending
- #67
Definitions
- Pick Task: A pick task request maps to:
- one or more
quantity
- of a single
item SKU
- in a single
bin
- for fulfilling a single order.
- one or more
Note: By this definition, the pick task request should only flash the image of a single item SKU.
Miscellaneous resources
- Project board
- Figma screens
- UI Slides
- https://docs.google.com/document/d/1dyQHtYa4pGT43hTUztn7Hikid82nHQWE32OzN56y6OU/edit?usp=sharing
- https://docs.google.com/presentation/d/1rZOJGJI2iQh-n2rqm7r0o-fwfSxUWf4HtDDFpf9B1NM/edit?usp=sharing