Production Planning and Control: How Odoo ERP Works
Where Odoo Fits in Production Planning
Most manufacturers do not have a planning problem; in theory, they have a data problem in practice. Sales targets live in one place, material stocks in another, and the production schedule on a whiteboard that is already out of date by mid-morning. Odoo brings these into a single connected system: a confirmed sales order creates a demand signal in Manufacturing, which checks stock, generates procurement proposals for missing components, and sequences work orders against your configured work centres, all within the same platform.
What follows covers each part of how Odoo handles production planning and control as it actually works by default, not how it could work with heavy customisation.
Master Production Schedule (MPS)
Odoo’s Master Production Schedule is accessed at Manufacturing ? Planning ? Master Production Schedule and is used to plan production quantities over a defined horizon, weekly or monthly, before releasing manufacturing orders to the floor.
Within the MPS, a planner manually enters demand forecasts per product per period directly into the MPS grid. The system then compares these forecasted quantities against current stock levels and already-confirmed manufacturing orders, and calculates a replenishment quantity to fill the gap that needs to be produced. A planner reviews this and confirms it before any manufacturing order or purchase requisition is generated. Nothing is released to execution automatically.
It is important to clarify two common misconceptions about the MPS. First, the MPS does not automatically pull live demand from the Sales module; by default, forecast quantities are entered manually within the MPS interface itself. Integration with the Sales Forecasting module requires specific configuration and is not active out of the box. Second, Make-to-Order (MTO) products are not handled through the MPS by default. MTO products are triggered directly through the MRP scheduler via their configured route when a sales order is confirmed; they bypass the MPS entirely in standard Odoo behaviour.
How the MRP Scheduler WorksThere is no standalone "Run Scheduler" menu item visible to regular users inside the Manufacturing app. The scheduler runs automatically in the background on a set schedule. To trigger it manually, developer mode must be enabled first, and then it is accessible at Inventory ? Operations ? Run Scheduler. This is an admin-level action for testing or urgent situations, not a day-to-day planner tool.
Odoo supports three replenishment mechanisms, and understanding what triggers each one matters before assuming the scheduler handles everything.
Reorder Rules: When a product's forecasted quantity drops below the defined minimum, automatic reorder rules generate a purchase or manufacturing order when the scheduler runs. Manual reorder rules list the product on the replenishment dashboard for a planner to action. Suggested purchase orders appear at Inventory ? Operations ? Replenishment. Suggested manufacturing orders appear as draft MOs at Manufacturing ? Operations ? Manufacturing Orders.
Make-to-Order (MTO) route: When the MTO route is enabled on a product, a replenishment order is created the moment a sales or manufacturing order is confirmed, directly linked to that originating order. This is triggered by order confirmation itself, not the scheduler.
Master Production Schedule (MPS): a fully manual planning tool. Adding a product to the MPS does not create any manufacturing or purchase orders automatically. The MPS suggests a replenishment quantity based on confirmed orders and entered forecasts, but a planner must review and confirm before anything is generated. It is recommended not to use MPS and reorder rules together for the same product, as this creates conflicting signals and unnecessary replenishment orders.
By default, Odoo's scheduler plans without enforcing hard capacity limits, it treats every work centre as having infinite capacity. Work centre load can be reviewed visually at Manufacturing ? Planning ? Planning by Work Centre, where planners manually adjust timing if overloads appear. Odoo does not include a built-in finite capacity scheduling engine, which requires a separate APS integration
Bill of Materials Types and What Each One Does
The Bill of Materials is configured at Manufacturing ? Products ? Bills of Materials and is the structural foundation for every MRP calculation. Odoo supports multi-level BoMs, sub-assemblies can have their own BoMs, and Odoo explodes all levels automatically when a manufacturing order is created. Three BoM types control what happens when demand is raised against a product.
Manufacture: Creates an internal manufacturing order. Components are consumed from stock when the MO is processed, and the finished product is added to the destination location when the order is validated.
Kit. No manufacturing order is created. When a sales order is placed for a kit product, Odoo explodes the kit into its individual components at the delivery stage and picks each part directly. Used for products sold as a set but not assembled in-house.
Subcontracting: Triggers a purchase order to a named subcontractor instead of an internal MO. Odoo tracks components sent to the subcontractor and finished goods received back, maintaining lot and serial traceability without generating an internal production order.
Within a Manufacture BoM, individual components can be designated as phantom. A phantom component is a sub-assembly that exists as a product record in Odoo. It can even be a stocked item, but when used as a phantom within a BoM, Odoo bypasses it and pulls its constituent components directly onto the parent manufacturing order, without generating a separate MO for that intermediate level. The product record exists; it simply is not produced as a standalone job in that context.
Work Centres and Routing
Routing and work centres are only available when the Work Orders feature is enabled under Manufacturing ? Configuration ? Settings. This applies to Odoo Enterprise. Once enabled, routings are configured at Manufacturing ? Configuration ? Operations (labelled Operations in Odoo 16 onwards, previously called Routings in earlier versions).
A routing defines the ordered sequence of operations a product passes through from the first step to finished goods. Each operation is linked to a work centre and carries an expected duration. When a manufacturing order is created for a product with a routing, Odoo generates individual work orders for each operation in sequence and schedules them based on the work centre’s configured working hours calendar.
Each work centre is configured with a Working Hours calendar, a Time Efficiency percentage, and a Capacity value. The Time Efficiency field is what the MRP scheduler uses to adjust expected work order durations. A work centre set to 200% efficiency processes work orders in half the expected time. This is a static configuration value set by the administrator, not a dynamic figure calculated from live performance. Odoo also supports Alternative Work Centres: if a primary work centre is at capacity when an MO is planned, Odoo can automatically assign the operation to a configured alternative.
Parallel operations where two routing steps run simultaneously, are available in Odoo Enterprise only with Work Orders enabled. They are not available in Odoo Community.
The Shop Floor App
The Shop Floor module was introduced in Odoo 16 and is available in Enterprise. It is accessed at Manufacturing ? Shop Floor and provides a tablet-friendly operator interface showing assigned work orders, step-by-step instructions, and component consumption for each operation.
When an operator starts a work order, Odoo records the start time. When they mark it complete, the actual duration is logged against the planned duration from the routing. If a quality issue is encountered, the operator can raise a quality alert directly from the Shop Floor interface, which creates a record in the Quality module without leaving the screen.
If a machine breaks down, the operator can raise a maintenance request from the Shop Floor, which creates a maintenance work order and, according to Odoo’s own documentation, blocks the work centre from receiving new work orders for the duration of the maintenance. The blocked time is recorded as equipment failure downtime and feeds into OEE reporting. However, it is important to note that this blocking applies to new work order assignments during that maintenance window; already-scheduled work orders in the queue are not automatically rerouted. A planner would need to manually reassign them through the Planning view or Gantt.
OEE Reporting: What It Measures and What It Does Not Do
OEE Reporting - What It Measures
OEE in Odoo represents the percentage of time a work centre was fully productive. Is it viewed at Manufacturing? Reporting? Overall Equipment Effectiveness requires the Work Orders feature to be enabled under Manufacturing. Configuration? Settings.
Odoo tracks work centre time under four categories. The OEE percentage reflects how much of the total active time fell into the Fully Productive category; everything else is a loss.
Fully Productive Time: he work centre is operational, components are available, and the work order completes within its expected duration.
Reduced Speed the work order exceeds its expected duration. The time beyond the expected duration is recorded as reduced speed, not productive time.
Frequently Asked Questions
Does Odoo MRP use finite or infinite capacity scheduling by default?
Odoo’s MRP scheduler uses infinite capacity by default; it plans against scheduled dates and demands priority without enforcing hard work centre load limits. Planners can manually balance load through the Planning by Work Centre Gantt view. Finite capacity scheduling requires integration with a third-party APS tool such as frePPLe, which is a separately licensed product.
What is the difference between a Kit BoM and a Manufacture BoM in Odoo?
A Manufacture BoM creates an internal manufacturing order that consumes components from stock and produces a finished good. A Kit BoM creates no manufacturing order when a sales order is placed for a kit. Odoo explodes the product into its components at the delivery stage and picks each part individually. Kits are for products sold as a set but assembled by the end customer, not manufactured in-house.
Does OEE in Odoo automatically adjust the MRP scheduler’s capacity calculations?
No. OEE in Odoo is a reporting metric only. The MRP scheduler uses the static Time Efficiency field on the work centre configuration form to adjust expected work order durations. The live OEE figure calculated from actual production data does not automatically update this field or influence scheduling. If a planner wants the scheduler to reflect a work centre’s real performance, they need to manually update the Time Efficiency value.
Are parallel routing operations available in Odoo Community?
No. Parallel operations in routing, where two steps are scheduled to run simultaneously, are available in Odoo Enterprise only, and only when the Work Orders feature is enabled in Manufacturing settings. Odoo Community does not support parallel routing operations.
Where do MRP procurement proposals appear in Odoo?
MRP proposals are split by type. Suggested manufacturing orders for sub-assemblies appear as draft Manufacturing Orders in the Manufacturing module. Suggested purchase orders for bought-out components appear in Purchase? Replenishment or via the Reorder Rules flow in Inventory. They do not both appear in the same location; looking for draft MOs inside Inventory Replenishment, will not find them.
Conclusion: Ready to Run Production Planning in Odoo?
We implement and configure Odoo Manufacturing for production businesses from BoM setup and routing to shop floor deployment and OEE reporting, all on the correct version for your operation.

