Serial identity
One serial per unit, unique in active stock, read from scans that may hold other codes.
Request with "decision": "serial" and one of these operations: receive, pick, pack, count.
Clauses applied
receive.factor: UOM factor is frozen once; serial captures use factor 1 and base quantity 1.serial.unique: Serial-controlled stock requires one unit per captured serial and no second positive active position for the same item/serial.variance.manager: Discovery, identity change, reserved/owned stock, above-threshold value or exceptional cost requires independent Warehouse Manager.
Evidence questions
scan_is_serial@1
This value was scanned from one unit of the item described. Is it that unit's own serial number?
| Answer | Meaning |
|---|---|
true | It is the unit's own serial number, unique to this one unit. |
false | It is another code printed on the unit or its packaging: a product barcode (GTIN, UPC, EAN), model or part number, lot or batch, date, or a carton or pallet code. |
Examples
A product barcode scanned as a serial
{
"decision": "serial",
"proposal": {
"operation": "receive",
"qty": "2",
"scans": [
"SN 2304K118842",
"0885911425308"
]
},
"item": {
"sku": "DCD771C2",
"description": "20V cordless drill kit",
"serial_controlled": true,
"gtin": "00885911425308",
"identifiers": [
"DCD771C2"
],
"serial_format": "S/N then 4 digits, a letter, 6 digits"
},
"active_serials": []
}Response from the rules with no model loaded, so every question abstains.
{
"verdict": "reject",
"next": {
"action": "rescan",
"text": "1 scan(s) are not serial numbers ('0885911425308' first). Rescan the units' serial labels."
},
"questions": [
{
"ask": "scans/0",
"question": "scan_is_serial@1",
"status": "model_unavailable",
"evidence": [
"/proposal/scans/0"
]
}
]
}
Request schema
{
"type": "object",
"required": [
"decision",
"proposal",
"item"
],
"additionalProperties": false,
"properties": {
"decision": {
"const": "serial"
},
"proposal": {
"type": "object",
"required": [
"operation",
"qty",
"scans"
],
"additionalProperties": false,
"properties": {
"operation": {
"type": "string",
"enum": [
"receive",
"pick",
"pack",
"count"
]
},
"qty": {
"type": "string",
"format": "decimal"
},
"scans": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 1000
}
}
},
"item": {
"type": "object",
"required": [
"sku",
"serial_controlled"
],
"additionalProperties": false,
"properties": {
"sku": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"serial_controlled": {
"type": "boolean"
},
"gtin": {
"type": "string",
"pattern": "^\\d{8}$|^\\d{12,14}$"
},
"identifiers": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 20
},
"serial_mask": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"serial_format": {
"type": "string",
"minLength": 1,
"maxLength": 4000
}
}
},
"active_serials": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100000
},
"source_serials": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"maxItems": 100000
}
}
}