CSV Multi Order Multi Workflow

Layout 1:1 from NimmstaLayout-XML (device pxx=200, pxy=200) · Trolley → HU/Position assign → Pick by storage → Quantity/Part-Qty → Completion

Main flow
REST API endpoints are documented step by step below the diagram — not on the device mockups.
Load Step (Initial)
Loading Data
onSuccess → Trolly Step · onError/empty → NoOpenOrders
Trolly Step
OPTION
Scan Picking Trolley
Scan trolley → Set HU Step · OPTION → Options Trolly
Set HU Step
Set HUs
Done
0
BOX S
0
BOX M
0
BOX L
Done → HU ID Step (sets currentPos=1)
HU ID Step
OPTION
Assign HUs
Scan HU
POS 1
Scan HU → Trolly Place ID · onAppear all POS set → Prepare Storage · OPTION → Options HU ID
Trolly Place ID Step
OPTION
Assign HUs
Scan POS 1
Scan position → Check Trolly Place ID · OPTION → Options Trolly Box
Check Trolly Place ID all trolly_place_ID set → Prepare Storage · else → HU ID Step
Prepare Storage Step all check → Completion · else → Storage Step
Storage Step
OPTION
Scan
Storage
3.8
Article Info
Haribo
Scan storage_scan + stock≥1 → Inventory · scan storage_scan → Quantity Confirm · wrong → negative · OPTION → Options Storage Step1
Inventory Step
OPTION
Quantity before pick
0 pcs
Yes
No
Yes → Quantity Confirm · No → Inventory Count · OPTION → Options Inventory
Inventory Count Step
OPTION
0 pcs
-1
+1
ENTER
-1/+1 → stay · ENTER → Quantity Confirm or next Storage · OPTION → Options Inventory Count
Quantity Confirm Step
OPTION
Total
Quantity
11
Fanta
Quantity
5
Scan Position
POS-1
Scan trolly_place_ID: last → Prepare · more → Part_Quantity · wrong → negative · OPTION → Options Quantity Confirm
Part_Quantity Confirm Step
OPTION
Total
6
/
11
Coca Cola
Quantity
6
Scan Position
POS-2
Scan position: last → Prepare · more → self · wrong → negative · OPTION → Options Part_Quantity
Completion Step
Job Done
Save
Save → api.workflow.done() · onTrigger → done
Branch: NoOpenOrders (when load fails or no results)
NoOpenOrders
No open orders
Main Menu
Reload
Main Menu → stop · Reload → cancel · onAppear 25s → cancel
Options menus (via OPTION button)
Options Start Step
BACK
No option available
Back
BACK / Back → Start Step
Options Trolly Step
BACK
No Trolley
BACK → Trolly · No Trolley → Completion
Options HU ID Step
BACK
Back
BACK / Back → HU ID Step
Options Storage Step
BACK
Back
BACK / Back → Storage Step
Options Storage Step1
BACK
Confirm Storage
Stop Working
Confirm Storage → Quantity Confirm · Stop → stop · BACK → Storage
Options Storage Step2
Back
Skip article
Skip order
PAGE 1
PAGE 2
Skip article → Storage or Completion · Skip order → Completion · PAGE 1 → Step1 · Back → Storage
Options Storage last item
Back
Previous article:
3.8
5 / 5
Haribo
Back → Options Storage Step2
Options Quantity Confirm Step
Back
Stop Working
Stop → stop · Back → Quantity Confirm
Options Part_Quantity Confirm Step
Back
Stop Working
Stop → stop · Back → Part_Quantity Confirm
Options Inventory Count Step
Back
Skip inventory
Skip inventory → Completion or Storage · Back → Inventory Count
Options Inventory Step
BACK
Skip inventory
Insert quantity
Back
Skip → Completion/Storage · Insert quantity → Inventory · Back → Inventory Step
Flow overview
Start: Load Step (get-job) → init trolly_ID/HU_ID/trolly_place_ID → Trolly Step (or NoOpenOrders if empty).
Trolley & HUs: Scan trolley → Set HU Step (box counts S/M/L) → Done → HU ID Step. Scan one HU per job_customer → Trolly Place ID Step. Scan one position per job_customer → Check Trolly Place ID (router). If all positions set → Prepare Storage; else → back to HU ID Step.
Picking: Prepare Storage (router): all check → Completion; else first uncompleted → Storage Step (storage + article). Scan storage_scan: match + stock≥1 → Inventory Step (Yes/No); match → Quantity Confirm; wrong → negative_feedback.
Inventory: Yes → Quantity Confirm. No → Inventory Count (-1/+1, ENTER) → Quantity Confirm or next Storage.
Quantity confirm: Scan trolly_place_ID: last article at location → Prepare Storage; more articles → Part_Quantity Confirm (scan next position). Wrong scan → negative_feedback.
Part_Quantity Confirm: Same scan logic; last → Prepare; more → same step (next article).
Completion: Prepare when all check → Completion Step. Save → api.workflow.done().
Options (OPTION): From any step: BACK to previous or Stop Working / Skip article / Skip order / Confirm Storage etc. as per each Options step.

REST API — Step by Step

Required HTTP Data Connection endpoints per workflow step (derived from step logic). Standard PoV JSONs still use CSV/local job data — these endpoints are what your ERP/WMS should expose when migrating to HTTP.

Main flow

1 Load Step (Initial)
GET get-job Load open picking job and all pick lines
2 Trolly Step
POST assign-trolley Register trolley ID for multi-order picking
3 HU ID Step
POST assign-hu Assign handling unit to trolley / order
4 Trolly Place ID Step
POST assign-trolley-place Assign pick target position on trolley
5 Prepare Storage Step
POST complete-job Close picking job and send results to ERP
6 Storage Step
GET get-pick-line Load current line: storage, quantity, article, stock
GET validate-storage Validate scanned storage location barcode
7 Quantity Confirm Step
GET get-pick-line Load current line: storage, quantity, article, stock
PATCH confirm-pick-to-place Confirm pick and assign to trolley place
POST report-short-pick Report partial pick / shortage quantity
8 Part_Quantity Confirm Step
GET get-pick-line Load current line: storage, quantity, article, stock
PATCH confirm-pick-to-place Confirm pick and assign to trolley place
POST report-short-pick Report partial pick / shortage quantity
9 Inventory Step
GET get-pick-line Load current line: storage, quantity, article, stock
10 Inventory Count Step
GET get-pick-line Load current line: storage, quantity, article, stock
PATCH update-stock-count Submit corrected stock count after inventory
11 Completion Step
POST complete-job Close picking job and send results to ERP

Branches

12 NoOpenOrders
GET get-job Load open picking job and all pick lines

Options menu

13 Options Trolly Step
POST assign-trolley Register trolley ID for multi-order picking
14 Options HU ID Step
POST assign-hu Assign handling unit to trolley / order
15 Options Storage Step
POST confirm-without-scan Confirm article without barcode scan
16 Options Storage Step1
POST confirm-without-scan Confirm article without barcode scan
17 Options Storage Step2
POST skip-article Skip current article, move to next line
POST skip-order Skip entire order in multi-order job
18 Options Quantity Confirm Step
POST skip-article Skip current article, move to next line
POST skip-order Skip entire order in multi-order job
19 Options Part_Quantity Confirm Step
POST skip-article Skip current article, move to next line
POST skip-order Skip entire order in multi-order job

Technical Reference — CSV Multi Order Multi

Multiple orders in one trolley job. See the step-by-step section above for which endpoint belongs to which workflow step.

1 · HTTP Data Connection setup

Connection type
HTTP Data Connection
Identifier
e.g. erp-system — referenced as dataConnection in the workflow
Base URL
Customer web service URL (HTTPS)
Authentication
None, Basic, Bearer, or OAuth
Endpoint identifier
Unique name per operation (must match step cards above)
Endpoint URL
Relative path, e.g. /orders/{orderId}/lines/{lineId}
Pre / post processing
Transform request and map response to NIMMSTA job format
requestOverride
Workflow can override body, headers, params, query (JavaScript)
Async rules: await works in loadData pre/post processing, onStopJobCode, and api.workflow.runActionCodeAsync(...). Step handlers (onScan, onButtonPress) are synchronous — use a loading step or workflow actions for API calls.

2 · Workflow integration patterns

loadData (Load Step)
"loadData": {
  "endpoint": "get-job",
  "dataConnection": "erp-system",
  "preProcessCode": "workflowStep.lastError = null; return request;",
  "postProcessCode": "return response.data;",
  "onSuccess": [{ "code": "job = setJob(response); ..." }]
}
Async action (confirm / complete)
"actions": [{
  "code": "api.workflow.runActionCodeAsync('confirmPickLine')
    .then(() => { ... })
    .catch((e) => { workflowStep.lastError = e; });"
}]

3 · Job object (get-jobsetJob)

{ "name": "Order or batch name", "results": [ { /* fields below */ } ] }
Field in job.results[]Description
job_customer / orderIdCustomer order mapping
trolly_ID / HU_ID / trolly_place_IDTrolley fields
storage / storage_scanStorage location
required_quantity / stockPicking fields
scannedArticles / checkProgress

4 · Request / response examples

get-job (batch)
{ "name": "Multi-Pick Batch", "results": [{ "job_customer": "AU-1001", ... }] }

Coordinates 1:1 from NimmstaLayout (device pxx=200, pxy=200). CSV Multi Order Multi workflow (PoVTemplates/CSV Multi Order Multi.json).