FIFO Will Expire Your Stock. Use FEFO.
Two boxes of the same product sit on the same rack. One expires in eight months, the other in two. Ship the wrong one and it comes back as a return — at your cost, against your margin, with a credit note to raise.
Nothing about that is an inventory-counting problem. Your stock figure was right the whole time. It is a picking problem, and the fix has a name.
Where FIFO quietly fails
FIFO and FEFO agree almost all the time, which is exactly why the disagreement is expensive — you stop watching for it. They come apart the moment you receive a short-dated batch:
- • 12 January — Batch A arrives. 400 strips, expiry March 2027.
- • 3 February — Batch B arrives. 300 strips, expiry September 2026. Your supplier was clearing short-dated stock and you took it at a discount.
FIFO now ships Batch A, because Batch A arrived first. Batch B sits behind it and dies on the shelf — and you paid for the privilege, because the discount that made it attractive is smaller than the write-off.
What a batch record has to carry
A batch is not just a label on a quantity. To be useful it needs four things:
- Batch number — unique within the item, matching what the manufacturer printed.
- Manufacturing date — what a recall is issued against.
- Expiry date — what FEFO sorts on.
- The godown holding it — the same batch split across two warehouses is two different picking decisions.
The invoice needs it too
For drugs, batch number and expiry have to appear on the sale invoice — this is a licensing requirement, not a preference. Two other things quietly depend on the same data: your stockist's recall process, which starts from a batch number and works outward, and the credit note for an expiry return, which has to point back at the original supply.
If the batch is not on the invoice, all three of those become manual work at exactly the moment nobody has time for manual work.
Setting it up
Turn batch tracking on per item, not globally
Batches are an overhead at the counter. Switch them on for what has a shelf life or a recall obligation, and leave the packaging, the stationery and the fixed-asset spares alone.
Capture batch, MFG and expiry at goods receipt
This is the only cheap moment. Every later attempt to attach an expiry to stock already on the rack is a physical stock-check with a torch.
Let dispatch pick by expiry
With expiry dates recorded, the picking order stops being a judgement call at the counter and starts being a property of the data.
Review near-expiry, not stock on hand
A healthy total stock figure tells you nothing about how much of it is about to become a write-off.
Reorder levels and expiry pull in opposite directions
A reorder level says “buy more when you drop below this”. It knows nothing about what is already sitting short-dated in the warehouse. Follow it blindly on a slow-moving item and you top up to three months of cover, all of which dies in six weeks.
The check is not complicated — before a purchase order goes out on a batch-tracked item, look at what is already near expiry. It is the difference between a reorder level that protects you from stock-outs and one that manufactures write-offs.
Common questions
Do I need batches on everything?
No, and you will regret it if you try. Turn it on for items with a shelf life or a recall obligation and leave the rest alone.
Should I value at FIFO or Weighted Average?
Valuation and picking are separate decisions. You can value stock at Weighted Average and still pick by expiry — one is an accounting policy, the other is a warehouse rule.
Can the same batch sit in two godowns?
Yes. Batch stock is held per godown, so a transfer moves a specific batch rather than an anonymous quantity, and each location keeps its own expiry picture.
How do expiry returns get costed?
They come back against the original batch, so the write-off lands on what that batch actually cost you rather than on a blended average.
Ready to try this yourself?
Sally ERP handles all of this — and more. Free trial, no credit card.
Start free trial