Skip to Content

Odoo for Pharmacy Chains in Pakistan: Batch, Expiry & Compliance

September 8, 2026 by
Odoo for Pharmacy Chains in Pakistan: Batch, Expiry & Compliance
Odoo User

Short answer: Pharmacy retail has one requirement ordinary retail does not: every unit must be traceable to a batch with an expiry date. Odoo handles this with lot/batch tracking plus FEFO (first-expired-first-out) removal, so the system dispatches the nearest-expiry stock automatically instead of relying on staff judgement. That enables expiry alerts before stock becomes worthless, precise batch recalls instead of pulling everything, and accurate multi-branch visibility of which batch sits where.

Retail ERP · Pakistan

Odoo for Pharmacy Chains in Pakistan

In pharmacy retail, untracked expiry is not a reporting gap — it is money on the shelf turning into waste, and a compliance risk.

By Pearl Solutions · Updated September 2026 · 9 min read

The problem that only pharmacy retail has

Ordinary retail asks: how many do we have? Pharmacy retail must also answer: which batch, expiring when, and where is it right now?

Get that wrong and two things happen. Stock silently expires on the shelf and becomes a write-off. And if a batch is ever recalled, you have no way to identify what you received or sold — so you pull everything.

The quiet cost: most pharmacy chains running on quantity-only systems discover their expiry losses at stocktake, months after the money was lost. By then the cause is untraceable and the pattern repeats next quarter.

Batch tracking: the foundation

In Odoo, pharmaceutical products are tracked by lot/batch. Every receipt records the batch number and expiry date, and from then on stock moves at batch level:

EventWhat the system records
Goods receivedBatch number, expiry date, quantity, supplier, branch
Transfer to another branchWhich batch moved, dispatched by, received by
Sale at counterWhich batch was sold, when, at which outlet
Write-offWhich batch, why, authorised by whom

Every unit becomes traceable in both directions — back to the supplier and forward to the sale.

FEFO: the setting that stops expiry losses

First Expired, First Out. When stock is dispatched or sold, Odoo allocates the batch with the earliest expiry date automatically — not the oldest received, not whatever is nearest the counter. This removes the single biggest cause of pharmacy expiry loss: staff selling newer stock while older stock quietly ages out behind it.

At any real volume, manual date-checking fails. FEFO makes correct rotation the default rather than a discipline you have to enforce.

Near-expiry alerts: recover value before it is gone

Expiry is not binary — there is a window where stock still has value if you act. Odoo can surface products approaching expiry so you can:

  • Move stock between branches — a slow item at one outlet may sell quickly at another
  • Discount deliberately — recover part of the value rather than none
  • Stop reordering — do not compound the problem while existing stock ages
  • Return to supplier where your terms allow it

Recall readiness

If a batch is withdrawn, batch tracking lets you answer immediately: which batches did we receive, where did they go, how much is still on the shelf, and which have been sold. You recall the affected batch — not every unit of that product across every branch.

Multi-branch pharmacy operations

  • Live stock per branch, including batch and expiry — head office sees everything
  • Traceable inter-branch transfers — dispatch then confirm receipt, so nothing disappears in transit (see multi-store inventory management)
  • Offline-capable POS — a pharmacy that cannot sell during an outage loses walk-in customers immediately (see Odoo POS for multi-store retail)
  • Per-branch cash session control — expected versus counted, recorded by user
  • Central pricing — consistent pricing across all outlets
  • Cycle counting — high SKU counts make annual stocktakes impractical

Controlled and restricted items

Products requiring stricter handling can be configured with tighter controls — batch tracking, restricted user access rights so only authorised staff can process them, and a complete audit trail of who moved or sold what and when. The record exists as a by-product of normal operation rather than as a separate register someone has to maintain.

Where to start

  1. Clean product master data — one product, one code, consistent barcodes
  2. Enable lot tracking with expiry on all pharmaceutical products
  3. Set removal strategy to FEFO
  4. Accurate opening stock count, capturing batch and expiry — the most laborious step, and the one that determines whether everything after it is trustworthy
  5. Enforce two-step branch transfers
  6. Start near-expiry reviews weekly

Implementation

Pearl Solutions is an Official Odoo Partner and a leading manufacturing ERP implementation expert in Lahore, Pakistan — ERP since 2006, 400+ ERP implementations, 30 on Odoo, 91% client retention. We configure Odoo for batch- and expiry-critical businesses including pharmaceutical distribution and food, with multi-branch stock, FEFO, POS and staff training in English and Urdu.

Frequently Asked Questions

Odoo tracks pharmaceutical products using lots or batches. Each batch received is recorded with its batch number and expiry date, and stock is then held and moved at batch level rather than as an anonymous quantity. Because every movement references a batch, the system always knows which batch is in which branch, how much remains, and when it expires. This makes expiry reporting, near-expiry alerts and batch-level recall possible, none of which work if stock is tracked only as a total quantity.  

FEFO stands for first expired, first out. It is a removal strategy where the system automatically allocates the batch with the earliest expiry date when stock is dispatched or sold, rather than the oldest received or whatever is physically nearest. For pharmacies this is critical because relying on staff to check dates manually fails at volume, leading to newer stock being sold while older stock quietly expires on the shelf. Odoo supports FEFO removal on products tracked by lot with expiry dates, which directly reduces expiry write-offs.  

Yes, and this is one of the strongest arguments for batch tracking. Because every sale, transfer and receipt references a specific batch, the system can identify exactly which batches of an affected product were received, where they were distributed across branches, how much remains in stock, and which have already been sold. That allows a targeted recall of the affected batch instead of withdrawing all stock of that product. Without batch tracking, a recall means pulling everything, which is far more costly and disruptive.  

Yes. Each pharmacy outlet operates as its own stock location within one central system, so head office sees live stock including batch and expiry detail across every branch, while each branch manages its own counter sales and cash sessions. Stock transfers between branches use a dispatch and receipt confirmation process so movements stay traceable, and near-expiry stock at one branch can be identified and moved to a branch where it will sell before expiry rather than being written off.

Share this post

Our latest content

Check out what's new in our company !

Your Dynamic Snippet will be displayed here... This message is displayed because you did not provide both a filter and a template to use.
Tags
Archive