ISO 20022 ######### ISO 20022 is the standard that defines many XML messages for FinTech. It is very general, and often countries/orgs define subsets (TVS, technical validation subset) of the schema. Documentation for message fields can be viewed at https://www.iso20022.org/standardsrepository The primary syntax for ISO 20022 messages is XML. To avoid LibEuFin clients having to deal with XML, we define a mapping from ISO 20022 messages into JSON. The specifics of this mapping are: * The JSON should be "idiomatic" and easy to process * When possible, the highly nested structures of ISO 20022 should be flattened * It must be possible round-trip between the LibEuFin JSON and ISO 20022 XML messages. The mapping of message types is not 1-to-1, as some ISO 20022 messages are very similar and can be mapped to the same JSON structure. * JSON-mapped messages are not explicitly versioned. Instead, changes are made in a backwards-compatible way, possibly preserving old versions of message elements in the same schema. Cash Management (camt) ====================== LibEuFin combines camt.052, camt.053 and camt.054, as they essentially have the same structure and serve the same purpose: Reporting transactions on a customer's bank account. .. code-block:: typescript interface CashManagementResponseMessage { // ISO: MessageIdentification messageId: string; messageType: "report" | "statement" | "notification"; // ISO: CreationDateTime creationDateTime: string; entries: Entry[]; } interface Entry { transactions: Transaction[]; } interface Transaction { creditDebitIndicator: "credit" | "debit"; amount: string; currency: string; bookingDate?: string; valueDate?: string; accountServicerRef?: string; bankTransactionCode: BankTransactionCode; details: TransactionDetails[]; } interface TransactionDetails { creditDebitIndicator: "credit" | "debit"; amount: string; currency: string; // Referenced message ID messageId: string; endToEndId: string; paymentIdentificationId?: string; bankTransactionCode: BankTransactionCode; } interface BankTransactionCode { domain?: string; family?: string; subfamily?: string; proprietaryIssuer?: string; proprietaryCode?: string; }