Case Study
Full ERP migration for a publicly listed multinational
MS Navision 2008 R2 to NetSuite OneWorld. 41,232 active SKUs. Entity master data, open transactions, product data, BOMs, pricing, supplier relationships. Audit-ready. Delivered on schedule.
Published April 2026
41,232
Active SKUs migrated
34,695
Supplier records resolved
5
Source systems integrated
The problem
A publicly listed multinational was running its Australian subsidiary on MS Navision 2008 R2 -- a system nearly two decades old. The group was consolidating onto NetSuite OneWorld to enable global reporting and audit consolidation across multiple business units.
The migration was not optional. It was board-mandated with a fixed go-live date. The data could not be wrong. The company is publicly listed, which means every number in the system would face audit scrutiny.
The challenge was not just moving data. It was moving 18 years of accumulated business logic, supplier relationships, pricing structures, BOMs, customer restrictions, and transaction history -- all of it encoded in a legacy system that predated modern data architecture -- into a fundamentally different platform with different entity models, different field structures, and different assumptions about how data relates.
What we built
A complete ETL framework in Python. Not a CSV export and import. A structured pipeline with entity-level extraction, multi-pass transformation, exception handling, and automated audit reconciliation.
| Stream | Detail |
| Entity master data | Customers, vendors, locations, contacts. Extracted from NAV via direct MS-SQL queries. Entity resolution across duplicate records, name variants, and legacy codes. Mapped to NetSuite internal IDs. |
| Product data | 41,232 active SKUs. Item types, categories, posting groups, retail and wholesale pricing, customer restrictions, location configuration. Bespoke/MTO classification mapping between incompatible item type models. |
| BOMs and assemblies | Bill of materials with revision history. Core assembly items, outsource PO flows, component UOM reconciliation. Multiple BOM file versions identified and corrected before load. |
| Pricing | Retail pricing (Inc GST source, XGST for POS). Wholesale pricing reconciliation against legacy FY data. 30% initial inconsistency resolved to 95%+ coverage through systematic cascade logic. |
| Preferred suppliers | 3-tier cascade: Current PO > Last PO > Purchase Price Record. Style-level promotion for SKU-level gaps. 34,695 resolved out of 41,232 active SKUs. 6,537 exceptions documented and routed. |
| Open transactions | Sales orders, purchase orders, return authorisations. Dry-run import, exception triage, 14+ issue categories resolved across SO and PO streams. Missing customers, vendor codes, location data, discount items, rounding. |
| Opening balances | Accounts payable and accounts receivable dry runs. Every line item reviewed. Transaction-level comment resolution. |
Automation, not spreadsheets
Every stage of the pipeline was automated and repeatable. Not because automation is impressive, but because a migration this size will run more than once. Dry runs, corrections, re-runs. The pipeline had to produce identical results every time and different results when the data changed.
- Automated audit comparison -- source-to-target reconciliation across every entity type. Field-level diff. Exception registry with severity classification.
- Scorecard generation -- HTML audit scorecards for every migration stream. Pass/fail by entity, field coverage percentages, exception breakdowns. Printable, shareable, audit-ready.
- Preferred supplier cascade -- 3-tier resolution logic running against the full NAV transaction history. Style-level promotion for items with no direct match. Fully automated, fully auditable.
- Entity definition framework -- configurable entity schemas defining source queries, field mappings, transform rules, and validation criteria. New entities added by definition, not by code.
- UPC extract and audit companion -- barcode data extraction and cross-reference validation against the product master.
- Retail store location data -- SKU-level and sales-level location data extracted from NAV for NetSuite location configuration.
Platform integration
The migration did not end at NetSuite. The go-live required coordinated deployment across five connected systems.
- NetSuite OneWorld -- target ERP. Multi-subsidiary, global consolidation, audit-ready configuration.
- MS Navision 2008 R2 -- source system. Direct MS-SQL extraction. NAV users transitioned to read-only at cutover.
- Salesforce.com -- CRM integration via Celigo. SFDC package deployment, DKIM/domain config, contact sync, event relay. 14,526 records bulk-updated at go-live.
- Celigo -- integration platform orchestrating NetSuite-Salesforce data flows. Progressive flow activation gated on validation signoff.
- WMS / POS -- warehouse management and point-of-sale system integration. SmartFreight domain changes, manifest permissions, stock inventory publishing.
Python
MS-SQL
NetSuite OneWorld
Salesforce.com
Celigo
MS Navision
SuiteScript
REST API
The hard parts
The interesting problems were not technical. They were data problems that had been accumulating for 18 years.
- Wrong BOM file loaded -- the assembly BOM import used an outdated file with old pricing and missing vendors. Identified through audit comparison, correct file located, full re-import executed.
- Item type mismatch -- design card data referenced item types that had been reclassified in the product master. 432 design line errors, 941 parent errors, 8,508 children errors. Root cause traced. Systematic correction applied.
- Preferred supplier gaps -- 6,537 SKUs with no resolvable supplier through the 3-tier cascade. Each exception documented with the reason (no purchase history, vendor code unresolvable, item never ordered). Not guessed. Documented.
- MTO to Bespoke mapping -- MTO purchase orders had to be transformed into Bespoke items in NetSuite. Incorrect mapping risked blowing up sales orders. Each mapping validated against the NAV bespoke item register before transform.
- Pricing inconsistency -- wholesale pricing showed 29% inconsistency against legacy FY data. Traced to old fiscal year pricing carried forward. Resolved through systematic cascade against current NAV pricing records. Coverage went from ~70% to 95%+.
Outcome
- Go-live delivered on schedule -- board-mandated date met. SteerCo GO decision based on 98% item migration coverage.
- 41,232 active SKUs migrated -- entity master data, product data, pricing, restrictions, location config, supplier relationships.
- Audit-ready from day one -- every record reconciled against source. Every exception documented. Automated scorecards for governance review.
- 34,695 supplier records resolved -- out of 41,232 via the 3-tier cascade. 6,537 exceptions formally documented and routed, not guessed.
- Five systems coordinated -- NAV, NetSuite, Salesforce, Celigo, WMS/POS. Cutover executed across all platforms in a single evening.
- Hypercare transition -- post go-live stabilisation, data remediation, and issue triage. Daily reporting to group leadership.
How we worked
One person led the data migration stream end to end. Scoped the pipeline, built the ETL framework, ran the audits, triaged the exceptions, coordinated with the implementation partner, and reported to the steering committee. No handoffs. No team rotation. The person who built it is the person who verified it.
That is how Taussig works on every engagement.
Similar challenge?
If you are planning an ERP migration and need the data to land right, we should talk.
Start a conversation