Expiry, batches and FEFO for pharmaceutical distributors
How the Pharma Pack tracks batches and expiry, why a batch stops selling at 00:00 Kabul time on its expiry date, and what quarantine, recalls and cold chain do in Telos.
A pharmaceutical distributor does not sell "paracetamol". It sells paracetamol from a particular batch that expires on a particular day. Most of the daily risk is in that last part. This post walks through how the Pharma Pack handles it, and where the rules end.
The Pharma Pack is one of Telos's industry packs. An Owner or Admin switches it on in Settings under Industry packs. The core of Telos stays industry-neutral; these screens and rules are added on top.
Every receipt names its batch
At goods receipt, the batch number, manufacture date and expiry date are captured and stay attached to the stock through transfers, sales and returns. Stock in Telos is never a number someone typed over. It is the total of an append-only ledger of movements, so a correction is a new entry that you can see, not an edit that hides the old one.
FEFO: first expiry, first out
When you sell, Telos allocates stock from the batch that expires first. If two batches expire on the same day, the one received earlier goes first. Batches that are expired, in quarantine or recalled are never allocated, however short the shelf is.
This rule exists in two implementations, one for the desktop in standalone mode and one for the server, and both are checked against the same set of test vectors. If you want the detail, read how we keep the numbers right.
The expiry-day rule
Here is the rule that surprises people. A batch stops being sellable at 00:00 Kabul time on its printed expiry date, not at the end of that day. If the carton says the batch expires on the 15th, it is already expired on the morning of the 15th.
Telos computes this from the printed date and the Kabul calendar day when it checks availability, so the rule holds even before the nightly job has updated the batch's status. That job runs at 00:10 Kabul time and writes the status change that dashboards and notifications read. We chose the stricter rule on purpose: selling on the day it expires is the mistake that a regulator and a customer both remember.
The expiry dashboard
The Expiry Dashboard shows stock in bands: already expired, expiring in 1 to 30 days, 31 to 60, 61 to 90, and 91 to 180 days. You can search, open a band to see the batches in it, and quarantine selected batches, or all expired stock, from the same screen. You can export what you see. The 180-day band exists because a distributor needs enough time to return stock to a supplier or run a discount.
Quarantine and write-off
Quarantine takes a batch out of allocation without changing the quantity on the books. You release it, or correct the batch, or write it off with a write-off document that goes through the ledger. A write-off is recorded like any other movement, with a person and a time on it.
Certificate of Analysis
The Pharma Pack has a place for the Certificate of Analysis (CoA): upload it, review it in a queue, then verify or reject it. When you receive a batch whose CoA is not yet verified, the goods go into a quarantine zone, not into sellable stock. We want to be exact about the limit: the check happens at receipt. Telos does not stop a sale on the basis of a CoA status at the point of sale today.
Recalls
When a manufacturer recalls a batch, you open a recall on that batch in Telos. The stock on hand for that batch is quarantined at once. Telos lists the customers who received it, from your sales history, so you know who to call. You send the notices, record who acknowledged, and close the recall when it is finished. Admin, Owner, Compliance and warehouse and branch managers are notified when a recall opens.
Cold chain
Warehouse zones can be marked as cold-chain. Telos then refuses to put non-cold-chain stock into such a zone, and refuses to allocate cold-chain products from a zone that is not cold-chain. The check runs both when stock is put away and when it is allocated, on every deployment shape.
Controlled substances and customer licences
Products can be flagged as controlled substances. Every movement of such a product is written to a controlled-substance ledger in the same transaction as the stock movement; the ledger is hash-chained and has a verify action. For controlled or prescription-only products, Telos allows a sale only to a customer with a valid licence on file. A walk-in cash customer is exempt from that check.
Ministry registrations
You can record each product's Ministry of Public Health registration, with its expiry, and Telos alerts the Admin, Owner and Compliance roles before it lapses. This is tracking and alerting. Telos does not block a sale because a registration has lapsed.
What this adds up to
- Batch and expiry captured once, at receipt, and carried everywhere.
- The earliest expiry sells first, and expired, quarantined and recalled stock never sells.
- A dashboard of what is about to expire, six months out.
- A recall that quarantines and tells you who bought the batch.
The Pharma Pack works in standalone, LAN and online modes. See the Pharma Pack page for the full list, or try it with your own products in the 30-day trial from downloads.