In a simplistic way, I envision all orchestrations to have four phases:

  1. Supervisor (or WMS automation) triggers the start of an orchestration.
  2. Orchestration is broken down into a sequence of tasks.
  3. Pick-station operator is notified of an incoming task.
  4. Pick-station operator executes said task, and then signals its completion.
  5. 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.
  • 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.

Supervisor UI Flow ⚠

  • Currently nothing is implemented. ⚠

Operator UI Flow ✔

  1. UI will periodically poll the API until it sees an available pick-task request.
  2. The pick-station operator will click on the Start button to start the available pick-task.
  3. The pick-station operator will then use their barcode scanner to scan the highlighted pickup bin whose ID is shown on the screen.
    1. The operator can also manually select/acknowledge the bin, bypassing the barcode scanner.
    2. The pickup bins section will be the source bins laid out in a 4 x 2 grid.
  4. The screen will then update to show the image of an item SKU, along with the required quantity.
    1. The drop bin section will be the sole destination bin.
    2. Initially, the Done button will be inactive.
  5. 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).
  6. The screen will accordingly update the quantity count of that item.
  7. The pick-station operator will repeat step 4 until the quantity count reaches quantity needed.
  8. At this point, the “Done” button will become active.
  9. The pick-station operator will click on the Done button to indicate that the pick-task request has been fulfilled.
    1. 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).
    2. 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. ⚠
  • 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.

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 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.
  • 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.

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 the quantity of skuId to be inwarded in a specific binId.
      • Unfortunately, today, the OpSimulator program doesn’t initiate material inward requests. ⚠
  • 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 of skuId into binId.
    • 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.

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 binIds, one for each of the 8 locations/gates/slots at the pick-station (details here).
  • 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.

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.

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
  • image
  • Image
  • image
  • image