Skip to content

Implementation and migration

An ERP retired without losing a transaction

Sixteen archive objects populated with zero failures, and two phantom invoices caught and removed before they touched a live record.

Built for
SMT Research, Vancouver
Service line
Implementation and migration
Window
Jun to Sep 2026
The headline number0Failed records across 16 archive objects1,553 sales orders, 8,478 order lines, 3,438 purchase orders, 2,862 invoices and 14,889 stock movements loaded.

01Key numbers

What we measured

2Of phantom invoice data caught during migrationTwo mistake invoices, plus the phantom parent order that existed only to carry them. Bad data inherited from the source system.
16Corrected lifetime invoicingPre-tax, across 2,860 invoices, once the two phantom invoices were removed.
14,889Stock movements migratedAlongside 2,435 inventory items, 1,211 stock adjustments, 665 assemblies and 158 bills of material.
141 / 141Per-order reconciliation files agreeing or explainedEach file compares the old system, Salesforce and the accounting ledger. An explained variance still counts as unresolved.

02The situation

What was true before

The firm ran its operations in a separate inventory and order system, with sixteen years of history that nobody could query alongside Salesforce data.

A lifetime invoicing total had been quoted internally for long enough that nobody questioned it.

Contact us to find out more

Recognise this in your own org?

03What we built

The mechanism

Sixteen archive objects, loaded once, keyed to the live records, and reconciled three ways before anyone was allowed to trust them.

History lands in archive objects, not in live ones

Sixteen years of orders, purchase orders, invoices and stock movements load into dedicated archive objects rather than being back-dated into the operational records. Reporting can join across both. Automation only ever fires on live data.

Three-way reconciliation, published with its residue

4,506 transactions from 2010 to 2026 were keyed across Salesforce, the retiring system and the accounting ledger, at 97%. What would not key is itemised for the controller rather than absorbed into a rounding line.

Rollups repaired before anything was reported on

16 of 79 purchase order header totals disagreed with the sum of their own lines. All 79 were backfilled to zero mismatches. Change request totals were empty on nearly all 143 records with children and were backfilled the same way.

Sales and Forecasting
CountProductsBulk editSpot checkHistoryAudit log

Start a physical inventory count

412 products selected. Only ticked items on the Products tab are pulled in.

Start count
Depiction · A physical stock count hub: count, bulk edit, spot check, history and a full audit log, built as one component instead of five reports.Every adjustment requires a reason before it will save. An unexplained stock correction is how a discrepancy becomes permanent, so the field is mandatory rather than encouraged.

Surfaces built

We will demonstrate any of these live, on the real org,.

  • Archive object record with its source-system keyImage withheld
  • Three-way reconciliation workbook by transactionImage withheld
  • Per-order variance file with the explanation columnImage withheld
The finding

Two typos were most of a reported lifetime total.

The reported lifetime invoicing total was inflated by two mistake invoices, together with a phantom parent order that existed only to carry them. All of it was bad data inherited from the source system. The corrected total is the one the site would quote, and it is not published here.8M pre-tax across 2,860 invoices, and no live order was ever polluted.

04Outcome

What changed, verified

The legacy system was retired with sixteen years of history queryable in Salesforce and a reconciliation anyone can re-run.

  • Zero failed records across all sixteen archive objects.
  • Roughly 3,500 historical quotes from 2016 to 2025 migrated alongside the transactional data.
  • 3,033 quote segments backfilled, surfacing quote discounts that had not been visible anywhere.
  • Segment, purchase order and change request rollups all backfilled to zero mismatches.
How it was verified

Every migrated total was checked against the retiring system and the accounting ledger. Variances were itemised per order rather than reported as a percentage.

Sources
  • docs/research/01-salesforce-platform.md §2.4 · ERP migration
  • docs/research/01-salesforce-platform.md §2.3 · Rollup and data-integrity repair

Keep reading

Two more

All case studies
  • Implementation and migration
    16%Of live invoice lines carried unsafe decimal precision21 of 135 lines replayed. Caught at the accounting boundary, with no Salesforce field narrowed.

    A two-way accounting sync that refuses to guess

    Receivables, payables and timesheets sync both ways on a fifteen-minute cycle. Every rule that could round, merge or classify a dollar is written down and refuses to guess.

  • Implementation and migration
    395Of inventory value made visible for the first time395 priced SKUs in the warehouse, plus stock on job sites. Priced stock only.

    Where the inventory value actually is

    One question drove the whole design: where is the inventory value now. The answer required a state machine, an audit trail on every movement, and an honest note about two parallel ledgers.

Next step

Bring us your hardest Salesforce problem

Tell us what is broken. You get a written read on it within one business day, before any money changes hands.

  • Reply within one business day
  • Live walkthrough of the org itself
  • Vancouver, British Columbia