The 6–12% margin in your claims
Taxonomy, resubmission rules, and the agent loop that keeps it closed.
How we helped a regional retail chain cut inventory holding by 22% while improving in-stock rate from 89% to 97% — and what broke in the first 60 days.
At AED 180M and 52 branches, inventory operations break on three structural problems — invisibility across sites, forecasting that is really smoothing, and transfer decisions made by phone. A three-phase rebuild (visibility backbone, forecasting upgrade, transfer agent) took this group from 85 days-on-hand to 66, from 89% in-stock to 97%, and from 2.3% expiry to 0.8% within twelve months. Full phase sequence, metrics, and the operating cadence that locked it in.
The client was a GCC retail pharmacy group with 52 branches across the UAE and KSA, roughly AED 180M in annual revenue. They were, by any reasonable measure, well-run. Good brand, experienced operators, a mature PMS, an ERP connected to it. And yet they had the same inventory problem every GCC operator has at this scale: too much cash tied up in the wrong SKUs at the wrong branches.
When we started, the key numbers looked like this:
The cash opportunity here was significant. Reducing days-on-hand from 85 to 55 on AED 180M of COGS releases roughly AED 15M of working capital. The expiry opportunity was another AED 2.5M a year. But getting there required rebuilding how inventory decisions were actually made, not just tuning the numbers.
We spent the first two weeks in the branches, not in the data. By the time we opened the ERP, we had a clear picture:
Problem 1 — Each branch was ordering for itself. Every branch had autonomy to set its own par levels and place its own orders against the central warehouse. This was sensible in the early days when the group had 8 branches. At 52 branches, it was producing 52 locally-optimal decisions that summed to a globally suboptimal result. Branch A was over-stocked on a specialty SKU that Branch B had been out of for three weeks. Nobody saw the mismatch.
Problem 2 — Demand signals were local and short. Par levels were based on the last 30 days of sales at each individual branch. Seasonality, local cohort shifts (a new clinic opening nearby), and cross-branch trends were invisible. The system was blind to anything outside the 30-day window.
Problem 3 — Expiry management was entirely reactive. There was no system that flagged approaching expiries early enough for a branch-to-branch transfer to actually happen. SKUs expired on shelf, got written off, and the root cause — that they should have been redistributed six months prior — was never surfaced.
Rather than attempting everything at once, we phased the work to minimize operational risk. Any change to inventory operations at 52 branches in parallel is guaranteed to create a crisis. We staged it.
The first move was not a system change — it was a visibility change. We built a single, daily-refreshed view of every SKU across every branch and the central warehouse. Cross-branch stock-outs and overstocks became visible for the first time. Nothing was automated yet; we just made the situation legible.
The first two weeks of this view were, frankly, uncomfortable for the operations team. Mismatches that had been invisible for years were suddenly on a dashboard. We anticipated this and ran it as a weekly operations review, not a performance review. The goal was to build shared understanding before changing any behavior.
With everyone looking at the same data, we rebuilt the demand forecasting engine. Four inputs per SKU per branch:
The engine produced a recommended reorder point and quantity per SKU per branch. The branch manager still approved every order — we did not take autonomy away. We just gave them a much better default.
This is where the operational leverage really appeared. We deployed an agent whose sole job was to look at the chain-wide inventory position every night and recommend branch-to-branch transfers. Two triggers:
The agent drafted the transfer order; a central operations manager approved it; it went into the next day's courier route. No phone calls. No chasing.
We had predicted about a third of the real friction. Here's what actually happened that we hadn't fully planned for:
Branch managers pushed back on the forecasting engine in week 3. The engine was recommending orders that were 10–20% lower than historical ordering patterns. Several branch managers felt this exposed them to stock-out risk. They weren't wrong to worry — the engine was right in aggregate, but for a given SKU on a given day it could be 10% off either direction. We added a simple "safety override" that let the branch manager bump an order without needing sign-off. Usage of the override dropped from ~30% of orders in week 3 to <5% by week 8 as trust built.
The central warehouse could not handle the new ordering cadence. We had shifted ordering from weekly-by-branch to daily-dynamic-by-branch, and the central warehouse was set up for the weekly rhythm. Picking teams got overwhelmed in week 4. We had to pause new rollout and add a shift. In retrospect we should have staged the warehouse capacity upgrade before the branch rollout.
The transfer agent over-recommended in month 5. In its first month live, the transfer agent recommended about 3x the volume of transfers that the courier network could realistically move. We had to layer in a cost-of-transfer threshold (minimum AED value per transfer to justify the move) and a frequency cap (no more than one transfer per SKU per week, outside of stock-out emergencies).
Supplier relationships needed renegotiation. The new ordering pattern produced smaller, more frequent orders. Several key suppliers had pricing tiers tied to order size. We had to renegotiate three major vendor contracts in month 6. In two cases this was neutral; in one case it resulted in a 1.2% unit-cost increase that partially offset the inventory reduction savings.
A year after kick-off, with the system running in steady state:
Three things, in order of impact.
One, stage the central warehouse capacity before the branch rollout. This was the biggest operational pain of the engagement and was entirely avoidable.
Two, set the supplier renegotiation conversation earlier. By the time we were in the new ordering pattern, we had less leverage than if we had started the conversation with suppliers in month 2.
Three, invest more in branch manager training before the forecasting engine went live. The week-3 pushback was avoidable with two hours of pre-rollout training per manager. We did an hour and it wasn't enough.
The technology in this engagement was not particularly novel. Demand forecasting, transfer optimization, and expiry management are solved problems in other industries. The reason it wasn't already happening in GCC pharmacy at scale was operational, not technical: the 52-branch model had been allowed to evolve as 52 local optima, and nobody had the mandate or the cross-branch visibility to change that.
If you are running a chain of more than 20 branches and you haven't done this rebuild, the working capital sitting on your shelves is probably more than your annual capex budget.
The diagnostic starts with a 3-branch inventory benchmark. Two weeks, no commitment.
Taxonomy, resubmission rules, and the agent loop that keeps it closed.
Architecture, human-in-the-loop, and SLAs we commit to.
Data-backed leverage at the negotiation table.