All posts
Functional5 min read

Demand-Driven Replenishment with MRP in Odoo

Configure Odoo MRP to compute replenishment needs based on actual demand from sale orders and manufacturing requirements - generating purchase and production orders timed to meet delivery commitments.

Demand-Driven Replenishment in Odoo MRP#

Traditional min/max replenishment reacts to stock levels. Demand-driven MRP reacts to actual confirmed demand - creating purchase and manufacturing orders precisely calibrated to fulfill sales orders and production requirements on time.

How MRP Works in Odoo#

Manufacturing → Operations → Run MRP (or via scheduled action):

Odoo's MRP engine:

  1. Gathers all demand (confirmed sale orders, manufacturing orders needing components, manual forecasts)
  2. Subtracts available supply (on-hand stock + pending receipts)
  3. Identifies shortfalls (demand > supply)
  4. Generates replenishment proposals (purchase orders or manufacturing orders to cover shortfalls)
  5. Schedules proposals backward from the demand date minus lead time

Setting Up MRP Products#

Product → Inventory tab:

  • Routes: Buy or Manufacture (determines whether MRP proposes a PO or MO)
  • Lead Time: vendor lead time (for Buy) or manufacturing lead time (for Manufacture)

Product → Purchase tab → Vendors:

  • Delivery Lead Time: 7 days (vendor takes 7 days to deliver after PO)
  • Minimum Order Quantity: 100 units (PO suggestions are rounded up)

Running MRP and Reviewing Proposals#

Manufacturing → Operations → Run MRP → Replenishment tab:

For each product with a shortfall:

  • Product: Widget Component B
  • Demand: 500 units (from 3 sale orders)
  • Available: 150 units
  • Shortfall: 350 units
  • Proposed: 400 units (rounded up to minimum order of 100)
  • Proposed Date: 2027-10-25 (delivery needed) − 7 days lead time = order by 2027-10-18

Click Confirm → purchase order created automatically.

Multi-Level MRP#

For manufactured products with purchased components:

  1. Sale order demands 100 finished Widgets
  2. MRP computes: need 100 Widget BOMs → need 500 units of Component A + 200 units of Component B
  3. Check Component A stock: 300 on hand → need to purchase 200 more
  4. Creates PO for Component A: 200 units

This explosion happens automatically through all BOM levels.

Scheduling and Lead Time Accuracy#

MRP proposals are only as accurate as the lead time data:

  • Vendor consistently delivers in 5 days but the profile says 7: proposals are 2 days early → excess inventory
  • Vendor takes 10 days but profile says 7: proposals are 3 days late → stockouts

Update lead times quarterly based on actual performance data.

MRP Exception Reports#

After MRP runs, review exceptions:

Manufacturing → Operations → MRP → Messages:

  • "Late demand": a sale order needs delivery before the proposed PO can arrive
  • "Excess supply": stock levels exceed demand - consider delaying a PO
  • "Component shortage on MO": an existing MO cannot be completed due to missing components

Address each exception before confirming MRP proposals.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free