Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ISO 20022 to MT Transformations

Converting ISO 20022 messages to SWIFT MT format.

Overview

Incoming transformations convert ISO 20022 XML messages to legacy SWIFT MT format. This direction supports:

  • Systems that haven’t migrated to ISO 20022
  • Legacy downstream applications
  • Parallel running during migration
  • Fallback scenarios

Transformation Pipeline

Every ISO 20022 → MT transformation follows this pipeline:

┌─────────────────────────────────────────────────────────────┐
│                  ISO 20022 → MT Pipeline                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. Parse XML             Priority 1                        │
│     Extract ISO 20022 structure to JSON                     │
│                                                             │
│  2. Detect Target MT      Priority 2                        │
│     Determine appropriate MT message type                   │
│                                                             │
│  3. Pre-conditions        Priority 3                        │
│     Validate transformation feasibility                     │
│                                                             │
│  4. Map Headers           Priority 4                        │
│     Construct MT Block 1, 2, 3                              │
│                                                             │
│  5. Map Fields            Priority 5-9                      │
│     Transform ISO 20022 elements to MT tags                 │
│                                                             │
│  6. Post-conditions       Priority 10                       │
│     Validate MT structure and assemble                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Supported Transformations

Payment Messages

SourceTargetDescription
pain.001MT101Customer Credit Transfer Initiation
pacs.002MT103 REJT / MT202 REJTPayment Status Report
pacs.003MT104Direct Debit
pacs.004MT103 RETN / MT202 RETNPayment Return
pacs.008MT103Customer Credit Transfer
pacs.009MT202 / MT202 COV / MT205FI Credit Transfer
pacs.010MT204Financial Institution Direct Debit

Cash Management Messages

SourceTargetDescription
camt.029MT196 / MT296Resolution of Investigation
camt.052MT942 / MT941Account Report
camt.053MT940Bank Statement
camt.054MT900 / MT910Debit/Credit Notification
camt.056MT192 / MT292Cancellation Request
camt.057MT210Notification to Receive

SR2025 Messages

SourceTargetDescription
camt.105MTn90Charges Payment Notification
camt.106MTn91Charges Payment Request
camt.107MT110Cheque Presentation
camt.108MT111Cheque Cancellation Request
camt.109MT112Cheque Cancellation Report
admi.024MT199System Event Notification

Target MT Detection

The target MT type is determined by analyzing the ISO 20022 message:

pacs.008 → MT Detection

{
  "if": [
    {"!!": {"var": "data.MX.UndrlygCstmrCdtTrf"}},
    "MT103",
    {"if": [
      {"==": [{"var": "data.MX.PmtTpInf.LclInstrm.Prtry"}, "COVER"]},
      "MT202COV",
      "MT103"
    ]}
  ]
}

pacs.009 → MT Detection

ConditionTarget MT
Has UnderlyingCustomerCreditTransferMT202 COV
InterbankSettlement onlyMT202
Third party indicatorMT205

camt.054 → MT Detection

ConditionTarget MT
Debit entryMT900
Credit entryMT910
Multiple entriesMultiple MTs

Common Field Mappings

Header Generation

ISO 20022 SourceMT TargetNotes
AppHdr/Fr/FIId/FinInstnId/BICFIBlock 1 BICSender
AppHdr/To/FIId/FinInstnId/BICFIBlock 2 BICReceiver
PmtId/UETRBlock 3 Tag 121End-to-end tracking
AppHdr/BizMsgIdrTag 20Reference

Amount Mapping

ISO 20022 SourceMT TargetNotes
IntrBkSttlmDtTag 32A (date)YYYY-MM-DD → YYMMDD
IntrBkSttlmAmt/@CcyTag 32A (currency)3-letter code
IntrBkSttlmAmtTag 32A (amount)Add comma separator

Party Mapping

ISO 20022 SourceMT TargetNotes
Dbtr/NmTag 50K Line 1Debtor name
Dbtr/PstlAdr/AdrLineTag 50K Lines 2-4Address
DbtrAcct/Id/IBANTag 50K AccountWith / prefix
DbtrAcct/Id/Othr/IdTag 50K AccountWith / prefix
Cdtr/NmTag 59 Line 1Creditor name
CdtrAcct/Id/IBANTag 59 AccountWith / prefix

Agent Mapping

ISO 20022 SourceMT TargetNotes
DbtrAgt/FinInstnId/BICFITag 52ADebtor’s bank
CdtrAgt/FinInstnId/BICFITag 57ACreditor’s bank
IntrmyAgt1/FinInstnId/BICFITag 56AIntermediary

Charge Bearer Mapping

ISO 20022MT (Tag 71A)
SHARSHA
DEBTOUR
CREDBEN

Data Truncation Rules

MT messages have field length limits. ISO 20022 data is truncated when necessary:

MT FieldMax LengthTruncation Rule
Tag 2016 charsTruncate right
Tag 50K/59 name35 charsTruncate right
Tag 50K/59 address35 chars/lineTruncate per line
Tag 704 x 35 charsTruncate total
Tag 726 x 35 charsTruncate total

Example Transformation

Input: pacs.008

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.12">
  <FIToFICstmrCdtTrf>
    <GrpHdr>
      <MsgId>MSG123456789</MsgId>
      <CreDtTm>2025-01-15T10:30:00Z</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <SttlmInf><SttlmMtd>INDA</SttlmMtd></SttlmInf>
    </GrpHdr>
    <CdtTrfTxInf>
      <PmtId>
        <InstrId>INSTR123</InstrId>
        <EndToEndId>E2E123</EndToEndId>
        <UETR>174d2c70-7a8c-4c0d-8b2e-5c2a9f8e6d3a</UETR>
      </PmtId>
      <IntrBkSttlmAmt Ccy="EUR">25000.00</IntrBkSttlmAmt>
      <IntrBkSttlmDt>2025-01-15</IntrBkSttlmDt>
      <ChrgBr>SHAR</ChrgBr>
      <Dbtr><Nm>SENDER COMPANY</Nm></Dbtr>
      <DbtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></DbtrAcct>
      <DbtrAgt><FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId></DbtrAgt>
      <CdtrAgt><FinInstnId><BICFI>DEUTDEFFXXX</BICFI></FinInstnId></CdtrAgt>
      <Cdtr><Nm>RECEIVER GMBH</Nm></Cdtr>
      <CdtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></CdtrAcct>
    </CdtTrfTxInf>
  </FIToFICstmrCdtTrf>
</Document>

Output: MT103

{1:F01BNPAFRPPXXX0000000000}
{2:I103DEUTDEFFXXXXN}
{3:{121:174d2c70-7a8c-4c0d-8b2e-5c2a9f8e6d3a}}
{4:
:20:INSTR123
:23B:CRED
:32A:250115EUR25000,00
:50K:/FR7630006000011234567890189
SENDER COMPANY
:57A:DEUTDEFFXXX
:59:/DE89370400440532013000
RECEIVER GMBH
:71A:SHA
-}

Try It

API Example

curl -X POST http://localhost:3000/api/transform \
  -H "Content-Type: application/json" \
  -d '{
    "message": "<?xml version=\"1.0\"?><Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.12\">...</Document>"
  }'

The API automatically detects ISO 20022 input and applies the appropriate reverse transformation.


Back to CBPR+ Overview →

View Message Catalog →