Skip to content

Running a clinic pharmacy: batches, expiry and why FEFO beats FIFO

8 min read

A pharmacist organising medicines on the shelves behind a counter.
Photograph by World Sikh Organization of Canada on Pexels

How should a clinic pharmacy track medicine stock?

By batch, never by a single quantity per medicine: each batch has its own expiry date, MRP and cost, and the expiry is what decides which one leaves the shelf. Dispense first-expiry-first-out and record every movement in an append-only ledger, so the quantity on hand is derived rather than stored.

A medicine is not a quantity

The instinct is to keep one number per medicine: "Augmentin 625 — 240 tablets". It is wrong, and it fails on the first day something expires.

Those 240 tablets arrived as three deliveries, each with its own batch number, expiry date, purchase cost and printed MRP. When a batch expires you need to know how many of those tablets are left. When a manufacturer recalls a batch, you need to know who received it. When your purchase cost changed between deliveries, your stock valuation depends on which box the tablets came from. A single number answers none of this.

So stock is held per batch, and the medicine's quantity on hand is the sum of its batches — never a figure stored in its own right.

FEFO, not FIFO

Warehouses use first-in-first-out: the oldest delivery leaves first. Pharmacies must use first-expiry-first-out: the batch that expires soonest leaves first, regardless of when it arrived.

These differ more often than people expect. A batch bought in March with a six-month expiry must go before one bought in January with two years on it. Order by arrival and you will throw the March box away.

FEFO also means a single request can span two batches. Ten tablets, with three left in the batch expiring next: three come from that one and seven from the next. That is physically what happens at the counter, so it should be two lines on the bill and two movements in the ledger, not a rounded-off single line.

The ledger is the truth

Every stock system eventually faces the same question: the shelf says 40, the software says 45, which is lying and where did the five go?

You can only answer that if you never edited a quantity. Record movements, append-only:

  • received from a purchase — positive
  • dispensed to a patient — negative
  • returned by a patient — positive
  • written off at expiry — negative
  • adjusted after a physical count — either, with a reason

Quantity on hand is the sum. Nothing is ever overwritten, so a discrepancy can be traced to the movement that caused it, and a physical count becomes an adjustment entry with a reason attached rather than a silent correction.

The same property is what makes overdrawing impossible: if dispensing would take a batch below zero, the write is refused. Two people dispensing the last strip at the same moment cannot both succeed.

Expiry, before it becomes waste

Three windows are worth watching, and each calls for something different:

  • Expired, still on the shelf. This is the urgent one. It must not be dispensable, and it should be visible on the pharmacy screen until it is written off.
  • Expiring within 90 days. Time to use it, return it to the supplier under your credit terms, or stop reordering it.
  • Below reorder level. Unrelated to expiry, equally operational, and the reason a patient goes to the chemist next door.

Schedule H and H1

Schedule H1 drugs require a register: the prescriber, the patient, the drug, the quantity and the date, kept for three years. If your software knows the schedule of each medicine and records who it was dispensed to — which it must, because every dispense belongs to a patient — that register is a query, not a notebook somebody has to remember to fill in.

Clinikr tracks stock by batch and expiry, allocates first-expiry-first-out automatically, derives quantity from an append-only ledger, and refuses any dispense that would take a batch negative.

Written by the team building Clinikr, clinic software for Indian practices. Corrections and disagreements to hello@clinikr.xyz.

See your own clinic in it by this evening.

Fourteen days free, every module switched on, no card. If it does not fit how your clinic works, walk away with your data.