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
0
Days late

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.

StreamDetail
Entity master dataCustomers, 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 data41,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 assembliesBill of materials with revision history. Core assembly items, outsource PO flows, component UOM reconciliation. Multiple BOM file versions identified and corrected before load.
PricingRetail 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 suppliers3-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 transactionsSales 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 balancesAccounts 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.


Platform integration

The migration did not end at NetSuite. The go-live required coordinated deployment across five connected systems.

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.


Outcome

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