Skip to content
Hospitals

Expiry and batch tracking: how hospital pharmacies stop writing off stock

Expired stock is not a discipline problem, it is a visibility problem. What batch level tracking has to do so that write-offs turn into planned usage.

Engineering·12 September 2026·6 min read

Ask a pharmacy manager why stock expired and the answer is usually about staff attention. Ask to see the data and the answer is almost always different: nobody could see, in one place, what was close to expiry and where it was.

Expiry is a visibility problem with a discipline symptom. Fix the visibility and most of the discipline problem goes with it.

A quantity is not a stock figure

If your system holds two hundred units of an item, you know almost nothing useful. Those units may be one batch expiring next month or four batches spread over two years, sitting in the main store, two wards and theatre.

Batch level stock means every receipt records the batch and its expiry, and every issue draws from a specific batch. That is the foundation, and it is the thing that cannot be added later without re-entering your entire holding.

Enforce first expiry first out where the decision happens

First expiry first out is stated as a policy in most pharmacies and practised inconsistently in all of them. It is not a failure of intent. At the counter, under pressure, the nearest box wins.

The fix is to move the decision into the system. When the dispensing screen proposes the oldest usable batch by default, the correct behaviour becomes the path of least effort, and staff have to actively override it to do the wrong thing. An override is fine, as long as it is recorded.

The ninety day view

One standing report does more for write-offs than any amount of training: everything expiring within ninety days, grouped by location, sorted by value.

Ninety days is the window in which you still have options. You can transfer stock to a ward that will consume it, plan it into usage, or open a return conversation with the supplier while they still care. At thirty days you are choosing how to record a loss.

  • Run it monthly, and give it to a named person rather than circulating it.
  • Include ward and theatre stock, not just the main store, or you will keep finding expired boxes in trolleys.
  • Sort by value, so attention goes where the money is.
  • Record what action was taken, so the report becomes a work list rather than a notice.

Wards are where expiry hides

Stock that has left the pharmacy is usually invisible to the pharmacy's own expiry reporting, which is why ward trolleys are where expired boxes turn up. If issue to a ward removes stock from the system entirely, you have not tracked it, you have written it off early.

Ward stock should remain visible as stock, in a ward location, with its batches intact. That is the same architectural point made in the pharmacy inventory pillar: issue should record where stock went and to whom, not simply that it left.

Recalls and returns test the whole design

A recall is the moment your batch data either works or does not. The question is simple and unforgiving: where is every unit of this batch, including what has gone to wards, and what has already been given to patients.

Returns are the quieter test. A patient is issued five units and returns two. Those two need to go back to the correct batch with its original expiry, and the bill needs to reduce. Systems that cannot do this accumulate phantom stock, and phantom stock eventually expires on paper while real stock runs out.

What good looks like in numbers

Write-offs as a percentage of pharmacy purchase value is the headline measure, and it should fall quarter on quarter once batch tracking and the ninety day view are working. Two supporting measures matter more for diagnosis: the share of issues that followed first expiry first out, and the average age of an unexplained stock variance.

If overrides are common, the proposed batch is wrong, usually because ward stock is not visible. If variances are old, you are counting annually rather than cycling, which is covered in inventory control methods.

Where it connects

BBB HMS holds pharmacy stock per batch and location, proposes the oldest usable batch at dispensing, keeps ward stock visible as stock, and reports on expiry windows across every store in the hospital.

Nothing here requires more staff. It requires that the person dispensing at eight in the evening does not have to remember which box is oldest, and that somebody sees the ninety day list while there is still something to be done about it.

Frequently asked questions

Why does stock still expire when we check expiry dates?

Because checking happens at the shelf and issuing happens under pressure. Staff reach for the nearest box, not the oldest. Expiry only stops mattering when the system proposes the correct batch at the moment of dispensing, so the right choice is the default rather than an extra step.

How far ahead should we look at expiry?

Ninety days as a standing report, and six months for high value lines. Ninety days is long enough to transfer stock to a ward that will use it, negotiate a return with a supplier, or plan usage. Thirty days is only long enough to record the loss.

Do we need batch tracking for cheap items too?

For expiry purposes yes, because a cheap item can still fail a recall or an inspection. The cost of capturing a batch at receipt is small once the system supports it. The effort that should scale with value is counting frequency, not batch capture.

Next step

Tell us what is slowing your business down

Send a short brief. Within four business hours you get either a straight answer, a rough number, or the two questions we need to give you one.

Replies under 4 business hoursNDA on requestYou own the code