Reconcile two datasets
Reconciles two datasets that should agree, such as bank versus ledger or CRM versus billing, by matching records, listing mismatches and explaining likely causes. Use for month-end checks.
Reconciliation proves that two sources describe the same reality, and explains every difference that remains. The differences are usually ordinary: timing (an item recorded in one period in one system and the next period in the other), fees and charges recorded on one side only, currency conversion and rounding, duplicates, sign or debit-credit errors, transposed digits, partial payments, and several items batched into one entry. A useful reconciliation ties the totals, so that total A minus total B equals the sum of the explained differences plus a clearly stated unexplained remainder.
Reconcile these datasets:
Only if [MATCH_KEYS] is given: Match on:
- Profile each dataset: row count, total of each amount column, date range, and duplicates on the candidate key.
- Normalise before matching, and list what you changed: trim and case-fold text keys, parse dates, align sign conventions (debit and credit, refunds), currencies and decimal places.
- If no keys were given, propose them from the columns and explain the choice.
- Match in passes, from strict to loose, and record which pass matched each pair: a. exact key match; b. same amount and date within a few days (say how many); c. same amount with a similar reference or description; d. one-to-many or many-to-one, where several records on one side sum exactly to one record on the other.
- Classify every record: matched, matched with differences (say which fields differ), only in A, only in B, or duplicate.
- For each difference, give the likely cause with the evidence (for example "difference of 270 is divisible by 9, suggesting transposed digits", or "dated 31 March in A and 1 April in B: timing").
- Tie out: total A minus total B, broken down into explained differences and the unexplained remainder.
- Every number comes from the data provided; show your sums so they can be checked.
- Treat loose matches as proposals. Mark each with its pass and confidence; never force a match to make totals tie.
- Do not adjust or "correct" any record; report what would need to change and in which system.
- If either dataset has more than about 200 rows, or is truncated, do not attempt to match it by eye: reconcile the sample shown, say so, and provide a pandas script that performs the same passes and produces the same tables.
- If the datasets have no plausible common key or cover different periods, say so before matching and ask how to proceed.
Summary
A table: | A | B | difference | for row count and each amount total, then one line on how much of the difference is explained.
Matching approach
Normalisations, keys and the passes used, with counts matched per pass.
Matched with differences
A table: A record | B record | field | A value | B value | likely cause.
Only in A
A table of records with a likely cause for each.
Only in B
A table of records with a likely cause for each.
Likely causes
Total A minus total B broken into causes, ending with the unexplained remainder.
Next steps
Bullets: what to check or correct, in which system, in order of amount.
2 required values still a placeholder; the assistant will ask for them.
details
- kind
- Prompt: a task you run by name to get one finished thing back
- domain
- Data analysis
- category
- Data exploration
- level
- Intermediate
- made for
- Data analyst, Financial analyst, Operations, Business analyst
- risk
- read-only
- version
- v1.0.0 · experimental
- reviewed
- 2026-10-02
- works in
- Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Antigravity, OpenCode, Windsurf, Zed, Continue, AGENTS.md, ChatGPT, claude.ai
use in
npx @hermes-hq/hodios install reconcile-datasets --target claude-codenpx skills add hermes-hq/hodios-dist --skill reconcile-datasets -a claude-codeclaude plugin marketplace add hermes-hq/hodios-distclaude plugin install hodios-data-analysis@hodiosThe plugin brings every entry in this domain at once.
pairs well with
All of Data explorationWrite a dataframe transformation
Writes pandas or polars code for a described transformation with built-in checks on row counts, nulls, key uniqueness and join cardinality. Use when reshaping, joining or aggregating data.
write-dataframe-transformationExtract tables from a PDF
Extracts tables from PDF or scanned text into clean CSV, Markdown or JSON, keeps values exactly as printed, flags likely OCR errors and validates totals against the source. Use before analysis.
extract-tables-from-pdfAnalyse an employee engagement survey
Analyses an employee engagement survey with group scores under minimum-group-size privacy rules, eNPS, comment themes and three priorities to act on. Use after an engagement or pulse survey closes.
analyze-employee-surveyAnalyse location data
Analyses location data for stores, customers or deliveries to find catchments, density and distance patterns, with the method, code and mapping guidance. Use for site, coverage or delivery questions.
analyze-location-dataCompare marketing attribution models
Compares last-click, first-click, linear, position-based and data-driven attribution on supplied channel data and explains what each implies for budget. Use before moving marketing spend.
analyze-marketing-attributionAnalyse sales performance
Analyses sales data by product, customer, region and time to find what drives revenue, seasonality, best and worst performers, and the actions worth taking. Use for a sales performance review.
analyze-sales-data