FIFO for pharmacy stock: why the oldest batch must sell first, and how to enforce it
First In, First Out is the rule that stops medicine expiring on your shelf. What it means by batch, how to run it on the shelf and in the book, and how to make the till enforce it.
Ask a pharmacy owner whether they use FIFO and they'll say yes. Ask them to pull the amoxicillin and check which box is at the front, and about half the time it's the newest delivery — because it arrived on a busy afternoon and went wherever there was room.
That's not a character flaw. It's what happens when a rule lives in people's heads. This is how to move it out of their heads and into the shelf and the till.
What FIFO means, precisely
First In, First Out: the stock that arrived first is the stock that leaves first.
For a pharmacy, "first in" should really mean "first to expire", which is almost always the same thing but not quite — a supplier can deliver a shorter-dated batch after a longer-dated one. The rule you actually want is FEFO: First Expired, First Out. Everyone calls it FIFO; what matters is that the batch nearest its expiry date is the one you reach for.
The unit is the batch, not the product. One product, three deliveries, three expiry dates, three positions in the queue.
Why it matters more in a pharmacy than a grocery
A tin of beans past its date is thrown away. A medicine past its date is a regulatory finding, a patient safety issue, and — if a customer reads the box before you do — a reputation that took ten years to build.
It also costs more than you think. Most independent pharmacies write off between 1% and 3% of stock to expiry each year. On a shop turning over $200,000, that's $2,000–$6,000 — roughly a month's profit, thrown into a disposal bin, mostly because the oldest batch was behind the newest.
FIFO on the shelf
Three habits, each of them a minute:
- New stock goes behind. Every delivery, every product, no exceptions for busy afternoons. If there's no room behind, the front comes off, the new goes in, the old goes back in front. This is the whole system; everything else supports it.
- The nearest expiry is marked. A dot, a coloured sticker, a pen mark on the box at the front of the queue. Whoever reaches for the product doesn't have to read four dates.
- Shorter-dated deliveries jump the queue. When a supplier delivers a batch that expires before what's already on the shelf, it goes in front. Check the date on receipt; it takes five seconds and it's the whole difference between FIFO and FEFO.
FIFO in the book
The shelf gets you most of the way. The book is what tells you, in March, that a batch expiring in June is still 200 units deep and needs to go back to the supplier now.
That means recording stock by batch on receipt — product, batch number, quantity, expiry — and recording each sale against a batch. Done by hand, that second part is where it falls over: nobody looks up which batch the box came from while a queue is forming.
So in practice, the book uses an assumption: every sale comes off the oldest batch. If the shelf is in FEFO order, the assumption is true, and the book's batch balances match the shelf. If the shelf isn't — if someone put a new delivery in front — the book says the old batch is shrinking when it isn't, and you find out at stock-take.
This is why the shelf habit and the book assumption have to go together. Either one alone drifts.
Making the till enforce it
The robust version is to take the decision away from the person at the counter entirely. When a sale is rung up, the system picks the batch — the one expiring soonest — deducts from it, and records which one it was. The cashier never chooses, so the cashier can't choose wrong.
Three things follow:
- Batch balances are true, because the deduction happened at the moment of sale, not at 9pm from memory.
- Expiry alerts are accurate, because they're calculated on real remaining quantities — a batch that's already sold through doesn't trigger an alert.
- The shelf can be checked against the book, not the other way round. If the till says batch A has 12 left and the shelf has 12 of batch B at the front, someone put a delivery in the wrong place, and you know which product to fix.
What this looks like in Shopman
- Stock is received by batch — from a purchase order or a quick receipt: batch number, quantity, expiry, cost. A product's total is the sum of its batches; each batch keeps its own balance.
- Every sale deducts from the batch expiring soonest. Automatically, with no choice at the till. The sale records which batch it came from.
- Returns go back to the batch they came from, so a refund doesn't create phantom stock in the wrong queue.
- The expiry tracker lists every batch by days left, and the nightly check warns at 90, 30 and 7 days — on real remaining quantities.
- Stock adjustments (damaged, expired, returned to supplier) are made per batch, with a reason and the staff member's name.
Batch tracking and FIFO dispensing are on every plan, including the free one — they are the part of the product that stops expired medicine reaching a customer, and that shouldn't be behind a paywall.
Start free — load fifty products and receive a batch
Frequently asked
What if a customer specifically wants the longer-dated box? Sell it to them — it's a reasonable request — and record the sale against that batch. That's an exception, made deliberately, and the system should let a pharmacist choose a batch while defaulting to the oldest for everyone else.
Do I need batch numbers for everything? For anything with an expiry date, yes. Devices, bandages and non-perishable goods can be tracked at product level; nothing is gained by batching a box of plasters.
How far ahead should I check? Ninety days for the "return to supplier" conversation, thirty for moving stock to the front and discounting, seven for pulling it. Weekly, same day, same person — the three-alert system covers the full method.