MRP and Planning
MRP is the algorithm at the historical heart of ERP. It answers: what do I need to buy or make, how much, and by when?
The planning hierarchy
Strategic (years) ──▶ Business plan
│
Tactical (12-18 mo) ──▶ S&OP — Sales & Operations Planning
│
Demand plan / forecast
│
Master (weeks-months) ──▶ MPS — Master Production Schedule
│
RCCP — Rough Cut Capacity Planning
│
Operational (days) ──▶ MRP — Material Requirements Planning
│
CRP — Capacity Requirements Planning
│
Execution (hours) ──▶ Scheduling, dispatching, shop floor control
Each level constrains the one below. S&OP decides the volume envelope; MPS decides which finished goods; MRP explodes that into components.
The MRP inputs
- Independent demand — sales orders, forecasts, safety stock requirements
- BOM — what goes into what, at what quantity
- Inventory — on hand, on order, allocated
- Lead times — how long to buy or make each item
- Lot sizing rules — how much to order at a time
- Planning calendar — working days
The algorithm
1. LOW-LEVEL CODING
Assign each material a level: finished goods = 0, their components = 1, etc.
A material used at several levels takes its LOWEST (deepest) level.
Process level 0 first, then 1, then 2 — so all demand for an item is
known before you plan it.
2. For each material, in low-level code order:
a. NET REQUIREMENTS
gross requirement (demand in period)
− on hand
− scheduled receipts (open POs, production orders)
+ safety stock
= net requirement
b. LOT SIZING
Apply the rule to convert net requirement into an order quantity
c. LEAD TIME OFFSET (backward scheduling)
order release date = required date − lead time
d. BOM EXPLOSION
If it's manufactured, create dependent demand for each component
at the order release date, quantity = order qty × component qty
(adjusted for scrap/yield)
3. Output: planned orders (make) and purchase requisitions (buy)
Worked example
Product: Chair (lead time 5 days, lot size = exact)
BOM: 4 × Leg, 1 × Seat, 1 × Back
Demand: 100 chairs on day 20
On hand: 20 chairs
Safety stock: 10
Chair:
Gross 100
− On hand 20
+ Safety 10
= Net 90 → planned order 90, due day 20, release day 15
Leg (lead time 8 days, lot size = multiples of 500):
Dependent demand: 90 × 4 = 360 on day 15
On hand: 100, on order: 0
Net: 260 → lot sized to 500 → purchase req 500, due day 15, release day 7
Notice: the leg requirement date (day 15) is the chair’s release date, not the chair’s due date. That’s lead-time offsetting, and it’s the core of time-phasing.
MRP types
| Type | Trigger |
|---|---|
| MRP (deterministic) | Plan from actual demand — sales orders, dependent demand |
| Reorder point (consumption-based) | Order when stock drops below a level. No forecast needed |
| Forecast-based | Plan from statistical forecast only |
| Time-phased planning | Plan on fixed days (every Tuesday) |
| MRP Type ND | Not planned — manual only |
Choose per material: use MRP for A items with dependent demand, reorder point for cheap C items where planning effort exceeds the value.
Reorder point
Reorder point = (average daily demand × lead time) + safety stock
Demand 50/day, lead time 10 days, safety stock 200
ROP = 50 × 10 + 200 = 700
Simple and effective for stable, low-value items.
Lot sizing rules
| Rule | Behaviour | Best for |
|---|---|---|
| Lot-for-lot (EX) | Order exactly what’s needed | Expensive items, JIT |
| Fixed lot size | Always order N | Fixed batch/container sizes |
| Min/max | Order up to max when below min | Simple replenishment |
| Rounding value | Round up to a multiple (pallet, carton) | Packaging constraints |
| Period lot size | Combine all requirements in a week/month | Reduce order count |
| EOQ | Balance ordering cost vs carrying cost | Stable demand |
| Least unit cost / Wagner-Whitin | Dynamic optimisation | Rarely used in practice |
EOQ = √(2 × annual demand × order cost / (unit cost × carrying rate))
Demand 12,000/yr, order cost 400, unit cost 25, carrying 20%
EOQ = √(2 × 12000 × 400 / 5) = √1,920,000 ≈ 1,386 units
Also configure: minimum order quantity, maximum lot size, and assembly scrap % / component scrap % which inflate the quantity to allow for losses.
Safety stock
Statistical safety stock = Z × σ_demand_during_lead_time
Z = service level factor: 90% → 1.28, 95% → 1.65, 98% → 2.05, 99% → 2.33
With lead time variability:
σ_LTD = √(LT × σ_d² + d² × σ_LT²)
Higher service level → disproportionately more stock. Going from 95% to 99% typically costs 40%+ more safety stock. That’s a business decision, not a technical one, but the model is how you show them the trade-off.
Dynamic safety stock recalculates from rolling demand statistics rather than sitting as a static number typed in three years ago. It’s usually a worthwhile enhancement request.
Pegging and exception messages
Pegging traces a requirement back to its source: “this 500-unit purchase requisition for bearings exists because of sales order 12345 for customer ACME.” Essential for prioritising when supply is short.
Exception messages are MRP’s output for planners. The planner works the exception list, not the whole plan:
| Message | Meaning |
|---|---|
| Reschedule in | An existing order should come earlier |
| Reschedule out | An order is too early; delay it |
| Cancel | Order no longer needed |
| Expedite | Demand before the earliest possible supply |
| Order proposal | New order needed |
| Excess stock | More than required |
| Past due | Order date is in the past |
| Below safety stock | Buffer breached |
A planner with 40,000 materials cannot review the plan. They review 200 exceptions. Exception quality is what makes MRP usable.
MRP run modes
| Mode | Behaviour |
|---|---|
| Regenerative (full) | Replan everything from scratch. Slow, consistent. Weekend job |
| Net change | Replan only materials with changes since the last run. Fast, nightly |
| Net change in planning horizon | Net change, limited to the near horizon |
| Single item, multi-level | Replan one product and everything under it. Interactive |
| Single item, single level | One material only |
Typical setup: net change nightly, full regenerative weekly.
Planning strategies (make-to-stock vs make-to-order)
| Strategy | Trigger | Stock held | Lead time to customer |
|---|---|---|---|
| Make to stock (MTS) | Forecast | Finished goods | Immediate |
| Assemble to order (ATO) | Order | Components | Short |
| Make to order (MTO) | Order | Raw materials | Medium |
| Engineer to order (ETO) | Order | Nothing | Long |
The decoupling point (where forecast-driven meets order-driven) determines your whole supply chain design.
Forecast consumption
In MTS, forecast and sales orders must not double-count:
Forecast for March: 1,000 units
Sales orders received: 400
Remaining forecast: 600
Total planned demand: 1,000 ← not 1,400
Configuration controls the consumption mode (backward, forward, both) and the consumption window in days. Getting this wrong doubles your production plan — an expensive and common bug.
Forecasting methods
| Method | Use |
|---|---|
| Moving average | Stable demand |
| Exponential smoothing | Stable with noise |
| Holt’s (double) | Trend |
| Holt-Winters (triple) | Trend + seasonality |
| Croston’s | Intermittent/lumpy demand (spare parts) |
| ARIMA / SARIMA | Statistical, complex patterns |
| ML (gradient boosting, neural) | Many drivers, promotions, weather, price |
Accuracy measures: MAPE (mean absolute percentage error), MAD, bias (systematic over/under-forecasting), forecast value added (does your forecast beat a naive one?).
Bias is the metric people forget and the one that hurts most — a consistently 15% high forecast quietly builds inventory all year.
Constraint-based planning (APS)
Classic MRP assumes infinite capacity — it will happily plan 500 hours of work into a 40-hour week. Capacity Requirements Planning shows the overload afterwards, and a human resolves it.
APS (Advanced Planning & Scheduling) plans materials and capacity simultaneously with finite capacity, optimising for setup time, due dates, or cost. Tools: Kinaxis, o9, Blue Yonder, SAP IBP/PP-DS, Preactor, Asprova.
Whether you need APS: if your bottleneck is materials, MRP is fine. If your bottleneck is capacity and sequencing (setup-heavy, campaign-based, or highly constrained), MRP alone will produce plans nobody can execute.
Performance
MRP is one of the heaviest jobs in an ERP. A large run processes hundreds of thousands of materials with multi-level explosion.
Techniques:
- Low-level code ordering makes single-pass processing possible — this is the whole reason it exists
- Parallel processing by low-level code band — all level-3 materials can run concurrently
- Net change to avoid replanning what didn’t change
- Planning file entries flag materials needing replanning
- In-memory — HANA-era MRP (MRP Live) does the explosion in the database rather than pulling data to the app server, cutting run times by an order of magnitude
- Horizon limits — don’t plan 5 years out at daily granularity
Rules
- Garbage in, garbage out. MRP output quality is entirely determined by BOM accuracy, lead time accuracy, and inventory accuracy. Fix data before tuning the algorithm.
- Lead times must be real, not aspirational. Measure actual receipt-to-order intervals and update.
- Planners work exceptions, not plans. Optimise the exception list.
- Nervousness is real — small demand changes causing large plan changes. Damp it with firm zones, planning time fences, and firmed planned orders.
- Never auto-convert planned orders to POs without review unless the item is genuinely low-risk and the data is genuinely trusted.