CASE STUDY
Cutting Expiry Losses Across a Pharmacy Chain with Odoo
An 8-branch pharmacy group in Egypt moved to one Odoo system: expired-stock write-offs fell about 40% in six months and month-end close went from 9 days to 3.
The challenge
The group ran each branch on separate tools and spreadsheets. Head office had no view of stock or expiry dates across branches, which led to three recurring problems:
- Short-dated medicine was discovered late and written off instead of being sold or transferred.
- Monthly stock counts took each branch about two days and disrupted normal service.
- Month-end closing took nine working days because branch figures had to be collected and reconciled by hand.
Our solution
ExtraMile implemented a customized Odoo Community Edition solution built around pharmacy workflows, with every product tracked by batch and expiry date. The main components were:
- Expiry alerts at 90, 60 and 30 days, with suggested inter-branch transfers to sell short-dated stock in time.
- A point-of-sale flow for prescriptions, insurance pricing and loyalty rewards.
- Purchasing linked to supplier price lists and minimum stock levels per branch.
- Management dashboards showing live stock, sales and margin by branch.
How we delivered it
- Weeks 1–3: workflow analysis, product and batch data cleanup.
- Weeks 4–9: configuration, custom expiry and transfer logic, pilot in two branches.
- Weeks 10–14: staff training, rollout to the remaining six branches, and hypercare support.
Project team: 1 project manager, 2 implementers and 2 developers.
Results
Measured against the six months before go-live: expired-stock write-offs fell by about 40%, branch stock counts dropped from two days to about three hours, month-end closing went from nine working days to three, and stockouts on top-selling items fell by about 25%.
Measurable results
| Metric | Before | After |
|---|---|---|
| Expired stock write-offs (first 6 months, inventory adjustment reports) | Baseline (6 months before go-live) | About 40% lower |
| Branch stock count time (average of 8 branches, from count logs) | 2 days | About 3 hours |
| Month-end closing (last 3 closings vs. prior 3) | 9 working days | 3 working days |
| Stockouts on top-selling items (weekly stock reports) | Baseline | About 25% lower |
For the first time we can see every branch's stock and expiry dates in one place. We now move short-dated stock before it becomes a loss.
Operations Director, regional pharmacy group
Project snapshot
- Client
- A regional pharmacy group (anonymised), 8 branches
- Industry
- Pharmacy / Healthcare Retail
- Country
- Egypt
- Odoo modules
- Point of Sale, Inventory (batch and expiry tracking), Purchase, Accounting, CRM (loyalty), custom reporting
- Timeline
- 14 weeks from kickoff to go-live across all branches
