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.
| System | What it does for the business |
|---|---|
| Archived exports | Read-only exports of the old job system and ledger, taken at the cutover date. |
| New job system | Customers, sites, jobs, equipment, schedules and invoices as loaded and as used since go-live. |
| Xero | Opening balances, open items, history and live postings since go-live. |
| Tie-out workbook | One tab per area with source, target, difference and status. |
| Exceptions register | Every difference with a cause, an owner, a disposition and a date. |
| Finance lead, accountant and owner | Review and sign the pack. |
How the data moves
- Archived exports
- Re-performed counts and totals
- Tie-out workbook
- Differences classified
- Corrections or accepted
- Sign-off pack
- Archive kept
Problem
What the owner sees
- A migration that everyone believes was fine but nobody can prove
- An accountant who will not sign the first year-end on trust
- A missing customer or job found months later
- 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.
| Everyday situation | What goes wrong |
|---|---|
| Counts that tie in total but not by branch | A branch is short and another is over |
| Open items that tie in total but not by customer | Statements are wrong for named customers |
| Jobs in progress at cutover | Costs to date differ from the old system |
| Equipment loaded twice or not at all | Service history disagrees with the field |
| Postings since go-live | Differences appear only after live use |
| Accepted differences with no record | Nobody remembers why a difference was accepted |
Approach
Four steps, in this order. Each one ends with a result that is checked.
- LookConfirm the cutover date, the archived exports and what the migration team signed. Nothing is changed.
- Agree the rulesWhich areas are re-performed, the tolerance for each, who signs and what counts as accepted are written down.
- Re-performCounts, totals and spot checks are re-run from the archived exports with independent queries and compared with the live systems.
- Close and signEach difference is corrected or accepted with a reason. The pack is issued with a sign-off page.
| Item | Example setting |
|---|---|
| Cutover reference | The archived export timestamp and the opening trial balance date |
| Tolerance | Zero for counts and money. Differences are never netted against each other. |
| Areas covered | Customers, suppliers, sites, equipment, open invoices, open bills, jobs in progress, closed job history, schedules, bank and opening trial balance |
| Sampling | 50 records per area by hand, chosen by a stated rule, plus every record over 10,000.00 |
| Post go-live | Live postings for 60 days compared with job activity |
| Difference types | Error, timing, accepted by design, accepted with approval |
| Sign-off | Finance lead for the data, accountant for the balances, owner for the pack |
| Retention | The 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.
| Area | Source | Compared with | Measure |
|---|---|---|---|
| Customers and suppliers | Archived export | New job system and Xero | Count, tax ID, balance |
| Sites and equipment | Archived export | New job system | Count by customer and branch |
| Open invoices and bills | Archived ageing | Xero ageing at cutover | Value and count by contact |
| Jobs in progress | Archived job cost report | New job costs to date | Cost by job and cost centre |
| Closed job history | Archived job list | New job system | Count and value by year and branch |
| Recurring schedules | Archived schedule list | New schedules | Next visit date and frequency |
| Bank and opening balances | Archived trial balance | Xero opening balances | Account by account |
| Live postings, 60 days | New job system invoices | Xero invoices | Count and value by week |
| Class | Meaning | What closes it |
|---|---|---|
| Error | The record or amount is wrong in the new system | A correction with the entry reference |
| Timing | The difference is explained by a date after the cutover | The dated explanation |
| Accepted by design | The migration rules said this would differ | The rule number |
| Accepted with approval | A known difference the finance lead accepts | A signed note with the reason |
Edge cases handled
Agreed in advance with the finance lead and the operations manager, and tested before go-live.
| Situation | How it is handled |
|---|---|
| A customer merged during the migration | Compared on the merged record with the list of source ids |
| An invoice renumbered to avoid a clash | Matched on the stored original number |
| A job closed in the old system on the cutover day | Compared on the final export, with a timing note if it moved |
| Opening balance differs by a cent | Reported and listed, never netted |
| Equipment replaced since go-live | Compared at the cutover date, not today |
| Archived export missing a table | Raised before any comparison and the export re-taken |
| Foreign currency balances | Compared in the original currency and in the ledger currency |
| Difference found in the original migration | Corrected 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.
| Area | Source count | New count | Differences | Status |
|---|---|---|---|---|
| Customers | 1,904 | 1,904 | 0 | Tied |
| Suppliers | 548 | 548 | 0 | Tied |
| Sites | 3,582 | 3,582 | 0 | Tied |
| Equipment | 4,782 | 4,781 | 1 | Error, corrected |
| Open invoices | 318 | 318 | 0 | Tied |
| Open bills | 204 | 204 | 0 | Tied |
| Jobs in progress | 212 | 212 | 0 | Tied |
| Bucket | Archived ageing | Xero ageing | Difference |
|---|---|---|---|
| Current | 412,300.00 | 412,300.00 | 0.00 |
| 1 to 30 days | 188,250.40 | 188,250.40 | 0.00 |
| 31 to 60 days | 74,610.00 | 74,610.00 | 0.00 |
| Over 60 days | 39,220.75 | 39,220.75 | 0.00 |
| Total | 714,381.15 | 714,381.15 | 0.00 |
| Ref | Area | Difference | Class | Disposition |
|---|---|---|---|---|
| X-014 | Equipment | One serial missing at a site | Error | Added, entry logged |
| X-021 | Jobs in progress | Cost differs by 0.40 on one job | Accepted with approval | Rounding on a supplier line |
| X-027 | Open bills | One bill dated a day later | Timing | Posted on the next business day |
| X-033 | Schedules | One schedule starts a week later | Accepted by design | Rule 12: next visit on the new calendar |
| Section | Content |
|---|---|
| 1 | Scope, cutover reference and sign-off page |
| 2 | Tie-out summary and the area workbooks |
| 3 | Exceptions register with dispositions |
| 4 | Spot checks drawn and checked, with the selection rule |
| 5 | Live postings comparison for 60 days |
| 6 | Open 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.
| Signal | Threshold | Alert goes to | First action |
|---|---|---|---|
| Weekly live comparison | Any difference in count or value between job system and Xero invoices | Finance lead | Cause found; entry added to the register |
| Open exceptions | Any item older than 14 days | Finance lead | Owner named, due date set |
| Closed item reopened | Any | Finance lead and Manaz Afzal | Reason recorded |
| Archive access | Any failed export or missing file | Manaz Afzal | Export re-taken and re-hashed |
| Sign-off outstanding | 7 days after issue | Owner | Reminder 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.
| ID | Check | Method | PASS when | FAIL when |
|---|---|---|---|---|
| T1 | Independent counts | Counts re-run with different queries | Equal to the migration team’s counts | Any difference unexplained |
| T2 | Ageing by contact | Every contact with a balance | Equal to the cent | Any difference |
| T3 | Jobs in progress | Cost by job and cost centre | Equal to the cent | Any difference |
| T4 | Spot check of 50 | Fifty records per area by the stated rule | Every field equals the source | More than two with a wrong field |
| T5 | Large items | Every record over 10,000.00 | All equal to the source | Any difference |
| T6 | Opening balances | Account by account | Equal to the archived trial balance | Any difference |
| T7 | Post go-live | Sixty days compared by week | Zero unexplained | Any unexplained difference |
| T8 | Exceptions | Register reviewed | Every item has a class and a disposition | Any 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.
| Step | Owner | Gate to continue | Rollback trigger |
|---|---|---|---|
| Review differences | Finance lead | Every difference classified | Any unclassified difference |
| Post corrections | Finance lead | Entry reference recorded in the register | A correction that touches a closed period |
| Re-run affected checks | Manaz Afzal | Checks equal after the correction | Any new difference |
| Accountant review | Accountant | Opening balances and ageing accepted | A balance not accepted |
| Issue the pack | Manaz Afzal | All tests PASS or accepted | Any open item without an owner |
| Reverse a correction | Finance lead | Reversing entry from the log | Decision 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.
| Area | Included |
|---|---|
| Systems Audit | Read-only review of the migration records, the archived exports and the live systems, a 45-minute call, written findings and a fixed quote |
| Reconciliation workbook | One tab per area with source, target, difference and status |
| Independent counts and totals | Re-performed from the archived exports |
| Spot checks and large items | 50 records per area plus all items over 10,000.00 |
| Live postings comparison | 60 days compared by week |
| Exceptions register | Classified, owned and dispositioned |
| Sign-off pack | One document with the sign-off page |
| Handover | Written SOPs, a recorded handover video and files you own, plus 14 days of fixes after go-live |
| Not included | Tax filing and statutory returns. |
| Also outside the scope | Re-doing the migration. Statutory audit work. Changing accounting policies. Software subscriptions (billed to you by the vendors). |
| Milestone | Deliverable | Timing | Share |
|---|---|---|---|
| M1 Audit and rules | Findings, fixed quote, areas and tolerances in writing | Week 1 | 25% |
| M2 Re-performance | Counts, totals, spot checks and large items compared | Weeks 2 to 3 | 40% |
| M3 Close and sign | Differences closed or accepted, pack issued | Week 3 to 4 | 25% |
| M4 Handover | SOPs, handover video, 14 days of fixes | Week 4 | 10% |
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.