Batch and expiry tracking is a legal requirement in pharmaceuticals and food, and a commercial necessity anywhere stock loses value with age. It changes what a stock balance means: quantity alone stops being enough.
Batch changes the identity of stock
Without batches, one hundred units of an item are interchangeable. With batches, they are separate lots with distinct expiry dates, purchase rates and saleability. Two businesses holding the same quantity can be in very different positions.
| Stock identity | Item and quantity | Item, batch, expiry, quantity | Picking rule | Any unit | Earliest expiry first | Recall capability | None | Trace to specific customers | Valuation | Item-level average | Batch-level cost |
FEFO, not FIFO
Perishable stock is picked first-expiry-first-out, which is not the same as first-in-first-out. A batch received later may expire sooner, and should ship first. Picking by receipt date instead of expiry date is how businesses end up writing off stock that was sitting in front of them.
What to record at inward
- Batch or lot number exactly as printed on the supplier's pack.
- Manufacturing date where the product carries one.
- Expiry date, entered as a date rather than free text.
- Quantity received against that specific batch.
- Purchase rate for the batch, which drives valuation.
Entering expiry as free text is the most common data problem here. It prevents sorting, prevents near-expiry alerts, and makes the whole system decorative.
Managing near-expiry stock before it is a loss
Setting the near-expiry horizon
A near-expiry alert is only useful if it fires while you can still do something. The horizon should reflect how long the stock takes to sell and how long a return takes to process.
| Fast-moving, sells within weeks | 60 to 90 days | Slow-moving | 120 to 180 days | Supplier return needs approval | Return window plus 30 days | No return possible | Early enough to discount |
Alerts set too close to expiry generate urgency without options, which trains people to ignore them.
Handling returns and replacements by batch
A customer return comes back as a specific batch, and recording it against the wrong one corrupts both positions and breaks traceability.
- Record the batch number from the returned pack, not from the original invoice line.
- Check remaining shelf life before returning it to saleable stock.
- Quarantine anything that cannot be resold.
- Raise a credit note referencing the original invoice.
- Update the batch position at the location the stock physically returned to.
Recall readiness
The purpose of traceability is answering a recall question quickly. A business with batch tracking configured but never tested usually finds the data incomplete at the moment it matters.
Run this as a drill once. Pick a batch sold three months ago and try to answer all four. The gaps found in a drill are cheap; the same gaps found during an actual recall are not.
Write-offs and the credit position
Expired stock destroyed is a business loss, and input tax credit claimed on goods later written off may require reversal in specified cases. Record write-offs with a reason code and the batch reference, and confirm the GST treatment with your CA before posting a material amount.
What to check before enabling batch tracking
Turning batch tracking on midway through a period, without preparing, produces a stock position nobody trusts. A short preparation sequence avoids that.
- Decide which items genuinely need batches; not everything does.
- Count physical stock by batch for those items.
- Record expiry dates from the packs, not from purchase records.
- Enter opening batch positions before any new movement.
- Confirm picking behaviour on a test sale before going live.
Batch data quality decides everything downstream
| Batch number | Retyped with a typo | Traceability breaks | Expiry date | Entered as free text | No sorting, no alerts | Manufacturing date | Left blank | Shelf life cannot be computed | Quantity | Entered against the wrong batch | Two positions wrong at once | Rate | Item rate used instead of batch rate | Valuation drifts |
Reporting that makes batch data useful
Capturing batch data and never reporting on it is a common outcome. Four reports turn it into a working control.
Building it into the daily routine
Batch control works when it is part of ordinary handling rather than a separate exercise. Reading the batch at the point of picking, not at the point of billing, is what keeps the data honest.
- Capture batch at inward, from the pack.
- Pick by earliest expiry, enforced by the system rather than by memory.
- Review the near-expiry report weekly, not monthly.
- Act on it: discount, return or transfer while options exist.
- Write off with a reason code when nothing else is possible.
Frequently asked questions
Is batch tracking mandatory?
For pharmaceuticals and many food categories, yes, under sector regulation. Elsewhere it is a commercial decision driven by shelf life and recall risk.
How does batch affect GST?
Batch details do not change GST rates or return formats, but batch numbers commonly appear on invoices in regulated sectors and are needed for traceability during inspection.
What about serial numbers?
Serial tracking identifies individual units rather than lots, and suits high-value goods with warranties. It is a different control from batch tracking and is usually applied to different categories.




