summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine A <>2024-03-04 09:56:24 +0100
committerAntoine A <>2024-03-04 09:56:24 +0100
commit769d458c8de9e38f77a599f9301290624280bb92 (patch)
treea3a67287f9269970dbdc41fc7f3ff2331a7c7fac
parentd681801e524eb6fdd422c485c509d84153c6d1f1 (diff)
downloadlibeufin-769d458c8de9e38f77a599f9301290624280bb92.tar.gz
libeufin-769d458c8de9e38f77a599f9301290624280bb92.tar.bz2
libeufin-769d458c8de9e38f77a599f9301290624280bb92.zip
Parse reversal transaction
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt37
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt68
-rw-r--r--testbench/sample/QRIBAN_camt.054_SIC_04_088583185407_NN_0885831854071000_20221222_180251_006.xml427
-rw-r--r--testbench/sample/QRIBAN_camt.054_SPS_08_088583185407_NN_0885831854071000_20221222_180251_006.xml456
-rw-r--r--testbench/sample/camt.054_SIC_04_088583185407_NN_0885831854071000_20221022_170251_005.xml313
-rw-r--r--testbench/sample/camt.054_SPS_08_088583185407_NN_0885831854071000_170251_005.xml253
-rw-r--r--testbench/src/test/kotlin/Iso20022Test.kt4
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())
}
}
}