Generate optimal reorder quantities and timing using Economic Order Quantity, safety stock models, and demand-driven replenishment strategies, factoring in supplier constraints, MOQs, and working capital targets.
This skill generates precise replenishment recommendations—what to order, how much, and when—for each SKU-location combination. It combines Economic Order Quantity (EOQ) optimization with demand-driven replenishment policies, respecting real-world constraints such as minimum order quantities (MOQs), supplier capacity, shelf life, warehouse capacity, and working capital budgets. The output is a prioritized, actionable order plan that balances service level targets against inventory investment.
| Input |
|---|
| Description |
|---|
| Format |
|---|
inventory_position | On-hand + in-transit + on-order - backorders - allocated | Numeric per SKU-location |
demand_forecast | Forward weekly demand forecast (minimum lead time + review period) | Numeric array |
lead_time | Supplier lead time in days (average and standard deviation) | Numeric |
review_period | Ordering frequency (days between order opportunities) | Numeric |
service_level_target | Target fill rate or cycle service level (%) | Numeric |
cost_parameters | Unit cost, ordering cost per PO, carrying cost rate (% p.a.) | Structured object |
supplier_constraints | MOQ, case pack, pallet quantity, max order capacity | Structured object |
shelf_life | Product shelf life in days (for perishables) | Numeric (optional) |
warehouse_capacity | Available storage in units, cases, or pallets | Numeric (optional) |
Compute the reorder point (ROP) that triggers a replenishment:
ROP = (Average_Daily_Demand × Lead_Time) + Safety_Stock
Where safety stock accounts for both demand and supply variability:
Safety_Stock = Z × √(LT × σ_d² + d_avg² × σ_LT²)
Z = Z-score for target service level (1.28 for 90%, 1.65 for 95%, 2.33 for 99%)LT = average lead time in daysσ_d = standard deviation of daily demandd_avg = average daily demandσ_LT = standard deviation of lead time in daysCalculate the cost-optimal order quantity:
EOQ = √(2 × D × S / H)
Where:
D = annual demand in unitsS = fixed ordering cost per purchase order (administrative + freight setup)H = annual holding cost per unit = Unit_Cost × Carrying_Cost_RateAdjust EOQ for practical constraints:
Adjusted_EOQ = max(MOQ, round_up_to_case_pack(EOQ))
If Adjusted_EOQ > Warehouse_Capacity_Available: cap at capacity and flag
If Shelf_Life < (Adjusted_EOQ / Daily_Demand): reduce to shelf-life-safe quantity
For periodic review replenishment policies:
Order_Up_To = Demand_During_(LT + Review_Period) + Safety_Stock
Order_Qty = max(0, Order_Up_To - Inventory_Position)
Apply rounding to case pack or pallet quantities:
Final_Order_Qty = round_up_to_nearest(Order_Qty, Case_Pack_Size)
If Final_Order_Qty < MOQ and Order_Qty > 0: set Final_Order_Qty = MOQ
When working capital or warehouse capacity is constrained, prioritize across SKUs:
Priority Score = Service_Level_Gap × Revenue_Weight × Criticality_Factor
Where:
Service_Level_Gap = Target_SL - Projected_SL_Without_OrderRevenue_Weight = SKU revenue share (A-class items weighted higher)Criticality_Factor = 2.0 for must-not-stock-out items, 1.0 for standard, 0.5 for long-tailAllocate budget using greedy knapsack: order highest-priority SKUs first until budget or capacity is exhausted.
Break_Even_WoS = Discount% / (Carrying_Cost_Rate / 52)
Only forward buy if expected sell-through is within break-even window.replenishment_plan:
generated_at: "2026-02-07T06:00:00Z"
planning_horizon: "2026-02-07 to 2026-03-07"
summary:
total_order_lines: 245
total_order_value: 1850000
total_units: 128500
orders_by_priority:
critical: 18
high: 67
standard: 160
orders:
- sku_id: "SKU-11234"
location: "DC-EAST-02"
supplier: "SUP-ACME-01"
recommended_qty: 2400
unit_cost: 4.50
order_value: 10800
order_type: "standard_replenishment"
priority: "critical"
reorder_point: 1800
current_position: 450
safety_stock: 620
eoq: 2200
adjusted_reason: "Rounded up to pallet quantity (2400 = 4 pallets × 600)"
projected_wos_after_receipt: 6.2
recommended_order_date: "2026-02-07"
expected_receipt_date: "2026-02-17"
projected_stockout_date_without_order: "2026-02-11"
| Demand Pattern | Variability | Recommended Policy | Review Cycle |
|---|---|---|---|
| Steady, predictable (AX) | Low CoV (<0.3) | Continuous review (s,Q) with EOQ | Event-driven |
| Moderate variability (AY) | Medium CoV (0.3-0.7) | Periodic review (R,S) with dynamic SS | Weekly |
| Highly variable (AZ) | High CoV (>0.7) | Min-max with demand sensing | Daily |
| Slow-moving (CX/CY) | Low/Medium | (s,S) with aggregate ordering | Bi-weekly |
| Intermittent/lumpy (CZ) | Very high | Poisson or Croston's method for SS | Monthly + event triggers |
Annual_COGS / Average_Inventory — higher = more efficient capital useLine_Items_Fulfilled_Complete / Total_Line_Items_OrderedInventory_Value / Monthly_Revenue — target < 1.0 for fast-turning CPGExample 1 — Standard EOQ Replenishment
"SKU-11234 (Paper Towels 8-pack) at DC-EAST-02: Current position is 450 units with ROP at 1,800. Weekly demand forecast: 580 units. EOQ calculates to 2,200 units but rounded to 2,400 (full pallet = 600 units × 4). Order value: $10,800. If ordered today, receipt expected Feb 17. Without order, projected stockout Feb 11. Priority: CRITICAL."
Example 2 — Constrained Budget Allocation
"Weekly ordering budget is $500,000 against $850,000 in recommended orders. Applying priority scoring: 18 critical orders ($145,000) fully funded, 67 high-priority orders ($310,000) fully funded, remaining $45,000 allocated to top 12 standard orders by service-level gap. 148 standard orders deferred to next cycle. Projected portfolio fill rate with this allocation: 96.2% (vs. 98.5% if fully funded)."
Daily_Demand × (Shelf_Life - Lead_Time - Buffer_Days)