[{"data":1,"prerenderedAt":352},["ShallowReactive",2],{"\u002Fblog\u002Fcamt054-how-to-parse-booking-notifications-for-reconciliation":3},{"id":4,"title":5,"body":6,"description":343,"extension":344,"lastUpdatedAt":345,"meta":346,"navigation":347,"path":348,"publishedAt":345,"seo":349,"stem":350,"__hash__":351},"blog\u002Fblog\u002F0003.camt054-how-to-parse-booking-notifications-for-reconciliation.md","camt.054: how to parse booking notifications for reconciliation",{"type":7,"value":8,"toc":333},"minimark",[9,18,21,26,31,40,43,47,59,76,79,87,106,118,135,151,159,163,174,177,180,184,187,190,200,203,209,212,218,228,232,248,257,268,272,275,284,290,296,302,305,309,322,330],[10,11,12,13,17],"p",{},"When a payment lands on your bank account, you receive a notification. For years this arrived as a paper bank statement or a flat-file extract that your accounting team had to decipher manually. With the ISO 20022 migration Swiss banks completed in 2022, that notification now arrives as a ",[14,15,16],"strong",{},"camt.054"," message — a structured XML document that carries not just the payment amount but the full remittance information your customer attached when they paid.",[10,19,20],{},"For any business that sends a meaningful volume of invoices, camt.054 is the piece of the puzzle that makes automated reconciliation possible. This post explains what the message contains, how to read it, and how to wire it into your matching process.",[22,23,25],"h2",{"id":24},"what-is-camt054","What is camt.054?",[10,27,28,30],{},[14,29,16],{}," stands for \"BankToCustomer Debit Credit Notification\". It is part of the ISO 20022 camt (Cash Management) family of messages, which cover the flow of account information from banks to their customers.",[10,32,33,34,39],{},"Where ",[35,36,38],"a",{"href":37},"\u002Fblog\u002Fiso-20022-migration-in-switzerland-what-changed-in-2022","camt.053"," is the full account statement (typically delivered daily or end-of-day), camt.054 is the intraday or real-time notification for individual debit and credit entries. Your bank sends it when something hits your account — a credit from a customer paying an invoice, or a debit for an outgoing payment.",[10,41,42],{},"From a reconciliation standpoint, the credit camt.054 is what you care about: it tells you that a specific amount arrived from a specific payer, and — if the payer filled in the remittance data correctly — exactly which invoice or invoices they were paying.",[22,44,46],{"id":45},"the-structure-of-a-camt054-message","The structure of a camt.054 message",[10,48,49,50,54,55,58],{},"A camt.054 file is an XML document. At the top level it contains a ",[51,52,53],"code",{},"\u003CGrpHdr>"," (group header) with message identification and creation timestamp, followed by one or more ",[51,56,57],{},"\u003CNtfctn>"," (notification) elements, one per account.",[10,60,61,62,65,66,68,69,71,72,75],{},"Inside each notification, the interesting content lives in the ",[51,63,64],{},"\u003CNtry>"," (entry) elements. Each ",[51,67,64],{}," represents one booking on your account. For a customer payment, a single ",[51,70,64],{}," might itself contain multiple ",[51,73,74],{},"\u003CTxDtls>"," (transaction details) elements — one per underlying transaction if the bank has batched several payments together into a single booking.",[10,77,78],{},"The fields that matter most for reconciliation are:",[10,80,81,86],{},[14,82,83],{},[51,84,85],{},"\u003CAmt>"," — the booked amount and currency. This is what hit your account.",[10,88,89,94,95,98,99,102,103,105],{},[14,90,91],{},[51,92,93],{},"\u003CCdtDbtInd>"," — ",[51,96,97],{},"CRDT"," for a credit (money in), ",[51,100,101],{},"DBIT"," for a debit (money out). Filter for ",[51,104,97],{}," when matching incoming payments.",[10,107,108,117],{},[14,109,110,113,114],{},[51,111,112],{},"\u003CBookgDt>"," and ",[51,115,116],{},"\u003CValDt>"," — booking date and value date. For reconciliation you typically work with booking date.",[10,119,120,125,126,129,130,134],{},[14,121,122],{},[51,123,124],{},"\u003CRltdRefs>"," — related references. This is where the end-to-end reference from the payment instruction appears (",[51,127,128],{},"\u003CEndToEndId>","). If your customer used a ",[35,131,133],{"href":132},"\u002Fblog\u002Fqr-rechnung-explained-everything-you-need-to-know","QR-Rechnung"," to pay you, the QR reference number appears here.",[10,136,137,142,143,146,147,150],{},[14,138,139],{},[51,140,141],{},"\u003CRmtInf>"," — remittance information. This is the free-text or structured reference the payer attached. For QR-bill payments it contains the ",[14,144,145],{},"QR Reference"," or ",[14,148,149],{},"Creditor Reference (ISO 11649)",". For SEPA-style payments it may contain a creditor reference or unstructured text.",[10,152,153,158],{},[14,154,155],{},[51,156,157],{},"\u003CDbtr>"," — the debtor (your customer). Contains name and optionally account details.",[22,160,162],{"id":161},"the-qr-reference-and-why-it-is-the-key-to-automated-matching","The QR reference and why it is the key to automated matching",[10,164,165,166,169,170,173],{},"If you send ",[35,167,168],{"href":132},"QR-Rechnungen"," to your customers, the QR Reference is your primary matching key. The reference is a 27-digit number you generate per invoice — it encodes the invoice identifier and a Modulo 10 recursive check digit. When your customer scans the QR code and pays through their e-banking, the reference is carried through the entire payment chain and delivered back to you in the camt.054 ",[51,171,172],{},"\u003CRmtInf>\u003CStrd>\u003CCdtrRefInf>\u003CRef>"," field.",[10,175,176],{},"This means that for every QR-bill payment, you get back the exact reference you put on the invoice. Matching is then a database lookup: find the open invoice with that reference number, confirm the amount matches, close the item. No human judgement required.",[10,178,179],{},"The only time this breaks down is when a customer pays manually without scanning the code, types the reference incorrectly, or pays a different amount (partial payment or rounding error). These exceptions still need manual handling, but they are a small fraction of total volume once your customers are used to the QR format.",[22,181,183],{"id":182},"parsing-camt054-in-practice","Parsing camt.054 in practice",[10,185,186],{},"Most ERP systems with Swiss bank connectivity will process camt.054 automatically — you configure the bank connection, the file arrives via eBanking or EBICS, and the ERP parses it. If you are building a custom integration or your ERP does not handle it natively, here is what the parsing logic looks like in practice.",[10,188,189],{},"The XPath to the QR reference in a camt.054 entry is:",[191,192,197],"pre",{"className":193,"code":195,"language":196},[194],"language-text","\u002FDocument\u002FBkToCstmrDbtCdtNtfctn\u002FNtfctn\u002FNtry\u002FTxDtls\u002FRmtInf\u002FStrd\u002FCdtrRefInf\u002FRef\n","text",[51,198,195],{"__ignoreMap":199},"",[10,201,202],{},"For unstructured remittance information (free text entered by the payer):",[191,204,207],{"className":205,"code":206,"language":196},[194],"\u002FDocument\u002FBkToCstmrDbtCdtNtfctn\u002FNtfctn\u002FNtry\u002FTxDtls\u002FRmtInf\u002FUstrd\n",[51,208,206],{"__ignoreMap":199},[10,210,211],{},"The booking amount and currency:",[191,213,216],{"className":214,"code":215,"language":196},[194],"\u002FDocument\u002FBkToCstmrDbtCdtNtfctn\u002FNtfctn\u002FNtry\u002FAmt\n",[51,217,215],{"__ignoreMap":199},[10,219,220,221,146,224,227],{},"The namespace in Swiss camt.054 files is typically ",[51,222,223],{},"urn:iso:std:iso:20022:tech:xsd:camt.054.001.04",[51,225,226],{},".06"," depending on the bank. Always check the namespace declaration in the root element before building your XPath — mismatched namespaces are a common cause of parsing failures that return no results rather than an error.",[22,229,231],{"id":230},"handling-batched-entries","Handling batched entries",[10,233,234,235,237,238,240,241,244,245,247],{},"Swiss banks sometimes aggregate multiple individual payments into a single ",[51,236,64],{}," on your account statement. In this case the ",[51,239,64],{}," has a ",[51,242,243],{},"\u003CNbOfTxs>"," count greater than one, and the individual payment details live in separate ",[51,246,74],{}," children.",[10,249,250,251,253,254,256],{},"Your reconciliation logic must handle both cases: a single entry with a single transaction (walk directly to the ",[51,252,74],{}," fields) and a single entry with multiple transactions (iterate over all ",[51,255,74],{}," children and match each one independently).",[10,258,259,260,263,264,267],{},"If you sum the ",[51,261,262],{},"\u003CTxDtls>\u003CAmt>"," values across all transaction details in a batch entry, they should equal the ",[51,265,266],{},"\u003CNtry>\u003CAmt>",". Use this as a sanity check — a mismatch here usually means a parsing error rather than a data problem.",[22,269,271],{"id":270},"what-to-do-with-unmatched-payments","What to do with unmatched payments",[10,273,274],{},"Not every camt.054 entry will match cleanly to an open invoice. The common failure modes are:",[10,276,277,280,281,283],{},[14,278,279],{},"Missing or garbled reference."," The customer paid without the QR reference or typed it incorrectly. The ",[51,282,141],{}," field is empty or contains free text. Fall back to matching on amount and debtor name. If that is ambiguous, route to a human.",[10,285,286,289],{},[14,287,288],{},"Partial payment."," The amount does not match any single open invoice. Check whether it matches the sum of two or more open items (the customer may have combined invoices). If not, park it as a payment on account and flag for follow-up.",[10,291,292,295],{},[14,293,294],{},"Overpayment."," Amount is higher than the invoice total. Match to the invoice, create a credit balance on the account, and notify the customer.",[10,297,298,301],{},[14,299,300],{},"Duplicate reference."," The same reference number appears twice. This should not happen if your reference generation is correct, but it can occur with older ESR-style references or if someone reuses a reference by mistake. Flag immediately and reconcile manually.",[10,303,304],{},"Most finance teams find it worth building an exceptions queue — a simple list of unmatched entries from each camt.054 file — that someone works through each morning. The volume of exceptions drops significantly once your customer base is consistently using QR-Rechnungen with correctly generated references.",[22,306,308],{"id":307},"connecting-camt054-to-the-rest-of-your-ar-process","Connecting camt.054 to the rest of your AR process",[10,310,311,312,316,317,321],{},"camt.054 sits at the downstream end of the ",[35,313,315],{"href":314},"\u002Fblog\u002Fhow-remittance-information-flows-from-invoice-to-bank-statement","remittance information flow"," that starts when you generate and send an invoice. If you are sending invoices via ",[35,318,320],{"href":319},"\u002Fblog\u002Fhow-the-ebill-network-works-a-technical-overview","eBill",", your customer's bank handles the reference automatically — the eBill approval triggers a payment instruction that carries the correct reference through to your camt.054 without any manual input from the customer. This is one of the stronger arguments for eBill adoption: it eliminates the reference handling mistakes that clog up AR queues.",[10,323,324,325,329],{},"For PEPPOL-delivered invoices, the end-to-end reference your customer puts on their ",[35,326,328],{"href":327},"\u002Fblog\u002Fpain001-deep-dive-building-a-swiss-credit-transfer-file","pain.001 payment instruction"," determines what arrives in your camt.054. Making sure your invoice includes a clear, machine-readable payment reference — and that your customers' AP systems pick it up correctly — is the integration work that makes automated reconciliation reliable.",[10,331,332],{},"The camt.054 message itself is clean and well-structured once you understand its layout. The harder work is usually upstream: generating references consistently, getting customers to use them, and handling the exceptions that come from the ones who do not.",{"title":199,"searchDepth":334,"depth":334,"links":335},2,[336,337,338,339,340,341,342],{"id":24,"depth":334,"text":25},{"id":45,"depth":334,"text":46},{"id":161,"depth":334,"text":162},{"id":182,"depth":334,"text":183},{"id":230,"depth":334,"text":231},{"id":270,"depth":334,"text":271},{"id":307,"depth":334,"text":308},"How the camt.054 credit notification carries remittance data back to the biller and how to use it for automated matching.","md","2026-04-29",{},true,"\u002Fblog\u002Fcamt054-how-to-parse-booking-notifications-for-reconciliation",{"title":5,"description":343},"blog\u002F0003.camt054-how-to-parse-booking-notifications-for-reconciliation","u6yrCK7z3Mb0k0inUMwUT7tswhlFktzN6gaRaQlGWCM",1777452177182]