commit 19241961a197530ab219ac194c02abac295b8953
parent 1bbf0419eb957881cebc19e5ae854a04116c7c10
Author: Florian Dold <florian.dold@gmail.com>
Date: Fri, 3 Jul 2020 13:31:16 +0530
use our own test data, iban generator tool
Diffstat:
6 files changed, 296 insertions(+), 721 deletions(-)
diff --git a/contrib/ibangen.py b/contrib/ibangen.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+
+# Copyright (c) 2020 Taler Systems S.A.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+import click
+import random
+
+def complete_iban(s):
+ n = int("".join([str(int(x, 26)) for x in (s[4:] + s[0:2] + "00")]))
+ c = 98 - (n % 97)
+ return (s[:2] + str(c).ljust(2, "0") + s[4:]).upper()
+
+
+@click.command()
+def geniban():
+ bban = "12345678"
+ accno = "".join((str(random.randint(0, 9)) for _ in range(10)))
+ iban = complete_iban("DE00" + bban + accno)
+ print(iban)
+
+if __name__ == '__main__':
+ geniban()
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
@@ -131,8 +131,8 @@ data class TransactionInfo(
val paymentInformationId: String? = null,
val messageId: String? = null,
- val amount: CurrencyAmount?,
- val creditDebitIndicator: CreditDebitIndicator?,
+ val amount: CurrencyAmount,
+ val creditDebitIndicator: CreditDebitIndicator,
val instructedAmount: CurrencyAmount?,
val transactionAmount: CurrencyAmount?,
@@ -230,7 +230,10 @@ fun createPain001document(paymentData: NexusPaymentInitiationData): String {
root("Document") {
attribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03")
attribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
- attribute("xsi:schemaLocation", "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd")
+ attribute(
+ "xsi:schemaLocation",
+ "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd"
+ )
element("CstmrCdtTrfInitn") {
element("GrpHdr") {
element("MsgId") {
@@ -408,21 +411,67 @@ private fun XmlElementDestructor.extractMaybeCurrencyExchange(): CurrencyExchang
}
-private fun XmlElementDestructor.extractTransactionInfos(): List<TransactionInfo> {
+private fun XmlElementDestructor.extractTransactionInfos(
+ outerAmount: CurrencyAmount,
+ outerCreditDebitIndicator: CreditDebitIndicator
+): List<TransactionInfo> {
+
+ val numTxDtls = requireUniqueChildNamed("NtryDtls") {
+ mapEachChildNamed("TxDtls") { Unit }
+ }.count()
+
return requireUniqueChildNamed("NtryDtls") {
mapEachChildNamed("TxDtls") {
+
+ val instructedAmount = maybeUniqueChildNamed("AmtDtls") {
+ maybeUniqueChildNamed("InstrAmt") { extractCurrencyAmount() }
+ }
+
+ val transactionAmount = maybeUniqueChildNamed("AmtDtls") {
+ maybeUniqueChildNamed("TxAmt") { extractCurrencyAmount() }
+ }
+
+ var amount = maybeExtractCurrencyAmount()
+ var creditDebitIndicator = maybeUniqueChildNamed("CdtDbtInd") { it.textContent }?.let {
+ CreditDebitIndicator.valueOf(it)
+ }
+ if (amount == null) {
+ when {
+ numTxDtls == 1 -> {
+ amount = outerAmount
+ creditDebitIndicator = outerCreditDebitIndicator
+ }
+ transactionAmount?.currency == outerAmount.currency -> {
+ amount = transactionAmount
+ creditDebitIndicator = outerCreditDebitIndicator
+ }
+ instructedAmount?.currency == outerAmount.currency -> {
+ amount = instructedAmount
+ creditDebitIndicator = outerCreditDebitIndicator
+ }
+ else -> {
+ throw Error("invalid camt, no amount for transaction details of entry details")
+ }
+ }
+ }
+
+ if (creditDebitIndicator == null) {
+ throw Error("invalid camt, no credit/debit indicator for transaction details of entry details")
+ }
+
TransactionInfo(
batchMessageId = null,
batchPaymentInformationId = null,
- amount = maybeExtractCurrencyAmount(),
- creditDebitIndicator = maybeUniqueChildNamed("CdtDbtInd") { it.textContent }?.let {
- CreditDebitIndicator.valueOf(it)
+ amount = amount,
+ creditDebitIndicator = creditDebitIndicator,
+ instructedAmount = instructedAmount,
+ instructedAmountCurrencyExchange = maybeUniqueChildNamed("AmtDtls") {
+ maybeUniqueChildNamed("InstrAmt") { extractMaybeCurrencyExchange() }
+ },
+ transactionAmount = transactionAmount,
+ transactionAmountCurrencyExchange = maybeUniqueChildNamed("AmtDtls") {
+ maybeUniqueChildNamed("TxAmt") { extractMaybeCurrencyExchange() }
},
- instructedAmount = maybeUniqueChildNamed("AmtDtls") { maybeUniqueChildNamed("InstrAmt") { extractCurrencyAmount() } },
- instructedAmountCurrencyExchange = maybeUniqueChildNamed("AmtDtls") { maybeUniqueChildNamed("InstrAmt") { extractMaybeCurrencyExchange() } },
- transactionAmount = maybeUniqueChildNamed("AmtDtls") { maybeUniqueChildNamed("TxAmt") { extractCurrencyAmount() } },
- transactionAmountCurrencyExchange = maybeUniqueChildNamed("AmtDtls") { maybeUniqueChildNamed("TxAmt") { extractMaybeCurrencyExchange() } },
-
endToEndId = maybeUniqueChildNamed("Refs") {
maybeUniqueChildNamed("EndToEndId") { it.textContent }
},
@@ -434,7 +483,7 @@ private fun XmlElementDestructor.extractTransactionInfos(): List<TransactionInfo
},
unstructuredRemittanceInformation = maybeUniqueChildNamed("RmtInf") {
val chunks = mapEachChildNamed("Ustrd", { it.textContent })
- if (chunks.size == 0) {
+ if (chunks.isEmpty()) {
null
} else {
chunks.joinToString()
@@ -486,7 +535,7 @@ private fun XmlElementDestructor.extractInnerTransactions(): CamtReport {
val acctSvcrRef = maybeUniqueChildNamed("AcctSvcrRef") { it.textContent }
val entryRef = maybeUniqueChildNamed("NtryRef") { it.textContent }
// For now, only support account servicer reference as id
- val transactionInfos = extractTransactionInfos()
+ val transactionInfos = extractTransactionInfos(CurrencyAmount(currency, amount), creditDebitIndicator)
CamtBankAccountEntry(
entryAmount = CurrencyAmount(currency, amount),
status = status,
diff --git a/nexus/src/test/kotlin/Iso20022Test.kt b/nexus/src/test/kotlin/Iso20022Test.kt
@@ -17,17 +17,17 @@ fun loadXmlResource(name: String): Document {
class Iso20022Test {
@Test
fun testTransactionsImport() {
- val camt53 = loadXmlResource("iso20022-samples/camt.053.001.02.gesamtbeispiel.xml")
+ val camt53 = loadXmlResource("iso20022-samples/camt.053/de.camt.053.001.02.xml")
val r = parseCamtMessage(camt53)
- assertEquals(r.messageId, "27632364572")
- assertEquals(r.creationDateTime, "2016-05-11T19:30:47.0+01:00")
+ assertEquals(r.messageId, "msg-001")
+ assertEquals(r.creationDateTime, "2020-07-03T12:44:40+05:30")
assertEquals(r.messageType, CashManagementResponseType.Statement)
assertEquals(r.reports.size, 1)
assertEquals(r.reports[0].entries[0].entryAmount.amount, "100.00")
assertEquals(r.reports[0].entries[0].entryAmount.currency, "EUR")
assertEquals(r.reports[0].entries[0].status, EntryStatus.BOOK)
assertEquals(r.reports[0].entries[0].entryRef, null)
- assertEquals(r.reports[0].entries[0].accountServicerRef, "Bankreferenz")
+ assertEquals(r.reports[0].entries[0].accountServicerRef, "acctsvcrref-001")
assertEquals(r.reports[0].entries[0].bankTransactionCode.domain, "PMNT")
assertEquals(r.reports[0].entries[0].bankTransactionCode.family, "RCDT")
assertEquals(r.reports[0].entries[0].bankTransactionCode.subfamily, "ESCT")
diff --git a/nexus/src/test/resources/iso20022-samples/FI_camt_052_sample.xml b/nexus/src/test/resources/iso20022-samples/FI_camt_052_sample.xml
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!-- Sample XML file generated by FFFS (www.fkl.fi) B2C project for FInnish Account Report, 2009-11-02, for different Entry instance for --><!-- MT210 / Prenotice of incoming inter national transaction (without balances) and one simple intra day balance report with one transaction--><Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02camt.052.001.02.xsd"> <BkToCstmrAcctRpt> <GrpHdr> <MsgId>BANKFILEID219073</MsgId> <CreDtTm>2009-10-30T12:01:45+02:00</CreDtTm> <MsgRcpt> <Id> <OrgId> <Othr> <Id>123456789</Id> <SchmeNm> <Cd>BANK</Cd> </SchmeNm> </Othr> </OrgId> </Id> </MsgRcpt> <AddtlInf>Some additional message-specific info can be delivered from bank to customer here</AddtlInf> </GrpHdr> <!-- First Report with prenotice of incoming transaction separately in its onw report with no balances--> <Rpt> <Id>BANKFILEID00001NTR00001</Id> <!-- Electronic Sequence Number is optional per bank --> <ElctrncSeqNb>196</ElctrncSeqNb> <CreDtTm>2009-10-30T12:01:45+02:00</CreDtTm> <Acct> <Id> <IBAN>FI7433010001222090</IBAN> </Id> <Tp> <Cd>CACC</Cd> </Tp> <Ccy>EUR</Ccy> <Nm>Account name</Nm> <Ownr> <Nm>BANK ACCOUNT OWNER</Nm> <Id> <OrgId> <Othr> <Id>123456789</Id> <SchmeNm> <Cd>CUST</Cd> </SchmeNm> </Othr> </OrgId> </Id> </Ownr> <Svcr> <FinInstnId> <BIC>ESSEFIHX</BIC> </FinInstnId> </Svcr> </Acct> <!-- --> <TxsSummry> <TtlNtries> <NbOfNtries>1</NbOfNtries> <Sum>2120.00</Sum> <TtlNetNtryAmt>2120.00</TtlNetNtryAmt> <CdtDbtInd>CRDT</CdtDbtInd> </TtlNtries> </TxsSummry> <Ntry> <!-- As Account Servicer Reference is not yet available, NtryRef refers to prenotice SWIFT message --> <NtryRef>21892819</NtryRef> <Amt Ccy="EUR">2120.00</Amt> <CdtDbtInd>CRDT</CdtDbtInd> <Sts>PDNG</Sts> <BookgDt> <Dt>2009-11-02</Dt> </BookgDt> <ValDt> <Dt>2009-11-03</Dt> </ValDt> <BkTxCd> <Domn> <Cd>PMNT</Cd> <Fmly> <Cd>RCDT</Cd> <SubFmlyCd>XBCT</SubFmlyCd> </Fmly> </Domn> </BkTxCd> <NtryDtls> <TxDtls> <Refs> <!-- Reference used by the Debtor banks--> <InstrId>ISSRBKREF12345678</InstrId> <TxId>21892819</TxId> </Refs> <AmtDtls> <InstdAmt> <Amt Ccy="USD">3200.00</Amt> <CcyXchg> <SrcCcy>USD</SrcCcy> <TrgtCcy>EUR</TrgtCcy> <UnitCcy>EUR</UnitCcy> <XchgRate>0.666667</XchgRate> <!-- May differ in final booking --> <QtnDt>2009-10-30T10:00:00+02:00</QtnDt> </CcyXchg> </InstdAmt> <TxAmt> <Amt Ccy="EUR">2120.00</Amt> </TxAmt> <!-- Optional <CntrValAmt> <Amt Ccy="USD">3200.00</Amt> <CcyXchg> <SrcCcy>USD</SrcCcy> <TrgtCcy>EUR</TrgtCcy> <UnitCcy>EUR</UnitCcy> <XchgRate>0.666667</XchgRate> <QtnDt>2009-10-30T10:00:00+02:00</QtnDt> </CcyXchg> </CntrValAmt> --> </AmtDtls> <RltdPties> <Dbtr> <Nm>DEBTOR NAME</Nm> <Id> <OrgId> <Othr> <Id>123456789</Id> <SchmeNm> <Cd>DUNS</Cd> </SchmeNm> </Othr> </OrgId> </Id> </Dbtr> </RltdPties> <RltdAgts> <DbtrAgt> <FinInstnId> <BIC>BOFAUS6H</BIC> </FinInstnId> </DbtrAgt> </RltdAgts> <RmtInf> <Ustrd>INVOICE US20291092</Ustrd> </RmtInf> </TxDtls> </NtryDtls> </Ntry> </Rpt> <!-- Second Report with one booked intra-day transaction with inter --> <Rpt> <Id>BANKRPTID1972009</Id> <ElctrncSeqNb>197</ElctrncSeqNb> <CreDtTm>2009-10-30T12:00:00+02:00</CreDtTm> <FrToDt> <!-- Times also sepcified to indicate transaction report time limits within day --> <FrDtTm>2009-10-30T10:00:00+02:00</FrDtTm> <ToDtTm>2009-10-30T12:00:00+02:00</ToDtTm> </FrToDt> <Acct> <Id> <IBAN>FI7433010001222090</IBAN> </Id> <Tp> <Cd>CACC</Cd> </Tp> <Ccy>EUR</Ccy> <Ownr> <Nm>BANK ACCOUNT OWNER</Nm> <PstlAdr> <StrtNm>HELSINGINKATU</StrtNm> <BldgNb>31</BldgNb> <PstCd>00100</PstCd> <TwnNm>HELSINKI</TwnNm> <Ctry>FI</Ctry> </PstlAdr> <Id> <OrgId> <Othr> <Id>12345678901</Id> <SchmeNm> <Cd>BANK</Cd> </SchmeNm> </Othr> </OrgId> </Id> </Ownr> <Svcr> <FinInstnId> <BIC>ESSEFIHX</BIC> </FinInstnId> </Svcr> </Acct> <RltdAcct> <Id> <IBAN>FI1533010001911270</IBAN> </Id> <Ccy>EUR</Ccy> </RltdAcct> <Bal> <!-- "Opening balance" as interim booked on specific time of intra-day. May be also OPBD if it is really Opening Booked Balance for the reporting day --> <Tp> <CdOrPrtry> <Cd>ITBD</Cd> </CdOrPrtry> </Tp> <CdtLine> <Incl>false</Incl> <Amt Ccy="EUR">1000.00</Amt> </CdtLine> <Amt Ccy="EUR">1000.00</Amt> <CdtDbtInd>CRDT</CdtDbtInd> <Dt> <DtTm>2009-10-30T10:00:00+02:00</DtTm> </Dt> </Bal> <Bal> <!-- "Closing balance" as interim booked on specific time of intra-day. --> <Tp> <CdOrPrtry> <Cd>ITBD</Cd> </CdOrPrtry> </Tp> <CdtLine> <Incl>false</Incl> <Amt Ccy="EUR">1100.00</Amt> </CdtLine> <Amt Ccy="EUR">1100.00</Amt> <CdtDbtInd>CRDT</CdtDbtInd> <Dt> <DtTm>2009-10-30T12:00:00+02:00</DtTm> </Dt> </Bal> <TxsSummry> <TtlNtries> <NbOfNtries>1</NbOfNtries> </TtlNtries> <TtlCdtNtries> <NbOfNtries>1</NbOfNtries> <Sum>100.00</Sum> </TtlCdtNtries> </TxsSummry> <!--Transaction 1/ Single incoming SCT--> <Ntry> <Amt Ccy="EUR">100.00</Amt> <CdtDbtInd>CRDT</CdtDbtInd> <Sts>BOOK</Sts> <!-- Time with Booking Date to give info of booking event on bank ledger --> <BookgDt> <DtTm>2009-10-30T11:00:00+02:00</DtTm> </BookgDt> <ValDt> <Dt>2009-10-30</Dt> </ValDt> <AcctSvcrRef>091029ACCTSTMTARCH08</AcctSvcrRef> <BkTxCd> <Domn> <Cd>PMNT</Cd> <Fmly> <Cd>RCDT</Cd> <SubFmlyCd>ESCT</SubFmlyCd> </Fmly> </Domn> </BkTxCd> <NtryDtls> <TxDtls> <Refs> <EndToEndId>EndToEndIdSCT01</EndToEndId> </Refs> <AmtDtls> <TxAmt> <Amt Ccy="EUR">100.00</Amt> </TxAmt> </AmtDtls> <RltdPties> <Dbtr> <Nm>DEBTOR</Nm> </Dbtr> <UltmtDbtr> <Nm>ULTIMATE DEBTOR</Nm> <Id> <OrgId> <Othr> <Id>987654321</Id> <SchmeNm> <Cd>TXID</Cd> </SchmeNm> </Othr> </OrgId> </Id> </UltmtDbtr> </RltdPties> <RltdAgts> <DbtrAgt> <FinInstnId> <BIC>NDEAFIHH</BIC> </FinInstnId> </DbtrAgt> </RltdAgts> <Purp> <Cd>TREA</Cd> </Purp> <RmtInf> <Strd> <CdtrRefInf> <Tp> <CdOrPrtry> <Cd>SCOR</Cd> </CdOrPrtry> <Issr>ISO</Issr> </Tp> <Ref>RF98123456789012</Ref> </CdtrRefInf> </Strd> </RmtInf> <RltdDts> <AccptncDtTm>2009-10-28T03:00:00+02:00</AccptncDtTm> </RltdDts> </TxDtls> </NtryDtls> </Ntry> </Rpt> </BkToCstmrAcctRpt></Document>
-\ No newline at end of file
diff --git a/nexus/src/test/resources/iso20022-samples/camt.053.001.02.gesamtbeispiel.xml b/nexus/src/test/resources/iso20022-samples/camt.053.001.02.gesamtbeispiel.xml
@@ -1,701 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Mit XMLSpy v2008 rel. 2 sp2 (http://www.altova.com) im Mai 2016 von der SIZ GmbH (Wenzel) angepasst hinsichtlich Anlage 3, Version 3.0: -->
-<!-- 1. BkTxCd Pflicht auf Entryebene, 2. Issuer nun "DK" (Statt "ZKA"), 3. Mapping GVC auf Domn, 4. Nichtdrehen bei R-Transaktionen illustriert 5. Schluss-Saldo angepasst (Löschung der DTAUS-Umsätze)-->
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02 camt.053.001.02.xsd">
- <BkToCstmrStmt>
- <GrpHdr>
- <MsgId>27632364572</MsgId>
- <CreDtTm>2016-05-11T19:30:47.0+01:00</CreDtTm>
- <MsgRcpt>
- <Id>
- <OrgId>
- <Othr>
- <Id>BCS45678</Id>
- </Othr>
- </OrgId>
- </Id>
- </MsgRcpt>
- <MsgPgntn>
- <PgNb>1</PgNb>
- <LastPgInd>true</LastPgInd>
- </MsgPgntn>
- </GrpHdr>
- <Stmt>
- <Id>2736482736482</Id>
- <ElctrncSeqNb>101</ElctrncSeqNb>
- <!--Folgendes Feld ist optional und könnte die Papier-KAZ enthalten-->
- <LglSeqNb>32</LglSeqNb>
- <CreDtTm>2016-05-11T17:30:47.0+01:00</CreDtTm>
- <Acct>
- <Id>
- <IBAN>DE62210500001234567890</IBAN>
- </Id>
- <Ccy>EUR</Ccy>
- <Ownr>
- <Nm>Name Kontoinhaber</Nm>
- </Ownr>
- <Svcr>
- <FinInstnId>
- <BIC>BANKDEFFXXX</BIC>
- <Othr>
- <Id>DE123456789</Id>
- <Issr>UmsStId</Issr>
- </Othr>
- </FinInstnId>
- </Svcr>
- </Acct>
- <Bal>
- <Tp>
- <CdOrPrtry>
- <Cd>PRCD</Cd>
- </CdOrPrtry>
- </Tp>
- <Amt Ccy="EUR">112.72</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Dt>
- <Dt>2016-05-11</Dt>
- </Dt>
- </Bal>
- <Bal>
- <Tp>
- <CdOrPrtry>
- <Cd>CLBD</Cd>
- </CdOrPrtry>
- </Tp>
- <Amt Ccy="EUR">158530.32</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Dt>
- <Dt>2016-05-11</Dt>
- </Dt>
- </Bal>
- <!-- Beispiel 1: SEPA-Zahlungen (Ueberweisung, Lastschrift, R-Nachricht -->
- <!--Gutschrift aufgrund eines SEPA-Ueberweisungseinganges-->
- <Ntry>
- <Amt Ccy="EUR">100.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>ESCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>166</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <TxDtls>
- <Refs>
- <EndToEndId>Ende-zu-Ende-Id des Ueberweisenden</EndToEndId>
- </Refs>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>ESCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NTRF+166</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Herr Ueberweisender</Nm>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <IBAN>DE21500500001234567897</IBAN>
- </Id>
- </DbtrAcct>
- <UltmtDbtr>
- <Nm>Herr Debtor Reference Party</Nm>
- </UltmtDbtr>
- <Cdtr>
- <Nm>Herr Kontoinhaber</Nm>
- </Cdtr>
- <UltmtCdtr>
- <Nm>Herr Creditor Reference Party</Nm>
- </UltmtCdtr>
- </RltdPties>
- <Purp>
- <Cd>GDDS</Cd>
- </Purp>
- <RmtInf>
- <Ustrd>Rechnungsnr. 4711 vom 20.04.2016</Ustrd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- <AddtlNtryInf>SEPA GUTSCHRIFT</AddtlNtryInf>
- </Ntry>
- <!--Gutschrift aufgrund einer zurueckgekommenen SEPA-Ueberweisung-->
- <Ntry>
- <Amt Ccy="EUR">200.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>ICDT</Cd>
- <SubFmlyCd>RRTN</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>159</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <TxDtls>
- <Refs>
- <EndToEndId>Urspr. E2E-Id der Hintransaktion</EndToEndId>
- </Refs>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>ICDT</Cd>
- <SubFmlyCd>RRTN</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NRTI+159++901</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <RmtInf>
- <Ustrd>Angabe des urspruenglichen Verwendungszweckes</Ustrd>
- </RmtInf>
- <!--Informationen zur Originaltransaktion. Da die Belegung von Domain optional ist, kann auch nur Prtry (GVC) vorhanden sein-->
- <RtrInf>
- <OrgnlBkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>ICDT</Cd>
- <SubFmlyCd>ESCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NTRF+116</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </OrgnlBkTxCd>
- <Orgtr>
- <Id>
- <OrgId>
- <BICOrBEI>BANKDEHH</BICOrBEI>
- </OrgId>
- </Id>
- </Orgtr>
- <Rsn>
- <Cd>AC01</Cd>
- </Rsn>
- <AddtlInf>IBAN FEHLERHAFT</AddtlInf>
- </RtrInf>
- </TxDtls>
- </NtryDtls>
- <AddtlNtryInf>SEPA RUECKBUCHUNG</AddtlNtryInf>
- </Ntry>
- <!--Belastung aufgrund einer SEPA-Lastschrift-->
- <Ntry>
- <Amt Ccy="EUR">50.00</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>RDDT</Cd>
- <SubFmlyCd>ESDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>105</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <TxDtls>
- <Refs>
- <EndToEndId>E2E-Id vergeben vom Glaeubiger</EndToEndId>
- <MndtId>Ref. des SEPA-Lastschriftmandats</MndtId>
- </Refs>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>RDDT</Cd>
- <SubFmlyCd>ESDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NDDT+105</Cd>
- <Issr>DKA</Issr>
- </Prtry>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Herr Zahlungspflichtiger</Nm>
- </Dbtr>
- <UltmtDbtr>
- <Nm>Herr Debtor Reference Party</Nm>
- </UltmtDbtr>
- <Cdtr>
- <Nm>Glaeubigerfirma</Nm>
- <Id>
- <PrvtId>
- <Othr>
- <Id>Cdtr-Id des Glaeubigers</Id>
- </Othr>
- </PrvtId>
- </Id>
- </Cdtr>
- </RltdPties>
- <Purp>
- <Cd>PHON</Cd>
- </Purp>
- <RmtInf>
- <Ustrd>Telefonrechnung April 2016, Vertragsnummer 3536456345</Ustrd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- <AddtlNtryInf>SEPA LASTSCHRIFT</AddtlNtryInf>
- </Ntry>
- <!-- Beispiel 2: DTAUS-Zahlungen (Ueberweisung, Lastschrift, Rueckgabe) BEISPIEL ENTFERNT -->
- <!-- Beispiel 3a: Sammlerdarstellung mit Aufloesung innerhalb der Nachricht -->
- <!--Belastung aufgrund von SEPA-Lastschriftrueckgaben (Sammelbuchung) mit Sammleraufloesung unter Transaction Details-->
- <Ntry>
- <Amt Ccy="EUR">276</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>109</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <Btch>
- <NbOfTxs>3</NbOfTxs>
- </Btch>
- <TxDtls>
- <!-- Ab hier Aufloesung des Sammlers bestehend aus 3 Einzelumsaetzen -->
- <Refs>
- <EndToEndId>79892</EndToEndId>
- <MndtId>10001</MndtId>
- </Refs>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="EUR">76</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NRTI+109++901</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <!--Weil bei R-Transaktionen nicht gedreht wird, stehen hier die Originals-->
- <RltdPties>
- <Dbtr>
- <Nm>Herr Zahlungspflichtiger 1</Nm>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <IBAN>DE83700202707777777777</IBAN>
- </Id>
- </DbtrAcct>
- <Cdtr>
- <Nm>Telefongesellschaft ABC</Nm>
- <Id>
- <PrvtId>
- <Othr>
- <Id>CdtrId des SEPA-Lastschrifteinr.</Id>
- </Othr>
- </PrvtId>
- </Id>
- </Cdtr>
- <CdtrAcct>
- <Id>
- <IBAN>DE62210500001234567890</IBAN>
- </Id>
- </CdtrAcct>
- </RltdPties>
- <Purp>
- <Cd>PHON</Cd>
- </Purp>
- <RmtInf>
- <Ustrd>Telefonrechnung April 2016, Vertragsnummer 3536456345</Ustrd>
- </RmtInf>
- <RtrInf>
- <Rsn>
- <Cd>AC01</Cd>
- </Rsn>
- <AddtlInf>RUECKLASTSCHRIFT IBAN FEHLERHAFT</AddtlInf>
- </RtrInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <EndToEndId>768768</EndToEndId>
- <MndtId>10002</MndtId>
- </Refs>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="EUR">80</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NRTI+109++901</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Herr Zahlungspflichtiger 2</Nm>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <IBAN>DE83700202704444444444</IBAN>
- </Id>
- </DbtrAcct>
- <Cdtr>
- <Nm>Telefongesellschaft ABC</Nm>
- <Id>
- <PrvtId>
- <Othr>
- <Id>CdtrId des SEPA-Lastschrifteinr.</Id>
- </Othr>
- </PrvtId>
- </Id>
- </Cdtr>
- <CdtrAcct>
- <Id>
- <IBAN>DE62210500001234567890</IBAN>
- </Id>
- </CdtrAcct>
- </RltdPties>
- <Purp>
- <Cd>PHON</Cd>
- </Purp>
- <RmtInf>
- <Ustrd>Telefonrechnung April 2016, Vertragsnummer 3536456888</Ustrd>
- </RmtInf>
- <RtrInf>
- <Rsn>
- <Cd>AC01</Cd>
- </Rsn>
- <AddtlInf>RUECKLASTSCHRIFT IBAN FEHLERHAFT</AddtlInf>
- </RtrInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <EndToEndId>45456465</EndToEndId>
- <MndtId>10003</MndtId>
- </Refs>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="EUR">120</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NRTI+109++901</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Herr Zahlungspflichtiger 3</Nm>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <IBAN>DE83700202703333333333</IBAN>
- </Id>
- </DbtrAcct>
- <Cdtr>
- <Nm>Telefongesellschaft ABC</Nm>
- <Id>
- <PrvtId>
- <Othr>
- <Id>CdtrId des SEPA-Lastschrifteinr.</Id>
- </Othr>
- </PrvtId>
- </Id>
- </Cdtr>
- <CdtrAcct>
- <Id>
- <IBAN>DE62210500001234567890</IBAN>
- </Id>
- </CdtrAcct>
- </RltdPties>
- <Purp>
- <Cd>PHON</Cd>
- </Purp>
- <RmtInf>
- <Ustrd>Telefonrechnung April 2016, Vertragsnummer 3536456345</Ustrd>
- </RmtInf>
- <RtrInf>
- <Rsn>
- <Cd>AC01</Cd>
- </Rsn>
- <AddtlInf>RUECKLASTSCHRIFT IBAN FEHLERHAFT</AddtlInf>
- </RtrInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- <!-- Beispiel 3b: Sammlerdarstellung mit Verweis auf pain-Nachricht und separate camt.054.001.01-Nachricht -->
- <!--Belastung aufgrund einer SEPA-Ueberweisung (Sammler) mit Verweis auf Original pain-Nachricht-->
- <Ntry>
- <Amt Ccy="EUR">100876.00</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>ICDT</Cd>
- <SubFmlyCd>ESCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>191</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <Btch>
- <MsgId>MsgId der pain-Nachricht</MsgId>
- <PmtInfId>Sammler-Id dieser pain-Nachricht</PmtInfId>
- </Btch>
- <TxDtls>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>ICDT</Cd>
- <SubFmlyCd>ESCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NTRF+191</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- </TxDtls>
- </NtryDtls>
- <AddtlNtryInf>SEPA Credit Transfer (Sammler-Soll)</AddtlNtryInf>
- </Ntry>
- <!--Belastung aufgrund von SEPA-Lastschriftrueckgaben (Sammelbuchung) mit Verweis auf separate camt.054.001.01-Nachricht-->
- <Ntry>
- <Amt Ccy="EUR">276.00</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>109</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <AddtlInfInd>
- <MsgNmId>camt.054.001.01</MsgNmId>
- <MsgId>054-20160511-00034</MsgId>
- <!-- siehe Bsp. camt54 Bsp 3b -->
- </AddtlInfInd>
- <NtryDtls>
- <TxDtls>
- <BkTxCd>
- <Domn>
- <Cd>PNMT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>UPDD</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NRTI+109++901</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- <!-- Beispiel 4: USD-Zahlung mit Gutschrift auf einem EUR-Konto -->
- <!-- USD-Zahlung mit Gutschrift auf einem EUR-Konto -->
- <Ntry>
- <Amt Ccy="EUR">259595.60</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2016-05-11</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2016-05-11</Dt>
- </ValDt>
- <AcctSvcrRef>Bankreferenz</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>XBCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NTRF+202</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <NtryDtls>
- <TxDtls>
- <AmtDtls>
- <InstdAmt>
- <Amt Ccy="USD">360873.97</Amt>
- </InstdAmt>
- <TxAmt>
- <Amt Ccy="EUR">259595.60</Amt>
- </TxAmt>
- <CntrValAmt>
- <Amt Ccy="EUR">259621.56</Amt>
- <CcyXchg>
- <SrcCcy>USD</SrcCcy>
- <TrgtCcy>EUR</TrgtCcy>
- <XchgRate>1.39</XchgRate>
- </CcyXchg>
- </CntrValAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>XBCT</SubFmlyCd>
- </Fmly>
- </Domn>
- <Prtry>
- <Cd>NTRF+202</Cd>
- <Issr>DK</Issr>
- </Prtry>
- </BkTxCd>
- <Chrgs>
- <Amt Ccy="EUR">25.96</Amt>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>West Coast Ltd.</Nm>
- <PstlAdr>
- <Ctry>US</Ctry>
- <AdrLine>52, Main Street</AdrLine>
- <AdrLine>3733 San Francisco</AdrLine>
- </PstlAdr>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <Othr>
- <Id>546237687</Id>
- </Othr>
- </Id>
- </DbtrAcct>
- </RltdPties>
- <RltdAgts>
- <DbtrAgt>
- <FinInstnId>
- <BIC>BANKUSNY</BIC>
- </FinInstnId>
- </DbtrAgt>
- </RltdAgts>
- <RmtInf>
- <Ustrd>Invoice No. 4545</Ustrd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- <AddtlNtryInf>AZV-UEBERWEISUNGSGUTSCHRIFT</AddtlNtryInf>
- </Ntry>
- </Stmt>
- </BkToCstmrStmt>
-</Document>
diff --git a/nexus/src/test/resources/iso20022-samples/camt.053/de.camt.053.001.02.xml b/nexus/src/test/resources/iso20022-samples/camt.053/de.camt.053.001.02.xml
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This file has been placed in the public domain -->
+<!-- Sample camt.053 according to the interpretation of the German DK rules -->
+<!-- IBANs have been randomly generated with a BBAN of 12345678 -->
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02 camt.053.001.02.xsd">
+ <BkToCstmrStmt>
+ <GrpHdr>
+ <MsgId>msg-001</MsgId>
+ <CreDtTm>2020-07-03T12:44:40+05:30</CreDtTm>
+ </GrpHdr>
+ <Stmt>
+ <Id>stmt-001</Id>
+ <CreDtTm>2020-07-03T11:00:40+05:30</CreDtTm>
+ <Acct>
+ <Id>
+ <IBAN>DE54123456784713474163</IBAN>
+ </Id>
+ </Acct>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>PRCD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="EUR">500</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-07-03</Dt>
+ </Dt>
+ </Bal>
+ <Ntry>
+ <Amt Ccy="EUR">100.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-07-02</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-07-04</Dt>
+ </ValDt>
+ <AcctSvcrRef>acctsvcrref-001</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>ESCT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>166</Cd>
+ <Issr>DK</Issr>
+ </Prtry>
+ </BkTxCd>
+ <!-- Credit due to incoming SCT -->
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+ <EndToEndId>e2e-001</EndToEndId>
+ </Refs>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>ESCT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>NTRF+166</Cd>
+ <Issr>DK</Issr>
+ </Prtry>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Debtor One</Nm>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+ <IBAN>DE52123456789473323175</IBAN>
+ </Id>
+ </DbtrAcct>
+ <UltmtDbtr>
+ <Nm>Ultimate Debtor One</Nm>
+ </UltmtDbtr>
+ <Cdtr>
+ <Nm>Creditor One</Nm>
+ </Cdtr>
+ <UltmtCdtr>
+ <Nm>Ultimate Creditor One</Nm>
+ </UltmtCdtr>
+ </RltdPties>
+ <Purp>
+ <Cd>GDDS</Cd>
+ </Purp>
+ <RmtInf>
+ <Ustrd>unstructured info one</Ustrd>
+ </RmtInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SEPA GUTSCHRIFT</AddtlNtryInf>
+ </Ntry>
+ <!-- Credit due to incoming USD transfer -->
+ <Ntry>
+ <Amt Ccy="EUR">1000</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-07-03</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-07-04</Dt>
+ </ValDt>
+ <AcctSvcrRef>acctsvcrref-002</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>XBCT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>NTRF+202</Cd>
+ <Issr>DK</Issr>
+ </Prtry>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <AmtDtls>
+ <InstdAmt>
+ <Amt Ccy="USD">1500</Amt>
+ </InstdAmt>
+ <TxAmt>
+ <Amt Ccy="EUR">1000</Amt>
+ </TxAmt>
+ <CntrValAmt>
+ <Amt Ccy="EUR">1250.0</Amt>
+ <CcyXchg>
+ <SrcCcy>USD</SrcCcy>
+ <TrgtCcy>EUR</TrgtCcy>
+ <XchgRate>1.20</XchgRate>
+ </CcyXchg>
+ </CntrValAmt>
+ </AmtDtls>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>XBCT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>NTRF+202</Cd>
+ <Issr>DK</Issr>
+ </Prtry>
+ </BkTxCd>
+ <Chrgs>
+ <Amt Ccy="EUR">250.00</Amt>
+ </Chrgs>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Some US Bank</Nm>
+ <PstlAdr>
+ <Ctry>US</Ctry>
+ <AdrLine>42 Some Street</AdrLine>
+ <AdrLine>4242 Somewhere</AdrLine>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+ <Othr>
+ <Id>9876543</Id>
+ </Othr>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+ <BIC>BANKUSNY</BIC>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Ustrd>Invoice No. 4242</Ustrd>
+ </RmtInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>AZV-UEBERWEISUNGSGUTSCHRIFT</AddtlNtryInf>
+ </Ntry>
+ </Stmt>
+ </BkToCstmrStmt>
+</Document>
+\ No newline at end of file