diff options
author | Antoine A <> | 2024-03-04 09:56:24 +0100 |
---|---|---|
committer | Antoine A <> | 2024-03-04 09:56:24 +0100 |
commit | 769d458c8de9e38f77a599f9301290624280bb92 (patch) | |
tree | a3a67287f9269970dbdc41fc7f3ff2331a7c7fac | |
parent | d681801e524eb6fdd422c485c509d84153c6d1f1 (diff) | |
download | libeufin-769d458c8de9e38f77a599f9301290624280bb92.tar.gz libeufin-769d458c8de9e38f77a599f9301290624280bb92.tar.bz2 libeufin-769d458c8de9e38f77a599f9301290624280bb92.zip |
Parse reversal transaction
7 files changed, 71 insertions, 1487 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt index cd69ada1..f4298287 100644 --- a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt +++ b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt @@ -147,7 +147,7 @@ suspend fun ingestOutgoingPayment( else logger.warn("$payment recovered") } else { - logger.debug("OUT '${payment.messageId}' already seen") + logger.debug("$payment already seen") } } @@ -158,7 +158,6 @@ private val PATTERN = Regex("[a-z0-9A-Z]{52}") * or bounces it, according to the subject. * * @param db database handle. - * @param currency fiat currency of the watched bank account. * @param payment payment to (maybe) ingest. */ suspend fun ingestIncomingPayment( @@ -171,7 +170,7 @@ suspend fun ingestIncomingPayment( if (result.new) { logger.info("$payment") } else { - logger.debug("IN '${payment.bankId}' already seen") + logger.debug("$payment already seen") } }, onFailure = { e -> @@ -183,12 +182,26 @@ suspend fun ingestIncomingPayment( if (result.new) { logger.info("$payment bounced in '${result.bounceId}': ${e.message}") } else { - logger.debug("IN '${payment.bankId}' already seen and bounced in '${result.bounceId}': ${e.message}") + logger.debug("$payment already seen and bounced in '${result.bounceId}': ${e.message}") } } ) } +/** + * Ingests an outgoing payment bounce. + * + * @param db database handle. + * @param reversal reversal ingest. + */ +suspend fun ingestReversal( + db: Database, + reversal: OutgoingReversal +) { + logger.warn("BOUNCE '${reversal.bankId}': ${reversal.reason}") + // TODO store in db= +} + private fun ingestDocument( db: Database, currency: String, @@ -198,16 +211,16 @@ private fun ingestDocument( when (whichDocument) { SupportedDocument.CAMT_054 -> { try { - val incomingPayments = mutableListOf<IncomingPayment>() - val outgoingPayments = mutableListOf<OutgoingPayment>() - parseTxNotif(xml, currency, incomingPayments, outgoingPayments) + val notifications = mutableListOf<TxNotification>() + parseTxNotif(xml, currency, notifications) runBlocking { - incomingPayments.forEach { - ingestIncomingPayment(db, it) - } - outgoingPayments.forEach { - ingestOutgoingPayment(db, it) + notifications.forEach { + when (it) { + is TxNotification.Incoming -> ingestIncomingPayment(db, it.payment) + is TxNotification.Outgoing -> ingestOutgoingPayment(db, it.payment) + is TxNotification.Reversal -> ingestReversal(db, it.reversal) + } } } } catch (e: Exception) { diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt index 6d9a259a..53cfdf80 100644 --- a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt +++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt @@ -25,7 +25,6 @@ import java.net.URLEncoder import java.time.* import java.time.format.* - /** * Collects details to define the pain.001 namespace * XML attributes. @@ -247,6 +246,17 @@ fun parseCustomerPaymentStatusReport(xml: InputStream): PaymentStatus { } } +sealed interface TxNotification { + data class Incoming(val payment: IncomingPayment): TxNotification + data class Outgoing(val payment: OutgoingPayment): TxNotification + data class Reversal(val reversal: OutgoingReversal): TxNotification +} + +data class OutgoingReversal( + val bankId: String, + val reason: String? +) + /** * Searches payments in a camt.054 (Detailavisierung) document. * @@ -258,10 +268,9 @@ fun parseCustomerPaymentStatusReport(xml: InputStream): PaymentStatus { fun parseTxNotif( notifXml: InputStream, acceptedCurrency: String, - incoming: MutableList<IncomingPayment>, - outgoing: MutableList<OutgoingPayment> + notifications: MutableList<TxNotification>, ) { - notificationForEachTx(notifXml) { bookDate -> + notificationForEachTx(notifXml) { bookDate, reversal, info -> val kind = one("CdtDbtInd").text() val amount: TalerAmount = one("Amt") { val currency = attr("Ccy") @@ -271,6 +280,19 @@ fun parseTxNotif( if (currency != acceptedCurrency) throw Exception("Currency $currency not supported") TalerAmount("$currency:${text()}") } + if (reversal) { + require("CRDT" == kind) + val msgId = one("Refs").opt("MsgId")?.text() + if (msgId == null) { + logger.debug("Unsupported reversal without message id") + } else { + notifications.add(TxNotification.Reversal(OutgoingReversal( + bankId = msgId, + reason = info + ))) + } + return@notificationForEachTx + } when (kind) { "CRDT" -> { val bankId: String = one("Refs").one("AcctSvcrRef").text() @@ -293,7 +315,7 @@ fun parseTxNotif( debtorPayto.append("?receiver-name=$urlEncName") } } - incoming.add( + notifications.add(TxNotification.Incoming( IncomingPayment( amount = amount, bankId = bankId, @@ -301,17 +323,17 @@ fun parseTxNotif( executionTime = bookDate, wireTransferSubject = subject.toString() ) - ) + )) } "DBIT" -> { val messageId = one("Refs").one("MsgId").text() - outgoing.add( + notifications.add(TxNotification.Outgoing( OutgoingPayment( amount = amount, messageId = messageId, executionTime = bookDate ) - ) + )) } else -> throw Exception("Unknown transaction notification kind '$kind'") } @@ -326,28 +348,26 @@ fun parseTxNotif( */ private fun notificationForEachTx( xml: InputStream, - directionLambda: XmlDestructor.(Instant) -> Unit + directionLambda: XmlDestructor.(Instant, Boolean, String?) -> Unit ) { destructXml(xml, "Document") { opt("BkToCstmrDbtCdtNtfctn")?.each("Ntfctn") { each("Ntry") { - if (opt("RvslInd")?.bool() == true) { - logger.warn("Skip reversal transaction") - } else { - one("Sts") { - if (text() != "BOOK") { - one("Cd") { - if (text() != "BOOK") - throw Exception("Found non booked transaction, " + - "stop parsing. Status was: ${text()}" - ) - } + val reversal = opt("RvslInd")?.bool() ?: false + val info = opt("AddtlNtryInf")?.text() + one("Sts") { + if (text() != "BOOK") { + one("Cd") { + if (text() != "BOOK") + throw Exception("Found non booked transaction, " + + "stop parsing. Status was: ${text()}" + ) } } - val bookDate: Instant = one("BookgDt").one("Dt").date().atStartOfDay().toInstant(ZoneOffset.UTC) - one("NtryDtls").each("TxDtls") { - directionLambda(this, bookDate) - } + } + val bookDate: Instant = one("BookgDt").one("Dt").date().atStartOfDay().toInstant(ZoneOffset.UTC) + one("NtryDtls").each("TxDtls") { + directionLambda(this, bookDate, reversal, info) } } } diff --git a/testbench/sample/QRIBAN_camt.054_SIC_04_088583185407_NN_0885831854071000_20221222_180251_006.xml b/testbench/sample/QRIBAN_camt.054_SIC_04_088583185407_NN_0885831854071000_20221222_180251_006.xml deleted file mode 100644 index 80da4943..00000000 --- a/testbench/sample/QRIBAN_camt.054_SIC_04_088583185407_NN_0885831854071000_20221222_180251_006.xml +++ /dev/null @@ -1,427 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!-- Structure subject to change, do not rely on optional tags -->
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">
- <BkToCstmrDbtCdtNtfctn>
- <GrpHdr>
- <MsgId>CAMT054_20221222_180251119_4Z2WCTQ4</MsgId>
- <CreDtTm>2022-12-22T17:02:51.119Z</CreDtTm>
- <MsgPgntn>
- <PgNb>1</PgNb>
- <LastPgInd>true</LastPgInd>
- </MsgPgntn>
- <AddtlInf>SPS/1.7/PROD</AddtlInf>
- </GrpHdr>
- <Ntfctn>
- <Id>4BA01709118000076</Id>
- <CreDtTm>2022-12-22T17:02:51.119Z</CreDtTm>
- <FrToDt>
- <FrDtTm>2022-12-22T00:00:00.000+01:00</FrDtTm>
- <ToDtTm>2022-12-22T23:59:59.999+01:00</ToDtTm>
- </FrToDt>
- <RptgSrc>
- <Prtry>C53F</Prtry>
- </RptgSrc>
- <Acct>
- <Id>
- <IBAN>CH5104835831854071000</IBAN>
- </Id>
- <Svcr>
- <FinInstnId>
- <BICFI>CRESCHZZ80A</BICFI>
- <Nm>CREDIT SUISSE (Switzerland) Ltd.</Nm>
- <Othr>
- <Id>CHE-116.285.487 MWST</Id>
- <Issr>VAT-ID</Issr>
- </Othr>
- </FinInstnId>
- </Svcr>
- </Acct>
- <Ntry>
- <NtryRef>CH4531000831854071000</NtryRef>
- <Amt Ccy="CHF">997.25</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2022-12-22</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2010-12-22</Dt>
- </ValDt>
- <AcctSvcrRef>4BA01709118000076/1</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">997.25</Amt>
- </TxAmt>
- </AmtDtls>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">2.85</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">2.85</Amt>
- <ChrgInclInd>false</ChrgInclInd>
- </Rcrd>
- </Chrgs>
- <NtryDtls>
- <Btch>
- <MsgId>4BA01709118000076</MsgId>
- <NbOfTxs>5</NbOfTxs>
- <TtlAmt Ccy="CHF">997.25</TtlAmt>
- </Btch>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65113</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80256</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65113</PmtInfId>
- <EndToEndId>EndToEndId-0000000010</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">477.25</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">477.25</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </Dbtr>
- <UltmtDbtr>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678028</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Déduction faite de 3% d'escompte</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65114</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80257</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65114</PmtInfId>
- <EndToEndId>EndToEndId-0000000011</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">140</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">140</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>Hans Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Dbtr>
- <UltmtDbtr>
- <Nm>Bäckerei-Konditorei Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678033</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Auftrag vom 15.02.2022</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65115</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80258</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65115</PmtInfId>
- <EndToEndId>EndToEndId-0000000012</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">120</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">120</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">2.45</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">2.35</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>2</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>SCHALTEREINZAHLUNG</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Dbtr>
- <UltmtDbtr>
- <Nm>PETER MEIER</Nm>
- <PstlAdr>
- <StrtNm>SEMPACHERSTRASSE</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>6789</PstCd>
- <TwnNm>MITTELDORF</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678049</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>000000/00000/000000/17.02.2022</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65116</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80259</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65116</PmtInfId>
- <EndToEndId>EndToEndId-0000000013</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">110</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">110</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>RUTH MEIER</Nm>
- <PstlAdr>
- <AdrLine>OBERDORFSTRASSE 1 CH 5678 UNTERDORF</AdrLine>
- </PstlAdr>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678057</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65117</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80260</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65117</PmtInfId>
- <EndToEndId>EndToEndId-0000000014</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">150</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">150</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Nm>Anna Meier</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Nachbardorfstrasse 1</AdrLine>
- <AdrLine>9999 Obertal</AdrLine>
- </PstlAdr>
- </Dbtr>
- <UltmtDbtr>
- <Nm>Anna Meier</Nm>
- <PstlAdr>
- <StrtNm>Nachbardorfstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>9999</PstCd>
- <TwnNm>Obertal</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678065</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Order 1234567</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- </Ntfctn>
- </BkToCstmrDbtCdtNtfctn>
-</Document>
diff --git a/testbench/sample/QRIBAN_camt.054_SPS_08_088583185407_NN_0885831854071000_20221222_180251_006.xml b/testbench/sample/QRIBAN_camt.054_SPS_08_088583185407_NN_0885831854071000_20221222_180251_006.xml deleted file mode 100644 index 767aca01..00000000 --- a/testbench/sample/QRIBAN_camt.054_SPS_08_088583185407_NN_0885831854071000_20221222_180251_006.xml +++ /dev/null @@ -1,456 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!-- camt.054 for QR-bills with QR-IBAN, structure subject to change, do not rely on optional tags -->
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
- <BkToCstmrDbtCdtNtfctn>
- <GrpHdr>
- <MsgId>CAMT054_20221222_180251119_4Z2WCTQ4</MsgId>
- <CreDtTm>2022-12-22T17:02:51.119Z</CreDtTm>
- <MsgPgntn>
- <PgNb>1</PgNb>
- <LastPgInd>true</LastPgInd>
- </MsgPgntn>
- <AddtlInf>SPS/2.0/PROD</AddtlInf>
- </GrpHdr>
- <Ntfctn>
- <Id>4BA01709118000076</Id>
- <CreDtTm>2022-03-22T17:02:51.119Z</CreDtTm>
- <FrToDt>
- <FrDtTm>2022-12-22T00:00:00.000+01:00</FrDtTm>
- <ToDtTm>2022-12-22T23:59:59.999+01:00</ToDtTm>
- </FrToDt>
- <Acct>
- <Id>
- <IBAN>CH5104835831854071000</IBAN>
- </Id>
- <Svcr>
- <FinInstnId>
- <BICFI>CRESCHZZ80A</BICFI>
- <Nm>CREDIT SUISSE (Switzerland) Ltd.</Nm>
- <Othr>
- <Id>CHE-116.285.487 MWST</Id>
- <Issr>VAT-ID</Issr>
- </Othr>
- </FinInstnId>
- </Svcr>
- </Acct>
- <Ntry>
- <NtryRef>CH4531000831854071000</NtryRef>
- <Amt Ccy="CHF">997.25</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>
- <Cd>BOOK</Cd>
- </Sts>
- <BookgDt>
- <Dt>2022-12-22</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2010-12-22</Dt>
- </ValDt>
- <AcctSvcrRef>4BA01709118000076/1</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">997.25</Amt>
- </TxAmt>
- </AmtDtls>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">2.85</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">2.85</Amt>
- <ChrgInclInd>false</ChrgInclInd>
- </Rcrd>
- </Chrgs>
- <NtryDtls>
- <Btch>
- <MsgId>4BA01709118000076</MsgId>
- <NbOfTxs>5</NbOfTxs>
- <TtlAmt Ccy="CHF">997.25</TtlAmt>
- </Btch>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65113</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80256</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65113</PmtInfId>
- <EndToEndId>EndToEndId-0000000010</EndToEndId>
- <UETR>eb6305c9-1f7f-49de-aed0-16487c27b42d</UETR>
- </Refs>
- <Amt Ccy="CHF">477.25</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">477.25</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <InitgPty>
- <Pty>
- <Nm>Example SA</Nm>
- </Pty>
- </InitgPty>
- <Dbtr>
- <Pty>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </Pty>
- </Dbtr>
- <UltmtDbtr>
- <Pty>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </Pty>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678028</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Déduction faite de 3% d'escompte</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65114</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80257</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65114</PmtInfId>
- <EndToEndId>EndToEndId-0000000011</EndToEndId>
- <UETR>eb6305c9-1f7f-49de-aed0-16487c27b42b</UETR>
- </Refs>
- <Amt Ccy="CHF">140</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">140</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <InitgPty>
- <Pty>
- <Nm>Hans Meier</Nm>
- </Pty>
- </InitgPty>
- <Dbtr>
- <Pty>
- <Nm>Hans Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </Dbtr>
- <UltmtDbtr>
- <Pty>
- <Nm>Bäckerei-Konditorei Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678033</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Auftrag vom 15.02.2022</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65115</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80258</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65115</PmtInfId>
- <EndToEndId>EndToEndId-0000000012</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">120</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">120</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">2.45</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">2.35</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>2</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>SCHALTEREINZAHLUNG</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </Dbtr>
- <UltmtDbtr>
- <Pty>
- <Nm>PETER MEIER</Nm>
- <PstlAdr>
- <StrtNm>SEMPACHERSTRASSE</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>6789</PstCd>
- <TwnNm>MITTELDORF</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678049</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>000000/00000/000000/17.12.2022</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65116</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80259</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65116</PmtInfId>
- <EndToEndId>EndToEndId-0000000013</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">110</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">110</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>RUTH MEIER</Nm>
- <PstlAdr>
- <AdrLine>OBERDORFSTRASSE 1 CH 5678 UNTERDORF</AdrLine>
- </PstlAdr>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678057</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Refs>
- <MsgId>13RF-190418-MS-65117</MsgId>
- <AcctSvcrRef>80XI-190418-CS-80260</AcctSvcrRef>
- <PmtInfId>13RF-190418-MS-65117</PmtInfId>
- <EndToEndId>EndToEndId-0000000014</EndToEndId>
- </Refs>
- <Amt Ccy="CHF">150</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">150</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>RCDT</Cd>
- <SubFmlyCd>VCOM</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <Chrgs>
- <TtlChrgsAndTaxAmt Ccy="CHF">0.10</TtlChrgsAndTaxAmt>
- <Rcrd>
- <Amt Ccy="CHF">0.10</Amt>
- <CdtDbtInd>DBIT</CdtDbtInd>
- <ChrgInclInd>false</ChrgInclInd>
- <Tp>
- <Prtry>
- <Id>INTERNAL</Id>
- </Prtry>
- </Tp>
- </Rcrd>
- </Chrgs>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>Anna Meier</Nm>
- <PstlAdr>
- <Ctry>CH</Ctry>
- <AdrLine>Nachbardorfstrasse 1</AdrLine>
- <AdrLine>9999 Obertal</AdrLine>
- </PstlAdr>
- </Pty>
- </Dbtr>
- <UltmtDbtr>
- <Pty>
- <Nm>Anna Meier</Nm>
- <PstlAdr>
- <StrtNm>Nachbardorfstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>9999</PstCd>
- <TwnNm>Obertal</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </UltmtDbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>QRR</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678065</Ref>
- </CdtrRefInf>
- <AddtlRmtInf>Order 1234567</AddtlRmtInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- </Ntfctn>
- </BkToCstmrDbtCdtNtfctn>
-</Document>
diff --git a/testbench/sample/camt.054_SIC_04_088583185407_NN_0885831854071000_20221022_170251_005.xml b/testbench/sample/camt.054_SIC_04_088583185407_NN_0885831854071000_20221022_170251_005.xml deleted file mode 100644 index eed124b5..00000000 --- a/testbench/sample/camt.054_SIC_04_088583185407_NN_0885831854071000_20221022_170251_005.xml +++ /dev/null @@ -1,313 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!-- Structure subject to change, do not rely on optional tags -->
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">
- <BkToCstmrDbtCdtNtfctn>
- <GrpHdr>
- <MsgId>CAMT054_20221022_180251119_4Z2WCTQ4</MsgId>
- <CreDtTm>2022-10-22T17:02:51.119Z</CreDtTm>
- <MsgPgntn>
- <PgNb>1</PgNb>
- <LastPgInd>true</LastPgInd>
- </MsgPgntn>
- </GrpHdr>
- <Ntfctn>
- <Id>4BA01709118000075</Id>
- <CreDtTm>2022-10-22T17:02:51.119Z</CreDtTm>
- <FrToDt>
- <FrDtTm>2022-10-22T00:00:00.000+01:00</FrDtTm>
- <ToDtTm>2022-10-22T23:59:59.999+01:00</ToDtTm>
- </FrToDt>
- <RptgSrc>
- <Prtry>C53F</Prtry>
- </RptgSrc>
- <Acct>
- <Id>
- <IBAN>CH7705881831854071000</IBAN>
- </Id>
- </Acct>
- <Ntry>
- <NtryRef>010026540</NtryRef>
- <Amt Ccy="CHF">7761.35</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2022-10-22</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2022-10-22</Dt>
- </ValDt>
- <AcctSvcrRef>4BA01709118000075/1</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <NtryDtls>
- <Btch>
- <NbOfTxs>5</NbOfTxs>
- <TtlAmt Ccy="CHF">7761.35</TtlAmt>
- </Btch>
- <TxDtls>
- <Amt Ccy="CHF">2561.35</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">2561.35</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678028</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1400.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1400.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Bäckerei-Konditorei Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678033</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1200.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1200.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>NOTPROVIDED</Nm>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678049</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1100.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1100.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>NOTPROVIDED</Nm>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678057</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1500.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1500.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>NOTPROVIDED</Nm>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678065</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- <Ntry>
- <NtryRef>010026540</NtryRef>
- <Amt Ccy="CHF">119.45</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>BOOK</Sts>
- <BookgDt>
- <Dt>2022-10-22</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2022-10-21</Dt>
- </ValDt>
- <AcctSvcrRef>4BA02002068000015/1</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <NtryDtls>
- <Btch>
- <NbOfTxs>1</NbOfTxs>
- <TtlAmt Ccy="CHF">119.45</TtlAmt>
- </Btch>
- <TxDtls>
- <Amt Ccy="CHF">119.45</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">119.45</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Nm>Peter Muster</Nm>
- <PstlAdr>
- <StrtNm>Musterstrasse 5</StrtNm>
- <PstCd>8001</PstCd>
- <TwnNm>Zuerich</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>901709123456789012345000003</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- </Ntfctn>
- </BkToCstmrDbtCdtNtfctn>
-</Document>
diff --git a/testbench/sample/camt.054_SPS_08_088583185407_NN_0885831854071000_170251_005.xml b/testbench/sample/camt.054_SPS_08_088583185407_NN_0885831854071000_170251_005.xml deleted file mode 100644 index 9a1bd502..00000000 --- a/testbench/sample/camt.054_SPS_08_088583185407_NN_0885831854071000_170251_005.xml +++ /dev/null @@ -1,253 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!-- camt.054 for LSV/BDD, structure subject to change, do not rely on optional tags -->
-<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
- <BkToCstmrDbtCdtNtfctn>
- <GrpHdr>
- <MsgId>CAMT054_20221222_180251119_4Z2WCTQ4</MsgId>
- <CreDtTm>2022-12-22T17:02:51.119Z</CreDtTm>
- <MsgPgntn>
- <PgNb>1</PgNb>
- <LastPgInd>true</LastPgInd>
- </MsgPgntn>
- </GrpHdr>
- <Ntfctn>
- <Id>4BA01709118000075</Id>
- <CreDtTm>2022-12-22T17:02:51.119Z</CreDtTm>
- <FrToDt>
- <FrDtTm>2022-12-22T00:00:00.000+01:00</FrDtTm>
- <ToDtTm>2022-12-22T23:59:59.999+01:00</ToDtTm>
- </FrToDt>
- <Acct>
- <Id>
- <IBAN>CH7705881831854071000</IBAN>
- </Id>
- </Acct>
- <Ntry>
- <NtryRef>010026540</NtryRef>
- <Amt Ccy="CHF">7761.35</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <Sts>
- <Cd>BOOK</Cd>
- </Sts>
- <BookgDt>
- <Dt>2022-12-22</Dt>
- </BookgDt>
- <ValDt>
- <Dt>2022-12-22</Dt>
- </ValDt>
- <AcctSvcrRef>4BA01709118000075/1</AcctSvcrRef>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <NtryDtls>
- <Btch>
- <NbOfTxs>5</NbOfTxs>
- <TtlAmt Ccy="CHF">7761.35</TtlAmt>
- </Btch>
- <TxDtls>
- <Amt Ccy="CHF">2561.35</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">2561.35</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>Example SA</Nm>
- <PstlAdr>
- <AdrLine>Place du Marché 1</AdrLine>
- <AdrLine>2222 Village</AdrLine>
- </PstlAdr>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678028</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1400.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1400.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>Bäckerei-Konditorei Meier</Nm>
- <PstlAdr>
- <StrtNm>Landstrasse</StrtNm>
- <BldgNb>1</BldgNb>
- <PstCd>5555</PstCd>
- <TwnNm>Unterdorf</TwnNm>
- <Ctry>CH</Ctry>
- </PstlAdr>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678033</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1200.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1200.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>NOTPROVIDED</Nm>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678049</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1100.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1100.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>NOTPROVIDED</Nm>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678057</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- <TxDtls>
- <Amt Ccy="CHF">1500.00</Amt>
- <CdtDbtInd>CRDT</CdtDbtInd>
- <AmtDtls>
- <TxAmt>
- <Amt Ccy="CHF">1500.00</Amt>
- </TxAmt>
- </AmtDtls>
- <BkTxCd>
- <Domn>
- <Cd>PMNT</Cd>
- <Fmly>
- <Cd>IDDT</Cd>
- <SubFmlyCd>PMDD</SubFmlyCd>
- </Fmly>
- </Domn>
- </BkTxCd>
- <RltdPties>
- <Dbtr>
- <Pty>
- <Nm>NOTPROVIDED</Nm>
- </Pty>
- </Dbtr>
- </RltdPties>
- <RmtInf>
- <Strd>
- <CdtrRefInf>
- <Tp>
- <CdOrPrtry>
- <Prtry>ISR Reference</Prtry>
- </CdOrPrtry>
- </Tp>
- <Ref>999999123456789012345678065</Ref>
- </CdtrRefInf>
- </Strd>
- </RmtInf>
- </TxDtls>
- </NtryDtls>
- </Ntry>
- </Ntfctn>
- </BkToCstmrDbtCdtNtfctn>
-</Document>
diff --git a/testbench/src/test/kotlin/Iso20022Test.kt b/testbench/src/test/kotlin/Iso20022Test.kt index d44596c6..7e0fc7b9 100644 --- a/testbench/src/test/kotlin/Iso20022Test.kt +++ b/testbench/src/test/kotlin/Iso20022Test.kt @@ -34,7 +34,7 @@ class Iso20022Test { } else if (name.contains("pain.002")) { parseCustomerPaymentStatusReport(content) } else { - parseTxNotif(content, "CHF", mutableListOf(), mutableListOf()) + parseTxNotif(content, "CHF", mutableListOf()) } } } @@ -56,7 +56,7 @@ class Iso20022Test { } else if (name.contains("pain.002")) { parseCustomerPaymentStatusReport(content) } else { - parseTxNotif(content, "CHF", mutableListOf(), mutableListOf()) + parseTxNotif(content, "CHF", mutableListOf()) } } } |