Skip to content
Odoo Migration

Odoo Migration for Manufacturing: Transferring BOMs, Work Orders, and Routing Data

A practical guide to migrating manufacturing data in Odoo, covering BOMs, work orders, and routings. Learn how to map complex structures, validate dependencies, and ensure production continuity during version upgrades or system replacements.

9 min readSysGenPro Editorial
Odoo Migration for Manufacturing: Transferring BOMs, Work Orders, and Routing Data

Direct Answer: How to Migrate BOMs, Work Orders, and Routings in Odoo

Migrating manufacturing data in Odoo requires a structured approach that prioritizes data integrity over speed. The recommended approach involves profiling source data, mapping complex BOM hierarchies and routing sequences to Odoo's specific data models, and executing phased trial migrations in a staging environment. This process is critical because manufacturing data is highly relational; a single error in a Bill of Materials (BOM) line or a routing operation can halt production lines or distort cost accounting. The primary risks to control include broken parent-child relationships in multi-level BOMs, loss of custom routing logic, and discrepancies in work order status that affect inventory valuation. Success depends on rigorous validation of dependencies between products, work centers, and operations before any production cutover.

Preparation: Data Profiling and Source Assessment

Before writing any migration scripts, you must understand the state of your legacy data. Manufacturing data is often fragmented across multiple systems, including PLM tools, spreadsheets, and the legacy ERP. Begin by extracting a representative sample of your most complex products. Analyze the depth of your BOMs, identifying any circular references or orphaned components. For work orders, determine which historical records are necessary. Typically, only open work orders and recent closed orders for cost reconciliation are migrated; older historical data is often archived separately to reduce migration complexity and risk.

Identifying Custom Fields and Logic

Review your legacy system for custom fields that track specific manufacturing attributes, such as batch numbers, serial numbers, or quality inspection flags. Determine if these fields have equivalents in Odoo's standard manufacturing module or if they require custom development. If custom fields exist, map them to Odoo's 'extra' fields or plan for a custom module. This step is crucial because ignoring custom logic can lead to data loss that is not immediately visible but impacts downstream reporting and compliance.

Mapping BOM Structures and Hierarchies

Odoo uses a specific structure for Bills of Materials, where each BOM line references a component product and a quantity. In multi-level BOMs, the parent BOM references sub-assemblies, which have their own BOMs. During migration, you must ensure that the sequence of creation is correct: components first, then sub-assemblies, and finally the finished goods. If you attempt to create a finished good BOM before its sub-assembly components exist in the target system, the migration will fail or create broken links. Use a topological sort algorithm in your migration script to determine the correct insertion order based on dependencies.

Data ElementSource System AttributeOdoo Target ModelKey Consideration
BOM HeaderProduct ID, Type (Manufacture)mrp.bomEnsure product type is set to 'Manufacture' before BOM creation
BOM LineComponent ID, Quantity, UoMmrp.bom.lineValidate UoM conversion factors match source system
RoutingOperation Sequence, Work Centermrm.routing / mrp.routing.workcenterMap work centers first; operations depend on work center existence
Work OrderOrder ID, Status, Datesmrp.productionOnly migrate open orders; closed orders may require manual reconciliation

Migrating Routings and Work Centers

Routings define the sequence of operations required to manufacture a product. In Odoo, routings are linked to work centers, which represent physical resources or logical groups of resources. Before migrating routings, you must migrate all work centers. Each operation in a routing must be mapped to a specific work center. If your legacy system uses generic operation codes that do not map directly to Odoo's work center concept, you will need to create a mapping table. For example, a legacy 'Assembly' operation might map to an 'Assembly Line A' work center in Odoo. Ensure that the time estimates (setup, cycle time) are correctly converted to Odoo's time units, which are typically in minutes or hours.

Handling Variable and Optional Operations

Some manufacturing processes include optional or variable operations that are not always executed. Odoo supports this through routing lines that can be marked as optional or through custom logic. If your legacy system tracks these variations, ensure that the migration script preserves this metadata. If Odoo's standard routing does not support a specific variation logic, you may need to implement a custom module or adjust the process design to fit Odoo's standard capabilities. Do not force complex legacy logic into standard fields if it compromises data clarity.

Transferring Work Orders and Production Status

Migrating work orders is the most complex part of the process because they represent a live state. You must decide which work orders to migrate. Generally, only work orders that are 'In Progress' or 'Planned' should be migrated. Closed work orders are typically not migrated because their data is already reflected in inventory and financial records. For open work orders, you must migrate the current status, including consumed materials, produced quantities, and remaining quantities. This requires careful reconciliation with inventory levels to ensure that the migration does not create duplicate stock or negative inventory.

  • Extract open work orders with their current status and quantities.
  • Map legacy status codes to Odoo's production states (Draft, Waiting, Progress, Done).
  • Validate that the consumed materials in the work order match the inventory deduction in the source system.
  • Create the work orders in Odoo using the mapped BOMs and routings.
  • Manually verify a sample of migrated work orders to ensure quantities and statuses are correct.

Technical Execution: Scripts and Automation

Manual entry of manufacturing data is error-prone and inefficient. Use automated migration scripts, typically written in Python using Odoo's ORM (Object-Relational Mapping) API. The scripts should be idempotent, meaning they can be run multiple times without creating duplicate records. Implement logging to track every record created, updated, or skipped. This log is essential for troubleshooting and reconciliation. Run the scripts in a staging environment that mirrors the production database structure and data volume. Do not run migration scripts directly in production without prior testing in staging.

Managing Dependencies and Order of Operations

The order of data insertion is critical. The general sequence should be: 1. Products (Raw Materials, Semi-Finished, Finished Goods), 2. Work Centers, 3. BOMs (Components to Finished Goods), 4. Routings, 5. Work Orders. If you attempt to create a BOM before the products exist, the script will fail. If you create a routing before the work centers exist, the routing will be incomplete. Use foreign key constraints in your database to enforce these dependencies, but also handle errors gracefully in your script to provide clear feedback on missing dependencies.

Validation and Reconciliation

After the migration, you must validate the data. This involves comparing the source and target systems. For BOMs, check that the total quantity of components matches the source system. For work orders, verify that the sum of consumed materials and produced quantities matches the source system's records. Use automated reconciliation scripts to generate a report of discrepancies. Investigate any discrepancies before proceeding to user acceptance testing. Common issues include unit of measure conversion errors, missing work center mappings, and incorrect BOM line quantities.

Validation CheckMethodPass Criteria
BOM CompletenessCompare component count and quantities100% match with source system
Routing IntegrityVerify all operations have valid work centersNo null work center references
Work Order StatusCheck status and quantities for open ordersStatus and quantities match source
Inventory ReconciliationCompare stock levels before and after migrationNo unexplained stock variances

Testing: User Acceptance and Performance

User Acceptance Testing (UAT) is critical for manufacturing data. Involve production planners, shop floor supervisors, and finance teams to test the migrated data. They should create new work orders using the migrated BOMs and routings to ensure the process works end-to-end. Check that the system correctly calculates material requirements and production times. Performance testing is also important, especially if you have large BOMs or many open work orders. Ensure that the system can handle the load without significant delays. If performance issues are found, optimize database indexes or adjust Odoo's configuration.

Cutover and Deployment

The cutover is the final step where you switch from the legacy system to Odoo. Plan a freeze window where no new work orders are created in the legacy system. Perform a final data load of any changes that occurred during the freeze. Execute the migration scripts in production. After the migration, perform a final reconciliation and notify users that the system is live. Have a rollback plan ready in case of critical failures. The rollback plan should include restoring the database from a backup and reverting any changes made to the legacy system.

Post-Migration Stabilization

After go-live, monitor the system closely for the first few weeks. Track any errors or discrepancies reported by users. Provide additional training if users are struggling with the new interface or processes. Monitor system performance and resource usage. Address any issues promptly to maintain user confidence. Document any lessons learned for future migrations or upgrades. This stabilization phase is crucial for ensuring long-term success and user adoption.

Risk Management and Rollback Strategy

Manufacturing migrations carry high risk due to the complexity of the data and the impact on production. Key risks include data loss, broken BOMs, and inventory discrepancies. Mitigate these risks by maintaining verified backups of the source and target databases. Test the restore process to ensure backups are valid. Define clear go/no-go criteria based on the results of validation and UAT. If critical issues are found, do not proceed with the cutover. An approved rollback plan is essential to minimize downtime and business impact in case of failure.

Conclusion

Migrating BOMs, work orders, and routings in Odoo is a complex but manageable process if approached with discipline and attention to detail. By following a structured methodology that includes data profiling, careful mapping, automated execution, and rigorous validation, you can ensure a successful migration. The key is to prioritize data integrity and user experience over speed. Invest time in testing and reconciliation to avoid costly errors in production. With the right planning and execution, you can transition to Odoo with confidence, maintaining operational continuity and improving long-term ERP maintainability.

Written by
SysGenPro Editorial

SysGenPro Editorial

Platform & solutions team

Practical guidance on ERP, AI automation, cloud deployment and enterprise transformation from the SysGenPro team.

Share this article

Frequently asked questions

Common questions on this topic. Talk to our team for anything specific to your business.

01Can historical work orders be migrated to Odoo?

It is generally recommended to migrate only open work orders. Historical closed work orders are typically not migrated because their data is already reflected in inventory and financial records. Migrating them can increase complexity and risk without providing significant value.

02How do I handle multi-level BOMs during migration?

Use a topological sort to determine the correct order of creation. Create components first, then sub-assemblies, and finally finished goods. This ensures that all dependencies are met before creating higher-level BOMs.

03What are the risks of migrating routing data in Odoo?

Risks include missing work center mappings, incorrect operation sequences, and loss of custom routing logic. These can lead to production delays and inaccurate cost calculations. Thorough testing and validation are essential to mitigate these risks.

04Do I need to migrate all manufacturing history?

No, you do not need to migrate all manufacturing history. Focus on open work orders and recent closed orders for cost reconciliation. Older historical data can be archived separately to reduce migration complexity.

05How to validate BOM accuracy after migration?

Use automated reconciliation scripts to compare component quantities and totals between the source and target systems. Manually verify a sample of BOMs to ensure accuracy. Investigate any discrepancies before proceeding to UAT.

06What is the best approach for migrating custom manufacturing fields?

Map custom fields to Odoo's 'extra' fields or plan for a custom module. Ensure that the migration script preserves the data and that the fields are accessible in the user interface. Test the functionality to ensure it works as expected.

Continue learning
View all articles
Explore the platform

Where to go next

Browse the knowledge hub

See how SysGenPro fits your business

Discuss your workflows, modules and deployment options with our team.

Back to resources