# Product Label Issue — generate, print, scan, reprint and cancel finished-goods QR labels against an inbound request

> Fine Chemical (FC) · WMS module · v1.0 · 23/09/2026 · Standard flow — for implementation, testing and development
>
> Generated from the diagram by `sync.js` — do not edit by hand. The diagram is authoritative: report any mismatch with the diagram page.
>
> Diagram page: /en/wms/product-label-issue

## How to read

- Every box on the diagram has a code `Bxx`, numbered in flow order (from the start event, following the arrows).
- "Goes to" lists every arrow leaving the box; text in square brackets is that arrow's condition label.
- "Optional branch" = a dashed arrow on the diagram: may be done or skipped.
- "Data" boxes in the Input lane are incoming data; in the Output lane they are results / end points of the flow.

## Process Flow (swimlane)

### Roles (lanes)

- Input
- Warehouse Staff
- Warehouse Manager · QA
- Output

### Steps

| Code | Role | Type | Content | Platform · Screen | Goes to |
| --- | --- | --- | --- | --- | --- |
| B01 | Input | Data | Product Income Request (created from the Sales Order) |  | B10 |
| B02 | Input | Data | Subcontract inbound (Purchasing / Production) |  | B10 |
| B03 | Input | Data | Return / re-pack inbound |  | B10 |
| B04 | Input | Data | Master data: Item (variant · carton pack) Warehouse · Printer · Label stock | Master data | B11 |
| B05 | Input | Data | Label register (QR labels generated) |  | B31; B44 |
| B06 | Input | Data | Product Income Slip: Cancel · Delete SAVED Slip · remove label line from Slip |  | B53 |
| B07 | Input | Data | Product Income Slip CANCELLED re-approved |  | B55 |
| B08 | Warehouse Staff | Start | Start |  | B09 |
| B09 | Warehouse Staff | Task | Select Inbound type Production · Subcontract Return / re-pack inbound | Web · Product Label Issue | B10 |
| B10 | Warehouse Staff | Task | Select an Inbound request with Outstanding qty (Product Income Request must be SUBMITTED) → loads header + lines | Web · Product Label Issue | B11 |
| B11 | Warehouse Staff | Task | Choose Remainder rule (default Last label carries remainder) enter Qty to label · Qty / label per line (bulk: All remaining, Qty / label = carton pack) | Web · Product Label Issue | B12 |
| B12 | Warehouse Staff | Decision | Lines valid? |  | B13 [No]; B14 [Valid] |
| B13 | Warehouse Staff | Task | Inline error on the line: exceeds remaining Outstanding Qty / label > Qty to label does not divide evenly (Block rule) → Save as draft · Generate disabled | System (auto) · Product Label Issue | B11 |
| B14 | Warehouse Staff | Task | Label count per line: Qty to label ÷ Qty / label rounded up, last label carries the remainder | System (auto) · Product Label Issue | B15 |
| B15 | Warehouse Staff | Decision | Which action? |  | B16 [Save as draft]; B17 [Generate] |
| B16 | Output | Data | Draft (Save as draft) no labels generated yet |  | (end) |
| B17 | Warehouse Staff | Task | Re-check Outstanding + generate → ISSUED: label no. + serial unique, QR locks Item Variant · Qty · ghi Labelled back to the request line | System (auto) · Product Label Issue | B18; B19 |
| B18 | Output | Data | Request line: cumulative Labelled → Outstanding for the next pass |  | (end) |
| B19 | Warehouse Staff | Decision | Generate & print? |  | B20 [No]; B21 [Yes] |
| B20 | Output | Data | ISSUED labels not yet printed print later from Label inquiry |  | (end) |
| B21 | Warehouse Staff | Task | Print labels: Printer · Copies Label stock · Start at position → Send to printer | Web · Product Label Issue | B22 |
| B22 | Warehouse Staff | Decision | Printer prints OK? |  | B23 [No (printer error)]; B24 [Printed OK] |
| B23 | Output | Data | Labels stay ISSUED print count unchanged |  | (end) |
| B24 | Warehouse Staff | Task | Label ISSUED → PRINTED Prints + 1 · audit trail written | System (auto) · Product Label Issue | B25; B26 |
| B25 | Output | Data | PRINTED labels applied to the carton / pallet |  | (end) |
| B26 | Warehouse Staff | Task | Scan the QR of a PRINTED label khi put-away | Mobile · Product Income | B27 |
| B27 | Warehouse Staff | Decision | Label PRINTED, serial still usable? |  | B28 [No (duplicate / cancelled)]; B29 [Not yet] |
| B28 | Output | Data | Scan rejected — duplicate serial / cancelled label · no Qty loaded logged |  | (end) |
| B29 | Warehouse Staff | Task | Load exactly the QR Qty into the Slip (Qty locked) · serial used up · PRINTED → SCANNED | System (auto) · Product Income | B30 |
| B30 | Output | Data | Label SCANNED — to cancel, reverse the inbound first |  | (end) |
| B31 | Warehouse Staff | Start | Start |  | B32 |
| B32 | Warehouse Staff | Task | Label inquiry: search labels Label no. / QR · Item · Variant Inbound request · Status | Web · Product Label Issue | B33 |
| B33 | Warehouse Staff | Decision | Label status? |  | B34 [Printed / scanned / cancelled]; B35 [ISSUED] |
| B34 | Warehouse Staff | Task | Reprint: choose one / several labels + one shared Reprint reason (mandatory) → Send to printer | Web · Product Label Issue | B36 |
| B35 | Warehouse Staff | Task | Print: choose one / several ISSUED labels, choose Printer (no Reprint reason needed) | Web · Product Label Issue | B37 |
| B36 | Warehouse Staff | Decision | Printed successfully? |  | B38 [No]; B39 [Yes] |
| B37 | Warehouse Staff | Decision | Printed successfully? |  | B40 [No]; B41 [Yes] |
| B38 | Output | Data | Reprint failed — Prints and audit unchanged |  | (end) |
| B39 | Warehouse Staff | Task | Keep label no. + serial status unchanged Prints + 1 · audit per label | System (auto) · Product Label Issue | B42 |
| B40 | Output | Data | Labels stay ISSUED (print failed) print count unchanged |  | (end) |
| B41 | Warehouse Staff | Task | Label ISSUED → PRINTED Prints + 1 · audit trail written | System (auto) · Product Label Issue | B43 |
| B42 | Output | Data | Label reprinted, same label no. + serial, no new label |  | (end) |
| B43 | Output | Data | PRINTED labels (first print) applied to the carton / pallet |  | (end) |
| B44 | Warehouse Manager · QA | Start | Start |  | B45 |
| B45 | Warehouse Manager · QA | Task | Label inquiry: find the label to cancel (Cancel label button shown to Manager · QA only) | Web · Product Label Issue | B46 |
| B46 | Warehouse Manager · QA | Decision | Label currently ISSUED / PRINTED? |  | B47 [No]; B48 [Yes] |
| B47 | Output | Data | Cancel blocked — SCANNED label (reverse the inbound first) / CANCELLED label unchanged |  | (end) |
| B48 | Warehouse Manager · QA | Task | Cancel label: choose a reason + Remark · confirm the label was physically destroyed (mandatory) | Web · Product Label Issue | B49 |
| B49 | Warehouse Manager · QA | Decision | Confirm Cancel label? |  | B50 [Keep label]; B51 [Cancel label] |
| B50 | Output | Data | Keep label label status unchanged |  | (end) |
| B51 | Warehouse Manager · QA | Task | Label → CANCELLED, serial voided Qty released to Outstanding of the request line · audit trail | System (auto) · Product Label Issue | B52 |
| B52 | Output | Data | CANCELLED label request line Outstanding goes back up |  | (end) |
| B53 | Warehouse Staff | Task | Tem SCANNED → PRINTED serial reopened (re-scannable) audit trail written | System (auto) · Product Income | B54 |
| B54 | Output | Data | Label PRINTED — can be re-scanned or cancelled |  | (end) |
| B55 | Warehouse Staff | Decision | Label still PRINTED, not re-scanned? |  | B56 [No]; B57 [Yes] |
| B56 | Output | Data | Re-approve blocked — label already scanned into another Slip / cancelled |  | (end) |
| B57 | Warehouse Staff | Task | Label PRINTED → SCANNED serial used up · audit written | System (auto) · Product Income | B58 |
| B58 | Output | Data | Label SCANNED again with the re-approved Slip |  | (end) |

### Step details (hover content on the diagram)

#### B12 · Lines valid?

- Warehouse Staff
- Comes from: B11
- Goes to [No]: B13 · Inline error on the line: exceeds remaining Outstanding Qty / label > Qty to label does not divide evenly (Block rule) → Save as draft · Generate disabled
- Goes to [Valid]: B14 · Label count per line: Qty to label ÷ Qty / label rounded up, last label carries the remainder

#### B15 · Which action?

- Warehouse Staff
- Comes from: B14
- Goes to [Save as draft]: B16 · Draft (Save as draft) no labels generated yet
- Goes to [Generate]: B17 · Re-check Outstanding + generate → ISSUED: label no. + serial unique, QR locks Item Variant · Qty · ghi Labelled back to the request line

#### B19 · Generate & print?

- Warehouse Staff
- Comes from: B17
- Goes to [No]: B20 · ISSUED labels not yet printed print later from Label inquiry
- Goes to [Yes]: B21 · Print labels: Printer · Copies Label stock · Start at position → Send to printer

#### B22 · Printer prints OK?

- Warehouse Staff
- Comes from: B21
- Goes to [No (printer error)]: B23 · Labels stay ISSUED print count unchanged
- Goes to [Printed OK]: B24 · Label ISSUED → PRINTED Prints + 1 · audit trail written

#### B27 · Label PRINTED, serial still usable?

- Warehouse Staff
- Comes from: B26
- Goes to [No (duplicate / cancelled)]: B28 · Scan rejected — duplicate serial / cancelled label · no Qty loaded logged
- Goes to [Not yet]: B29 · Load exactly the QR Qty into the Slip (Qty locked) · serial used up · PRINTED → SCANNED

#### B33 · Label status?

- Warehouse Staff
- Comes from: B32
- Goes to [Printed / scanned / cancelled]: B34 · Reprint: choose one / several labels + one shared Reprint reason (mandatory) → Send to printer
- Goes to [ISSUED]: B35 · Print: choose one / several ISSUED labels, choose Printer (no Reprint reason needed)

#### B36 · Printed successfully?

- Warehouse Staff
- Comes from: B34
- Goes to [No]: B38 · Reprint failed — Prints and audit unchanged
- Goes to [Yes]: B39 · Keep label no. + serial status unchanged Prints + 1 · audit per label

#### B37 · Printed successfully?

- Warehouse Staff
- Comes from: B35
- Goes to [No]: B40 · Labels stay ISSUED (print failed) print count unchanged
- Goes to [Yes]: B41 · Label ISSUED → PRINTED Prints + 1 · audit trail written

#### B46 · Label currently ISSUED / PRINTED?

- Warehouse Manager · QA
- Comes from: B45
- Goes to [No]: B47 · Cancel blocked — SCANNED label (reverse the inbound first) / CANCELLED label unchanged
- Goes to [Yes]: B48 · Cancel label: choose a reason + Remark · confirm the label was physically destroyed (mandatory)

#### B49 · Confirm Cancel label?

- Warehouse Manager · QA
- Comes from: B48
- Goes to [Keep label]: B50 · Keep label label status unchanged
- Goes to [Cancel label]: B51 · Label → CANCELLED, serial voided Qty released to Outstanding of the request line · audit trail

#### B55 · Label still PRINTED, not re-scanned?

- Warehouse Staff
- Comes from: B07
- Goes to [No]: B56 · Re-approve blocked — label already scanned into another Slip / cancelled
- Goes to [Yes]: B57 · Label PRINTED → SCANNED serial used up · audit written

## Status lifecycle

#### FG QR label (finished-goods QR label)

`ISSUED` → `PRINTED` → `SCANNED` → `CANCELLED`

Transitions:

- `ISSUED` -- Send to printer · First print --> `PRINTED`
- `PRINTED` -- QR scanned · Slip re-approved (auto) --> `SCANNED`
- `PRINTED` -- Cancel label — printed label --> `CANCELLED` (back)
- `ISSUED` -- Cancel label — unprinted label --> `CANCELLED` (back)
- `SCANNED` -- Cancel / Delete Product Income Slip (inbound reversal) --> `PRINTED` (back)

## Input

| # | Input | Type | Used in step |
| --- | --- | --- | --- |
| I-1 | Product Income Request — created from the Sales Order (Product Income flow); Work order no. is only a reference field on the header | Inbound request | Select Inbound request |
| I-2 | Subcontract inbound — Purchasing / Production | Inbound request | Select Inbound request |
| I-3 | Return / re-pack inbound | Inbound request | Select Inbound request |
| I-4 | Item (variant · carton pack) · Warehouse · Printer · Label stock | Master data | Enter Qty to label · Qty / label; Print labels |
| I-5 | Label register — QR labels generated | Data owned by this screen | Label inquiry: search labels |
| I-6 | Product Income Slip: Cancel · Delete SAVED Slip · remove label line from Slip (inbound reversal) | Event from the Product Income screen | Tem SCANNED → PRINTED |
| I-7 | Product Income Slip CANCELLED is re-approved | Event from the Product Income screen | Label still PRINTED, not re-scanned? |

## Step ↔ screen

| Step | Role | Screen |
| --- | --- | --- |
| Select Inbound type · select the Inbound request through the picker (search by Request no. · Warehouse · Request date) — only requests with Outstanding qty, a Product Income Request must be SUBMITTED; header is read-only; changing the request reloads the lines and clears entered quantities | Warehouse Staff (Packing Operator) | Product Label Issue · Web |
| Select the Remainder rule (default Last label carries remainder) · enter Qty to label · Qty / label per line (bulk: All remaining qty, Qty per label = carton pack); Fully labelled lines have their quantity fields locked | Warehouse Staff (Packing Operator) | Product Label Issue · Web |
| Line checks (CR-10: Qty to label ≤ Outstanding · Qty / label ≤ Qty to label · Block rule must divide evenly) · label count (CR-09) | System (auto) | Product Label Issue |
| Save as draft · Generate labels · Generate & print (preview the label and the QR payload `FG \| item \| V:variant \| Q:qty \| U:uom \| S:serial \| R:request`) | Warehouse Staff (Packing Operator) | Product Label Issue · Web |
| Re-check Outstanding + generate ISSUED labels (label no. and serial unique, even when several packing lines generate at once) + write cumulative Labelled back to the request line — one transaction; exceeding Outstanding or any error generates no label. The QR Qty is fixed — if wrong, cancel the label and reissue | System (auto) | Product Label Issue |
| Print labels (Printer · Copies · Label stock · Start at position) → label PRINTED, Prints + 1; apply one label per carton / pallet | Warehouse Staff (Packing Operator) | Product Label Issue · Web |
| Scan the QR of a PRINTED label at put-away | Warehouse Staff (Warehouse Officer) | Product Income · Mobile |
| Label PRINTED and serial still usable: load exactly the QR Qty into the Slip (Qty field locked, not editable) · serial used up · label PRINTED → SCANNED. Serial already used or label cancelled (including a reprinted CANCELLED label): scan rejected, no Qty loaded, logged — in the same transaction as consuming the serial | System (auto) | Product Income |
| Label inquiry · First print (one / several ISSUED labels, no Reprint reason needed) → label PRINTED, Prints + 1 | Warehouse Staff | Product Label Issue · Web |
| Label inquiry · Reprint (one or more PRINTED / SCANNED / CANCELLED labels, one shared mandatory Reprint reason) — keeps label no. + serial, status unchanged, Prints + 1, no additional postable label; the audit trail is written per label only when printing succeeds | Warehouse Staff | Product Label Issue · Web |
| Label inquiry · Cancel label (mandatory reason + confirmation that the physical label was destroyed; if the inbound request is cancelled, cancel with reason Inbound request cancelled) — not an approval step: the Cancel label button is shown only to Manager · QA; SCANNED labels are blocked, cancel the Product Income Slip first | Warehouse Manager · QA (Warehouse Supervisor / QA) | Product Label Issue · Web |
| Product Income Slip cancelled, SAVED Slip deleted or label line removed from the Slip (inbound reversal) → label SCANNED → PRINTED, serial reopened (can be re-scanned or cancelled), audit trail written | System (auto) | Product Income |
| CANCELLED Product Income Slip re-approved: label still PRINTED and not re-scanned → label PRINTED → SCANNED, serial used up; label already scanned into another Slip or cancelled → re-approve blocked | System (auto) | Product Income |

## Output

| # | Output | Produced when |
| --- | --- | --- |
| O-1 | Draft (Save as draft), no labels generated yet | Save as draft chosen |
| O-2 | Request line: cumulative Labelled → Outstanding for the next pass | Labels generated successfully |
| O-3 | Label = `ISSUED` not yet printed, print later from Label inquiry | Generate labels chosen (no immediate print) |
| O-4 | Labels stay `ISSUED`, print count unchanged | Printer could not print |
| O-5 | Label = `PRINTED` applied to the carton / pallet | Printed successfully |
| O-6 | Scan rejected — duplicate serial / cancelled label, no Qty loaded, logged | A QR is scanned whose serial is already used, or the label is no longer PRINTED |
| O-7 | Label = `SCANNED` — to cancel, reverse the inbound first | First QR scan in Product Income |
| O-8 | Reprint failed — Prints and audit unchanged | Printer could not print during Reprint |
| O-9 | Label reprinted with the same label no. + serial, no new label | Reprint succeeded |
| O-10 | Labels stay `ISSUED` (print failed), print count unchanged | Printer could not print on the first print |
| O-11 | Label = `PRINTED` (first print) applied to the carton / pallet | Print tem `ISSUED` succeeds |
| O-12 | Cancel blocked — label `SCANNED` (reverse the inbound first) / `CANCELLED` unchanged | Label already scanned into stock, or already cancelled |
| O-13 | Keep label — label status unchanged | Canceller chose Keep label |
| O-14 | Label = `CANCELLED`; request line Outstanding goes back up | Cancel label with reason + physical-destruction confirmation |
| O-15 | Label = `PRINTED` — can be re-scanned or cancelled | The label's Product Income Slip is cancelled / deleted, or the label line is removed from the Slip |
| O-16 | Re-approve blocked — label already scanned into another Slip / cancelled | Re-approving a CANCELLED Slip when the label is no longer PRINTED |
| O-17 | Label = `SCANNED` again with the re-approved Slip | Re-approving a CANCELLED Slip while the label is still PRINTED |
