Guide · Operations
Batch codes and lot numbering: design it once, so it survives growth.
Every traceability system stands on its coding scheme. Get it right and every record snaps together; get it wrong and you will be paying the interest for years — ambiguous codes, un-parseable labels, and a renumbering project nobody wants. Here is how to design lot codes properly the first time, and the legal minimums underneath.
Home › Batch Codes & Lot Numbering: Best Practice for Small Producers
The legal minimum: what a lot mark must do
EU Directive 2011/91/EU requires prepacked foodstuffs to carry an indication that identifies the lot — a batch of units produced under practically the same conditions — preceded by the letter 'L' where it is not otherwise distinguishable from other label information. If a date of minimum durability or use-by date in uncoded day/month form appears on the label, that date can itself serve as the lot indication.
The lot is defined by the producer: you decide its size and boundaries — a make-day, a vat, a production run, a filling shift. The law cares that the mark identifies the lot; your certifier and customers care that the lot boundaries are small enough to keep a recall's blast radius survivable.
Lot size: the recall blast-radius decision
Every coding decision trades convenience against exposure. One code per week of production means fewer labels and simpler records — and a recall that takes out a week of output. One code per vat or per line-hour means finer records and a recall measured in hundreds of units, not tonnes. The right answer is the largest lot you could afford to lose in a single recall event, and for most artisan and mid-size producers that lands at one code per make-day per product, subdivided where a day covers multiple vats or recipe variants.
Rule of thumb: Price your worst-case recall at each candidate lot size (units × value + disposal + customer disruption). The lot size where that number stops being frightening is your ceiling; go one level finer if the record-keeping cost is tolerable.
Designing the code format
- Make it parseable, not clever — B-2026-114-03 (prefix–year–Julian day–vat) can be read by a human at the dispatch bay and parsed by software. Codes encoding secret meaning (shift initials, freezer positions) rot when people change.
- Never recycle within retention — If records must survive 5 years, a code must not repeat inside 5 years. Year-in-the-code solves this permanently.
- One code system across departments — Production, QC, warehouse and dispatch must call the batch the same thing. The classic failure is production using vat numbers while dispatch uses production dates — with a human translator in between.
- Plan for intermediates — Silo runs, brines, sub-assemblies and rework need their own identity that links parent and child batches, or your internal traceability chain has holes exactly where auditors look.
- Avoid ambiguity characters — Drop O/0 and I/1 collisions if codes are ever handwritten. Dispatch-bay biro is a data-entry system; design for it.
Common format patterns compared
| Pattern | Example | Strengths | Watch out for |
|---|
| Julian date | L26114 | Compact; date recoverable; printer-friendly | Opaque to customers; collides across years without a year digit |
| Date + sequence | L240426-02 | Human-readable; sorts naturally | Longer; needs discipline on the sequence part |
| Sequential + register | B-10442 | Short; no structure to get wrong | Meaningless without the register — the register becomes a single point of failure |
| Structured composite | B-26-114-V3 | Parseable by humans and software; encodes vat/line | Keep it to 3–4 fields or labels get crowded |
Private label: the second code you don't control
Supplying retailers under their own label gives every product a second identity — the retailer's SKU code and description — and your traceability now includes a mapping table you must maintain: which customer code resolves to which internal product, with effective dates so a spec change doesn't orphan historic dispatches. When the retailer's technical team queries 'SKU 47712, best-before 14 June', your records must resolve that to an internal batch without a human translator.
This mapping is one of Keystone's core objects: customer SKU codes map bidirectionally to internal products, so a trace can start from either side — the exact situation a retailer query or a vertical audit creates. If you stay on spreadsheets, keep the mapping as a dated, version-controlled sheet with a named owner; it is the most underestimated document in private-label supply.
The mistakes that hurt two years later
- Codes that mean something — until they don't — Encoding line numbers or staff initials that later change forces either lying codes or a renumbering project.
- Best-before doubling as lot code without a register — Legal under 2011/91/EU when the date is uncoded, but two production runs with the same date become indistinguishable — pair it with an internal batch register.
- Re-keying between systems — Every manual transcription of a code (production book → dispatch sheet → invoice) is an error site. Auditors find transposed digits depressingly often.
- No code on the pallet — Case-level codes with unmarked mixed pallets make warehouse recall segregation guesswork. SSCC pallet labels solve this and Irish multiples increasingly expect them.
Key takeaways
In one glance.
- EU law (Directive 2011/91/EU) requires a lot indication — the producer defines the lot boundaries.
- Size lots by recall blast radius: the largest batch you could afford to lose, typically one code per make-day per product.
- Make codes parseable and year-unique; never recycle a code inside your record-retention window.
- Intermediates (silos, brines, rework) need identities that link parent and child batches.
- Private label adds a customer-code mapping you must maintain with effective dates — own it like a controlled document.
FAQs
Frequently asked.
What legally has to be on a food lot mark in the EU?
Directive 2011/91/EU requires prepacked food to carry an indication identifying the production lot, preceded by 'L' where it isn't otherwise distinguishable. An uncoded day/month date of minimum durability or use-by date on the label can serve as the lot indication.
Who decides how big a lot is?
You do — the producer defines the lot as units produced under practically the same conditions. Certifiers and customers then judge whether your lot size keeps recall exposure sensible; per make-day per product is the common landing point for small and mid-size producers.
Is a Julian date code a good batch code?
It is compact and printer-friendly, but add a year indicator (L26114 rather than L114) so codes never collide across years, and keep an internal register linking each code to its full production record.
How should batch codes handle rework?
Rework needs its own lot identity recording which batches it came from and which batch consumed it, with weights. Without that link your mass balance will not close and your internal traceability has a documented hole.
Do I need different codes for private-label products?
Usually the retailer specifies their own SKU codes and label format. Your job is a maintained mapping between their codes and your internal products/batches, with effective dates — so a query quoting only the retailer code resolves to an internal batch instantly.