Graves 1999 combined variability
Combines demand variability and lead-time variability into one safety stock formula instead of approximating them separately.
Replenishment Engine
Stocklyst calculates safety stock, reorder points, and min/max levels from demand and lead-time behavior instead of static guesswork. The goal is not more settings. The goal is better replenishment decisions at every branch.

Numbers you can defend
6 formulas
Graves, Syntetos-Boylan, Cornish-Fisher, and Nahmias components are there because the number needs credibility.
Different demand gets different treatment
4 classifications
Smooth, erratic, intermittent, and lumpy items do not all behave the same, so the engine does not treat them the same.
Calculated where stock decisions happen
Per branch
Every location gets its own calculation output instead of inheriting one generic company-wide threshold.
Protects perishables
Shelf-life aware
Max levels are capped where inventory ages out, so overstock does not quietly turn into expiry waste.
01 — Calculation engine
The formulas are named because the citations are the proof. Each component solves a specific inventory failure mode that simpler threshold systems usually ignore.
Combines demand variability and lead-time variability into one safety stock formula instead of approximating them separately.
Sorts items into Smooth, Erratic, Intermittent, or Lumpy patterns so calculation logic matches how demand actually behaves.
Adjusts the z-score when demand is not normally distributed, which is common in real inventory histories.
Prevents max levels from climbing above what can be sold before expiry on shelf-life-constrained items.
Prevents the engine from falsely learning lower demand from periods where the item was actually stocked out.
Keeps zero-demand periods in the variability math so intermittent items are not treated like clean linear sellers.
02 — Engine output
The engine runs continuously for every item at every branch, producing safety stock, reorder points, and min/max levels without forcing the team to maintain static thresholds by hand.
What the output gives operators
03 — Where it helps most
The strongest fit is any operation where one static threshold keeps failing across branches, intermittent demand, or perishability.
Each store gets branch-specific reorder points based on its own demand pattern instead of inheriting one company-wide threshold.
Shelf-life-aware caps reduce waste for bakeries, grocers, and food distributors where overstock turns into expiry.
Burst-driven items like spare parts and holiday stock get safer treatment than a generic moving-average rule can provide.
As new items and branches are added, the engine scales automatically instead of forcing manual min/max setup everywhere.
04 — FAQ
Stocklyst uses the Graves 1999 combined variability formula, which accounts for both demand variability and lead time variability in the same calculation rather than treating them independently.
The engine uses Syntetos-Boylan 2005 classification to categorize items into Smooth, Erratic, Intermittent, or Lumpy demand patterns. Each pattern receives tailored calculation parameters.
Intermittent and Lumpy items receive adjusted calculation parameters, including stronger safety factors and demand treatment better suited to irregular ordering behavior.
Standard safety stock math assumes normal demand, but real inventory demand is often skewed. Cornish-Fisher adjusts the z-score so the engine does not under- or over-stock based on a bad assumption.
For shelf-life-constrained items, max stock is capped so the oldest units can realistically sell before expiry, reducing waste from overstocking perishables.
Yes. The Nahmias anti-death-spiral guard prevents stockouts from collapsing demand history and causing the engine to keep lowering reorder points incorrectly.