Reconciliation Copilot
Two end-of-day position files - one from a custodian, one from an internal book of record - should match exactly. When they don't, operations analysts spend hours finding and explaining breaks. This tool runs the comparison in rule-based code (reproducible and auditable) and uses Claude only to explain each break in plain English, with a concrete next step for the analyst.
Comparison: rule-based, field-by-fieldExplanations: Claude Haiku 4.5Output: schema-validatedRuntime: Next.js · Vercel
Custodian feed
End-of-day position file from third-party custodian
10 rows
| Symbol | Side | Qty | Price | Settle |
|---|---|---|---|---|
AAPL 037833100 | BUY | 5,000 | 184.32 | 2026-04-17 |
MSFT 594918104 | BUY | 12,000 | 421.05 | 2026-04-17 |
NVDA 67066G104 | BUY | 3,500 | 882.40 | 2026-04-17 |
GOOGL 02079K305 | SELL | 2,200 | 161.78 | 2026-04-17 |
AMZN 023135106 | BUY | 1,800 | 178.94 | 2026-04-17 |
META 30303M102 | BUY | 900 | 504.20 | 2026-04-17 |
JPM 46625H100 | BUY | 4,200 | 198.65 | 2026-04-17 |
AVGO 11135F101 | BUY | 600 | 1,345.10 | 2026-04-17 |
BRK.B 084670702 | BUY | 800 | 412.55 | 2026-04-17 |
ORCL 68389X105 | SELL | 3,000 | 124.18 | 2026-04-17 |
IBOR positions
Internal Investment Book of Record
11 rows
| Symbol | Side | Qty | Price | Settle |
|---|---|---|---|---|
AAPL 037833100 | BUY | 5,000 | 184.32 | 2026-04-17 |
MSFT 594918104 | BUY | 12,500 | 421.05 | 2026-04-17 |
NVDA 67066G104 | BUY | 3,500 | 882.04 | 2026-04-17 |
GOOGL 02079K305 | SELL | 2,200 | 161.78 | 2026-04-18 |
AMZN 023135106 | BUY | 1,800 | 178.94 | 2026-04-17 |
META 30303M102 | BUY | 900 | 504.20 | 2026-04-17 |
JPM 46625H100 | BUY | 4,200 | 198.65 | 2026-04-17 |
AVGO 11135F101 | BUY | 600 | 1,345.10 | 2026-04-17 |
BRK.B 084670702 | BUY | 800 | 412.55 | 2026-04-17 |
ORCL 68389X105 | SELL | 3,000 | 124.18 | 2026-04-17 |
TSLA 88160R101 | BUY | 1,500 | 248.30 | 2026-04-17 |
How it works
- 01Parse and normaliseBoth files arrive as structured records. In production these would be SWIFT MT940, CSV, or SFTP file drops; here they are synthetic records so the underlying logic is visible end to end.
- 02Match by trade identifierRecords are matched on symbol and trade date. Anything that exists on only one side is flagged immediately as missing. Anything on both sides moves to a field-by-field comparison.
- 03Field-by-field comparisonQuantity, price, and settlement date are compared. Prices use a tolerance band to avoid flagging rounding differences. Every break records the field, both values, and the source rows - everything an auditor would need to verify the finding.
- 04Explain with structured outputOnly the breaks are sent to Claude, alongside a strict response schema. The model must return a rationale, a suggested action, and a severity for each break - no free-form text. Cost scales with the number of breaks, not the size of the input files.
How the tool could be extended
- FX deltas for multi-currency portfolios, with tolerance bands configured per currency pair.
- Settlement calendars (T+1 vs T+2, market holiday schedules) so date drift is evaluated against the correct settlement convention.
- SWIFT MT940 / MT535 file ingestion - same downstream processing, different input format.
- Tolerance configuration per security type so equities, FX forwards, and bonds each have their own break thresholds.
- Audit trail of analyst actions per break, retained for compliance and used to refine future explanations.