camt.053 is the end-of-day bank statement: every booked transaction on the customer's account for a given booking date, with opening / closing balances and an inventory of entries. It is the inbound side of the reconciliation loop.
Each transaction is wrapped in a <Ntry> (entry) which may contain one or more <TxDtls> blocks for batched entries (multiple original transactions aggregated into a single booking). The reconciliation challenge is recovering the customer's *original* reference (typically an internal invoice id or order id) from one of six possible carrier fields inside <TxDtls>: EndToEndId, InstrId, StrdCdtrRef, Ustrd, AcctSvcrRef, SplmtryData.
Which carrier wins is bank-specific, rail-specific, and sometimes intermediary-specific — there is no standard. UBS preserves EndToEndId end-to-end on Swiss QR flows; PostFinance promotes AcctSvcrRef as the durable handle; JPMorgan strips the EndToEndId on certain inter-branch routes and forces fallback to InstrId. The catalog of which-bank-uses-which-carrier is the durable moat for iso-compliant.
The parser lives at apps/api/src/lib/camt053-parser.ts; carrier-extraction logic at apps/api/src/lib/recon-key-extract.ts (see the KeyCarrier union); per-bank handlers at apps/api/src/lib/bank-recon-handlers/.