CBR Data Return Validator

Validates an aggregate correspondent-banking data return (a bank's or money transfer operator's periodic counts of active correspondents, terminations, corridors and volumes by key currency) against an illustrative, profile-driven template: completeness, internal consistency, key-currency and concentration checks, plus a message-quality readiness roll-up from the existing address and LEI lint summaries. Everything runs locally on aggregate values only, so an institution can check a return before submission and nothing leaves the machine.

🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
This template is illustrative. It is built from public correspondent-banking metric definitions and is not the official data collection template of the Pacific correspondent-banking project (that template is still being finalised) and not the World Bank CBR Resilience Index (its calibration is pending). Swift deferred its payments structured-address change on 27 August 2026 and undertook to give an update by December 2026 at the latest, so no hard migration date is asserted here; the readiness framing follows the FATF revised Recommendation 16 of June 2025 with its end-2030 transition.
Return input (aggregate values only)
What this node checks
RuleCheckOutcome
REQ-*Required fields per profile: period, institution type, pseudonymous code, at least one currency block with corridors; the pacific profile also requires USD, AUD and NZDviolation
COUNT-ROLLFORWARDClosing active correspondents equals opening plus opened minus terminated or restricted, per currencyviolation
CORRIDOR-SUM-*Corridor sums equal the stated currency totals: counts exactly, values within a stated 0.5 percent toleranceviolation
PERIOD-SANITYReal calendar dates, end on or after start, span at most 400 daysviolation
STRING_LEAF_OUTSIDE_ENUMERATIONAggregate-only contract: any string leaf outside the enumerations and the FI-NNN code pattern (a name, BIC, LEI or account identifier) is refused naming the JSON path only, never echoing the valuerefusal
KEY_CURRENCY_SINGLE_CORRESPONDENTExactly one active correspondent in a profile key currency: the single-point-of-failure watch itemflag
CONCENTRATION_*Top corridor share above 0.80, or Herfindahl-Hirschman index over corridor outbound-value shares above 0.50flag
readinessRoll-up of supplied message-quality summaries (structure mix, valid LEI) into percentages and a band; reports not_supplied when absentreport

The two per-message linters this node builds on are separate tools: the CBPR+ structured address linter (art-241) and the LEI payment binding linter (art-246). This node consumes only their aggregate summaries and never reimplements their rules.

Manifest

Ask your agent

Copy this paragraph into Claude, OpenClaw, or any MCP-aware agent to run this exact tool, with this sample, and verify the artifact.

Run the AINumbers MCP tool `validate_cbr_data_return`. Task: Validate an aggregate correspondent-banking data return against an illustrative profile-driven template: required fields, roll-forward consistency, corridor sums, period sanity, key-currency and concentration flags, readiness roll-up.
Call it with arguments: {"policy_parameters":{"profile":"generic","institution_type":"bank","institution_code":"FI-001","period":{"start":"2026-01-01","end":"2026-03-31"},"currencies":[{"currency":"USD","opening_correspondents":5,"active_correspondents":4,"opened":1,"terminated_restricted":2,"corridors":[{"country":"US","outbound_count":1200,"inbound_count":900,"outbound_value":6000000,"inbound_value":4400000},{"country":"GB","outbound_count":900,"inbound_count":700,"outbound_value":5000000,"inbound_value":3600000},{"country":"SG","outbound_count":600,"inbound_count":500,"outbound_value":4000000,"inbound_value":2900000}],"totals":{"outbound_count":2700,"inbound_count":2100,"outbound_value":15000000,"inbound_value":10900000}},{"currency":"EUR","opening_correspondents":3,"active_correspondents":3,"opened":0,"terminated_restricted":0,"corridors":[{"country":"DE","outbound_count":400,"inbound_count":300,"outbound_value":1500000,"inbound_value":1200000},{"country":"FR","outbound_count":300,"inbound_count":250,"outbound_value":1000000,"inbound_value":900000},{"country":"NL","outbound_count":150,"inbound_count":120,"outbound_value":700000,"inbound_value":600000}],"totals":{"outbound_count":850,"inbound_count":670,"outbound_value":3200000,"inbound_value":2700000}}]}}
Verify before trusting: call `verify_execution_hash` on mcp.ainumbers.co (https://mcp.ainumbers.co/mcp) with the parameter `claimed_hash` set to the returned `execution_hash`, passing the full artifact the run returned (the object containing `policy_parameters` + `output_payload` + `execution_hash`; equivalently `policy_parameters` + `output_payload` with `claimed_hash`), not the bare hash string.
Return the ledger link https://ledger.ainumbers.co/ so a human can re-verify without contacting us.
PII rule: All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Open the tool with the sample prefilled: https://ainumbers.co/chaingraph/784-cbr-data-return-validator.html#p=v1.H4sIAAAAAAAA_wHRBC77eyJwcm9maWxlIjoiZ2VuZXJpYyIsImluc3RpdHV0aW9uX3R5cGUiOiJiYW5rIiwiaW5zdGl0dXRpb25fY29kZSI6IkZJLTAwMSIsInBlcmlvZCI6eyJzdGFydCI6IjIwMjYtMDEtMDEiLCJlbmQiOiIyMDI2LTAzLTMxIn0sImN1cnJlbmNpZXMiOlt7ImN1cnJlbmN5IjoiVVNEIiwib3BlbmluZ19jb3JyZXNwb25kZW50cyI6NSwiYWN0aXZlX2NvcnJlc3BvbmRlbnRzIjo0LCJvcGVuZWQiOjEsInRlcm1pbmF0ZWRfcmVzdHJpY3RlZCI6MiwiY29ycmlkb3JzIjpbeyJjb3VudHJ5IjoiVVMiLCJvdXRib3VuZF9jb3VudCI6MTIwMCwiaW5ib3VuZF9jb3VudCI6OTAwLCJvdXRib3VuZF92YWx1ZSI6NjAwMDAwMCwiaW5ib3VuZF92YWx1ZSI6NDQwMDAwMH0seyJjb3VudHJ5IjoiR0IiLCJvdXRib3VuZF9jb3VudCI6OTAwLCJpbmJvdW5kX2NvdW50Ijo3MDAsIm91dGJvdW5kX3ZhbHVlIjo1MDAwMDAwLCJpbmJvdW5kX3ZhbHVlIjozNjAwMDAwfSx7ImNvdW50cnkiOiJTRyIsIm91dGJvdW5kX2NvdW50Ijo2MDAsImluYm91bmRfY291bnQiOjUwMCwib3V0Ym91bmRfdmFsdWUiOjQwMDAwMDAsImluYm91bmRfdmFsdWUiOjI5MDAwMDB9XSwidG90YWxzIjp7Im91dGJvdW5kX2NvdW50IjoyNzAwLCJpbmJvdW5kX2NvdW50IjoyMTAwLCJvdXRib3VuZF92YWx1ZSI6MTUwMDAwMDAsImluYm91bmRfdmFsdWUiOjEwOTAwMDAwfX0seyJjdXJyZW5jeSI6IkVVUiIsIm9wZW5pbmdfY29ycmVzcG9uZGVudHMiOjMsImFjdGl2ZV9jb3JyZXNwb25kZW50cyI6Mywib3BlbmVkIjowLCJ0ZXJtaW5hdGVkX3Jlc3RyaWN0ZWQiOjAsImNvcnJpZG9ycyI6W3siY291bnRyeSI6IkRFIiwib3V0Ym91bmRfY291bnQiOjQwMCwiaW5ib3VuZF9jb3VudCI6MzAwLCJvdXRib3VuZF92YWx1ZSI6MTUwMDAwMCwiaW5ib3VuZF92YWx1ZSI6MTIwMDAwMH0seyJjb3VudHJ5IjoiRlIiLCJvdXRib3VuZF9jb3VudCI6MzAwLCJpbmJvdW5kX2NvdW50IjoyNTAsIm91dGJvdW5kX3ZhbHVlIjoxMDAwMDAwLCJpbmJvdW5kX3ZhbHVlIjo5MDAwMDB9LHsiY291bnRyeSI6Ik5MIiwib3V0Ym91bmRfY291bnQiOjE1MCwiaW5ib3VuZF9jb3VudCI6MTIwLCJvdXRib3VuZF92YWx1ZSI6NzAwMDAwLCJpbmJvdW5kX3ZhbHVlIjo2MDAwMDB9XSwidG90YWxzIjp7Im91dGJvdW5kX2NvdW50Ijo4NTAsImluYm91bmRfY291bnQiOjY3MCwib3V0Ym91bmRfdmFsdWUiOjMyMDAwMDAsImluYm91bmRfdmFsdWUiOjI3MDAwMDB9fV19uxr92tEEAAA