Skip to main content

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:
  1. GET /api/v1/lots?lot_number=L2026-07-A — the lot, its remaining quantity
  2. GET /api/v1/warehouse-locations/{id}/inventory — where the on-hand units sit
  3. Shipped units — the lot’s consumption and shipment history names the orders, which names the customers
  4. 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.