Two things decide whether expiry costs you money: catching a batch while the distributor will still take it back, and being unable to sell one that has gone.
Last reviewed 2026-09-25
Expiry is the most predictable loss in a pharmacy and the least managed. Every pack announces its own deadline months in advance, and the money is lost anyway — because the deadline that matters is not the printed one. It is the distributor's return window, which closes months earlier, and which nobody is watching on a shelf of several thousand packs.
Handled properly, expiry management is two separate jobs. One is commercial: see a batch early enough to return or move it. The other is legal: make it impossible to sell a batch that has expired, because under Section 27 of the Drugs and Cosmetics Act that is an offence, not a policy breach. Software that only does the first is an alert system. Software that only does the second is a lock. You need both.
This page is about how batch-wise stock, FEFO and expiry blocking should behave in Indian retail pharmacy software — including the date convention that quietly costs shops a month of sellable stock.
If your software tells you that you hold 40 strips of a medicine, it cannot manage expiry, no matter what the feature list says. Those 40 strips arrived on different invoices, from possibly different distributors, with different batch numbers and different expiry dates. "40" is the sum; expiry lives in the parts.
Batch-wise stock means every receipt is stored as its own row: batch number, expiry, quantity, purchase rate, and which distributor it came from. That is what makes four separate things possible — an expiry report that is not a guess, a recall you can actually action, a return-to-vendor claim with the right batch on it, and FEFO.
It is also more work at the point of entry, which is why so many shops end up item-wise by default: someone typed a total instead of a batch. The fix is not discipline, it is making batch entry the path of least resistance — read from the purchase invoice rather than typed by hand.
FEFO — First Expiry, First Out — means the batch that expires soonest is the one dispensed next, regardless of when it arrived. FIFO (First In, First Out) sells the oldest arrival first, and in pharmacy those are routinely not the same batch: a delivery that arrives today can easily carry a shorter dating than one that arrived two months ago.
Every strip sold from the wrong batch is a strip that leaves the short-dated one on the shelf to expire. Over a year, across a few thousand SKUs, that difference compounds into the expiry-loss line.
What to check in any package: when a medicine is billed, is the batch chosen for you by expiry, or does the person at the counter pick from a list? A dropdown is not FEFO. A dropdown is FIFO with extra steps, because under pressure people pick the first row.
A pack prints a month, not a day. Storage needs a full date, so something has to choose the day — and that choice is worth real money.
A medicine printed EXP 08/2026 is legally sellable through 31 August 2026. Software that stores it as 1 August throws away up to thirty days of sellable stock on every pack it touches. We know the size of that error because we made a version of it ourselves: four different places in this codebase once resolved the same month to four different days, and the fix was to give the whole system one resolver that always answers the last day of the month.
Two related traps worth checking in any package you evaluate:
If you keep expiry dates in a spreadsheet today, our free expiry date decoder converts the printed formats to a real last-sellable date, and the stock register format has the batch and expiry columns already laid out.
The expiry date is not your deadline. Your deadline is whatever your distributor's return policy says — commonly a window of some months before expiry, after which the pack is your loss rather than theirs. Terms vary by distributor and by company, so the only reliable version is the one written on your own purchase terms.
This is why a 30/60/90-day expiry view matters more than a single alert. Different windows need different actions:
The useful report is therefore not "what is expiring" but "what is expiring and still returnable, worth this much money, from this distributor". That is a report you can act on in one pass.
Batch tracking, FEFO and expiry blocking are part of the free billing tier — they are compliance, not an upsell. The AI Employee plan (₹999/month as of September 2026) adds the agents that go looking for problems on their own; Starter (₹399/month) adds voice billing, prescription scanning and Refill Radar.
First Expiry, First Out: the batch with the nearest expiry date is dispensed first, regardless of when it was received. It differs from FIFO, which sells the oldest arrival first — and in pharmacy those are often different batches, because a newer delivery can carry a shorter dating.
31 August. A medicine printed with a month and year is sellable through the last day of that month. Software that stores it as the first of the month discards up to thirty days of sellable stock per pack, which across a full shelf is a substantial and entirely avoidable loss.
It should, and it should refuse rather than warn. Selling an expired medicine is an offence under Section 27 of the Drugs and Cosmetics Act, so a dismissible warning is not an implementation of the requirement. Nesayo refuses to bill a batch once its expiry month has passed, on any surface — counter, chat or voice.
Work backwards from your distributor's return window rather than from the expiry date, because that window is the real deadline. A 30/60/90-day view is the practical shape: at 90 days most stock is still returnable, at 30 it usually is not and the decision changes from returning to discounting.
Batch-wise is required for expiry management to mean anything. An item-wise total cannot tell you which of the packs on the shelf expires first, cannot support a recall, and cannot produce a return claim with the correct batch on it.
That is the normal starting point. Import what you have, then let batches build up naturally as new purchases arrive — each delivery adds correct batch and expiry data, so the shelf becomes accurate over a purchase cycle rather than in one painful data-entry session.
No. Batch tracking, FEFO and the hard block on expired stock are part of the free billing tier, because they are compliance rather than convenience. The paid plans add the Expiry Guard agent, which checks every batch on a schedule and raises what needs attention without being asked.
By moving the decision earlier. Most expiry loss is not caused by not knowing a pack expires — it is caused by finding out after the distributor's return window has closed, when the only remaining options are discounting or disposal. Seeing the batch while it is still returnable is where the money is.
Batch tracking, FEFO and expiry blocking are in the free tier. Two-minute signup, no card.
Start free →