An expired batch on the shelf costs more than the stock written off. It costs the trust of the pharmacist, doctor or patient who finds it, and it can bring a regulator's visit.
For pharma distributors, pharmacy chains, hospitals and diagnostics groups in Nigeria, stock is not just stock. Every pack has a batch number and an expiry date, and the business needs to know where each batch is, which one should leave first, and who received it.
This article looks at the problems we see most often in pharma and healthcare businesses, and how Odoo handles each one.
Five problems pharma and healthcare businesses deal with
1. Batch and expiry dates tracked by hand, or not at all
Batch numbers are written on goods received notes or kept in a separate spreadsheet, if they are recorded at all. The stock system knows there are 400 packs of a product, but not that 120 of them expire next month.
2. Stock picked first in, first out, when it should be first expiry, first out
Stores teams naturally pick the oldest stock, or simply whatever is nearest. With medicines, a batch received later can expire sooner. Picking by arrival date instead of expiry date is how short-dated stock ends up written off.
3. Several branches, each with its own count
A pharmacy chain or hospital group may have a central store and several outlets. Each one keeps its own count, transfers between them are recorded late, and nobody can see total stock of a product, or of a batch, across the group without phoning around.
4. Imported products priced in dollars and sold in Naira
Many products are imported. Freight, clearing, duties and other charges are added in Excel to work out a landed cost, and the exchange rate used is rarely the same twice. Margins on the price list are then a guess.
5. No quick way to trace a recall
When a supplier or regulator recalls a batch, the question is simple: who received it, and how much is still in stock? Without batch tracking in the system, answering that means going through invoices and delivery notes by hand, often over several days.
How Odoo handles each one
Batches and expiry dates on every movement
In Odoo Inventory, products can be tracked by lot (batch) or serial number, with expiry dates recorded at receipt. From then on, every movement carries the batch: receipts, transfers between stores, deliveries and returns. You can see stock by batch and expiry date at any location.
Odoo can also record related dates for each batch, such as a "best before" date and an alert date, so the team is warned before stock reaches its expiry date rather than finding out on the shelf.
First expiry, first out
Odoo supports a first-expiry-first-out (FEFO) removal strategy. When an order is picked, the system proposes the batch that expires soonest, not the one that arrived first. Pickers scan or confirm the batch, so what leaves the store matches what the system expected.
All branches in one system
Each branch, outlet or store is a warehouse or location in the same database. Transfers between them are recorded as they happen, with the batch going with the goods. Management can see stock of any product or batch across the whole group, and reorder rules can be set per location.
Landed costs and multi-currency
Purchases can be made in dollars or other currencies with the exchange rate on the day, and Odoo's landed costs feature adds freight, clearing and duty to the cost of the goods received. The cost of each product reflects what it actually cost to bring in, so pricing and margin reports are based on real figures. For the purchasing side of this, see Odoo for Distributors in Nigeria.
Traceability from supplier to customer
Odoo's traceability report follows a batch from the supplier receipt through every transfer to each customer delivery or sale. In a recall, you can see in minutes which customers received the batch, in what quantity, and how much is still in each store, so you can quarantine the remaining stock straight away.
A point of sale linked to the same stock
Retail pharmacies can use Odoo Point of Sale, connected to the same inventory. Sales at the counter reduce stock at that outlet, batch-tracked products can be sold with their batch recorded, and head office sees sales and stock across all outlets without waiting for end-of-day reports.
A note on compliance
Software does not make a business compliant on its own. What Odoo provides is the record-keeping and traceability that compliance depends on: which batches you received, from whom, where they are, and who they went to.
Your obligations to NAFDAC, the Pharmacy Council of Nigeria (PCN) and other regulators remain your own, and your quality and regulatory team should agree how the system is set up to support them. A good implementation partner will work with that team, not around it.
Where to start
Pharma and healthcare projects go best when they are done in a sensible order:
- Clean product master data. Agree how products are named and described: generic name, brand, strength, dosage form and pack size. Duplicate and inconsistent product records are the most common source of stock errors.
- Batch-tracked stock first. Set up locations, switch on batch and expiry tracking, and load opening stock by batch. This alone gives you visibility of short-dated stock.
- Then purchasing, sales and point of sale. Once stock is reliable, connect buying, customer orders, invoicing and counter sales to it.
Healthcare providers often add accounting, HR and payroll later, once stock and sales are running smoothly. You can read more about how we work with the sector on our pharma and healthcare page.
Talk to us
If expired stock, branch counts or recalls are costing your business time and money, book a free consultation. We'll look at how you manage stock today and show you what batch and expiry tracking in Odoo would look like for your business.