D365Forge

Catalogue › Integration and Data › reconciliation

Reconciliation

Department
Integration and Data
Stages
Implement, Prepare, Operate
Modules
All
Status
reviewed
Copilot Cowork
Integration and Data plugin for Copilot Cowork, or this skill on its own: Download SKILL.md
Claude Code
/plugin install integration-and-data@d365forge
Licence
CC BY 4.0, by Simon Foote, Robert Peledie

Reconciliation is how a migration earns trust. Without it, the first week of go-live is spent arguing about whether a missing opportunity was ever there. Projects go wrong by reconciling only total row counts, which hide offsetting errors, by agreeing tolerances after seeing the results, and by letting the project team sign off on data it does not own.

Integrations need the same discipline on a recurring basis. An interface that has quietly dropped one message a day for a month is a reconciliation failure, not a monitoring one.

When to use

Not this skill: integration-and-data:mock-migrations for running the loads, integration-and-data:data-mapping-and-cleansing for fixing the rules behind a variance, testing-quality:user-acceptance-testing for testing processes rather than data.

Questions to ask first

  1. Who is the business data owner for each table, with authority to accept it? Sign-off by the project team is not sign-off.
  2. What tolerance is acceptable per table and measure? Tolerances agreed after the results are known invite argument.
  3. What figures can the source produce reliably, and as at what time? Reconciling against a moving source makes variances impossible to explain.
  4. Which records carry financial or contractual weight? Those need exact totals, not samples.
  5. Is this a one-off migration or an ongoing integration? Integrations need automated recurring checks, not a single report.

Approach

Work in four layers, and script every check so it runs identically after each mock and the production load.

  1. Completeness. Count rows per table at every stage: extracted, transformed, rejected, deliberately excluded and loaded. Extracted must equal loaded plus rejected plus excluded, so every row is accounted for. Break counts down by meaningful slices (state, status reason, owner, business unit, source system, record type), because a correct total can hide two errors that cancel out.
  2. Value accuracy. Compare control totals on money and quantity columns, such as open pipeline value, order and contract values, entitlement terms and stock quantities, by currency and by status. Compare key text columns between staging and target with checksums where the tooling allows. Check dates carefully: Dataverse stores date and time values in UTC and displays them in the user's time zone, so a date-only value loaded into a user-local column can appear a day out. Confirm each date column's behaviour against the mapping.
  3. Integrity. Confirm there are no orphaned children, that lookups point to the right parents, that closed records carry the right status reason, that owners match the mapping, and that attachments exist and open.
  4. Business sample review. Business users open a sample of records in the app against a short checklist. Choose the sample deliberately: largest customers, oldest records, records with many children, merged duplicates, and anything that caused a defect in an earlier mock. Agree the sample size with the data owner.

Query the target through the Dataverse Web API, FetchXML aggregates or the read-only TDS endpoint rather than counting rows in views. Aggregate queries have row limits on large tables, so check current Microsoft Learn documentation and count in partitions where needed.

Every variance gets a row in an exceptions log with root cause, decision (fix and re-run, or accept) and approver. Accepted variances need the data owner's name against them.

Sign-off happens per table. The data owner signs a short statement that the data is accepted, listing accepted exceptions. These statements go into the go/no-go evidence pack.

For integrations, agree a small set of daily or weekly counts and totals between Dataverse and the other system, automate them, and alert on breaches. Make them part of the support model.

Outputs

Scale notes

SMB

Counts by table and status, a few control totals and a business user clicking through a chosen sample is usually enough. The consultant prepares it and the customer's owner signs. Do not skip written sign-off, even if it is an email, because it settles questions about missing data after go-live.

Enterprise

Reconciliation is scripted, runs automatically after every mock and the production load, and reports against tolerances fixed in the mock plan. Each business data owner signs per table, finance or internal audit may require evidence for financial records, and reconciliation status is a formal go/no-go criterion. Recurring integration checks feed operational monitoring and service reporting.

Hand-offs

Sources

references/sources.md in this skill lists the outside authorities for the questions here, what each is authoritative for, and what you may do with it. Check the current Microsoft Learn documentation before stating how a feature behaves, because Dynamics 365 changes monthly, and cite what you used.

Never

Sources for this skill

Dataverse developer documentation

Requests limits and allocations

UK GDPR guidance and resources

Credit

This skill was created by Simon Foote and Robert Peledie as part of D365Forge, licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Credit them when you share or adapt it; see https://github.com/SimonFoote-greensparx/D365Forge/blob/main/NOTICE.md.