Demand Driven Material Requirements Planning is a formal multi-echelon planning and execution method developed by Ms. Carol Ptak and Mr. Chad Smith.
DDMRP combines blended aspects of Material Requirements Planning (MRP), Distribution Requirements Planning (DRP) with the pull and visibility emphases found in Lean and the Theory of Constraints and the variability reduction emphasis of Six Sigma.
This method has five sequential components:
- Strategic Inventory Positioning. Answers the question "Given our system and environment, where should we place inventory to have the best protection?" and determines where should decoupling points of inventory be placed.
- Buffer Profiles and Levels. Determine the amount of protection at those decoupling points.
- Dynamic Adjustments. Allow the company to adapt buffers to group and individual part trait changes over time through the use of several types of adjustments.
- Demand Driven Planning. Allow to launch purchase orders (POs), manufacturing orders (MOs) and Transfer Orders (TOs) based on the priority dictated by the buffers.
- Visible and Collaborative Execution. These POs, MOs and TOs have to be effectively managed to synchronize with the changes that often occur within the "execution horizon."
These five components work together to greatly dampen, if not eliminate, the nervousness of traditional MRP systems and the bullwhip effect in complex and challenging environments.
This approach provides real information about those parts that are truly at risk of negatively impacting the planned availability of inventory.
DDMRP sorts the significant few items that require attention from the many parts that are being managed. Under the DDMRP approach, fewer planners can make better decisions more quickly. That means companies will be better able to leverage their working and human capital.
Demand Driven Material Requirements Planning is quickly being adopted by a wide variety of leading companies across the world.
Some of the benefits reported by the DDMRP method include:
- High fill rate performance
- Lead time reductions
- Inventory reductions, while improving customer service
- Eliminate costs related to expedite
- Planners see priorities instead of constantly fighting the conflicting messages of MRP
It is highly recommended to read the book 'Demand Driven Material Requirements Planning (DDMRP)' by Carol Ptak and Chad Smith.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Adds Demand Driven MRP stock buffers to Odoo: users define red/yellow/green buffer zones per product and location, see net flow position and replenishment recommendations, and generate purchases or manufacturing orders from them.
This module introduces stock buffers, the core of Demand Driven MRP. A buffer is created for a product in a warehouse location and shows a red, yellow and green zone with a target level, computed from average daily usage, lead time and variability factors. Users see the buffer's net flow position, on-hand quantity and a recommended procurement quantity, plus planning and execution charts.
- Buffer profiles, lead time factors and variability factors let you standardise how zones are calculated; override options exist per buffer.
- Average daily usage can be calculated with configurable methods (fixed, past-looking, future-looking or blended), based on actual stock moves or demand estimates.
- From a buffer you can open related purchase orders, manufacturing orders, bills of materials, demand estimates and past consumption, and launch a wizard to create procurements.
- Purchase order lines and manufacturing orders linked to a buffer show its on-hand alert level (red/yellow/green) and on-hand percentage, so buyers and planners can prioritise.
- Bills of materials show whether components are buffered and compute a decoupled lead time; a wizard changes the location used for this calculation.
- Scheduled jobs refresh buffers and average daily usage; company settings control automatic net flow position updates, including scrap in usage, and quantity-multiple tolerance.
- Products show a count of their buffers, and archiving a product archives its buffers.
Depends on
Required by other modules
Menus it adds
Models and fields (26)
- mrp.bom · extends an existing modeldlt (Decoupled Lead Time (days)), buffer_id (Stock Buffer), is_buffered (Buffered?), context_location_id (Stock Location)
- ddmrp.run · new model
- stock.move · extends an existing modelbuffer_ids (Linked Stock Buffers), qualified_demand_buffer_ids (Qualified Demand For Buffers)
- stock.rule · extends an existing model
- res.company · extends an existing modelddmrp_auto_update_nfp (Update NFP on Stock Buffers on relevant events.), ddmrp_adu_calc_include_scrap (Include scrap locations in ADU calculation), ddmrp_qty_multiple_tolerance (Qty Multiple Tolerance)
- mrp.bom.line · extends an existing modeldlt (Decoupled Lead Time (days)), buffer_id (Stock Buffer), is_buffered (Buffered?), context_location_id
- stock.buffer · new modeladu (ADU), dlt (DLT (days)), name, active, group_id (Procurement Group), adu_fixed (Fixed ADU), item_type, lead_days (Lead Time (Distributed)), company_id (Company), product_id (Product), top_of_red (Top Of Red), ddmrp_chart (DDMRP Chart), location_id (Location), order_cycle (Minimum Order Cycle (days)), product_uom, auto_procure, product_type, qty_multiple, red_base_qty, red_override (Red Zone (Override)), red_zone_qty, top_of_green, warehouse_id (Warehouse), green_zone_oc (Green Zone Order Cycle), rfq_total_qty (RFQ Total Qty), top_of_yellow, valid_uom_ids, green_override (Green Zone (Override)), green_zone_moq (Green Zone Minimum Order Quantity), green_zone_qty
- stock.picking · extends an existing model
- mrp.production · extends an existing modelbuffer_id (Stock Buffer), on_hand_percent (On Hand/TOR (%)), execution_priority_level (Buffer On-Hand Alert Level)
- purchase.order · extends an existing modelddmrp_comment (Follow-up Notes)
- product.product · extends an existing modelbuffer_ids (Stock Buffers), buffer_count
- stock.move.line · extends an existing modelstate
- stock.warehouse · extends an existing modelnfp_incoming_safety_factor (Net Flow Position Incoming Safety Factor)
- product.template · extends an existing modelbuffer_count
- purchase.order.line · extends an existing modelbuffer_ids (Stock Buffers), ddmrp_comment, on_hand_percent (On Hand/TOR (%)), execution_priority_level (Buffer On-Hand Status Level)
- res.config.settings · extends an existing modelmodule_ddmrp_chatter (Chatter in Stock Buffers), module_ddmrp_history (Store historical data from stock buffers), module_ddmrp_warning (Configuration Warnings in Stock Buffers), ddmrp_auto_update_nfp, module_ddmrp_packaging (Use packagings on stock buffers.), module_ddmrp_adjustment (apply adjustments to dynamically alter buffers), module_ddmrp_coverage_days (Shows the current on-hand for stock buffers expressed as coverage days.), ddmrp_adu_calc_include_scrap, ddmrp_qty_multiple_tolerance, module_stock_buffer_capacity_limit (Storage Capacity Limits), module_ddmrp_purchase_hide_onhand_status (Hide Purchase On-Hand Status)
- stock.buffer.profile · new modelname, item_type, company_id, lead_time_id (Lead Time Factor), variability_id (Variability Factor), replenish_method (Replenishment method), distributed_reschedule_max_proc_time (Re-Schedule Procurement Max Proc. Time (minutes)), replenish_distributed_limit_to_free_qty (Limit replenishment to free quantity)
- ddmrp.duplicate.buffer · new modeltype (Duplication Type), product_id (New Product), location_id (New Location)
- make.procurement.buffer · new modelitem_ids (Items), partner_id (Vendor)
- mrp.bom.change.location · new modellocation_id
- stock.warehouse.orderpoint · extends an existing model
- make.procurement.buffer.item · new modelqty, uom_id (Unit of Measure), wiz_id (Wizard), buffer_id (Stock Buffer), product_id (Product), location_id (Location), date_planned (Planned Date), warehouse_id (Warehouse), recommended_qty
- product.adu.calculation.method · new modelname, method (Calculation method), company_id (Company), factor_past (Past Factor), source_past (Past Source), horizon_past (Past Horizon), factor_future (Future Factor), source_future (Future Source), horizon_future (Future Horizon)
- stock.buffer.profile.lead.time · new modelname, factor (Lead Time Factor), company_id
- report.mrp.report_bom_structure · extends an existing model
- stock.buffer.profile.variability · new modelname, factor (Variability Factor), company_id
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 7 confirmed, 2 with no information of 9 versions.
Sources · Odoo 15.0
Confirmed on 2026-11-03 in branch 15.0 of OCA/ddmrp.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0We strongly recommend to modify the configuration of the reservation method to manual in the outgoing operation types (so deliveries related to Sales Orders aren't automatically reserved) and to avoid to reserve stock for specific moves, buffers are in fact a reservation of stock. However, while reservation is discouraged, it is still available to be used, in case of reserved stock be aware that the buffer will be blind to this transfers and stock and you are bypassing the DDMRP reordering flow.
Configuration
Source · Odoo 19.0Scheduled actions
- Go to Settings \> Technical.
- 'DDMRP Buffer ADU calculation'. Computes the Average Daily Usage for all Buffers.
- 'Reordering Rule DDMRP calculation'. Computes the Qualified Demand, Net Flow Position, Planning and Execution priorities for all Buffers.
Decoupled Lead Time computation
The DLT is automatically computed by the system.
For manufactured products' buffers just remember to provide and set properly the following information:
- The Manufacturing Lead Time for the manufactured product. It can be found at the product form view under the tab Sales.
- The Delivery Lead Time for the preferred vendor of a product. This is important for the products which are purchased and are components in any Bill of Materials.
For purchased/distributed products' buffers the logic is simpler.
- In the first place the system will look if there are Vendors for the product, if so it will use the Delivery Lead Time of the preferred one.
- In case of absence of vendors, the Lead Time at the bottom of the Buffer form view will be used.
Usage
Source · Odoo 19.0To easily identify were are you maintaining buffers in your Bill of Materials, you will need to first provide location information on the Bills of Materials.
- Go to Manufacturing / Products / Bill of Materials and update the 'Location' in all the Bill of Materials and associated lines, indicating where will the parts be placed/used during the manufacturing process.
- Print the report 'BOM Structure' to display where in your BOM are you maintaining buffers, and to identify the Lead Time (LT) of each product, and Decouple Lead Time (DLT).
Buffers
To list the list of inventory buffers, go to one of the following: * Inventory / Master Data / Stock Buffer Planning * Inventory / Master Data / Reordering Rules
Buffer Profiles
Buffer profiles make maintenance of buffers easier by grouping them in profiles. Changes applied to the profiles will be applicable in the associated buffer calculations.
- Go to Inventory / Configuration / Buffer Profiles.
The Buffer Profile Lead Time Factor influences the size of the Buffer Green zone. Items with longer lead times will usually have smaller green zones, which will translate in more frequent supply order generation.
- Go to Inventory / Configuration / Buffer Profile Lead Time Factor to chan
The Buffer Profile Variability Factor influences the size of the Buffer Red Safety zone. Items with longer lead times will usually have smaller green zones, which will translate in more frequent supply order generation.
- Go to Inventory / Configuration / Buffer Profile Lead Time Factor.
Usual factors should range from 0.2 (long lead time) to 0.8 (short lead time).
Product attributes
- For manufactured products, go to Manufacturing / Products and update the 'Manufacturing Lead Time' field, available in the tab Inventory.
- For purchased products, go to go to Purchasing / Products and update the Delivery Lead Time for each vendor, available in tab Purchase and section Vendors.
ADU Calculation Methods
The Average Daily Usage (ADU) defines the frequency of demand of a product in a certain location. It can be computed in different ways, which you can configure with ADU calculation methods as follows:
- Go to Inventory / Configuration / DDMRP / ADU calculation methods.
- Indicate a name, a calculation method (fixed, past-looking, future-looking or blended).
- Fill the corresponding period (past, future or both for blended method) to specify the length of period consideration (in days).
- Indicate the source of information: stock moves or demand estimates.
- If you use the blended method fill also the Past Factor and Future Factor.
If you do not have prior history of stock moves in your system, it is advised to use fixed method or start to work on future estimates. If you have past-history of stock moves, best use past-looking method or blended method.
The ADU is computed every day by default in a background job independently from the other buffer fields. This computation can be done with less frequency but it is not recommended to run it less than weekly or more than daily. Circumstantially, If you need to force the calculation of the ADU go to Inventory / Configuration / DDMRP / Run DDMRP and click on Run ADU calculation.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.