Skip to main content

ISO 20022 Migration

Overview​

ISO 20022 is the global standard for financial messaging, replacing a range of legacy formats (SWIFT MT, proprietary flat files, EDIFACT). The migration is the largest change to financial messaging infrastructure in decades, affecting thousands of institutions worldwide.

  • Standard body: ISO (International Organization for Standardization)
  • Scope: Payments, securities, FX, trade finance
  • Timeline: 2022–2025 (cross-border); ongoing for domestic systems
  • Key driver: Richer data, better reconciliation, improved compliance

Why ISO 20022?​

Problem with Legacy (MT)ISO 20022 Solution
Limited remittance data (140 chars)Structured unlimited remittance data
No standardised party identifiersLEI, BIC, IBAN as first-class fields
Proprietary field formatsStandardised XML / JSON schemas
Poor machine-readabilityFully structured, XSD-validated
Hard to add new fieldsExtensible by design
Weak for AML/sanctionsRich party data improves screening
SWIFT-proprietaryTruly global standard used by all networks

ISO 20022 Message Families in Banking​

Payment Messages (pacs., pain., camt.)​

Initiation (Customer β†’ Bank):
pain.001 CustomerCreditTransferInitiation
pain.002 CustomerPaymentStatusReport
pain.007 CustomerPaymentReversal
pain.008 CustomerDirectDebitInitiation

Interbank (Bank β†’ Bank):
pacs.002 FIToFIPaymentStatusReport
pacs.003 FIToFICustomerDirectDebit
pacs.004 PaymentReturn
pacs.007 FIToFIPaymentReversal
pacs.008 FIToFICustomerCreditTransfer
pacs.009 FinancialInstitutionCreditTransfer
pacs.010 FinancialInstitutionDirectDebit

Cash Management (Bank β†’ Customer):
camt.052 BankToCustomerAccountReport (intraday)
camt.053 BankToCustomerStatement (EOD)
camt.054 BankToCustomerDebitCreditNotification
camt.055 CustomerPaymentCancellationRequest
camt.056 FIToFIPaymentCancellationRequest
camt.057 NotificationToReceive
camt.058 NotificationToReceiveStatusReport
camt.060 AccountReportingRequest

SWIFT ISO 20022 Migration Timeline​

Nov 2021 ─── SWIFT gpi co-existence period begins
MT + MX messages both accepted

Nov 2022 ─── Full co-existence period (MT + MX live)
Migration starts: pacs.008, pacs.009, pacs.004
Banks begin testing ISO 20022 on cross-border

Mar 2023 ─── Mandatory UETR on all MT103 messages
(backporting traceability to legacy)

Nov 2025 ─── MT messages retired for cross-border payments
pacs.008 replaces MT103
pacs.009 replaces MT202/MT202COV
camt.053 replaces MT940/MT950
camt.054 replaces MT900/MT910

Nov 2025+ ─── ISO 20022 only for cross-border via SWIFT

MT to MX Mapping (Key Fields)​

MT103 β†’ pacs.008​

MT103 FieldMX pacs.008 FieldNotes
:20: TxRefCdtTrfTxInf/PmtId/InstrIdInstruction reference
:21: RelatedRefCdtTrfTxInf/PmtId/EndToEndIdE2E reference
:23B: BankOpCodeCdtTrfTxInf/PmtTpInf/SvcLvlCRED β†’ normal
:32A: AmountIntrBkSttlmAmt + IntrBkSttlmDtSettlement amount + date
:33B: InstructedAmtCdtTrfTxInf/InstdAmtOriginal instructed amount
:50K: DebtorDbtr/Nm + DbtrAcct/IdPayer details
:52A: OrderingInstDbtrAgt/FinInstnId/BICFIDebtor bank BIC
:53B: SenderCorrIntrmyAgt1/FinInstnId/BICFICorrespondent bank
:57A: AcctWithInstCdtrAgt/FinInstnId/BICFICreditor bank BIC
:59: BeneficiaryCdtr/Nm + CdtrAcct/IdPayee details
:70: RemittanceRmtInf/UstrdPayment reference
:71A: ChargesChrgBrOUR→DEBT, BEN→CRED, SHA→SHAR
:72: SenderToRcvrInstrForNxtAgtBank-to-bank info

Truncation Problem​

A key challenge during migration: ISO 20022 fields are longer and richer than MT fields. When converting MX→MT (or vice versa), data may be truncated:

ISO 20022 Creditor Name: "International Widget Manufacturing Co. Pty Ltd"
MT103 :59: limit: 35 characters
Truncated to: "International Widget Manufacturi"

Impact:
β”œβ”€β”€ Creditor name doesn't match account
β”œβ”€β”€ Sanctions screening may miss match (or false positive)
β”œβ”€β”€ Reconciliation failure at creditor bank
└── Compliance record incomplete

SWIFT Truncation Rules​

  • SWIFT has published mandatory truncation rules for co-existence
  • Banks must implement structured translation, not blind truncation
  • LEI is preferred to name where available (stable, not truncatable)

Enhanced Remittance Data​

One of the biggest benefits of ISO 20022 over MT103:

MT103 :70: (140 chars, unstructured):
/INV/20240615/USD5000

ISO 20022 RmtInf (structured):
<RmtInf>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry><Cd>CINV</Cd></CdOrPrtry> ← Invoice
</Tp>
<Nb>INV-20240615-001</Nb> ← Invoice number
<RltdDt>2024-06-15</RltdDt> ← Invoice date
</RfrdDocInf>
<RfrdDocAmt>
<DuePyblAmt Ccy="USD">5000.00</DuePyblAmt>
<DscntApldAmt Ccy="USD">250.00</DscntApldAmt> ← Discount
<RmtdAmt Ccy="USD">4750.00</RmtdAmt>
</RfrdDocAmt>
</Strd>
</RmtInf>

This enables automated invoice matching in ERP systems β€” no manual reconciliation.


Australian ISO 20022 Adoption​

SystemFormatStatus
NPPISO 20022 MX from inceptionβœ… Live since 2018
HVCS / RTGSISO 20022 MXβœ… Live
BECSProprietary flat fileπŸ”„ Migration planned (long-term)
SWIFT cross-borderMT (legacy) + MX (migration)πŸ”„ Co-existence β†’ MX-only Nov 2025
Direct Debit (PayTo)ISO 20022 MXβœ… Live since 2022

Migration Challenges for Banks​

ChallengeDetailMitigation
System replacementCore banking systems may not support XMLMiddleware translation layer
Data mappingMT fields don't map 1:1 to MXDetailed field mapping spec
TruncationRich MX data truncated on MT-era systemsSWIFT truncation guidelines
TestingThousands of message variants to testAutomated test harness
Counterparty readinessNot all peers migrated at same paceCo-existence / translation
Regulatory reportingLEI, structured data new requirementsData enrichment pipeline

Java Spring Migration Notes​

// Translation service β€” MT103 ↔ pacs.008
@Service
public class MtMxTranslationService {

/**
* Translate legacy MT103 to ISO 20022 pacs.008
* Used during SWIFT co-existence period
*/
public FIToFICustomerCreditTransferV10 mt103ToPacs008(Mt103 mt103) {
var msg = new FIToFICustomerCreditTransferV10();
var tx = new CreditTransferTransaction50();

// Payment IDs
var pmtId = new PaymentIdentification7();
pmtId.setInstrId(mt103.getField20()); // :20: β†’ InstrId
pmtId.setEndToEndId(mt103.getField21()); // :21: β†’ EndToEndId
// Generate UETR if not present (mandatory in MX)
pmtId.setUETR(UUID.randomUUID().toString());
tx.setPmtId(pmtId);

// Amount (may need currency conversion formatting)
var amt = parseAmount(mt103.getField32A());
tx.setIntrBkSttlmAmt(amt);

// Debtor β€” :50K:
var dbtr = new PartyIdentification135();
dbtr.setNm(mt103.getField50K().getName());
tx.setDbtr(dbtr);

// Creditor β€” :59:
var cdtr = new PartyIdentification135();
cdtr.setNm(mt103.getField59().getName());
tx.setCdtr(cdtr);

// Remittance β€” :70:
var rmtInf = new RemittanceInformation21();
rmtInf.getUstrd().add(mt103.getField70());
tx.setRmtInf(rmtInf);

// Charge bearer β€” :71A:
tx.setChrgBr(mapChargeBearer(mt103.getField71A()));

msg.getCdtTrfTxInf().add(tx);
return msg;
}

private ChargeBearerType1Code mapChargeBearer(String mt71a) {
return switch (mt71a) {
case "OUR" -> ChargeBearerType1Code.DEBT;
case "BEN" -> ChargeBearerType1Code.CRED;
case "SHA" -> ChargeBearerType1Code.SHAR;
default -> ChargeBearerType1Code.SLEV;
};
}
}

  • pacs008.md β€” Primary ISO 20022 payment message
  • swift.md β€” SWIFT MT messages being replaced
  • pain001.md β€” Customer-side ISO 20022 message
  • camt053.md β€” Replaces MT940 statement
  • fis.md β€” FI readiness for ISO 20022 migration