Lot and serial traceability
Traceability answers one question under pressure: a defect or recall exists — which units are
affected, and where is every one of them? The answer is only fast if identity was captured at
every handoff. This guide is the discipline, and the payoff.
Two granularities:
Capture at receipt
Lots and serials are created when goods arrive:
Identity capture is all-or-nothing per SKU. A lot-tracked product with some untracked units has no
recall story — the untracked units are exactly the ones you cannot find. If you turn tracking on,
backfill or quarantine the untracked stock.
Reserve and consume
Reservations tie identity to demand before the goods move — an order, a work order:
Consumption (POST /api/v1/lots/{id}/consume) records the lot into what it became — a
production batch records which
component lots went into which finished lot, which is the link a recall walks. Serials mirror the
moves: /{id}/ship on the way out, /{id}/return on the way back,
/{id}/scrap at end of life.
Expiry
Run it weekly. Expiring stock found at 60 days is a promotion; found at 5 days it is a
write-off. Pickers consuming
oldest-first only works if lot dates were captured at receipt — see the warning above.
Quarantine and quality
The moment a lot is suspect:
Quarantined stock is off sellable inventory immediately — picks stop finding it while you
investigate, not after. The investigation itself is a quality workflow: an inspection
(POST /api/v1/quality/inspections, then /start, /results, /complete) and an NCR
(POST /api/v1/quality/ncrs) whose disposition (/{id}/disposition) decides the lot’s fate —
release (POST /api/v1/lots/{id}/release-quarantine), rework, return to
vendor, or scrap.
The recall drill
When it’s real, the sequence is four reads and one write:
GET /api/v1/lots?lot_number=L2026-07-A — the lot, its remaining quantity
GET /api/v1/warehouse-locations/{id}/inventory — where the on-hand units sit
- Shipped units — the lot’s consumption and shipment history names the orders, which names the
customers
POST /api/v1/lots/{id}/quarantine — stop further movement, then work the list
Run this drill on a fake defect once a quarter and time it. The gap between “minutes” and “days” is
entirely determined by capture discipline at receipt — and it is much cheaper to discover a hole in
the drill than in the recall.