Methodology
Stockout Cost Planner methodology
Educational only: Business decision support, not accounting, tax or legal advice.
Privacy: Calculations run locally; Margin101 does not receive your commercial inputs.
Update policy: Reviewed when formulas or official dependencies change.
Scope: Market-neutral small-business planning using your own assumptions.
1. Formulas and units
shortUnits = max(0, expected demand โ available stock โ confirmed inbound)Where
- expectedDemandUnits
- Expected demand units (operational units)Source: Business record
- availableStockUnits
- Available stock units (operational units)Source: Business record
- confirmedInboundUnits
- Confirmed inbound units (operational units)Source: Business record
- shortUnits
- Short Units (units)Source: Calculated output
lostUnits = short units ร lost-sales shareWhere
- lostSalesShare
- Lost-sales share (decimal rate)Source: Business record
- shortUnits
- Short Units (units)Source: Calculated output
- lostUnits
- Lost Units (units)Source: Calculated output
deferredUnits = short units โ lost unitsWhere
- shortUnits
- Short Units (units)Source: Calculated output
- lostUnits
- Lost Units (units)Source: Calculated output
- deferredUnits
- Deferred Units (units)Source: Calculated output
lostContribution = lost units ร contribution per unitWhere
- contributionPerUnit
- Contribution per unit (currency units, ex tax)Source: Business record
- lostUnits
- Lost Units (units)Source: Calculated output
- lostContribution
- Lost Contribution (currency units, ex tax)Source: Calculated output
expediteCost = short units ร expedite cost per short unitWhere
- expediteCostPerShortUnit
- Expedite cost per short unit (currency units, ex tax)Source: Business record
- shortUnits
- Short Units (units)Source: Calculated output
- expediteCost
- Expedite Cost (currency units, ex tax)Source: Calculated output
totalStockoutCost = lost contribution + expedite costWhere
- contributionPerUnit
- Contribution per unit (currency units, ex tax)Source: Business record
- lostUnits
- Lost Units (units)Source: Calculated output
- lostContribution
- Lost Contribution (currency units, ex tax)Source: Calculated output
- expediteCost
- Expedite Cost (currency units, ex tax)Source: Calculated output
- totalStockoutCost
- Total Stockout Cost (currency units, ex tax)Source: Calculated output
breakEvenExpediteCostPerShortUnit = lost-sales share ร contribution per unitWhere
- lostSalesShare
- Lost-sales share (decimal rate)Source: Business record
- contributionPerUnit
- Contribution per unit (currency units, ex tax)Source: Business record
- expediteCostPerShortUnit
- Expedite cost per short unit (currency units, ex tax)Source: Business record
- shortUnits
- Short Units (units)Source: Calculated output
- lostUnits
- Lost Units (units)Source: Calculated output
- lostContribution
- Lost Contribution (currency units, ex tax)Source: Calculated output
- expediteCost
- Expedite Cost (currency units, ex tax)Source: Calculated output
- breakEvenExpediteCostPerShortUnit
- Break Even Expedite Cost Per Short Unit (currency units, ex tax)Source: Calculated output
Money inputs and outputs use the currency selected in the scenario without changing the canonical methodology. Rates, margins, utilisation and buffers are entered as percentages and converted to decimal values for calculation.
2. Worked example
Input assumptions
The worked rows below come directly from the exact engine and visible default fixture.
- Expected demand units
- 100 whole product units
- Available stock units
- 70 whole product units
- Confirmed inbound units
- 10 whole product units
- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Contribution per unit
- 25 currency units/product unit, ex tax
- Expedite cost per short unit
- 3 currency units/product unit, ex tax
Calculation and outputs
shortUnits
shortUnits = max(0, expected demand โ available stock โ confirmed inbound)- Expected demand units
- 100 whole product units
- Available stock units
- 70 whole product units
- Confirmed inbound units
- 10 whole product units
Engine result: 20 units
lostUnits
lostUnits = short units ร lost-sales share- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Expedite cost per short unit
- 3 currency units/product unit, ex tax
- shortUnits
- 20 units
- lostContribution
- 300 money
- breakEvenExpediteCostPerShortUnit
- 15 money
Engine result: 12 units
deferredUnits
deferredUnits = short units โ lost units- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Expedite cost per short unit
- 3 currency units/product unit, ex tax
- shortUnits
- 20 units
- lostUnits
- 12 units
- lostContribution
- 300 money
- breakEvenExpediteCostPerShortUnit
- 15 money
Engine result: 8 units
lostContribution
lostContribution = lost units ร contribution per unit- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Contribution per unit
- 25 currency units/product unit, ex tax
- lostUnits
- 12 units
Engine result: 300 money
expediteCost
expediteCost = short units ร expedite cost per short unit- Expedite cost per short unit
- 3 currency units/product unit, ex tax
- shortUnits
- 20 units
- totalStockoutCost
- 360 money
- breakEvenExpediteCostPerShortUnit
- 15 money
Engine result: 60 money
totalStockoutCost
totalStockoutCost = lost contribution + expedite cost- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Contribution per unit
- 25 currency units/product unit, ex tax
- Expedite cost per short unit
- 3 currency units/product unit, ex tax
- lostUnits
- 12 units
- lostContribution
- 300 money
- expediteCost
- 60 money
- breakEvenExpediteCostPerShortUnit
- 15 money
Engine result: 360 money
breakEvenExpediteCostPerShortUnit
breakEvenExpediteCostPerShortUnit = lost-sales share ร contribution per unit- Lost-sales share
- 0.6 proportion of shortage units expected to become lost sales
- Contribution per unit
- 25 currency units/product unit, ex tax
- lostUnits
- 12 units
- lostContribution
- 300 money
Engine result: 15 money
Example
The worked rows below come directly from the exact engine and visible default fixture.
- Short Units
- 20
- Lost Units
- 12
- Deferred Units
- 8
- Lost Contribution
- 300 currency units
- Expedite Cost
- 60 currency units
- Total Stockout Cost
- 360 currency units
- Break Even Expedite Cost Per Short Unit
- 15 currency units
The exact engine-derived outputs are shown in the labelled rows below.
Interpretation
Use the lost and deferred unit split to expose which entered assumption drives the stockout estimate.
3. Validation and boundary checks
- All values must be finite and inside the visible validation boundaries.
- Rates are entered as percentages and calculations retain decimal precision.
- Money and operational records use one consistent period and basis.
- Expected demand units minimum
expectedDemandUnits โฅ 0 whole product unitsโ A lower value is rejected before calculation.- Expected demand units maximum
expectedDemandUnits โค 100,000,000 whole product unitsโ A higher value is rejected before calculation.- Available stock units minimum
availableStockUnits โฅ 0 whole product unitsโ A lower value is rejected before calculation.- Available stock units maximum
availableStockUnits โค 100,000,000 whole product unitsโ A higher value is rejected before calculation.- Confirmed inbound units minimum
confirmedInboundUnits โฅ 0 whole product unitsโ A lower value is rejected before calculation.- Confirmed inbound units maximum
confirmedInboundUnits โค 100,000,000 whole product unitsโ A higher value is rejected before calculation.- Lost-sales share minimum
lostSalesShare โฅ 0 proportion of shortage units expected to become lost salesโ A lower value is rejected before calculation.- Lost-sales share maximum
lostSalesShare โค 1 proportion of shortage units expected to become lost salesโ A higher value is rejected before calculation.- Contribution per unit minimum
contributionPerUnit โฅ 0 currency units/product unit, ex taxโ A lower value is rejected before calculation.- Contribution per unit maximum
contributionPerUnit โค 10,000,000 currency units/product unit, ex taxโ A higher value is rejected before calculation.- Expedite cost per short unit minimum
expediteCostPerShortUnit โฅ 0 currency units/product unit, ex taxโ A lower value is rejected before calculation.- Expedite cost per short unit maximum
expediteCostPerShortUnit โค 10,000,000 currency units/product unit, ex taxโ A higher value is rejected before calculation.
4. Assumptions and source classification
- Demand, lead times, costs, tax and targets are supplied by the user.
- No jurisdiction, supplier service level, industry benchmark or forecast is embedded.
- The engine retains full precision and display formatting never feeds back into calculation.
This planner has no current policy-data dependency. Its commercial assumptions are user supplied. Registered family-level regression suites exercise the shared business-logic engine and worked-result reconciliation.
5. Limitations
- Results depend on the quality and timing alignment of entered records.
- The model does not replace inventory, accounting, tax, legal or financial advice.
This is educational decision support, not tax, accounting, legal or financial advice. Check the treatment of your actual transactions under the rules that apply to your business and seek qualified advice where appropriate.
6. Update and evidence policy
Registered family-level suites test formula invariants and example reconciliation; the release ledger records that coverage without claiming a separate oracle for every line of public copy. There is no official threshold or benchmark to refresh for this planner. Commercial inputs remain user-supplied because they vary by business and contract.
Change history
- : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.
Related reading
Guides to interpret the decision and its assumptions.
- Stockout vs Overstock: Choose the Less Expensive Risk
Compare stockout and overstock downside scenarios on one horizon while keeping cash commitment and recoverability separate.
Read guide