Work snippetVerification

Post-migration reconciliation and audit pack, for sign-off

How I would approach an independent check after a migration for a three-branch contractor: counts, ageing, jobs in progress and balances re-performed from the archived exports, every difference classified, and one pack for the accountant and owner to sign.

Work snippet with example figures.

Area
Verification
Tools
simPRO · Xero · Archived exports
Typical scope
US$1,500–2,800
Timeline
About 4 weeks · 4 fixed milestones

Context and systems map

A three-branch commercial contractor that moved to a new job system and Xero some weeks ago. The migration team has gone, the old systems are read-only, and the finance lead needs evidence, in a form the accountant and the owner can sign, that nothing was lost and nothing was doubled.

The systems in play

In the example an independent reconciliation is run against the old exports and the new systems, every difference is classified and closed or accepted with a reason, and the result is one pack with a sign-off page.

Systems map: who uses what
SystemWhat it does for the business
Archived exportsRead-only exports of the old job system and ledger, taken at the cutover date.
New job systemCustomers, sites, jobs, equipment, schedules and invoices as loaded and as used since go-live.
XeroOpening balances, open items, history and live postings since go-live.
Tie-out workbookOne tab per area with source, target, difference and status.
Exceptions registerEvery difference with a cause, an owner, a disposition and a date.
Finance lead, accountant and ownerReview and sign the pack.

How the data moves

  1. Archived exports
  2. Re-performed counts and totals
  3. Tie-out workbook
  4. Differences classified
  5. Corrections or accepted
  6. Sign-off pack
  7. Archive kept

Problem

What the owner sees

  1. A migration that everyone believes was fine but nobody can prove
  2. An accountant who will not sign the first year-end on trust
  3. A missing customer or job found months later
  4. Old systems switched off with no way to check a question

A migration is usually checked by the people who did it. A second, independent pass uses different queries against the same archived exports, so errors in the first pass do not repeat. The result is not a promise that nothing went wrong; it is a list of what was checked, what differed and what was done about each difference.

Where the drift starts
Everyday situationWhat goes wrong
Counts that tie in total but not by branchA branch is short and another is over
Open items that tie in total but not by customerStatements are wrong for named customers
Jobs in progress at cutoverCosts to date differ from the old system
Equipment loaded twice or not at allService history disagrees with the field
Postings since go-liveDifferences appear only after live use
Accepted differences with no recordNobody remembers why a difference was accepted

Approach

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

  1. LookConfirm the cutover date, the archived exports and what the migration team signed. Nothing is changed.
  2. Agree the rulesWhich areas are re-performed, the tolerance for each, who signs and what counts as accepted are written down.
  3. Re-performCounts, totals and spot checks are re-run from the archived exports with independent queries and compared with the live systems.
  4. Close and signEach difference is corrected or accepted with a reason. The pack is issued with a sign-off page.
Rules agreed in writing (example settings)
ItemExample setting
Cutover referenceThe archived export timestamp and the opening trial balance date
ToleranceZero for counts and money. Differences are never netted against each other.
Areas coveredCustomers, suppliers, sites, equipment, open invoices, open bills, jobs in progress, closed job history, schedules, bank and opening trial balance
Sampling50 records per area by hand, chosen by a stated rule, plus every record over 10,000.00
Post go-liveLive postings for 60 days compared with job activity
Difference typesError, timing, accepted by design, accepted with approval
Sign-offFinance lead for the data, accountant for the balances, owner for the pack
RetentionThe pack and the exports are kept together for seven years

Flow and data mapping

The first table is the list of areas re-performed and what each is compared with. The second defines how each difference is classified.

Areas re-performed and the comparison used
AreaSourceCompared withMeasure
Customers and suppliersArchived exportNew job system and XeroCount, tax ID, balance
Sites and equipmentArchived exportNew job systemCount by customer and branch
Open invoices and billsArchived ageingXero ageing at cutoverValue and count by contact
Jobs in progressArchived job cost reportNew job costs to dateCost by job and cost centre
Closed job historyArchived job listNew job systemCount and value by year and branch
Recurring schedulesArchived schedule listNew schedulesNext visit date and frequency
Bank and opening balancesArchived trial balanceXero opening balancesAccount by account
Live postings, 60 daysNew job system invoicesXero invoicesCount and value by week
Difference classification and what it needs
ClassMeaningWhat closes it
ErrorThe record or amount is wrong in the new systemA correction with the entry reference
TimingThe difference is explained by a date after the cutoverThe dated explanation
Accepted by designThe migration rules said this would differThe rule number
Accepted with approvalA known difference the finance lead acceptsA signed note with the reason

Edge cases handled

Agreed in advance with the finance lead and the operations manager, and tested before go-live.

Edge cases and how each is handled
SituationHow it is handled
A customer merged during the migrationCompared on the merged record with the list of source ids
An invoice renumbered to avoid a clashMatched on the stored original number
A job closed in the old system on the cutover dayCompared on the final export, with a timing note if it moved
Opening balance differs by a centReported and listed, never netted
Equipment replaced since go-liveCompared at the cutover date, not today
Archived export missing a tableRaised before any comparison and the export re-taken
Foreign currency balancesCompared in the original currency and in the ledger currency
Difference found in the original migrationCorrected through a journal or an edit with a log entry, never silently

Worked example

The tables below show the pack for one example business of three branches. They show the shape of the checks, not a client result.

Tie-out summary (example figures)
AreaSource countNew countDifferencesStatus
Customers1,9041,9040Tied
Suppliers5485480Tied
Sites3,5823,5820Tied
Equipment4,7824,7811Error, corrected
Open invoices3183180Tied
Open bills2042040Tied
Jobs in progress2122120Tied
Open invoices by ageing bucket at the cutover date (example figures, US$)
BucketArchived ageingXero ageingDifference
Current412,300.00412,300.000.00
1 to 30 days188,250.40188,250.400.00
31 to 60 days74,610.0074,610.000.00
Over 60 days39,220.7539,220.750.00
Total714,381.15714,381.150.00
Exceptions register, extract (example data)
RefAreaDifferenceClassDisposition
X-014EquipmentOne serial missing at a siteErrorAdded, entry logged
X-021Jobs in progressCost differs by 0.40 on one jobAccepted with approvalRounding on a supplier line
X-027Open billsOne bill dated a day laterTimingPosted on the next business day
X-033SchedulesOne schedule starts a week laterAccepted by designRule 12: next visit on the new calendar
Contents of the pack (example settings)
SectionContent
1Scope, cutover reference and sign-off page
2Tie-out summary and the area workbooks
3Exceptions register with dispositions
4Spot checks drawn and checked, with the selection rule
5Live postings comparison for 60 days
6Open items after the review and the plan to close them

Monitoring and alerting

After the pack is issued the same comparisons keep running on a small scale for 60 days. A difference found later is added to the register, not fixed silently.

What is watched, and who hears about it
SignalThresholdAlert goes toFirst action
Weekly live comparisonAny difference in count or value between job system and Xero invoicesFinance leadCause found; entry added to the register
Open exceptionsAny item older than 14 daysFinance leadOwner named, due date set
Closed item reopenedAnyFinance lead and Manaz AfzalReason recorded
Archive accessAny failed export or missing fileManaz AfzalExport re-taken and re-hashed
Sign-off outstanding7 days after issueOwnerReminder to the signatory

Test plan

Every check has a written pass condition and a written fail condition before it is run. A FAIL stops the next step until it is cleared and re-run.

Test plan with PASS and FAIL conditions
IDCheckMethodPASS whenFAIL when
T1Independent countsCounts re-run with different queriesEqual to the migration team’s countsAny difference unexplained
T2Ageing by contactEvery contact with a balanceEqual to the centAny difference
T3Jobs in progressCost by job and cost centreEqual to the centAny difference
T4Spot check of 50Fifty records per area by the stated ruleEvery field equals the sourceMore than two with a wrong field
T5Large itemsEvery record over 10,000.00All equal to the sourceAny difference
T6Opening balancesAccount by accountEqual to the archived trial balanceAny difference
T7Post go-liveSixty days compared by weekZero unexplainedAny unexplained difference
T8ExceptionsRegister reviewedEvery item has a class and a dispositionAny open item with no owner

Corrections and sign-off

Corrections are made through the normal tools, never by rewriting history, and each one is logged so it can be reviewed or reversed.

Correction and sign-off steps
StepOwnerGate to continueRollback trigger
Review differencesFinance leadEvery difference classifiedAny unclassified difference
Post correctionsFinance leadEntry reference recorded in the registerA correction that touches a closed period
Re-run affected checksManaz AfzalChecks equal after the correctionAny new difference
Accountant reviewAccountantOpening balances and ageing acceptedA balance not accepted
Issue the packManaz AfzalAll tests PASS or acceptedAny open item without an owner
Reverse a correctionFinance leadReversing entry from the logDecision recorded with the reason

Scope and milestones

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

Scope: what a project like this covers
AreaIncluded
Systems AuditRead-only review of the migration records, the archived exports and the live systems, a 45-minute call, written findings and a fixed quote
Reconciliation workbookOne tab per area with source, target, difference and status
Independent counts and totalsRe-performed from the archived exports
Spot checks and large items50 records per area plus all items over 10,000.00
Live postings comparison60 days compared by week
Exceptions registerClassified, owned and dispositioned
Sign-off packOne document with the sign-off page
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 scopeRe-doing the migration. Statutory audit work. Changing accounting policies. Software subscriptions (billed to you by the vendors).
Fixed milestones
MilestoneDeliverableTimingShare
M1 Audit and rulesFindings, fixed quote, areas and tolerances in writingWeek 125%
M2 Re-performanceCounts, totals, spot checks and large items comparedWeeks 2 to 340%
M3 Close and signDifferences closed or accepted, pack issuedWeek 3 to 425%
M4 HandoverSOPs, handover video, 14 days of fixesWeek 410%

Typical scope for this kind of project: US$1,500–2,800

About 4 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 will say where I would 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)