A regional beverage distributor with roughly 1,900 SKUs, one central depot and two cross-docks lived and died by seasonality: summer terraces, December, and a calendar of sports events. Every spring it over-bought lines that had looked strong the previous year but were already fading. With four years of Odoo sell-through read into Flowra and a 90-day what-if run before the preseason order, seasonal inventory planning stopped being a slide deck argument. Preseason write-downs fell 35% year over year.

−35%preseason write-downs, YoY
+11 ptsavailability on promo SKUs, peak weeks
1action list instead of 3 forecasts
4 yrsweekly sell-through history

The situation

Three teams brought three forecasts to the preseason meeting. Marketing wanted depth on the brands it had promotional money behind. Finance wanted turns and a hard cap on the spring purchase order. Buyers referenced last year's sell-through in slides, not in ranked system output, and last year's number was usually the total, not the shape.

The warehouse filled in April with the wrong mix. Some lines sold out by the first hot weekend; others were still on the racks in October and went out at a write-down before the December reset.

What the data showed, and didn't say

Four years of weekly sales in Odoo held far more than year-ago totals. They held phase shifts: categories entering a seasonal upswing, brands whose 4-week velocity was already below their 12-week average by March, and promo-linked SKUs whose demand spike arrived two weeks before the campaign in the ERP calendar because the trade ordered early.

Odoo did not label any of that. It reported quantities sold per period. Which SKUs were entering an upswing and which were carrying dead weight from the previous cycle was a question the reports could not answer, so the loudest forecast won.

Connecting Flowra

The team connected Odoo 16 read-only through the XML-RPC connector in an afternoon. Flowra ingested sales orders, deliveries, purchase receipts and the product catalogue, reconstructed the stock trajectory per SKU from the net flow, and delivered the first seasonal risk view the next morning. Webhook-triggered syncs keep it fresh; full re-scoring runs nightly or on demand.

Six weeks before the spring order, purchasing ran the Flowra simulator on a 90-day horizon with two scenarios: the marketing-led mix and a velocity-led mix. Both produced a projected stockout list, an overstock list and the cash tied up at the end of the horizon.

What Flowra surfaced

  • A preseason reorder list weighted toward SKUs in an upward velocity phase, with recommended quantities based on cover targets and measured supplier lead times.
  • A clear-down list for 74 lines still carrying more than 16 weeks of forward cover from the previous season, with the annual carrying cost attached.
  • Week-by-week stockout risk for the 38 promo-linked SKUs, with the lead-time cut-off date by which each order had to be placed.
  • Dead-stock onset flags on eleven products that were still selling and still being restocked, but were likely to go silent for two months once the season turned.
Flowra · recommendation draftConfidence: Medium
Cut the preseason order on CDR-0512 (craft cider, 33cl × 24) from 3,600 to 1,800 cases; redirect the budget to LGR-0207
Fact
CDR-0512 4-week velocity is 34% below its 12-week average and 41% below the same weeks last year. Forward cover at the proposed 3,600 cases: 19 weeks (overstock tier: critical). LGR-0207 is in the opposite phase: +22% trend, 5 weeks of cover, supplier lead time 28 days.
Forecast
At current trend, 3,600 cases of CDR-0512 leaves roughly 1,500 cases unsold at the end of the 90-day horizon. LGR-0207 runs out in week 6 of the season without an additional order.
Recommendation
Order 1,800 cases of CDR-0512 and add 2,400 cases of LGR-0207. Alternative: keep 2,400 cases of CDR-0512 if the planned June promotion is confirmed, and re-run the scenario.
Hypotheses
Last year's seasonal shape holds. The June promotion on CDR-0512 is not yet confirmed (this is why confidence is Medium; confirmation would raise it). Supplier lead times at their 12-month median.
Next step
Approve, adjust the quantity, or ask why. Nothing changes in the ERP until you do.
Data refreshed 8 h ago · 48 months of history · Source: Odoo 16 (read-only) · Simulator horizon: 90 days

What the team did

Leadership capped preseason PO spend to the velocity-led reorder list. Marketing exceptions were allowed, but each one had to be signed with the evidence from the simulator run attached: which SKU, how much extra cover, and the projected end-of-season position. Four exceptions were signed; nine requests were withdrawn once the projected overstock was visible in cases and euros.

Purchasing placed every order in Odoo themselves. The clear-down list went to the sales team as bundle and on-trade deals in April, before the previous season's stock competed with the new arrivals for rack space. During peak weeks, the 14-day stockout list for promo SKUs arrived in Slack each morning, and two early reorders were approved from the phone.

Results

MetricBeforeAfterTimeframe
Preseason write-downsPrevious year−35%One season, year over year
Availability on promo-linked SKUs, peak weeksPrevious year baseline+11 percentage pointsPeak season
Forecasts brought to the preseason meeting3 competing decks1 ranked action list + 2 simulator scenariosPreseason cycle
Prior-season stock cleared before new arrivalsAd hoc, mostly in autumn74 lines actioned in AprilSix weeks

"For years the preseason meeting was three forecasts and a shouting match. This year it was one list, two scenarios, and the marketing exceptions were signed with the numbers next to them."

— Managing Director, regional beverage distributor

What made it work

  • Phase, not total. A SKU's year-ago volume says nothing about whether it is rising or fading now. The 4-week versus 12-week comparison in reading sales velocity trends in ERP exports is what separated the upswing lines from the dead weight.
  • What-if before the PO, not after. Running both mixes over 90 days turned the marketing debate into a comparison of projected end positions. Exceptions became rare because they became visible.
  • Clear the old season first. Treating prior-season stock as a slow-mover problem in April rather than a dead-stock problem in October is where most of the write-down reduction came from.

Frequently asked questions

How does Flowra support seasonal inventory planning?

It reads weekly sell-through from the ERP, compares short and medium velocity windows to identify which SKUs are entering an upswing or fading, and lets you run what-if scenarios over 7 to 365-day horizons. Each scenario returns projected stockouts, overstock and cash tied up, with the evidence.

How much history is needed for seasonal patterns?

Flowra produces useful signals with three months of history, but seasonal shape needs at least one full cycle. Twelve months or more gives the sharpest forecasts; this distributor had four years of weekly data in Odoo.

Why was the confidence on the cider recommendation Medium rather than High?

Because one hypothesis was unconfirmed: a possible June promotion. Flowra states what would raise confidence, in this case the promotion decision, rather than presenting an uncertain recommendation as a certainty.

Related reading

Same playbook, your data. Book a 20-minute walkthrough or upload a file and get your first ranked action list.

Get my free inventory report →