FEFO, not FIFO: expiry-first inventory for pharmacies
Why pharmacies must sell the earliest-expiring batch first — and how to build a system that enforces it without slowing the counter.
General retail runs on FIFO — first in, first out. Pharmacies can't. A stock lot received this week can easily expire before a lot received six months ago. The right rule is FEFO: first-expiry, first-out.
Why manual FEFO fails
- Two staff on the same counter will disagree on which strip is older.
- Handwritten expiry stickers fade. Photocopied ones smudge.
- By the time a manager audits, the newer batch is already half-sold.
- A ₹200 write-off doesn't feel painful; ₹200 × 40 SKUs × 12 months × 3 outlets does.
How a POS should enforce FEFO
When you scan a product, the system picks the batch with the nearest expiry that still has stock. If a customer specifically asks for a longer-dated pack (rare, but it happens for bulk buyers and monthly-medication regulars), the cashier overrides with two keystrokes and the audit log records the override with the cashier's name.
Why the log matters: at year-end, when you're reconciling expired write-offs, you can seewho pushed the near-expiry stock and when. Coaching becomes possible.
The 30-day expiring report
Every Monday, print your "expiring in the next 30 days" list. For each line, decide:
- Discount and push — margin is high enough that a 20-30% cut still nets a positive.
- Return to supplier — the supplier has a return clause and the paper trail exists.
- Write off — no return clause, no discount that clears it. Take the loss and log it.
Do this consistently for six months and your expired write-off shrinks by half. Not because you're smarter — because you're deciding in time.
What "enforce" looks like in PharmaPOS
- Batches are first-class DB rows, not fields on a product.
- The billing engine picks the FEFO batch server-side, atomically, with a row-level lock.
- Overrides require an explicit action and are logged with the cashier's identity.
- The 30 / 60 / 90 day reports are one click each, exportable to CSV.
PharmaPOS team
Operations