Markdown Editor

Data Migration Reconciliation Report Template

Load identification, record count balance, control totals, field sampling, rejected records, defects, tolerance assessment, business validation, trend, sign-off

Управління проєктамиПовнийDAMA-DMBOK2 Revised (2024) data quality knowledge areadatamigrationreconciliationmath

Як використовувати: Use it after every mock load, dress rehearsal and the production load to prove that migrated data is complete and correct. Fill the record count table first: extracted must equal excluded plus loaded plus rejected, with zero unaccounted. The main pitfall is reporting the load tool's success counts instead of independent source and target queries.

Перегляд

Data Migration Reconciliation Report: [Load ID] for [Programme]

Evidence report for one data migration load (a mock load, a dress rehearsal or the production load). It proves that every in-scope record is accounted for, that control totals and balances agree, that sampled records match field by field after mapping, and that business owners have validated the result, and it records rejected records, defects, the tolerance assessment and sign-off. Data quality checks follow the data quality knowledge area of DAMA-DMBOK 2nd Edition Revised (March 2024); the load design comes from the Data Migration Strategy (architecture/data-migration-strategy). Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[DMR-MCK03-001]
Load ID[MCK-03]
Load type[Mock load / Dress rehearsal / Production load / Delta load]
Programme[Programme name]
Strategy reference[DMS-001 version]
Source extract takenYYYY-MM-DD hh:mm [time zone]
Target environment[Environment name, client or tenant]
Version[0.1]
Status[Draft / In review / Signed / Superseded]
Owner[@data-migration-lead]
Approvers/reviewers[@business-data-owners], [@finance-controller], [@qa-lead]
Last updatedYYYY-MM-DD
Classification[Confidential: contains record-level samples]

Approvals

RoleNameDecisionDate
Data migration lead[@name][Submit for sign-off]YYYY-MM-DD
Business data owner, customer and sales objects[@name][Accept / Accept with conditions / Reject]YYYY-MM-DD
Business data owner, supply chain objects[@name][Decision]YYYY-MM-DD
Finance controller[@name][Decision]YYYY-MM-DD
Quality assurance[@name][Decision]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]First issue after load completion
0.2YYYY-MM-DD[@name]Example: Root cause of 4 unaccounted material records added
1.0YYYY-MM-DD[@name]Example: Signed as Fail on MO-001 and MO-003, conditions DMR-C-01 to DMR-C-03; targeted MCK-04 approved by the steering group

Contents

1. Load identification

ItemValue
Load windowExample: Start YYYY-MM-DD 18:00, end YYYY-MM-DD 10:30 (16.5 h)
Planned windowExample: 20 h or less (strategy objective DMO-003)
Source systems and extract methodExample: SRC-01 legacy ERP read-only replica, extract views v3.2; SRC-02 AP spreadsheet upload
Pipeline versionExample: Migration repository tag dm-release-3.0, mapping workbook v2.4, crosswalks VM-001 to VM-018 at v2.1
Target configuration baselineExample: Configuration transport set [ID], frozen YYYY-MM-DD
Executed by[@migration-dev-1], [@migration-dev-2]
Reconciled by[@data-steward-1], [@finance-analyst] (independent of the load team)
Query scripts used[Repository path and commit]

Deviations from the planned run: Example: MO-007 price conditions were rerun once after a lock timeout; the rerun is the one reported.

2. Scope of this load

Object IDObjectIn-scope rule (from strategy)Change since previous load
MO-001 (Example)Customer masterActive, or any transaction in the last 24 monthsNone
MO-002 (Example)Vendor masterActive, or open item, or payment in the last 24 monthsNone
MO-003 (Example)Material masterNot flagged for deletion, and stock, open order or sale in the last 36 monthsNone
MO-004 (Example)Open receivable itemsOpen on cutover dateNone
MO-005 (Example)Open sales ordersNot flagged for deletionDeletion flag now read from header and line (CR-DM-007)
[MO-NNN][Object][Rule][Change]

Example: Objects MO-006 to MO-008 were also loaded and are omitted from the example rows for brevity. A real report lists every object in the load.

3. Method and tolerances

3.1 Check levels

LevelMethod in this load
L1 Record countsCount queries on the source extract, the exclusion log, the target and the exception store
L2 Control totalsSums by company code and currency on the source extract and on target reports, compared to the cent
L3 Field-level comparisonRandom sample per object (full population for objects under 5,000 records and for all open financial items) compared after applying the mapping to source values. Critical fields per object are taken from the mapping workbook (strategy section 11.2)
L4 Business validationOwners checked named records and ran day-one transactions (section 10)

3.2 Tolerances applied

Object typeUnaccountedRejectedControl totalField mismatches
Master data (Example)00.1% or lower of expectedNot applicable0 on critical fields, 0.5% or lower of field comparisons on others
Open financial items (Example)0Listed with value; 0 at production loadUnexplained variance USD 0.000
Open orders (Example)00.1% or lower of expectedUnexplained variance USD 0.000 on quantities and prices

4. Record count reconciliation

Definitions used in the table:

  • Extracted: records in the source extract for the object.
  • Excluded: records removed by the agreed in-scope rule, listed in the exclusion log.
  • Expected: extracted minus excluded.
  • Loaded: records present in the target, counted by an independent target query.
  • Rejected: records refused by validation or by the target, present in the exception store.
  • Unaccounted: expected minus loaded minus rejected. Must be zero.
Object IDExtractedExcludedExpectedLoadedRejectedUnaccountedRejection rate
MO-001 (Example)52,4004,19048,21048,1981200.025%
MO-002 (Example)9,8502,5307,3207,320000.000%
MO-003 (Example)31,6003,66027,94027,9053140.111%
MO-004 (Example)18,455018,45518,452300.016%
MO-005 (Example)3,120853,0353,035000.000%
Total (Example)115,42510,465104,960104,9104640.044%
[MO-NNN][n][n][n][n][n][n][%]

Example check: 104,910 loaded plus 46 rejected plus 4 unaccounted equals 104,960 expected, and 115,425 extracted minus 10,465 excluded equals 104,960. The overall load rate is 104,910 / 104,960 = 99.952%.

The rejection rate is rejected divided by expected:

rrej=NrejectedNextracted−Nexcludedr_{\text{rej}} = \frac{N_{\text{rejected}}}{N_{\text{extracted}} - N_{\text{excluded}}}

Example: for MO-003, 31 / 27,940 = 0.111%, which exceeds the master data tolerance of 0.1%.

Unaccounted records found: Example: the 4 MO-003 records were extracted but neither loaded nor logged as rejected. Root cause: the load tool dropped records whose description contained a control character without writing an error. Defect DEF-DM-031 (section 8).

5. Control totals and balances

Control IDObjectMeasureSource valueTarget valueDifferenceExplained byUnexplained
CT-001 (Example)MO-004Open receivables, company 1000, USD14,862,407.3514,859,912.102,495.253 rejected items: 1,250.00 + 845.25 + 400.00 = 2,495.250.00
CT-002 (Example)MO-001Sum of credit limits of in-scope customers, USD412,350,000.00412,310,000.0040,000.00Credit limits of the 12 rejected customers0.00
CT-003 (Example)MO-004Count of open items by ageing bucket over 90 days1,2041,2040Not applicable0
CT-004 (Example)MO-005Open order value, USD6,918,442.806,918,442.800.00Not applicable0.00
[CT-NNN][Object][Measure][Value][Value][Difference][Explanation][Value]

Rules applied:

  • Reconcile by company, currency and, for ledgers, by account; a match of grand totals alone is not sufficient.
  • Compare absolute differences per line before netting.
  • Explain each difference by listing the records that cause it; the sum of the listed records must equal the difference exactly.
  • For the general ledger, confirm that debits equal credits in the target opening balance journal and that each balance-sheet account agrees with the legacy trial balance at cutover.

6. Field-level comparison

Object IDPopulationSample sizeFields compared per recordField comparisonsMismatchesMismatch rateCritical-field mismatches
MO-001 (Example)48,198500189,00030.033%3
MO-002 (Example)7,320300164,80000.000%0
MO-003 (Example)27,9055002211,00000.000%0
MO-004 (Example)18,452Full population9166,06800.000%0
MO-005 (Example)3,035Full population1236,42000.000%0
[MO-NNN][n][n][n][n][n][%][n]

Example: for MO-001, 500 records times 18 fields gives 9,000 comparisons; 3 mismatches give 3 / 9,000 = 0.033%. All three were in the tax number field, where the source held spaces that the mapping should remove (DEF-DM-028). The tax number is a critical field for MO-001 because invoicing cannot run without it (strategy PRF-001), so the 3 mismatches count against the zero tolerance on critical fields even though the overall rate is low. For MO-004, 18,452 records times 9 fields gives 166,068 comparisons.

Confidence from a clean sample: with nn sampled records and no mismatched records, the approximate 95% upper bound on the record mismatch rate is 3/n3/n (the rule of three). Example: MO-002 with 300 clean records bounds the rate below about 1.0%; MO-003 with 500 clean records bounds it below about 0.6%. If that bound is too wide for the business, increase the sample or compare the full population.

Sampling method: Example: simple random sample drawn by [@data-steward-1] with a recorded seed, stratified by company code.

7. Rejected and exception records

Exception IDObjectRecordsReasonRoot cause categoryFixOwnerFix by
EXC-001 (Example)MO-00112Tax number fails target format checkSource data qualityCorrect at source (rules DQ-003 and DQ-005)[@ar-lead]Before production extract
EXC-002 (Example)MO-00331Unit of measure not in crosswalk VM-012Mapping gapAdd 6 legacy values to VM-012[@supply-chain-lead]Mapping v2.5
EXC-003 (Example)MO-0043Customer rejected in MO-001, so the item has no customerDependency on EXC-001Resolves with EXC-001[@ar-lead]Before production extract
[EXC-NNN][Object][n][Reason][Source data / Mapping / Target configuration / Tool][Fix][@owner][Date]

Example: the 46 rejected records in section 4 are fully listed here: 12 + 31 + 3 = 46.

8. Defects

Defect IDTitleObjectSeverityFound by checkStatusOwnerTarget fix
DEF-DM-028 (Example)Spaces not removed from tax numbersMO-001MediumL3Fixed in mapping v2.5[@migration-dev-1]MCK-04 or production
DEF-DM-031 (Example)Load tool drops records with control characters without errorMO-003CriticalL1Open; workaround: strip control characters in transformation[@migration-dev-2]Before production
DEF-DM-032 (Example)Price condition load lock timeout at high concurrencyMO-007LowRun logFixed: thread count reduced from 8 to 4[@migration-dev-2]Done
[DEF-DM-NNN][Title][Object][Critical / High / Medium / Low][L1 to L4 / Log][Status][@owner][Load]

9. Tolerance assessment

Object IDUnaccountedRejected vs toleranceControl totalsField levelResultConditions
MO-001 (Example)0, pass0.025% vs 0.1%, passCT-002 unexplained 0, pass3 critical (tax number) vs 0, fail; others passFailDMR-C-03
MO-002 (Example)0, pass0.000%, passNot applicable0, passPassNone
MO-003 (Example)4, fail0.111% vs 0.1%, failNot applicable0, passFailDMR-C-01
MO-004 (Example)0, pass3 items listed with value, pass for a mockCT-001 unexplained 0, pass0, passPass with conditionsDMR-C-02
MO-005 (Example)0, pass0.000%, passCT-004 unexplained 0, pass0, passPassNone
[MO-NNN][Result][Result][Result][Result][Pass / Pass with conditions / Fail][IDs]

Conditions:

Condition IDConditionOwnerDue
DMR-C-01 (Example)Close DEF-DM-031 and extend VM-012; prove in a rerun of MO-003 with zero unaccounted records and a rejection rate of 0.1% or lower[@data-migration-lead]YYYY-MM-DD, before production extract
DMR-C-02 (Example)Clear EXC-001 and EXC-003 at source so that zero open items are rejected at the production load[@ar-lead]YYYY-MM-DD
DMR-C-03 (Example)Deploy the DEF-DM-028 fix (mapping v2.5) and prove it in MCK-04 with zero critical-field mismatches on a fresh 500-record MO-001 sample[@data-migration-lead]YYYY-MM-DD, in MCK-04
[DMR-C-NN][Condition][@owner][Date]

10. Business validation

Check IDObjectCheck performedRecords or transactionsResultValidated by
BV-001 (Example)MO-001Top 50 customers by revenue: addresses, payment terms, credit limits, contacts50Passed[@sales-ops-lead]
BV-002 (Example)MO-004Customer statements for 20 customers agree with legacy statements at cutover20Passed[@ar-lead]
BV-003 (Example)MO-005Deliver and invoice 10 migrated open orders end to end109 passed; 1 price difference traced to MO-007 validity date[@order-mgmt-lead]
BV-004 (Example)MO-006Trial balance in target agrees with legacy trial balance by account1,140 accountsPassed[@finance-controller]
[BV-NNN][Object][Check][n][Result][@owner]

11. Trend across loads

Load IDExpected recordsRejectedRejection rateUnaccountedLoad durationOpen critical defects
MCK-01 (Example)104,7001,2841.23%5731.5 h6
MCK-02 (Example)104,8802970.28%022.0 h2
MCK-03 (Example)104,960460.044%416.5 h1
[Load][n][n][%][n][h][n]

Example: rejection rate fell from 1,284 / 104,700 = 1.23% to 297 / 104,880 = 0.28% and then to 46 / 104,960 = 0.044%. Load duration is now inside the 20-hour objective. The new unaccounted records in MCK-03 come from a source data pattern not present in earlier extracts, which shows why every mock needs a fresh full extract.

12. Conclusion and sign-off

Overall result: Example: Fail. The MCK-03 exit criteria in the strategy (DMS-001 section 10: all objects within tolerance) are not met. MO-001 fails on 3 critical-field mismatches (tax number, DEF-DM-028) and MO-003 fails on 4 unaccounted records and a rejection rate of 0.111% (DEF-DM-031, EXC-002). MO-002 and MO-005 pass, MO-004 passes with condition DMR-C-02, and the 16.5-hour duration meets DMO-003. Root causes are known and fixes are in progress.

Recommendation: Example: Per DMS-001 section 10, run MCK-04 limited to MO-001 and MO-003 and the objects that depend on them (MO-004, MO-005 and MO-007), from a fresh full extract, to close DMR-C-01 and DMR-C-03; carry MO-002, MO-006 and MO-008 forward from MCK-03. Steering group approval of the reduced scope is required. Cutover planning continues on MCK-03 timings, and the timed steps for the rerun objects are re-measured in MCK-04.

Input to go or no-go: [For the production load: state whether data migration supports the go decision, with reference to the Go-Live Readiness Review (project/go-live-readiness-review) and the Cutover Plan (project/cutover-plan).]

Sign-off is recorded in the Approvals table. A business data owner who rejects must give the reason and the condition for acceptance.

13. Glossary and references

13.1 Glossary

TermMeaning
Expected recordsExtracted records minus those excluded by the agreed in-scope rule
Unaccounted recordAn expected record that is neither loaded nor rejected; always a defect
Control totalA sum of an amount or quantity compared between source and target
Explained differenceA difference fully accounted for by listed records or an agreed rounding rule
Rule of threeApproximation that zero events in n trials gives a 95% upper bound of about 3/n on the event rate
Pass with conditionsResult accepted only if named conditions are met by a named date

13.2 References

ReferenceVersion or date checkedUse
Data Migration Strategy (architecture/data-migration-strategy), [DMS-001][Version]Objects, rules, tolerances
DAMA-DMBOK: Data Management Body of Knowledge, 2nd Edition Revised, DAMA International, dama.orgRevised edition released March 2024; checked 2026-10-23Data quality knowledge area structure
Hanley, J. A. and Lippman-Hand, A., "If nothing goes wrong, is everything all right? Interpreting zero numerators", JAMA 249(13), 1983Published articleRule of three for clean samples
[Defect tracker, exception store, query repository][Location]Evidence

Standard and licence note

Structure aligned with common data migration practice in packaged application programmes and with the data quality knowledge area of DAMA-DMBOK 2nd Edition Revised (DAMA International, March 2024). DMBOK is a copyrighted body of knowledge: only knowledge area names are used and no text, definitions, diagrams or tables are reproduced. This template is original text written for this collection; all tolerances, numbers and results are examples, not normative values. Check the current official versions before use. Template licence: MIT.

Схожі шаблони