Files
CurrenciCombo/docs/ISO_Message_Samples.md

16 KiB

ISO-20022 Message Samples

Overview

This document provides sample ISO-20022 message snippets (pacs.008, camt.052/053, camt.056) showing how plan metadata, digital signatures, and compliance attributes (LEI, DID, KYC, AML) are embedded in ISO messages for the Combo Flow system.


1. pacs.008 - Payment Instruction (with Plan ID and Signature)

Complete Example

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.10"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <FIToFICstmrCdtTrf>
    <!-- Group Header -->
    <GrpHdr>
      <MsgId>MSG-2025-01-15-001234</MsgId>
      <CreDtTm>2025-01-15T10:30:00.000Z</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>78000.00</CtrlSum>
      <InitgPty>
        <Nm>Example Corp Ltd.</Nm>
        <Id>
          <OrgId>
            <Othr>
              <Id>5493000IBP32UQZ0KL24</Id>
              <SchmeNm>
                <Cd>LEI</Cd>
              </SchmeNm>
            </Othr>
          </OrgId>
        </Id>
        <CtctDtls>
          <Email>compliance@example.com</Email>
          <PhneNb>+49-30-12345678</PhneNb>
        </CtctDtls>
      </InitgPty>
    </GrpHdr>

    <!-- Credit Transfer Transaction Information -->
    <CdtTrfTxInf>
      <!-- Payment Identification -->
      <PmtId>
        <EndToEndId>PLAN-12345678-ABCD-EFGH-IJKL</EndToEndId>
        <TxId>TX-2025-01-15-001234</TxId>
        <UETR>550e8400-e29b-41d4-a716-446655440000</UETR>
      </PmtId>

      <!-- Payment Type Information -->
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
        <LclInstrm>
          <Cd>INST</Cd>
        </LclInstrm>
        <CtgyPurp>
          <Cd>SUPP</Cd>
        </CtgyPurp>
      </PmtTpInf>

      <!-- Interbank Settlement Amount -->
      <IntrBkSttlmAmt Ccy="EUR">78000.00</IntrBkSttlmAmt>

      <!-- Instructing Agent -->
      <InstgAgt>
        <FinInstnId>
          <BICFI>BANKDEFFXXX</BICFI>
          <Nm>Example Bank AG</Nm>
        </FinInstnId>
      </InstgAgt>

      <!-- Instructed Agent -->
      <InstdAgt>
        <FinInstnId>
          <BICFI>BENEFRPPXXX</BICFI>
          <Nm>Beneficiary Bank</Nm>
        </FinInstnId>
      </InstdAgt>

      <!-- Debtor -->
      <Dbtr>
        <Nm>Example Corp Ltd.</Nm>
        <PstlAdr>
          <StrtNm>Main Street</StrtNm>
          <BldgNb>123</BldgNb>
          <PstCd>10115</PstCd>
          <TwnNm>Berlin</TwnNm>
          <Ctry>DE</Ctry>
        </PstlAdr>
        <Id>
          <OrgId>
            <Othr>
              <Id>5493000IBP32UQZ0KL24</Id>
              <SchmeNm>
                <Cd>LEI</Cd>
              </SchmeNm>
            </Othr>
          </OrgId>
        </Id>
        <CtctDtls>
          <Email>compliance@example.com</Email>
        </CtctDtls>
      </Dbtr>

      <!-- Debtor Account -->
      <DbtrAcct>
        <Id>
          <IBAN>DE89370400440532013000</IBAN>
        </Id>
        <Tp>
          <Cd>CACC</Cd>
        </Tp>
      </DbtrAcct>

      <!-- Debtor Agent -->
      <DbtrAgt>
        <FinInstnId>
          <BICFI>BANKDEFFXXX</BICFI>
        </FinInstnId>
      </DbtrAgt>

      <!-- Creditor -->
      <Cdtr>
        <Nm>Beneficiary Corp</Nm>
        <PstlAdr>
          <StrtNm>Beneficiary Street</StrtNm>
          <BldgNb>456</BldgNb>
          <PstCd>20095</PstCd>
          <TwnNm>Hamburg</TwnNm>
          <Ctry>DE</Ctry>
        </PstlAdr>
      </Cdtr>

      <!-- Creditor Account -->
      <CdtrAcct>
        <Id>
          <IBAN>DE89370400440532013001</IBAN>
        </Id>
        <Tp>
          <Cd>CACC</Cd>
        </Tp>
      </CdtrAcct>

      <!-- Creditor Agent -->
      <CdtrAgt>
        <FinInstnId>
          <BICFI>BENEFRPPXXX</BICFI>
        </FinInstnId>
      </CdtrAgt>

      <!-- Remittance Information -->
      <RmtInf>
        <Ustrd>Plan ID: PLAN-12345678-ABCD-EFGH-IJKL | Combo Flow Execution</Ustrd>
        <Strd>
          <RfrdDocInf>
            <Tp>
              <CdOrPrtry>
                <Cd>CINV</Cd>
              </CdOrPrtry>
            </Tp>
            <Nb>PLAN-12345678-ABCD-EFGH-IJKL</Nb>
            <RltdDt>2025-01-15</RltdDt>
          </RfrdDocInf>
          <RfrdDocAmt>
            <DuePyblAmt Ccy="EUR">78000.00</DuePyblAmt>
          </RfrdDocAmt>
          <RfrdDocRltdInf>
            <RfrdDocTp>
              <CdOrPrtry>
                <Cd>PUOR</Cd>
              </CdOrPrtry>
            </RfrdDocTp>
            <RfrdDocRef>DLT-TX-0x1234567890abcdef1234567890abcdef12345678</RfrdDocRef>
          </RfrdDocRltdInf>
        </Strd>
      </RmtInf>

      <!-- Supplementary Data (Compliance & Plan Metadata) -->
      <SplmtryData>
        <PlcAndNm>ComboFlowComplianceData</PlcAndNm>
        <Envlp>
          <ComboFlowData xmlns="urn:example:comboflow:xsd:1.0">
            <!-- Plan Identification -->
            <PlanId>PLAN-12345678-ABCD-EFGH-IJKL</PlanId>
            <PlanHash>0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890</PlanHash>
            <ExecutionId>EXEC-2025-01-15-001234</ExecutionId>

            <!-- Compliance Attributes -->
            <Compliance>
              <LEI>5493000IBP32UQZ0KL24</LEI>
              <DID>did:web:example.com:user:123</DID>
              <KYC>
                <Level>2</Level>
                <Provider>Onfido</Provider>
                <Verified>true</Verified>
                <VerifiedAt>2025-01-10T08:00:00Z</VerifiedAt>
                <ExpiresAt>2026-12-31T23:59:59Z</ExpiresAt>
              </KYC>
              <AML>
                <Passed>true</Passed>
                <Provider>Chainalysis</Provider>
                <LastCheck>2025-01-15T09:00:00Z</LastCheck>
                <RiskLevel>LOW</RiskLevel>
                <ScreeningReference>AML-REF-2025-01-15-001</ScreeningReference>
              </AML>
            </Compliance>

            <!-- Digital Signature -->
            <DigitalSignature>
              <Algorithm>ECDSA</Algorithm>
              <Curve>secp256k1</Curve>
              <HashAlgorithm>SHA-256</HashAlgorithm>
              <SignerAddress>0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb</SignerAddress>
              <SignatureValue>0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef</SignatureValue>
              <SignedAt>2025-01-15T10:25:00Z</SignedAt>
            </DigitalSignature>

            <!-- DLT Transaction Reference -->
            <DLTReference>
              <ChainId>1</ChainId>
              <Network>Ethereum Mainnet</Network>
              <TransactionHash>0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef</TransactionHash>
              <BlockNumber>18500000</BlockNumber>
              <BlockTimestamp>2025-01-15T10:29:45Z</BlockTimestamp>
            </DLTReference>

            <!-- Notary Proof -->
            <NotaryProof>
              <ProofHash>0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321</ProofHash>
              <NotaryAddress>0xNotaryRegistryContractAddress</NotaryAddress>
              <NotarizedAt>2025-01-15T10:28:00Z</NotarizedAt>
            </NotaryProof>

            <!-- Workflow Steps Summary -->
            <WorkflowSteps>
              <Step index="1" type="borrow" asset="CBDC_USD" amount="100000" />
              <Step index="2" type="swap" from="CBDC_USD" to="CBDC_EUR" amount="100000" />
              <Step index="3" type="repay" asset="CBDC_USD" amount="20000" />
              <Step index="4" type="pay" asset="EUR" amount="78000" />
            </WorkflowSteps>
          </ComboFlowData>
        </Envlp>
      </SplmtryData>
    </CdtTrfTxInf>
  </FIToFICstmrCdtTrf>
</Document>

Key Elements

  1. Plan ID in EndToEndId: PLAN-12345678-ABCD-EFGH-IJKL
  2. LEI in InitgPty.Id and Dbtr.Id: 5493000IBP32UQZ0KL24
  3. DLT Reference in RmtInf: DLT transaction hash
  4. Compliance Data in SplmtryData: Full compliance attributes (LEI, DID, KYC, AML)
  5. Digital Signature in SplmtryData: User's wallet signature
  6. Notary Proof in SplmtryData: Notary registry proof hash

2. camt.052 - Bank Statement (for Reconciliation)

Example

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.11">
  <BkToCstmrStmt>
    <GrpHdr>
      <MsgId>STMT-2025-01-15-001</MsgId>
      <CreDtTm>2025-01-15T11:00:00Z</CreDtTm>
      <MsgRcpt>
        <Nm>Example Corp Ltd.</Nm>
        <Id>
          <OrgId>
            <Othr>
              <Id>5493000IBP32UQZ0KL24</Id>
              <SchmeNm>
                <Cd>LEI</Cd>
              </SchmeNm>
            </Othr>
          </OrgId>
        </Id>
      </MsgRcpt>
    </GrpHdr>
    <Stmt>
      <Id>STMT-2025-01-15-001</Id>
      <CreDtTm>2025-01-15T11:00:00Z</CreDtTm>
      <Acct>
        <Id>
          <IBAN>DE89370400440532013000</IBAN>
        </Id>
        <Tp>
          <Cd>CACC</Cd>
        </Tp>
        <Ccy>EUR</Ccy>
      </Acct>
      <Bal>
        <Tp>
          <CdOrPrtry>
            <Cd>OPBD</Cd>
          </CdOrPrtry>
        </Tp>
        <Amt Ccy="EUR">100000.00</Amt>
        <Dt>
          <Dt>2025-01-15</Dt>
        </Dt>
      </Bal>
      <Ntry>
        <Amt Ccy="EUR">-78000.00</Amt>
        <CdtDbtInd>DBIT</CdtDbtInd>
        <Sts>BOOK</Sts>
        <BookgDt>
          <Dt>2025-01-15</Dt>
        </BookgDt>
        <ValDt>
          <Dt>2025-01-15</Dt>
        </ValDt>
        <AcctSvcrRef>TX-2025-01-15-001234</AcctSvcrRef>
        <BkTxCd>
          <Domn>
            <Cd>PMNT</Cd>
            <Fmly>
              <Cd>ICDT</Cd>
              <SubFmlyCd>ESCT</SubFmlyCd>
            </Fmly>
          </Domn>
        </BkTxCd>
        <NtryDtls>
          <TxDtls>
            <Refs>
              <EndToEndId>PLAN-12345678-ABCD-EFGH-IJKL</EndToEndId>
              <TxId>TX-2025-01-15-001234</TxId>
            </Refs>
            <RmtInf>
              <Ustrd>Plan ID: PLAN-12345678-ABCD-EFGH-IJKL</Ustrd>
            </RmtInf>
            <RltdPties>
              <Cdtr>
                <Nm>Beneficiary Corp</Nm>
              </Cdtr>
            </RltdPties>
          </TxDtls>
        </NtryDtls>
      </Ntry>
      <Bal>
        <Tp>
          <CdOrPrtry>
            <Cd>CLBD</Cd>
          </CdOrPrtry>
        </Tp>
        <Amt Ccy="EUR">22000.00</Amt>
        <Dt>
          <Dt>2025-01-15</Dt>
        </Dt>
      </Bal>
    </Stmt>
  </BkToCstmrStmt>
</Document>

Key Elements

  1. Plan ID in EndToEndId: Links statement entry to execution plan
  2. LEI in MsgRcpt.Id: Account holder's LEI
  3. Transaction Reference: Links to original payment instruction

3. camt.053 - Account Statement (Detailed)

Example

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.10">
  <BkToCstmrStmt>
    <GrpHdr>
      <MsgId>STMT-DETAIL-2025-01-15-001</MsgId>
      <CreDtTm>2025-01-15T11:00:00Z</CreDtTm>
    </GrpHdr>
    <Stmt>
      <Id>STMT-DETAIL-2025-01-15-001</Id>
      <Acct>
        <Id>
          <IBAN>DE89370400440532013000</IBAN>
        </Id>
      </Acct>
      <Ntry>
        <Amt Ccy="EUR">-78000.00</Amt>
        <CdtDbtInd>DBIT</CdtDbtInd>
        <Sts>BOOK</Sts>
        <BookgDt>
          <Dt>2025-01-15</Dt>
        </BookgDt>
        <NtryDtls>
          <TxDtls>
            <Refs>
              <EndToEndId>PLAN-12345678-ABCD-EFGH-IJKL</EndToEndId>
              <AcctSvcrRef>TX-2025-01-15-001234</AcctSvcrRef>
            </Refs>
            <RmtInf>
              <Ustrd>Plan ID: PLAN-12345678-ABCD-EFGH-IJKL | DLT TX: 0x1234...5678</Ustrd>
            </RmtInf>
            <RltdPties>
              <Dbtr>
                <Nm>Example Corp Ltd.</Nm>
                <Id>
                  <OrgId>
                    <Othr>
                      <Id>5493000IBP32UQZ0KL24</Id>
                      <SchmeNm>
                        <Cd>LEI</Cd>
                      </SchmeNm>
                    </Othr>
                  </OrgId>
                </Id>
              </Dbtr>
              <Cdtr>
                <Nm>Beneficiary Corp</Nm>
              </Cdtr>
            </RltdPties>
            <RltdAgts>
              <DbtrAgt>
                <FinInstnId>
                  <BICFI>BANKDEFFXXX</BICFI>
                </FinInstnId>
              </DbtrAgt>
            </RltdAgts>
          </TxDtls>
        </NtryDtls>
      </Ntry>
    </Stmt>
  </BkToCstmrStmt>
</Document>

4. camt.056 - Cancellation Request (for Rollback)

Example

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.056.001.10">
  <FIToFIPmtCxlReq>
    <GrpHdr>
      <MsgId>CANCEL-2025-01-15-001</MsgId>
      <CreDtTm>2025-01-15T10:35:00Z</CreDtTm>
      <InitgPty>
        <Nm>Example Corp Ltd.</Nm>
        <Id>
          <OrgId>
            <Othr>
              <Id>5493000IBP32UQZ0KL24</Id>
              <SchmeNm>
                <Cd>LEI</Cd>
              </SchmeNm>
            </Othr>
          </OrgId>
        </Id>
      </InitgPty>
    </GrpHdr>
    <Undrlyg>
      <TxInf>
        <CxlId>CANCEL-TX-2025-01-15-001</CxlId>
        <CxlRsn>
          <Cd>DUPL</Cd>
          <AddtlInf>DLT execution failed. Rolling back payment instruction.</AddtlInf>
        </CxlRsn>
        <OrgnlGrpInf>
          <OrgnlMsgId>MSG-2025-01-15-001234</OrgnlMsgId>
          <OrgnlMsgNmId>pacs.008.001.10</OrgnlMsgNmId>
          <OrgnlCreDtTm>2025-01-15T10:30:00Z</OrgnlCreDtTm>
        </OrgnlGrpInf>
        <OrgnlInstrId>TX-2025-01-15-001234</OrgnlInstrId>
        <OrgnlEndToEndId>PLAN-12345678-ABCD-EFGH-IJKL</OrgnlEndToEndId>
        <OrgnlInstdAmt>
          <Amt Ccy="EUR">78000.00</Amt>
        </OrgnlInstdAmt>
        <OrgnlTxRef>
          <EndToEndId>PLAN-12345678-ABCD-EFGH-IJKL</EndToEndId>
          <TxId>TX-2025-01-15-001234</TxId>
        </OrgnlTxRef>
        <SplmtryData>
          <PlcAndNm>ComboFlowRollbackData</PlcAndNm>
          <Envlp>
            <RollbackData xmlns="urn:example:comboflow:xsd:1.0">
              <PlanId>PLAN-12345678-ABCD-EFGH-IJKL</PlanId>
              <RollbackReason>DLT_EXECUTION_FAILED</RollbackReason>
              <DLTState>ROLLED_BACK</DLTState>
              <NotaryProof>0xfedcba0987654321...</NotaryProof>
            </RollbackData>
          </Envlp>
        </SplmtryData>
      </TxInf>
    </Undrlyg>
  </FIToFIPmtCxlReq>
</Document>

Key Elements

  1. Cancellation Reason: DLT execution failed
  2. Original Plan ID: PLAN-12345678-ABCD-EFGH-IJKL
  3. Rollback Data: DLT state and notary proof in supplementary data

5. Message Generation Code

TypeScript Example

import { generateISO20022Message } from '@comboflow/iso20022';

const generatePaymentInstruction = async (
  plan: Plan,
  compliance: ComplianceStatus,
  signature: string,
  dltTxHash: string,
  notaryProof: string
): Promise<string> => {
  const isoMessage = generateISO20022Message({
    messageType: 'pacs.008',
    groupHeader: {
      messageId: `MSG-${Date.now()}`,
      creationDateTime: new Date(),
      initiatingParty: {
        name: 'Example Corp Ltd.',
        lei: compliance.lei
      }
    },
    creditTransfer: {
      paymentId: {
        endToEndId: plan.planId,
        transactionId: `TX-${Date.now()}`
      },
      amount: {
        currency: 'EUR',
        value: 78000.00
      },
      debtor: {
        name: 'Example Corp Ltd.',
        lei: compliance.lei,
        account: {
          iban: 'DE89370400440532013000'
        }
      },
      creditor: {
        name: 'Beneficiary Corp',
        account: {
          iban: 'DE89370400440532013001'
        }
      },
      remittanceInformation: {
        unstructured: `Plan ID: ${plan.planId} | Combo Flow Execution`
      },
      supplementaryData: {
        planId: plan.planId,
        planHash: plan.planHash,
        compliance: {
          lei: compliance.lei,
          did: compliance.did,
          kyc: compliance.kyc,
          aml: compliance.aml
        },
        digitalSignature: {
          algorithm: 'ECDSA',
          signerAddress: plan.signerAddress,
          signatureValue: signature
        },
        dltReference: {
          chainId: 1,
          transactionHash: dltTxHash
        },
        notaryProof: {
          proofHash: notaryProof
        }
      }
    }
  });

  return isoMessage;
};

Document Version: 1.0
Last Updated: 2025-01-15
Author: Integration Team