# Safety stock, reorder point and EOQ

> How the reorder point, safety stock for demand and lead-time variability, service-level z values and EOQ fit together, and why EOQ is only a starting point.

Source: https://docs.lumina-erp.com/distribution/safety-stock-reorder-point-eoq/

**In short.** The reorder point is expected demand over the lead time plus safety stock, and safety stock is a z value times the combined variability of demand and lead time. EOQ tells you roughly how much to order each time, and min/max is how most ERP systems store the pair.

Every stocked item needs two answers: when to reorder, and how much. The reorder point answers the first, and safety stock is the part of it that protects you from bad luck. The economic order quantity (EOQ) is the classic answer to the second. Our calculators use the formulas below, and the textbook answers need adjusting before they go into an ERP.

## The pieces at a glance

| Term | What it answers | Built from |
|---|---|---|
| Lead-time demand | How much do we expect to sell while waiting for the order? | Average daily demand × average lead time |
| Safety stock | How much extra covers worse-than-average demand or a late supplier? | z value × variability over the lead time |
| Reorder point | At what stock level do we place the order? | Lead-time demand + safety stock |
| Order quantity (EOQ) | How much do we order each time? | Demand, order cost, carrying cost |
| Min/max | How does the ERP store the above? | Min ≈ reorder point, max ≈ reorder point + order quantity |

## Reorder point

The **reorder point** is the stock level at which you place a replenishment order. It covers the demand you expect during the lead time plus a buffer.

**Reorder point:** `(Average daily demand × average lead time in days) + safety stock`

"Stock level" here should mean available plus on order, less committed, rather than only what is on the shelf. Otherwise an item that already has a purchase order on the way triggers a second one.

## Safety stock

Safety stock exists because neither demand nor lead time is constant. If demand runs high during the lead time, or the supplier is late, the average would leave you empty. Safety stock is sized to a chosen probability of that not happening.

**Safety stock:** `z × √( LT × σd² + d² × σLT² )`

Where:

- **z** is the standard normal value for the target cycle service level (table below).
- **LT** is the average lead time, in days.
- **σd** is the standard deviation of daily demand.
- **d** is the average daily demand.
- **σLT** is the standard deviation of lead time, in days.

The term under the square root is the variance of demand over the lead time. The first part (LT × σd²) is demand variability accumulated over the lead time. The second part (d² × σLT²) is lead-time variability converted into units. The formula assumes the two are independent and roughly normal. If lead times are reliable, set σLT to 0 and the formula reduces to z × σd × √LT.

For σd, the better input is the standard deviation of forecast error, not of raw demand, because the forecast already explains part of the movement. Hyndman and Athanasopoulos cover forecast residuals and how their spread drives prediction intervals in their free textbook *Forecasting: Principles and Practice* (linked below). Keep the time units consistent, pairing daily demand with lead time in days or weekly demand with weeks.

### Service level z values

The z value is the point on the standard normal distribution below which the target share of outcomes falls. These are computed from the inverse of the standard normal cumulative distribution, and you can check them against the NIST/SEMATECH table linked below.

| Target cycle service level | z |
|---|---|
| 90% | 1.28 |
| 95% | 1.64 |
| 97.5% | 1.96 |
| 98% | 2.05 |
| 99% | 2.33 |
| 99.5% | 2.58 |

To four decimals they are 1.2816, 1.6449, 1.9600, 2.0537, 2.3263 and 2.5758. Notice how quickly z climbs at the top. Going from 95% to 99% raises safety stock by about 41% (2.33 ÷ 1.64), and the last half point from 99% to 99.5% adds another 11%. A blanket 99% target on every item is expensive for this reason.

:::note
This is a cycle service level, the share of replenishment cycles with no stockout. It measures something different from fill rate. See [Fill rate, OTIF and backorder rate](/distribution/fill-rate-and-otif/) for why, and why a fill-rate target usually needs less safety stock than the same number used as a cycle service level.
:::

### Worked example

The numbers below are invented and round, for illustration only.

An item sells an average of 20 units a day with a standard deviation of 6 units. Lead time averages 10 days with a standard deviation of 2 days. The target cycle service level is 95%, so z is 1.645.

| Step | Calculation | Result |
|---|---|---|
| Demand variance over lead time | 10 × 6² = 10 × 36 | 360 |
| Lead-time variance in units | 20² × 2² = 400 × 4 | 1,600 |
| Standard deviation over lead time | √(360 + 1,600) = √1,960 | 44.3 units |
| Safety stock | 1.645 × 44.3 | 72.8, round up to 73 units |
| Lead-time demand | 20 × 10 | 200 units |
| Reorder point | 200 + 72.8 | 272.8, round up to 273 units |

Lead-time variability contributes 1,600 of the 1,960 units of variance. If the supplier were perfectly reliable (σLT of 0), safety stock would fall to 1.645 × √360, about 31.2, or 32 units after rounding up. A 2-day wobble in lead time more than doubles the buffer, so supplier reliability is often the cheapest place to cut inventory.

_Interactive calculator available on the web page._

The calculator rounds safety stock and the reorder point up to whole units, as in the table.

## Economic order quantity

EOQ balances two costs that pull in opposite directions. Ordering more often means more purchase orders, receipts and invoices to process. Ordering more at a time means more stock sitting on the shelf, tying up cash and space. EOQ is the order size where the two annual costs are equal and their total is lowest.

**Economic order quantity:** `√( 2 × annual demand × cost per order ÷ (unit cost × annual carrying cost rate) )`

Where:

- Cost per order is the cost to place and receive one order: buyer time, receiving, put-away, matching the invoice. It is not the freight on the order.
- Annual carrying cost rate is the yearly cost of holding a dollar of inventory, as a percentage. It covers cost of capital, storage, insurance, shrink and obsolescence. Rates in the 20% to 30% range are a common rule of thumb for distributors, because cost of capital, storage, insurance and obsolescence together often land there. The rule does not hold for goods that spoil or go obsolete quickly, so build your own rate from your cost of capital and warehouse costs.

The model was published by Ford W. Harris in 1913 in *Factory, The Magazine of Management* under the title "How Many Parts to Make at Once," and was reprinted in *Operations Research* in 1990. It is sometimes called the Harris or Wilson formula.

### Worked example

This example also uses invented round numbers.

An item sells 5,200 units a year. Each order costs $45 to place and receive, the item costs $18 and the carrying rate is 25%, so holding one unit for a year costs $18 × 0.25 = $4.50.

| Step | Calculation | Result |
|---|---|---|
| EOQ | √(2 × 5,200 × $45 ÷ $4.50) = √104,000 | 322 units |
| Orders per year | 5,200 ÷ 322.49 | 16.12 |
| Annual ordering cost | 16.12 × $45 | $725.60 |
| Annual carrying cost | (322.49 ÷ 2) × $4.50 | $725.60 |

At EOQ the two costs are equal, which is a useful check on any hand calculation.

_Interactive calculator available on the web page._

### The assumptions behind EOQ

EOQ gives an exact answer to a simplified problem. It assumes:

- Demand is steady and known.
- The cost per order is fixed, whatever the quantity.
- The unit price does not change with quantity (no price breaks).
- The whole order arrives at once, and there are no stockouts.
- Each item is ordered on its own.

Distribution breaks most of these, but the total cost curve is flat near the bottom. In the example, ordering 336 units instead of 322 raises total annual cost from $1,451 to $1,452. Even ordering double the EOQ (645 units) raises it only 25%, to $1,814. Being roughly right is nearly as good as being exact.

## Why EOQ is a starting point in distribution

We treat EOQ as the first guess, then adjust for how suppliers sell.

| Constraint | What it does to the order quantity |
|---|---|
| Pack sizes | Round to the case, inner pack or pallet the supplier ships. In the example, a 48-unit case turns 322 into 336 (7 cases) |
| Supplier minimums | A minimum order quantity or minimum dollar value can push the order well above EOQ |
| Freight breaks | Prepaid freight thresholds or full-pallet and full-truck rates can make a larger order cheaper overall. Compare landed cost, not unit price |
| Quantity discounts | Compare total annual cost (price, ordering and carrying) at EOQ and at each break quantity, and take the lowest |
| Joint replenishment | Items from one supplier are ordered together to reach a freight or dollar threshold, so the vendor line has an order cycle, and each item's quantity is set by that cycle rather than its own EOQ |

Joint replenishment is the one that matters most for a distributor. When a buyer reviews a vendor line every two weeks and orders enough of everything to reach the prepaid freight minimum, the practical order quantity for each item is roughly two weeks of demand plus whatever brings the total to the threshold. Silver, Pyke and Thomas, among other planning texts, treat coordinated replenishment in depth. We cover the cost side in [Landed cost and freight terms](/distribution/landed-cost-and-freight-terms/) and quantities in different units in [Units of measure](/distribution/units-of-measure/).

## Min/max in the ERP

Most ERP systems, including the ones we work with, store replenishment settings as a minimum and a maximum per item and location, and the system holds the demand and lead-time history the formulas need. Min and max map to the formulas above:

**Min:** `Reorder point = lead-time demand + safety stock`

**Max:** `Min + order quantity (EOQ adjusted for packs, minimums and freight)`

When available stock (on hand plus on order, less committed) falls to or below min, the system suggests ordering enough to bring it back up to max. With the invented numbers above, min is 273 and max is 273 + 336 = 609 once EOQ is rounded to full cases.

:::caution
Min and max go stale. Demand, lead times and costs change, and a max set three years ago will either starve a growing item or bury a declining one. Recalculate on a schedule, at least quarterly for your top items, and review the items whose settings moved the most before accepting them.
:::

## Setting your replenishment parameters

1. Measure lead time from your own receipt history, as an average and a standard deviation, per supplier and ideally per item.
2. Use the standard deviation of forecast error for σd where you have a forecast.
3. Set service level targets by class instead of one number for everything. [ABC analysis and cycle counting](/distribution/abc-analysis-and-cycle-counting/) shows how to build the classes.
4. Start order quantities from EOQ, then round to packs, minimums and freight breaks, and review the vendor line as a whole.
5. Watch the result in [inventory turns and GMROI](/distribution/inventory-turns-and-gmroi/) and in fill rate. If turns fall and fill rate does not rise, the buffers are in the wrong places.

## Sources

- [Normal distribution (NIST/SEMATECH e-Handbook of Statistical Methods)](https://www.itl.nist.gov/div898/handbook/eda/section3/eda3661.htm)
- [Cumulative distribution function of the standard normal distribution (NIST/SEMATECH e-Handbook)](https://www.itl.nist.gov/div898/handbook/eda/section3/eda3671.htm)
- [Forecasting: Principles and Practice, 3rd ed., section 5.5, Distributional forecasts and prediction intervals (Hyndman and Athanasopoulos)](https://otexts.com/fpp3/prediction-intervals.html)
- [Forecasting: Principles and Practice, 3rd ed., section 5.3, Residuals (Hyndman and Athanasopoulos)](https://otexts.com/fpp3/residuals.html)
- [Harris, F. W. (1913), How Many Parts to Make at Once, reprinted in Operations Research 38(6), 1990 (RePEc record)](https://ideas.repec.org/a/inm/oropre/v38y1990i6p947-950.html)
- [Ford Whitman Harris (Wikipedia)](https://en.wikipedia.org/wiki/Ford_Whitman_Harris)

---

Epicor, Prophet 21, P21 and DynaChange are trademarks or registered trademarks of Epicor Software Corporation registered in the United States and other countries. Kinetic is a trademark of Epicor Software Corporation. Lumina ERP is an independent consultancy and is not affiliated with, sponsored by or endorsed by Epicor.
