Sorting with LT Workflow

Layout 1:1 from NimmstaLayout-XML (device pxx=200, pxy=200) · Load (get-job) → Package Step (scan parcel) → Placing Step (destination + LightTag) → Check Done → done. Optional: Damage reporting, Shortage (quantity), Options. LightTag via jobOptions.lightTagEnabled.

Main flow
REST API endpoints are documented step by step below the diagram — not on the device mockups.
Load Step (Initial)
Loading Data
get-job: onSuccess → Package Step · empty/404 → NoOpenOrders
Package Step
OPTION
Scan parcel
onAppear: disableLightTags. Scan parcel in job.articles → Placing Step (set currentArticleIndex) · unknown parcel → negative, stay · OPTION → Options Package Step
Placing Step
OPTION
Destination
A-12
Parcel filed
onAppear: lightTagFeedback (destination AUTOMATIC). parcel_filed → Check Done Step · Scan destination → Package Step · Scan other parcel → Placing Step (next) · onDoubleTrigger → Package Step · onDisappear: disableLightTags · OPTION → Options Placing Step
Check Done Step
Loading Data
onAppear: all results have check → api.workflow.done() · else → Package Step
Branch: NoOpenOrders
NoOpenOrders
No open orders
Main Menu
Reload
Main Menu → menu-workflow stop · Reload → cancel · onAppear 25s → cancel
Damage reporting
Damage Step
OPTION
Damaged Article
Light Damage
Heavy Damage
Light/Heavy Damage → Package Step (set note) · OPTION → Options Damage Step
Options Damage Step
BACK
BACK
No Damage
BACK → Damage Step · No Damage → Placing Step
Shortage (manual quantity)
Shortage Step
0 Pcs
Del
7
8
9
4
5
6
1
2
3
0
OK
Numpad: quantity entry · OK → Check Done Step · Del → backspace
Options menus (via OPTION button)
Options Package Step
BACK
STOP WORKING
BACK → Package Step · STOP WORKING → api.workflow.stop()
Options Placing Step
BACK
Parcel too heavy
Parcel oversized
Parcel damaged
BACK → Placing Step · Too heavy/oversized/damaged → Package Step (set note)
Flow overview
Start: Load Step (get-job) → with results Package Step; else NoOpenOrders.
Package Step: onAppear disableLightTags. Scan parcel: if parcel in job.articles → set currentArticleIndex, go to Placing Step; else negative_feedback, stay. OPTION: STOP WORKING (stop) or BACK (Package Step).
Placing Step: Shows destination. onAppear lightTagFeedback (destination as LightTag, AUTOMATIC, triple pattern). User places parcel at destination. Button „Parcel filed“ → set result.check, go to Check Done Step. Scan destination barcode → set check, disableLightTags, Package Step. Scan another parcel from job → set check, switch to that parcel, Placing Step. onDoubleTrigger: set check, push result, Package Step. Wrong scan → negative_feedback. onDisappear disableLightTags. OPTION: BACK → Placing Step; Parcel too heavy/oversized/damaged → Package Step with note.
Check Done Step: onAppear: if every result has check → api.workflow.done(); else → Package Step.
Damage Step: Damaged Article reporting. Light Damage / Heavy Damage → Package Step with note. OPTION → Options Damage Step (BACK, No Damage → Placing Step).
Shortage Step: Numpad for quantity entry, OK → Check Done Step. (Manual quantity for shortages.)
LightTag: When lightTagEnabled: Placing Step onAppear sets destination LightTag (AUTOMATIC, TRIPLE); on leave (Placing Step onDisappear, or when scanning destination/other parcel) disableLightTags. Package Step onAppear also disables LightTags. CSV format: job;parcel;destination.
Translations: DE/EN via translationKeys (loading_data, no_open_orders, scan_parcel, destination, parcel_filed, damaged_article, light/heavy_damage, stop_working, parcel_too_heavy/oversized/damaged, etc.).

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 Package Step
GET validate-parcel Validate parcel barcode exists in open sort job
3 Placing Step
GET resolve-destination Validate scanned destination barcode matches expected target
PATCH confirm-sort Confirm parcel sorted / placed at destination
4 Check Done Step
POST complete-job Close picking job and send results to ERP

Branches

5 NoOpenOrders
GET get-job Load open picking job and all pick lines
6 Damage Step
POST report-damage Report parcel damage with note
7 Shortage Step
POST report-short-pick Report partial pick / shortage quantity
POST report-exception Report sorting exception / skip

Options menu

8 Options Package Step
POST report-exception Report sorting exception / skip
9 Options Placing Step
POST report-exception Report sorting exception / skip
10 Options Damage Step
POST report-damage Report parcel damage with note

Technical Reference — Sorting with LT

Parcel sorting with LightTag destination. 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
parcelParcel barcode
destinationSort target + LightTag ID
noteDamage / exception note
checkTimestamp when placed

4 · Request / response examples

confirm-sort
POST /sorting/events
{ "parcelBarcode": "003404…", "destination": "LINE-07" }

Coordinates 1:1 from NimmstaLayout (device pxx=200, pxy=200). Sorting with LT (PoVTemplates/Sorting with LT.json).