Reference walkthrough · S&OP in six acts

One decision, three bills

A market asks for +30%. The order is placed, the product is six months out. Commercial reads that in volume, Finance in capital, Supply Chain in service. No single function can pay all three bills. A plan is a commitment, not a calculation.

Planning is a control function, not a reporting function
Six acts
1The symptoms are everywhere. The cause is one.84%OTIF
2A better forecast buys cash, not service.52 → 85%accuracy
3A days-of-supply target sees neither arrow.17 / 83demand / supply variance
4You can’t afford “yes” everywhere.+57%buffer, 95 → 99.5%
5You can’t decide in month 3 what ships in month 6.6 mofrozen window
6The cycle exists to produce one owned decision.4recurring calls
Reference
·Value Stream: from SKU demand to patient supply8stages · 5 lenses
·Operating Cards: who does what, per step7cards
·Brand Risk: where the euros and the service sit5archetypes
·Data Input: load your own numbers before the sessionsetup
The principles this model runs on
Planning is a control function, not a reporting function. If the cycle produces a deck instead of a decision, it is a status meeting wearing a process name.
One valid plan, not one number. Validity is procedural: no past-due elements, built on demonstrated performance, owned by someone. Several plans are unmanaged ambiguity.
Decision rights are the difference between coordination and orchestration. Supply Chain runs the process. It does not own the outcome alone. Commercial owns the demand, Finance owns the capital, Executive owns the trade-off.
A plan without capacity evidence is not a plan. Supply Review owes feasible options and priced trade-offs, not a list of constraints.
Inventory is a designed buffer, not a residual outcome. If you cannot say which risk a buffer protects against, it is not a buffer, it is a symptom.
S&OP without S&OE becomes structured escalation. Without an execution loop the cycle governs a reality it can no longer see.
Model, sources and what this is not

Story spine after Palmatier & Crum, Enterprise Sales & Operations Planning (Oliver Wight). Acts 2, 3 and 4 run on one engine: SS = Z · √(L·σD² + D²·σLT²), single echelon, 95% cycle service level unless a slider says otherwise. No fitted coefficients anywhere. Value stream and operating cards follow a standard L4 operating map. Full metric conventions sit at the foot of the Control Tower.

Defaults are calibrated to a contract-manufactured life-science network: 6-month replenishment lead time, σ 2 weeks on that lead time, 100 units/day, 500 €/unit. Brands, roles, systems, cadences and figures are generic archetypes and do not represent any organisation. Change all of it under Data Input, nothing is uploaded or stored.

What this is not: a multi-echelon model, a forecasting engine, or a substitute for your own segmentation. It is a decision rehearsal.

Act 1 · Out of control

The symptoms are everywhere, the cause is one

Scrap and shortages, forecast swings, late supply surprises, meetings that review but don’t decide. These are symptoms. The cause is structural: no single owned number, no clear resolution rule, no end-to-end ownership.

Cycle Jun 2026 · WD15

Service

OTIF
84%
Target ≥ 95%
Backorders
17 SKU
Fewer is better
Lost Sales Risk
2.1 M€
Forecast < demand
Availability
92%
Key portfolio

Demand Quality

Forecast Accuracy
52%
1 − WMAPE · lag t-6
Bias
+11%
Closer to 0 is better
Volatility
18%
Cycle-over-cycle
Gap to Budget
96%
Forecast ÷ budget · a reconciliation gap, not forecast quality

Inventory

value
Inventory Value
14.6 M€
See DSI for RAG
DSI
118 d
Against your DSI target
Slow Movers
3.4 M€
> 6 mo no move
Scrapping Risk
0.8 M€
Expiry + excess

Supply Reliability

CMO OTIF
89%
Contract mfg
fixed
Lead Time
6 mo
Structural
LT Variability
σ 2 wk
Drives buffer size
Capacity Util.
81%
Key CMO lines
Symptom vs. cause, and the double bill. Every red tile is a symptom. The cause is one: a demand number nobody owns and no rule to resolve it against supply. Today we pay twice, cash locked in inventory and empty shelves. Holding more cannot fix a number that is wrong at the source.

Conventions behind these numbers

Every threshold on this page is a convention, not a law. State yours before you compare anyone.

OTIF
On time and in full against the confirmed date, at order-line level, zero-day tolerance. Order-fill, line-fill and case-fill give different numbers for the same performance, name the one you use. Target and amber thresholds come from Data Input.
Forecast accuracy
1 − WMAPE, at SKU × market × month, lag 6 (measured one replenishment lead time ahead of the month). Accuracy rises with every level of aggregation, so the level is part of the number. Undefined for intermittent demand, use MASE or an availability measure for the long tail.
Bias
Σ(forecast − actual) ÷ Σactual over the same window. Positive means over-ask. Accuracy and bias are different failures: accuracy is noise, bias is a decision.
Forecast value added
Not shown here. The biggest gap in this list. None of the metrics above says whether the consensus process beats a naive forecast. Measure FVA before you invest more cycle time in it.
DSI
Inventory value ÷ COGS per day. Compare against your own target, not a generic one: published life-science peer medians sit well above 100 days, driven by fixed batch sizes, QC and QP release and shelf life. Set the target in Data Input.
Cycle service level
The α convention: probability of no stockout within a replenishment cycle. It is not fill rate (β) and not OTIF. At high variability the realised fill rate lands below the α you set, because α counts stockout events and β counts missing units.
Safety stock
SS = Z · √(L · σD² + D² · σLT²), single echelon, demand and lead time independent and roughly normal. Feed it σ (standard deviation), never a ± range, that mistake inflates the buffer several times over. A four-stage network buffered stage by stage double-counts; that is what multi-echelon optimisation exists for.
Planning horizon
Rolling 24 months for the S&OP cycle. S&OE runs weekly inside the frozen window and feeds structural topics back into the monthly cycle.
Time fences
Frozen (demand time fence): change only with senior-management approval and at a price. Firm (planning time fence): change possible, costed. Open: shaped freely. Frozen means governed, not impossible, and a frozen horizon far longer than the physical lead time is a symptom, not a policy.
Act 2 · A request for product

The forecast is a request for product

Every number below is computed from the same safety-stock physics as Act 3, not one of them is a fitted coefficient. Move the accuracy of the request and watch how little of the buffer it reaches.

Control

Forecast Accuracy52 %
40% (today-) → 90% (mature)
Service target held at 95% throughout, so the buffer moves with variance only. The demand number stays owned by the market side.
Forecast errorWMAPE = 1 − accuracy
48%
Demand share of the bufferL·σD² ÷ (L·σD² + D²·σLT²)
17%
Safety stockat an unchanged 95% service target
2,535 u
Inventory valuecash tied in stock
14.6 M€
DSIdays of stock
118 d
Cash released vs. todayat an unchanged service target
0.00 M€
Scrapping riskover-ask, not noise
0.8 M€
Lost sales riskunder-ask, not noise
2.1 M€
OTIFset by the service target, not by accuracy
84%
Act 3 · Two arrows, one buffer

Safety Stock Synthesizer

“The secret is the arrows”. Integration runs both ways, demand and supply. A days-of-supply target sees only the demand arrow. Move the faders and watch the supply arrow it cannot see.

Control Rack

Avg Demand100 u/day
Forecast Error48 % CV
demand-side variability (σD)
Avg Lead Time180 days
Lead-Time Variability14.0 days σ
supply-side variability (σLT). What DOS ignores
Cycle Service Level (α)95.0 %
Z = 1.64
Safety Stock
255
units
Reorder Point
units
Buffer Coverage
days of demand
SS = Z·√( L·σD² + D²·σLT² )

Share of Variance

demand 50%
supply 50%
Perfect forecast would save
74 units
buffer drops to 181
Reliable lead time would save
75 units
buffer drops to 179
Act 4 · The price of “yes”

You can’t afford “yes” everywhere

“Just hold more for everything” is a decision with a bill. Choose where to be premium, and plan the ~10% of emergencies instead of blanket-buffering. The last nines are the expensive ones.

Target Service

Cycle Service Level (α)95.0 %
Z = 1.64
Safety stock at target
255
units · 0.13 M€ capital
Uses the Act 3 profile. Cost ≈ units × unit value (set in Data Input). Safety stock scales linearly with Z.
Act 5 · You can’t brute-force physics

Frozen Window & the Bias Trap

Inside the CMO lead time a change cannot arrive in time. Expediting is the expensive informal fix, and bias is wishful thinking made systematic.

When can you still change the plan?

Move the demand-change event across the horizon. Inside the frozen window, no new order can help.

FROZEN≤ 6 months
FIRM6–12 months
OPEN12+ months
change here
todaymonth 6month 12month 24
Change requested at month3

The Bias Trap

Systematic bias is not random noise, it is a one-directional leak. Slide the bias and watch service and scrap move together.

Forecast Bias

Systematic bias0 %
− under-plan  |  + over-plan
Effective Service
95%
vs. 95% target
Stockout Risk
under-plan effect
Scrapping Risk
over-plan effect
Operating view · L4

Value Stream, from SKU demand to patient supply

Watch a single SKU’s number flow through the cycle: built bottom-up, netted against stock, constrained by CMO capacity, and resolved into one of four supply responses. Click any stage for the five lenses.

SKU Injectable A · Market 1

The number flowing through the cycle

Numbers below are driven by the Data Input profile (demand, stock, capacity). Click a stage to inspect it.

Capture
1
SKU × loc demand
3,000unconstrained
Aggregate
2
Local roll-up
3,000market
Consensus
3
Global demand
3,000consensus
Net
4
DRP nets stock
2,100net need
Constrain
5
CMO capacity
1,800constrained
Respond
6
Pick a path
per SKU
Commit
7
Reconcile & sign
1,800committed
Execute
8
Deploy & fulfil
OTIFfeedback

Path resolver. How every unit of demand is resolved

Set the situation for this SKU. The rule fires exactly one path. Decided per SKU × location, not by the loudest voice.

Situation

Monthly demand1800 u
Stock on hand1200 u
CMO capacity (window)1500 u
Demand horizon3 mo
Path 01

Serve directly

Stock on hand covers demand. Fulfil now from the central warehouse.

Owner · Supply Chain
Path 02

Pre-produce

Demand is visible beyond the lead time. Place a CMO order ahead to build stock in time.

Owner · Supply planning
Path 03

Buffer

Short-term swing inside the frozen window. Safety stock absorbs it; no new order arrives in time.

Owner · Supply Chain
Path 04

Allocate

Supply is below demand. Prioritise and allocate available product by rule across markets.

Owner · Commercial sets priority

Material flow, the physical chain

Information flows above; product flows here, and waits the lead time.

CMO
makes it · ~6 mo · frozen
Central WH
consolidates · ~1 wk
Regional DC
distributes · 2–4 d
Country
sells · same day
Patient
receives therapy
Cumulative replenishment lead time ≈ 6 months. Inside that window the buffer is the only lever. One valid plan. One owner.
The operating manual

Operating Cards, who does what, per step

The manual behind the flow. Walk the cycle step by step; filter by your function to see exactly where you own the call and where you feed in. KPI targets recolour from your Data Input.

Rev A · Jun 2026
Highlight role:
1

Product Review

OwnerCadence

Steps · inputs → outputs

KPIs · live from Data Input

Key decisions
Do / Don’t
Do
    Don’t
      What’s in it for me?
      Act 6 · Commitment

      Decision Board. Recurring supply-chain calls

      The cycle exists to produce owned decisions, not reports. Pick a scenario, choose an option, and see the trade-off. Approved only when all three functions commit.

      !

      Commitment gate: no scenario is approved without all three

      Commercial
      awaiting selection
      Finance
      awaiting selection
      Supply Chain
      awaiting selection

      Select an option above to route the decision through the cascade (Supply Review → Integrated Reconciliation → Executive Review).

      Where risk sits

      Brand Risk Heatmap

      Not an accuracy chart, a euro-and-service view per brand, with the root cause named. This is the language of the trade-off.

      BrandForecast Acc.Lost Sales RiskInventory RiskOTIF RiskRoot cause
      Injectable A58%High · 1.8 M€LowHighVolatility + new indication ramp
      Oral B44%Med · 0.6 M€High · 1.4 M€MedEnd-of-lifecycle, tender-driven swings
      Launch C61%LowHigh · 1.1 M€LowLaunch over-forecast, slow uptake
      Topical D72%LowMedLowArtwork / phase-in timing
      Long-tail SKUsn/a*LowMedMedMOQ > demand on small SKUs

      *Long-tail SKUs have intermittent demand: percentage errors (MAPE / WMAPE) are undefined in zero-demand periods and not comparable with the brand rows. Judge that segment on availability and MOQ coverage, or on MASE. The bulk of a life-science portfolio is stable and plannable; special cases (end-of-lifecycle, tenders, launches) are managed as exceptions and never made the benchmark for the whole logic.

      Facilitator setup

      Data Input

      Enter your own numbers. Hit Apply and every dashboard recolours from them, the dot next to each field shows how it will read (green / amber / red). Values live in this session only.

      Using illustrative defaults

      Cycle & representative SKU

      Service

      Demand quality

      Inventory

      Supply reliability

      Safety-stock engine & value-stream baseline

      Representative SKU used across Acts 3&4 and the value stream.

      Applied ✓

      Nothing is uploaded or stored. Figures apply to the current session only. Dots preview the RAG state each value will show on the dashboards.