Back to blog
Inventory· 6 min read · May 10, 2026

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.

FEFO, not FIFO: expiry-first inventory for pharmacies

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:

  1. Discount and push — margin is high enough that a 20-30% cut still nets a positive.
  2. Return to supplier — the supplier has a return clause and the paper trail exists.
  3. 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.
P

PharmaPOS team

Operations