Work snippet 15 / 34Migration + accounting

Full-history move to simPRO and Xero, with a cutover plan

How I'd approach moving a multi-branch commercial contractor group onto simPRO and Xero with its history, so open items, jobs in progress and the opening trial balance tie on the cutover date and the old systems can be switched off.

Work snippet with example figures.

Area
Migration + accounting
Tools
simPRO · Xero · Older job system
Typical scope
US$3,500–5,000
Timeline
About 8 weeks · 4 fixed milestones

01Context

A commercial electrical and mechanical contractor group with three branches, a finance lead, a contracts administrator and an outside accountant. For years it has run quotes and job costing in an older job system and kept its books in desktop accounting software.

The systems in play

In the example the group moves to simPRO for jobs, contracts and recurring service schedules, and to Xero for the ledger, and wants its history to come with it. Customers and suppliers need their statements, project managers need job costs to date, and the accountant needs a trial balance that ties on the cutover date.

Table 1Who uses what
SystemWhat it does for the business
Older job systemQuotes, jobs, job costs and service schedules for six years. To be switched off after cutover and kept as a read-only archive.
Desktop accounting softwareThe current ledger, with open invoices, open supplier bills and fixed assets. To be replaced by Xero.
simPROThe future home of customers, sites, jobs, contracts, cost centres and recurring service schedules.
XeroThe future ledger: contacts, open items, history for statements and the opening trial balance.
AccountantSigns off the conversion balances and the first month-end.

02Problem

What the owner sees

  1. A cutover that nobody can promise will be clean
  2. Customer statements that must still be right on day one
  3. Jobs in progress that lose their costs to date
  4. Fear of switching off the old systems and missing something

A migration fails quietly, at the seams: an invoice part-paid in one system and unpaid in the other, a supplier loaded twice, a job that restarts at zero cost. The plan has to find these before go-live, not after the first month-end.

Table 2Where the drift starts
Everyday situationWhat goes wrong
Open invoices loaded as one lumpThe ageing report is right in total and wrong for every customer
Part-paid invoicesThe invoice is loaded at its full value and the payment is lost, or the other way round
Duplicate customers and suppliersThe same company is loaded two or three times with different payment terms
Jobs in progressCosts to date are not carried over, so margin looks better than it is
Invoice numbers reused between branchesTwo invoices share a number and the second is rejected
Bank balance at cutoverCheques and deposits in transit are missing, so the first reconciliation never closes
Sales tax codesOld codes map to the wrong new code and the first return is wrong

03Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookA read-only review of the older job system, the desktop ledger and the files kept outside both. Nothing is changed. Every record type is counted and its data quality scored.
  2. Agree the rulesWhat moves, what is archived, how duplicates are merged, what the cutover date is and who signs off the balances are written down.
  3. Load and testTwo full test loads into a trial Xero organization and a simPRO test environment. Each ends with a written tie-out.
  4. Cut over and checkA freeze, a final extract and the live load, then a go-live check, a rollback window and a parallel first month-end.
Table 3Migration rules agreed in writing (example settings)
ItemExample setting
Cutover dateThe last day of a month, so the opening trial balance is a month-end figure
Customers and suppliersMerged on tax ID, then on name and postal code; a person approves every merge
Open itemsLoaded one by one with their original date, due date and number, never as a lump per customer
History in Xero24 months of invoices and bills with payments applied, so statements and ageing work; older years kept as archived reports
History in simPROAll closed jobs for six years, with costs and invoices linked, plus every open job with costs to date
Invoice numbersOriginal numbers kept; a branch prefix is added only where two numbers collide
ArchiveOld job system and ledger set to read-only and exported to a document store for seven years
Sign-offThe finance lead signs the record counts and the open items. The accountant signs the trial balance.

04What the setup includes

What the setup includes, and why each piece is there. The detail of how it is configured is agreed in the scoping call.

Show the setup, layer by layer
Table 4The setup, layer by layer
LayerWhat is set up and why
Source auditCounts and quality scores for every record type, so the plan starts from facts: duplicates, blanks, bad addresses and orphaned records.
Mapping workbookOne sheet per record type, with the old field, the new field, the rule and the owner. It is the written spec for every load.
Chart of accounts and tax codesThe old chart mapped to a new Xero chart, with a tax code map that the accountant approves before any load.
Contacts and sitesMerged customers and suppliers loaded into Xero as contacts, and into simPRO as customers, sites and contacts, with the same names in both.
Open items and historyOpen invoices and bills with payments applied. History loaded after the open items, so ageing is right from the first test.
Jobs and costs to dateOpen jobs and contracts loaded with cost centres and costs to date, so margin is right from day one. Closed jobs loaded as history.
Recurring schedulesService schedules loaded with their next-visit dates and checked against a list of what is due in the first 90 days.
simPRO to Xero accounting linkAccount and tax code mapping tested on a closed job and then on a live invoice, so each invoice reaches Xero once.
Cutover runbookA timed list: freeze, final extract, load, checks, go or no-go, rollback. Each step has an owner and a pass condition.

How the data moves

  1. Source audit
  2. Mapping workbook
  3. Test load 1
  4. Test load 2 (rehearsal)
  5. Freeze and final extract
  6. Live load
  7. Go-live check
  8. First month-end in parallel

05Edge cases

The cases that break a migration are the ones that only appear in the real data. These are agreed in advance and tested on the second test load.

Table 5Edge cases and how each is handled
SituationHow it is handled
Part-paid invoiceLoaded at its original value with the payment applied, so the balance and the history are both right
Unallocated customer payment or credit noteLoaded as a prepayment or credit on the right contact, never netted off another invoice
Customer and supplier at the same companyOne contact with both roles in Xero, and two linked records in simPRO
Duplicate customersMatched by rule, listed with a recommended survivor, merged only after a person approves
Invoice number already usedOriginal number kept and a branch prefix added to the later one. The change is listed.
Supplier bill in another currencyLoaded in its own currency, with the cutover-date rate agreed with the accountant
Retention held on a projectLoaded as a retention balance on that project, not as part of the invoice
Job in progress with costs from two systemsCosts to date loaded as one opening cost line per cost centre, with the old reference kept in the notes
Bank items in transit at cutoverEach cheque and deposit loaded as an individual unreconciled item, so the first reconciliation closes
Transactions after the final extractA delta load for the freeze window, or a manual entry list that is checked off at go-live
Staff accessUsers and roles set up in simPRO and Xero before go-live and reviewed by the finance lead
RollbackThe old systems stay writable until the go-live check passes, then read-only. A written trigger list decides a rollback.

06Worked example

The tables below use one cutover with example figures. They show the shape of the checks, not a client result.

Table 6Records to move, and what arrived (example data)
RecordOld systemsMerged outTo loadLoadedDiff.
Customers2,1842221,9621,9620
Suppliers611635485480
Sites3,7301483,5823,5820
Open sales invoices31803183180
Open supplier bills20402042040
Open jobs and contracts21202122120
Closed jobs (six years)41,306041,30641,3060
Recurring service schedules486124744740

Merged out: 222 duplicate customers, 63 merged or inactive suppliers, 148 duplicate site addresses and 12 expired service schedules, each on a list signed by the finance lead.

Table 7Open customer invoices by age at the cutover date (example data, US$)
AgeOld ledgerXerosimPRODifference
Current618,402.15618,402.15618,402.150.00
1 to 30 days411,236.80411,236.80411,236.800.00
31 to 60 days298,114.45298,114.45298,114.450.00
61 to 90 days187,500.60187,500.60187,500.600.00
Over 90 days127,476.40127,476.40127,476.400.00
Total (318 invoices)1,642,730.401,642,730.401,642,730.400.00
Table 8Opening trial balance at the cutover date (example data, US$)
AccountDebitCredit
Bank, operating account412,860.35
Bank, term deposit150,000.00
Accounts receivable1,642,730.40
Retention receivable286,400.00
Stock on hand98,215.60
Fixed assets, net735,540.00
Accounts payable986,415.20
Retention payable121,750.00
Sales tax payable144,320.80
Accrued expenses205,600.00
Bank loan480,000.00
Equity (capital and retained earnings)1,387,660.35
Total3,325,746.353,325,746.35
Table 9Control accounts: old ledger against Xero (example data, US$)
AccountOld ledgerXeroDifference
Accounts receivable1,642,730.401,642,730.400.00
Accounts payable986,415.20986,415.200.00
Stock on hand98,215.6098,215.600.00
Fixed assets, net735,540.00735,540.000.00
Table 10Cutover runbook (excerpt)
StepWhenOwnerPass conditionRollback if
Freeze notice to staffTwo days beforeFinance leadEveryone has acknowledged itNot applicable
Final extract of both old systemsDay 0, after close of businessConsultantCounts match the last test load within the delta listCounts differ with no explanation
Live load into Xero and simPRODay 0 eveningConsultantRecord counts and open item totals match the extractAny total differs
Trial balance and control accountsDay 1 morningAccountantOpening trial balance equals the old ledger at cutoverDifference not explained by the end of Day 1
Test invoice, bill and paymentDay 1Finance leadEach reaches Xero once with the right codesAny posts twice or to a default account
Go or no-goDay 1, 2 PMFinance lead and consultantAll the checks above are signedAny trigger on the rollback list
Old systems set to read-onlyDay 3Finance leadArchive export opened and spot-checkedNot applicable

07How the result is checked

Three tie-outs decide whether the cutover goes ahead: record counts, open items and the trial balance. Each test load must pass them before the next step starts, and the second one is run as a full rehearsal.

Table 11Checks, before and after
CheckBeforeAfter
Record countsUnknown until something is missingEvery type counted at the source, the load and the target, with each difference explained
Customer ageingRebuilt by hand from statementsEquals the old ledger for every customer and in total
Supplier balancesChecked at the first payment runEqual to the old ledger for every supplier before go-live
Trial balanceReconciled after the eventSigned by the accountant on Day 1
Jobs in progressCosts restart at zeroCosts to date equal to the old system, per job and cost centre
StatementsHand-adjustedA statement run for ten customers matches the old statement line by line
First month-endNew and old compared by handParallel run: both closed, differences listed and cleared
AccessSet up as people askRoles reviewed and signed before go-live

08Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Table 12Scope: what a project like this covers
AreaIncluded
AuditRead-only review of the older job system, the desktop ledger and the files kept outside both, a 45-minute call, written findings and a fixed quote
Mapping and rulesThe mapping workbook, the tax code map and the cutover rules in writing, signed by the finance lead and the accountant
Test loadsTwo full loads into a trial Xero organization and a simPRO test environment, each with a written tie-out
Live cutoverThe final extract, live load, go-live checks and a rollback window
Accounting linkMapping and testing of the simPRO to Xero link on a closed job and a live invoice
Parallel month-endSupport through the first month-end with a list of differences and fixes
ArchiveAn export of the old systems to a document store, with a short index
HandoverWritten SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live
Not includedTax filing and statutory returns.
Also outside the scopeTraining of every user beyond the handover video. Building new reports in simPRO. Moving to a different accounting package after Xero. Software subscriptions (billed to you by the vendors).
Table 13Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and mappingFindings, a fixed quote, the mapping workbook and the cutover rules in writingWeeks 1 to 220%
M2 Test loadsTwo test loads with passing tie-outsWeeks 3 to 530%
M3 CutoverLive load, go-live checks signed and a rollback window closedWeeks 6 to 735%
M4 Parallel month-end and handoverFirst month-end closed, SOPs, handover video, 14 days of fixesWeek 815%

Typical scope for this kind of project: US$3,500–5,000

About 8 weeks across 4 fixed milestones. The Systems Audit (US$300, fixed) comes first and confirms the scope.

Describe what is going wrong between your job system and your books, and I'll say where I'd look first.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Audit is the right first step.

Hire me on Upwork (opens in a new tab)Hire me on Freelancer (opens in a new tab)