[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] branch master updated (1a8fd6b5 -> 4f2f3926)
From: |
gnunet |
Subject: |
[libeufin] branch master updated (1a8fd6b5 -> 4f2f3926) |
Date: |
Mon, 04 Mar 2024 16:47:41 +0100 |
This is an automated email from the git hooks/post-receive script.
antoine pushed a change to branch master
in repository libeufin.
from 1a8fd6b5 Add JSON error for common 404 and 405 errors, and more strict
status/error checks
new d681801e Add sample files from test platforms
new 769d458c Parse reversal transaction
new 4f2f3926 Improve ack parsing and logging
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
ebics/src/main/kotlin/Ebics.kt | 3 +
.../main/kotlin/tech/libeufin/nexus/Database.kt | 3 +
.../main/kotlin/tech/libeufin/nexus/EbicsFetch.kt | 50 ++--
.../main/kotlin/tech/libeufin/nexus/EbicsSubmit.kt | 7 +-
.../main/kotlin/tech/libeufin/nexus/Iso20022.kt | 80 ++++---
.../kotlin/tech/libeufin/nexus/ebics/Ebics3.kt | 3 +-
.../tech/libeufin/nexus/ebics/EbicsCommon.kt | 65 ++----
...lavisierung mit Einzelbuchung_ISO2019_v2019.xml | 124 ++++++++++
...rn_Detailavisierung mit Einzelbuchung_v2009.xml | 120 ++++++++++
...0000250094239_1110092691_0_2019042421291293.xml | 65 ++++++
...0000250094239_1110092692_0_2019042401501580.xml | 68 ++++++
...094239_1110097484_0_20190520700381159_v2019.xml | 174 ++++++++++++++
...0094239_1111091335_0_2020061900081727_v2009.xml | 207 +++++++++++++++++
...0094239_1111091335_0_2020061900081727_v2019.xml | 212 +++++++++++++++++
testbench/sample/2_pain002 B-Level ACCP_v2009.xml | 2 +
testbench/sample/2_pain002 B-Level ACCP_v2019.xml | 24 ++
...n002 B-Level und C-Level RJCT_ISO2019_v2019.xml | 30 +++
.../3_pain002 B-Level und C-Level RJCT_v2009.xml | 39 ++++
...Level ACTC (Empfangsbestaetigung FDS)_v2009.xml | 23 ++
...Level ACTC (Empfangsbestaetigung FDS)_v2019.xml | 21 ++
...Level RJCT (Empfangsbestaetigung FDS)_v2009.xml | 27 +++
...Level RJCT (Empfangsbestaetigung FDS)_v2019.xml | 27 +++
...lavisierung mit Sammelbuchung_ISO2019_v2019.xml | 124 ++++++++++
...rn_Detailavisierung mit Sammelbuchung_v2009.xml | 120 ++++++++++
...0094239_1110092698_0_2020062503071366_v2009.xml | 243 ++++++++++++++++++++
...0094239_1110092698_0_2020112503071366_v2019.xml | 253 +++++++++++++++++++++
...094239_1110097484_0_20220615375204228751067.xml | 143 ++++++++++++
...0094239_1111111112_0_2022031011011199_v2009.xml | 124 ++++++++++
...0094239_1111111112_0_2022031011011199_v2019.xml | 127 +++++++++++
...0094239_1111111119_0_2022030911011199_v2009.xml | 126 ++++++++++
...0094239_1111111119_0_2022030911011199_v2019.xml | 129 +++++++++++
...094239_1110097483_0_20220614375204216308259.xml | 24 ++
testbench/src/test/kotlin/Iso20022Test.kt | 18 +-
33 files changed, 2718 insertions(+), 87 deletions(-)
create mode 100644 testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_ISO2019_v2019.xml
create mode 100644 testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_v2009.xml
create mode 100644
testbench/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
create mode 100644
testbench/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
create mode 100644
testbench/sample/200519_camt054-chdd_p_ch2909000000250094239_1110097484_0_20190520700381159_v2019.xml
create mode 100644
testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2009.xml
create mode 100644
testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2019.xml
create mode 100644 testbench/sample/2_pain002 B-Level ACCP_v2009.xml
create mode 100644 testbench/sample/2_pain002 B-Level ACCP_v2019.xml
create mode 100644 testbench/sample/3_pain002 B-Level und C-Level
RJCT_ISO2019_v2019.xml
create mode 100644 testbench/sample/3_pain002 B-Level und C-Level
RJCT_v2009.xml
create mode 100644 testbench/sample/5_pain002 A-Level ACTC
(Empfangsbestaetigung FDS)_v2009.xml
create mode 100644 testbench/sample/5_pain002 A-Level ACTC
(Empfangsbestaetigung FDS)_v2019.xml
create mode 100644 testbench/sample/6_pain002 A-Level RJCT
(Empfangsbestaetigung FDS)_v2009.xml
create mode 100644 testbench/sample/6_pain002 A-Level RJCT
(Empfangsbestaetigung FDS)_v2019.xml
create mode 100644 testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_ISO2019_v2019.xml
create mode 100644 testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_v2009.xml
create mode 100644
testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020062503071366_v2009.xml
create mode 100644
testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020112503071366_v2019.xml
create mode 100644
testbench/sample/camt054-CHDD_P_CH2909000000250094239_1110097484_0_20220615375204228751067.xml
create mode 100644
testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2009.xml
create mode 100644
testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2019.xml
create mode 100644
testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2009.xml
create mode 100644
testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2019.xml
create mode 100644
testbench/sample/pain002_CHDD_P_CH2909000000250094239_1110097483_0_20220614375204216308259.xml
diff --git a/ebics/src/main/kotlin/Ebics.kt b/ebics/src/main/kotlin/Ebics.kt
index 31efa07c..ab591b61 100644
--- a/ebics/src/main/kotlin/Ebics.kt
+++ b/ebics/src/main/kotlin/Ebics.kt
@@ -287,6 +287,7 @@ enum class EbicsReturnCode(val errorCode: String) {
data class EbicsResponseContent(
val transactionID: String?,
+ val orderID: String?,
val dataEncryptionInfo: DataEncryptionInfo?,
val orderDataEncChunk: String?,
val technicalReturnCode: EbicsReturnCode,
@@ -362,6 +363,7 @@ fun ebics3toInternalRepr(response: Document):
EbicsResponseContent {
return EbicsResponseContent(
transactionID = resp.value.header._static.transactionID,
+ orderID = resp.value.header.mutable.orderID,
bankReturnCode = bankReturnCode,
technicalReturnCode = techReturnCode,
reportText = reportText,
@@ -398,6 +400,7 @@ fun ebics25toInternalRepr(response: Document):
EbicsResponseContent {
return EbicsResponseContent(
transactionID = resp.value.header._static.transactionID,
+ orderID = resp.value.header.mutable.orderID,
bankReturnCode = bankReturnCode,
technicalReturnCode = techReturnCode,
reportText = reportText,
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Database.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/Database.kt
index 956ae58c..8a2b9185 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Database.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Database.kt
@@ -169,6 +169,9 @@ private fun PreparedStatement.maybeUpdate(): Boolean {
*/
class Database(dbConfig: String): DbPool(dbConfig, "libeufin_nexus") {
+ // Temporary in memory database to store EBICS order status until we
modify the schema to actually store it in the database
+ var mem: MutableMap<String, String> = mutableMapOf()
+
// OUTGOING PAYMENTS METHODS
/**
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
index cd69ada1..e8d4b049 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) {
@@ -217,6 +230,17 @@ private fun ingestDocument(
SupportedDocument.PAIN_002_LOGS -> {
val acks = parseCustomerAck(xml)
for (ack in acks) {
+ val msg = if (ack.orderId != null) {
+ if (ack.code != null) {
+ val msg = ack.msg()
+ db.mem[ack.orderId] = msg
+ msg
+ } else {
+ db.mem[ack.orderId]
+ }
+ } else {
+ null
+ }
when (ack.actionType) {
HacAction.FILE_DOWNLOAD -> logger.debug("$ack")
HacAction.ORDER_HAC_FINAL_POS -> {
@@ -227,7 +251,7 @@ private fun ingestDocument(
HacAction.ORDER_HAC_FINAL_NEG -> {
// TODO update pending transaction status
logger.debug("$ack")
- logger.warn("Order '${ack.orderId}' was refused at
${ack.timestamp.fmtDateTime()}")
+ logger.warn("Order '${ack.orderId}' was refused at
${ack.timestamp.fmtDateTime()}: $msg")
}
else -> {
// TODO update pending transaction status
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSubmit.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSubmit.kt
index e96e3db2..ce02f865 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSubmit.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsSubmit.kt
@@ -91,7 +91,7 @@ class NexusSubmitException(
private suspend fun submitInitiatedPayment(
ctx: SubmissionContext,
payment: InitiatedPayment
-) {
+): String {
val creditAccount = try {
val payto = Payto.parse(payment.creditPaytoUri).expectIban()
IbanAccountMetadata(
@@ -114,7 +114,7 @@ private suspend fun submitInitiatedPayment(
)
ctx.fileLogger.logSubmit(xml)
try {
- submitPain001(
+ return submitPain001(
xml,
ctx.cfg,
ctx.clientPrivateKeysFile,
@@ -166,7 +166,8 @@ private fun submitBatch(
db.initiatedPaymentsSubmittableGet(ctx.cfg.currency).forEach {
logger.debug("Submitting payment initiation with row ID: ${it.id}")
val submissionState = try {
- submitInitiatedPayment(ctx, it)
+ val orderId = submitInitiatedPayment(ctx, it)
+ db.mem[orderId] = "Init"
DatabaseSubmissionState.success
} catch (e: NexusSubmitException) {
logger.error(e.message)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
index 6d9a259a..fb9c03ce 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.
@@ -130,15 +129,19 @@ data class CustomerAck(
val code: ExternalStatusReasonCode?,
val timestamp: Instant
) {
- override fun toString(): String {
- var str = "${timestamp.fmtDateTime()}"
- if (orderId != null) str += " ${orderId}"
- str += " ${actionType}"
+ fun msg(): String {
+ var str = "${actionType}"
if (code != null) str += " ${code.isoCode}"
str += " - '${actionType.description}'"
if (code != null) str += " '${code.description}'"
return str
}
+
+ override fun toString(): String {
+ var str = "${timestamp.fmtDateTime()}"
+ if (orderId != null) str += " ${orderId}"
+ return str + " ${msg()}"
+ }
}
/**
@@ -247,6 +250,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 +272,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 +284,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 +319,7 @@ fun parseTxNotif(
debtorPayto.append("?receiver-name=$urlEncName")
}
}
- incoming.add(
+ notifications.add(TxNotification.Incoming(
IncomingPayment(
amount = amount,
bankId = bankId,
@@ -301,17 +327,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 +352,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/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
index 52bdeb0b..09aac3df 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/Ebics3.kt
@@ -234,7 +234,7 @@ suspend fun submitPain001(
clientKeys: ClientPrivateKeysFile,
bankkeys: BankPublicKeysFile,
httpClient: HttpClient
-) {
+): String {
val orderService: Ebics3Request.OrderDetails.Service =
Ebics3Request.OrderDetails.Service().apply {
serviceName = "MCT"
scope = "CH"
@@ -255,6 +255,7 @@ suspend fun submitPain001(
" EBICS technical code is: ${maybeUploaded.technicalReturnCode}," +
" bank technical return code is: ${maybeUploaded.bankReturnCode}"
)
+ return maybeUploaded.orderID!!
}
/**
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
index f497799e..7eebcea8 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsCommon.kt
@@ -225,11 +225,30 @@ suspend fun postEbics(
e
)
}
- return parseAndValidateEbicsResponse(
- bankKeys,
- respXml,
+
+ // Parses the bank response from the raw XML and verifies
+ // the bank signature.
+ val doc = try {
+ XMLUtil.parseIntoDom(respXml)
+ } catch (e: Exception) {
+ throw EbicsSideException(
+ "Bank response apparently invalid",
+ sideEc = EbicsSideError.BANK_RESPONSE_IS_INVALID
+ )
+ }
+ if (!XMLUtil.verifyEbicsDocument(
+ doc,
+ bankKeys.bank_authentication_public_key,
isEbics3
- )
+ )) {
+ throw EbicsSideException(
+ "Bank signature did not verify",
+ sideEc = EbicsSideError.BANK_SIGNATURE_DIDNT_VERIFY
+ )
+ }
+ if (isEbics3)
+ return ebics3toInternalRepr(doc)
+ return ebics25toInternalRepr(doc)
}
/**
@@ -383,43 +402,6 @@ class EbicsSideException(
cause: Exception? = null
) : Exception(msg, cause)
-/**
- * Parses the bank response from the raw XML and verifies
- * the bank signature.
- *
- * @param bankKeys provides the bank auth pub, to verify the signature.
- * @param responseStr raw XML response from the bank
- * @param withEbics3 true if the communication is EBICS 3, false otherwise.
- * @return [EbicsResponseContent] or throw [EbicsSideException]
- */
-fun parseAndValidateEbicsResponse(
- bankKeys: BankPublicKeysFile,
- resp: InputStream,
- withEbics3: Boolean
-): EbicsResponseContent {
- val doc = try {
- XMLUtil.parseIntoDom(resp)
- } catch (e: Exception) {
- throw EbicsSideException(
- "Bank response apparently invalid",
- sideEc = EbicsSideError.BANK_RESPONSE_IS_INVALID
- )
- }
- if (!XMLUtil.verifyEbicsDocument(
- doc,
- bankKeys.bank_authentication_public_key,
- withEbics3
- )) {
- throw EbicsSideException(
- "Bank signature did not verify",
- sideEc = EbicsSideError.BANK_SIGNATURE_DIDNT_VERIFY
- )
- }
- if (withEbics3)
- return ebics3toInternalRepr(doc)
- return ebics25toInternalRepr(doc)
-}
-
/**
* Signs and the encrypts the data to send via EBICS.
*
@@ -527,6 +509,7 @@ suspend fun doEbicsUpload(
orderService: Ebics3Request.OrderDetails.Service,
payload: ByteArray,
): EbicsResponseContent {
+ // TODO use a lambda and pass the order detail there for atomicity ?
val preparedPayload = prepareUploadPayload(cfg, clientKeys, bankKeys,
payload, isEbics3 = true)
val initXml = createEbics3RequestForUploadInitialization(
cfg,
diff --git a/testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_ISO2019_v2019.xml
b/testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_ISO2019_v2019.xml
new file mode 100644
index 00000000..cd3c3833
--- /dev/null
+++ b/testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_ISO2019_v2019.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20201124375204228763929</MsgId>
+ <CreDtTm>2022-05-25T00:29:29</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20201124375204228763930</Id>
+ <CreDtTm>2022-05-25T00:29:29</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-05-24T00:00:00</FrDtTm>
+ <ToDtTm>2022-05-24T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Bernasconi Maria Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>true</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>075820002ZZTJR1K</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>190520CH02ZZTJR1</AcctSvcrRef>
+
<PmtInfId>PmtInfId-001-03</PmtInfId>
+
<InstrId>InstrId-001-03-04</InstrId>
+
<EndToEndId>EndToEndId-001-03-04</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Robert Schneider SA</Nm>
+
<PstlAdr>
+
<AdrLine>Rue du Lac 177</AdrLine>
+
<AdrLine>2503 Biel/Bienne</AdrLine>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH8709000000929471495</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<ClrSysMmbId>
+
<MmbId>9000</MmbId>
+
</ClrSysMmbId>
+
<Nm>PostFinance AG</Nm>
+
<PstlAdr>
+
<AdrLine>Mingerstrasse 20</AdrLine>
+
<AdrLine>3030 Bern</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+
<Ustrd>Kontouebertrag</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-05-24T20:00:00</AccptncDtTm>
+ </RltdDts>
+ <RtrInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>Kontonummer
falsch</AddtlInf>
+ </RtrInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>EndToEndId-001-03-04 RETOUR
TRANSAKTION NICHT AUSFÜHRBAR Kontouebertrag</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git a/testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_v2009.xml b/testbench/sample/10_camt054_Return_Detailavisierung
mit Einzelbuchung_v2009.xml
new file mode 100644
index 00000000..99689715
--- /dev/null
+++ b/testbench/sample/10_camt054_Return_Detailavisierung mit
Einzelbuchung_v2009.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20201124375204228763929</MsgId>
+ <CreDtTm>2020-11-25T00:29:29</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20201124375204228763930</Id>
+ <CreDtTm>2020-11-25T00:29:29</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2020-11-24T00:00:00</FrDtTm>
+ <ToDtTm>2020-11-24T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Bernasconi Maria Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>true</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>075820002ZZTJR1K</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>190520CH02ZZTJR1</AcctSvcrRef>
+
<PmtInfId>PmtInfId-001-03</PmtInfId>
+
<InstrId>InstrId-001-03-04</InstrId>
+
<EndToEndId>EndToEndId-001-03-04</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Robert
Schneider SA</Nm>
+ <PstlAdr>
+
<AdrLine>Rue du Lac 177</AdrLine>
+
<AdrLine>2503 Biel/Bienne</AdrLine>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH8709000000929471495</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<ClrSysMmbId>
+
<MmbId>9000</MmbId>
+
</ClrSysMmbId>
+
<Nm>PostFinance AG</Nm>
+
<PstlAdr>
+
<AdrLine>Mingerstrasse 20</AdrLine>
+
<AdrLine>3030 Bern</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+
<Ustrd>Kontouebertrag</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2020-11-24T20:00:00</AccptncDtTm>
+ </RltdDts>
+ <RtrInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>Kontonummer
falsch</AddtlInf>
+ </RtrInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>EndToEndId-001-03-04 RETOUR
TRANSAKTION NICHT AUSFÜHRBAR Kontouebertrag</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
b/testbench/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
new file mode 100644
index 00000000..5d9acb73
--- /dev/null
+++
b/testbench/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>201904245375204223076552</MsgId>
+ <CreDtTm>2019-04-24T21:28:58</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.6/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190424375204223076553</Id>
+ <CreDtTm>2019-04-24T21:28:58</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-04-24T21:28:58</FrDtTm>
+ <ToDtTm>2019-04-24T21:28:58</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>CDTN</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2019-04-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-04-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>074820002ZZ9J42U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>074820002ZZ9J42U</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT ESR VERARBEITUNG
VOM 24.04.2019 KUNDENNUMMER 01-429580-3 PAKET ID:
180315CH00000HPA</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
b/testbench/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
new file mode 100644
index 00000000..c5cfc7a9
--- /dev/null
+++
b/testbench/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20190424375204222704046</MsgId>
+ <CreDtTm>2014-04-25T01:49:54</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.6/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190424375204222704047</Id>
+ <CreDtTm>2019-04-25T01:49:54</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-04-25T01:49:54</FrDtTm>
+ <ToDtTm>2019-04-25T01:49:54</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>DBTN</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">913.00</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2019-04-25</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-04-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>074820002ZU1EQ0K</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<MsgId>20190424-000369773</MsgId>
+
<AcctSvcrRef>25-1120172999-2</AcctSvcrRef>
+
<PmtInfId>30003101</PmtInfId>
+
<EndToEndId>20190424001255000100006</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">913.00</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GIRO POST CH5109000000250092291
Bernasconi Maria Place de la Gare 12 2502 Biel/Bienne SENDER REFERENZ:
30003101</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/200519_camt054-chdd_p_ch2909000000250094239_1110097484_0_20190520700381159_v2019.xml
b/testbench/sample/200519_camt054-chdd_p_ch2909000000250094239_1110097484_0_20190520700381159_v2019.xml
new file mode 100644
index 00000000..ce640964
--- /dev/null
+++
b/testbench/sample/200519_camt054-chdd_p_ch2909000000250094239_1110097484_0_20190520700381159_v2019.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/Users/burkhalterl/Documents/Musterfiles%20ISOV19/Schemen/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20190520375204228751067</MsgId>
+ <CreDtTm>2019-05-19T00:20:22</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/2.0/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190516375204228751070</Id>
+ <CreDtTm>2019-05-20T00:20:22</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-05-19T00:00:00</FrDtTm>
+ <ToDtTm>2019-05-19T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ccy>CHF</Ccy>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>41100000000872849</NtryRef>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2019-05-19</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-05-19</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>2</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<MsgId>MsgId-CHDD-Musterfile</MsgId>
+
<AcctSvcrRef>201-31295208-1</AcctSvcrRef>
+
<PmtInfId>PmtInfId-CHDD-1</PmtInfId>
+
<InstrId>InstrId-CHDD-1</InstrId>
+
<EndToEndId>E2EId-CHDD-1</EndToEndId>
+
<UETR>b009c997-97b3-4a9c-803c-d645a7276bf5</UETR>
+ </Refs>
+ <Amt Ccy="CHF">1.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Maria Bernasconi</Nm>
+
<PstlAdr>
+
<StrtNm>Place de la Gare 12</StrtNm>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel</TwnNm>
+
<Ctry>CH</Ctry>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <Cdtr>
+ <Pty>
+ <Id>
+
<OrgId>
+
<Othr>
+
<Id>41100000000872849</Id>
+
</Othr>
+
</OrgId>
+ </Id>
+ </Pty>
+ </Cdtr>
+ </RltdPties>
+ <RmtInf>
+ <Ustrd>Rechnung
1001</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2019-05-19T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ <TxDtls>
+ <Refs>
+
<MsgId>MsgId-CHDD-Musterfile</MsgId>
+
<AcctSvcrRef>201-31295208-2</AcctSvcrRef>
+
<PmtInfId>PmtInfId-CHDD-1</PmtInfId>
+
<InstrId>InstrId-CHDD-2</InstrId>
+
<EndToEndId>E2EId-CHDD-2</EndToEndId>
+
<UETR>b009c997-97b3-4a9c-803c-d645a7276bf5</UETR>
+ </Refs>
+ <Amt Ccy="CHF">3.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Maria Bernasconi</Nm>
+
<PstlAdr>
+
<StrtNm>Place de la Gare 12</StrtNm>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel</TwnNm>
+
<Ctry>CH</Ctry>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <Cdtr>
+ <Pty>
+ <Id>
+
<OrgId>
+
<Othr>
+
<Id>41100000000872849</Id>
+
</Othr>
+
</OrgId>
+ </Id>
+ </Pty>
+ </Cdtr>
+ </RltdPties>
+ <RmtInf>
+ <Ustrd>Rechnung
1002</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2019-05-19T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2009.xml
b/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2009.xml
new file mode 100644
index 00000000..c5ff27b5
--- /dev/null
+++
b/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2009.xml
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2020-06-18T23:41:07</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2020-06-18T23:41:07</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2020-06-18T00:00:00</FrDtTm>
+ <ToDtTm>2020-06-18T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH7730000001250094239</NtryRef>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-06-18</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-06-18</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>2</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>1006265-aic5dL-75dzf3jk9-cf2d5e9</EndToEndId>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">778.29</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Bernasconi
Maria</Nm>
+ <PstlAdr>
+
<StrtNm>Place de la Gare</StrtNm>
+
<BldgNb>12</BldgNb>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel/Bienne</TwnNm>
+
<Ctry>CH</Ctry>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH7730000001250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+ <CdtrRefInf>
+ <Tp>
+
<CdOrPrtry>
+
<Prtry>QRR</Prtry>
+
</CdOrPrtry>
+ </Tp>
+
<Ref>539115429773825311971477453</Ref>
+ </CdtrRefInf>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2020-06-18T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>3000000000000000</AcctSvcrRef>
+
<InstrId>1005970-70a75515</InstrId>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000030</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">913.93</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Bernasconi
Maria</Nm>
+ <PstlAdr>
+
<StrtNm>Place de la Gare</StrtNm>
+
<BldgNb>12</BldgNb>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel/Bienne</TwnNm>
+
<Ctry>CH</Ctry>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH7730000001250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+ <CdtrRefInf>
+ <Tp>
+
<CdOrPrtry>
+
<Prtry>QRR</Prtry>
+
</CdOrPrtry>
+ </Tp>
+
<Ref>662437765447746478179744715</Ref>
+ </CdtrRefInf>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2020-06-18T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH7730000001250094239 VERARBEITUNG VOM 18.06.2020 PAKET ID:
200618CH000009TB</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2019.xml
b/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2019.xml
new file mode 100644
index 00000000..199b2216
--- /dev/null
+++
b/testbench/sample/200519_camt054_P_CH2909000000250094239_1111091335_0_2020061900081727_v2019.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/Users/burkhalterl/Documents/Musterfiles%20ISOV19/Schemen/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2020-06-18T23:41:07</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/2.0/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2020-06-18T23:41:07</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2020-06-18T00:00:00</FrDtTm>
+ <ToDtTm>2020-06-18T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ccy>CHF</Ccy>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH7730000001250094239</NtryRef>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-06-18</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-06-18</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>2</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>1006265-aic5dL-75dzf3jk9-cf2d5e9</EndToEndId>
+
<UETR>b009c997-97b3-4a9c-803c-d645a7276bf0</UETR>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">778.29</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Bernasconi Maria</Nm>
+
<PstlAdr>
+
<StrtNm>Place de la Gare</StrtNm>
+
<BldgNb>12</BldgNb>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel/Bienne</TwnNm>
+
<Ctry>CH</Ctry>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH7730000001250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+ <CdtrRefInf>
+ <Tp>
+
<CdOrPrtry>
+
<Prtry>QRR</Prtry>
+
</CdOrPrtry>
+ </Tp>
+
<Ref>539115429773825311971477453</Ref>
+ </CdtrRefInf>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2020-06-18T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>3000000000000000</AcctSvcrRef>
+
<InstrId>1005970-70a75515</InstrId>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000030</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">913.93</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Bernasconi Maria</Nm>
+
<PstlAdr>
+
<StrtNm>Place de la Gare</StrtNm>
+
<BldgNb>12</BldgNb>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel/Bienne</TwnNm>
+
<Ctry>CH</Ctry>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH7730000001250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+ <CdtrRefInf>
+ <Tp>
+
<CdOrPrtry>
+
<Prtry>QRR</Prtry>
+
</CdOrPrtry>
+ </Tp>
+
<Ref>662437765447746478179744715</Ref>
+ </CdtrRefInf>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2020-06-18T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH7730000001250094239 VERARBEITUNG VOM 18.06.2020 PAKET ID:
200618CH000009TB</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git a/testbench/sample/2_pain002 B-Level ACCP_v2009.xml
b/testbench/sample/2_pain002 B-Level ACCP_v2009.xml
new file mode 100644
index 00000000..7b2fa70b
--- /dev/null
+++ b/testbench/sample/2_pain002 B-Level ACCP_v2009.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document
xmlns="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd
pain.002.001.03.ch.02.xsd"><CstmrPmtStsRpt><GrpHdr><MsgId>20180326375204011678275</MsgId><CreDtTm>2018-03-26T12:09:48</CreDtTm><InitgPty><Id><OrgId><BICOrBEI>POFICHBE</BICOrBEI></OrgId></Id></InitgPty></GrpHdr><OrgnlGrpInfAndSts><OrgnlMsgId>MsgId-006</OrgnlMsgId><Or
[...]
diff --git a/testbench/sample/2_pain002 B-Level ACCP_v2019.xml
b/testbench/sample/2_pain002 B-Level ACCP_v2019.xml
new file mode 100644
index 00000000..83cf35d1
--- /dev/null
+++ b/testbench/sample/2_pain002 B-Level ACCP_v2019.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10
pain.002.001.10.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>204691ACFC/071125/023228</MsgId>
+ <CreDtTm>2022-05-02T05:11:25Z</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <AnyBIC>POFICHBE</AnyBIC>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MSG-02-QRR-SCOR</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.09.ch.03</OrgnlMsgNmId>
+ </OrgnlGrpInfAndSts>
+ <OrgnlPmtInfAndSts>
+ <OrgnlPmtInfId>PMTINF-01</OrgnlPmtInfId>
+ <PmtInfSts>ACCP</PmtInfSts>
+ </OrgnlPmtInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/3_pain002 B-Level und C-Level
RJCT_ISO2019_v2019.xml b/testbench/sample/3_pain002 B-Level und C-Level
RJCT_ISO2019_v2019.xml
new file mode 100644
index 00000000..2b02d826
--- /dev/null
+++ b/testbench/sample/3_pain002 B-Level und C-Level RJCT_ISO2019_v2019.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10
pain.002.001.10.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>204691ACFC/071125/023362</MsgId>
+ <CreDtTm>2022-05-02T05:11:25Z</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <AnyBIC>POFICHBE</AnyBIC>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MSG-02-QRR-SCOR</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.09.ch.03</OrgnlMsgNmId>
+ </OrgnlGrpInfAndSts>
+ <OrgnlPmtInfAndSts>
+ <OrgnlPmtInfId>PMTINF-02</OrgnlPmtInfId>
+ <PmtInfSts>RJCT</PmtInfSts>
+ <StsRsnInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>0999;CH7280005000088877766 Lastkonto
unbekannt</AddtlInf>
+ </StsRsnInf>
+ </OrgnlPmtInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/3_pain002 B-Level und C-Level RJCT_v2009.xml
b/testbench/sample/3_pain002 B-Level und C-Level RJCT_v2009.xml
new file mode 100644
index 00000000..27c62a6b
--- /dev/null
+++ b/testbench/sample/3_pain002 B-Level und C-Level RJCT_v2009.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document
xmlns="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd
pain.002.001.03.ch.02.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20180315375204222822452</MsgId>
+ <CreDtTm>2018-03-15T11:25:12</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <BICOrBEI>POFICHBE</BICOrBEI>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-001</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.03.ch.02</OrgnlMsgNmId>
+ </OrgnlGrpInfAndSts>
+ <OrgnlPmtInfAndSts>
+ <OrgnlPmtInfId>PmtInfId-001-03</OrgnlPmtInfId>
+ <PmtInfSts>PART</PmtInfSts>
+ <TxInfAndSts>
+ <OrgnlInstrId>InstrId-001-03-04</OrgnlInstrId>
+
<OrgnlEndToEndId>EndToEndId-001-03-04</OrgnlEndToEndId>
+ <TxSts>RJCT</TxSts>
+ <StsRsnInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>1301813;Konto
ungültig</AddtlInf>
+ </StsRsnInf>
+ <OrgnlTxRef>
+
<IntrBkSttlmDt>2018-03-16</IntrBkSttlmDt>
+ <ReqdColltnDt>2018-03-16</ReqdColltnDt>
+ </OrgnlTxRef>
+ </TxInfAndSts>
+ </OrgnlPmtInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2009.xml b/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2009.xml
new file mode 100644
index 00000000..f4c74cbd
--- /dev/null
+++ b/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2009.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document
xmlns="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd
pain.002.001.03.ch.02.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20180315375204222821684</MsgId>
+ <CreDtTm>2018-03-15T10:49:10</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <BICOrBEI>POFICHBE</BICOrBEI>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-001</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.03.ch.02</OrgnlMsgNmId>
+ <GrpSts>ACTC</GrpSts>
+ </OrgnlGrpInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
\ No newline at end of file
diff --git a/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2019.xml b/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2019.xml
new file mode 100644
index 00000000..dd603c50
--- /dev/null
+++ b/testbench/sample/5_pain002 A-Level ACTC (Empfangsbestaetigung
FDS)_v2019.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10
pain.002.001.10.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20180315375204222821684</MsgId>
+ <CreDtTm>2022-05-02T10:49:10</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <AnyBIC>POFICHBE</AnyBIC>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-001</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.09.ch.03</OrgnlMsgNmId>
+ <GrpSts>ACTC</GrpSts>
+ </OrgnlGrpInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2009.xml b/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2009.xml
new file mode 100644
index 00000000..1960b15f
--- /dev/null
+++ b/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2009.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document
xmlns="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd
pain.002.001.03.ch.02.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20180326375204011685776</MsgId>
+ <CreDtTm>2018-03-26T14:40:00</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <BICOrBEI>POFICHBE</BICOrBEI>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-005</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.03.ch.02</OrgnlMsgNmId>
+ <GrpSts>RJCT</GrpSts>
+ <StsRsnInf>
+ <Rsn>
+ <Cd>AM10</Cd>
+ </Rsn>
+ <AddtlInf>904114;ControlSum
fehlerhaft</AddtlInf>
+ </StsRsnInf>
+ </OrgnlGrpInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2019.xml b/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2019.xml
new file mode 100644
index 00000000..0809b583
--- /dev/null
+++ b/testbench/sample/6_pain002 A-Level RJCT (Empfangsbestaetigung
FDS)_v2019.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10
pain.002.001.10.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20180326375204011685776</MsgId>
+ <CreDtTm>2022-05-02T14:40:00</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <AnyBIC>POFICHBE</AnyBIC>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-005</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.001.001.09.ch.03</OrgnlMsgNmId>
+ <GrpSts>RJCT</GrpSts>
+ <StsRsnInf>
+ <Rsn>
+ <Cd>AM10</Cd>
+ </Rsn>
+ <AddtlInf>904114;ControlSum
fehlerhaft</AddtlInf>
+ </StsRsnInf>
+ </OrgnlGrpInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_ISO2019_v2019.xml b/testbench/sample/9_camt054
Return_Detailavisierung mit Sammelbuchung_ISO2019_v2019.xml
new file mode 100644
index 00000000..facd99ea
--- /dev/null
+++ b/testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_ISO2019_v2019.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20190520375204012050698</MsgId>
+ <CreDtTm>2022-05-20T23:40:06</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190520375204012050705</Id>
+ <CreDtTm>2022-05-20T23:40:06</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-05-20T00:00:00</FrDtTm>
+ <ToDtTm>2022-05-20T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">400.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2022-05-20</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-05-20</Dt>
+ </ValDt>
+ <AcctSvcrRef>086820002PBWFX2U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>180327CH02P92DYD</AcctSvcrRef>
+
<PmtInfId>PmtInfId-004-01</PmtInfId>
+
<InstrId>InstrId-004-01-01</InstrId>
+
<EndToEndId>EndToEndId-004-01-01</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">400.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Robert Schneider SA</Nm>
+
<PstlAdr>
+
<AdrLine>Rue du Lac 177</AdrLine>
+
<AdrLine>2503 Biel/Bienne</AdrLine>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH8709000000929471495</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<ClrSysMmbId>
+
<MmbId>9000</MmbId>
+
</ClrSysMmbId>
+
<Nm>PostFinance AG</Nm>
+
<PstlAdr>
+
<AdrLine>Mingerstrasse 20</AdrLine>
+
<AdrLine>3030 Bern</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+
<Ustrd>Kontouebertrag</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-05-20T20:00:00</AccptncDtTm>
+ </RltdDts>
+ <RtrInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>Kontonummer
falsch</AddtlInf>
+ </RtrInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT RETOUREN
VERARBEITUNG VOM 20.05.2022 PAKET ID: 190520CH000006O1</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git a/testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_v2009.xml b/testbench/sample/9_camt054 Return_Detailavisierung
mit Sammelbuchung_v2009.xml
new file mode 100644
index 00000000..56ad09ff
--- /dev/null
+++ b/testbench/sample/9_camt054 Return_Detailavisierung mit
Sammelbuchung_v2009.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20190520375204012050698</MsgId>
+ <CreDtTm>2019-05-20T23:40:06</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.6/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190520375204012050705</Id>
+ <CreDtTm>2019-05-20T23:40:06</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-05-20T00:00:00</FrDtTm>
+ <ToDtTm>2019-05-20T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">400.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2019-05-20</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-05-20</Dt>
+ </ValDt>
+ <AcctSvcrRef>086820002PBWFX2U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>180327CH02P92DYD</AcctSvcrRef>
+
<PmtInfId>PmtInfId-004-01</PmtInfId>
+
<InstrId>InstrId-004-01-01</InstrId>
+
<EndToEndId>EndToEndId-004-01-01</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">400.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>ICDT</Cd>
+
<SubFmlyCd>RRTN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Robert
Schneider SA</Nm>
+ <PstlAdr>
+
<AdrLine>Rue du Lac 177</AdrLine>
+
<AdrLine>2503 Biel/Bienne</AdrLine>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH8709000000929471495</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<ClrSysMmbId>
+
<MmbId>9000</MmbId>
+
</ClrSysMmbId>
+
<Nm>PostFinance AG</Nm>
+
<PstlAdr>
+
<AdrLine>Mingerstrasse 20</AdrLine>
+
<AdrLine>3030 Bern</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+
<Ustrd>Kontouebertrag</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2019-05-20T20:00:00</AccptncDtTm>
+ </RltdDts>
+ <RtrInf>
+ <Rsn>
+ <Cd>AC01</Cd>
+ </Rsn>
+ <AddtlInf>Kontonummer
falsch</AddtlInf>
+ </RtrInf>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT RETOUREN
VERARBEITUNG VOM 20.05.2019 PAKET ID: 190520CH000006O1</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020062503071366_v2009.xml
b/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020062503071366_v2009.xml
new file mode 100644
index 00000000..68f32719
--- /dev/null
+++
b/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020062503071366_v2009.xml
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.04">
+ <BkToCstmrStmt>
+ <GrpHdr>
+ <MsgId>20201124375204229003967</MsgId>
+ <CreDtTm>2020-11-25T02:02:16</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Stmt>
+ <Id>20201124375204229003973</Id>
+ <ElctrncSeqNb>118</ElctrncSeqNb>
+ <CreDtTm>2020-11-25T02:02:16</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2020-06-24T00:00:00</FrDtTm>
+ <ToDtTm>2020-06-24T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>OPBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">211993.19</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">215112.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLAV</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">215112.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>FWAV</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">216649.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-25</Dt>
+ </Dt>
+ </Bal>
+ <Ntry>
+ <NtryRef>41100000000872849</NtryRef>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">77.70</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480977</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>0758103031480977</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">77.70</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303F0C7U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303F0C7U</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH2909000000250094239 VERARBEITUNG VOM 23.11.2020 PAKET ID:
9999999999999999</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <NtryRef>CH7730000001250094239</NtryRef>
+ <Amt Ccy="CHF">1537.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1537.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH7730000001250094239 VERARBEITUNG VOM 24.11.2020 PAKET ID:
201124CH000009TC</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <NtryRef>CH7730000001250094239</NtryRef>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH7730000001250094239 VERARBEITUNG VOM 24.11.2020 PAKET ID:
201124CH000009TB</AddtlNtryInf>
+ </Ntry>
+ </Stmt>
+ </BkToCstmrStmt>
+</Document>
diff --git
a/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020112503071366_v2019.xml
b/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020112503071366_v2019.xml
new file mode 100644
index 00000000..08ea2aeb
--- /dev/null
+++
b/testbench/sample/camt053_P_CH2909000000250094239_1110092698_0_2020112503071366_v2019.xml
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08
file:///C:/Users/burkhalterl/Downloads/camt.053.001.08.xsd">
+ <BkToCstmrStmt>
+ <GrpHdr>
+ <MsgId>20201124375204229003967</MsgId>
+ <CreDtTm>2020-11-25T02:02:16</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/2.0/PROD</AddtlInf>
+ </GrpHdr>
+ <Stmt>
+ <Id>20201124375204229003973</Id>
+ <ElctrncSeqNb>118</ElctrncSeqNb>
+ <CreDtTm>2020-11-25T02:02:16</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2020-06-24T00:00:00</FrDtTm>
+ <ToDtTm>2020-06-24T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ccy>CHF</Ccy>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>OPBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">211993.19</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">215112.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLAV</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">215112.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-24</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>FWAV</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">216649.21</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2020-11-25</Dt>
+ </Dt>
+ </Bal>
+ <Ntry>
+ <NtryRef>41100000000872849</NtryRef>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">77.70</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480977</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>0758103031480977</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">77.70</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303F0C7U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303F0C7U</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH2909000000250094239 VERARBEITUNG VOM 23.11.2020 PAKET ID:
9999999999999999</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">1537.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1537.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH2909000000250094239 VERARBEITUNG VOM 24.11.2020 PAKET ID:
9999999999999998</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <NtryRef>CH7730000001250094239</NtryRef>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2020-11-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2020-11-24</Dt>
+ </ValDt>
+ <AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>07582000303KBMSU</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1692.22</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH7730000001250094239 VERARBEITUNG VOM 24.11.2020 PAKET ID:
201124CH000009TB</AddtlNtryInf>
+ </Ntry>
+ </Stmt>
+ </BkToCstmrStmt>
+</Document>
diff --git
a/testbench/sample/camt054-CHDD_P_CH2909000000250094239_1110097484_0_20220615375204228751067.xml
b/testbench/sample/camt054-CHDD_P_CH2909000000250094239_1110097484_0_20220615375204228751067.xml
new file mode 100644
index 00000000..be527463
--- /dev/null
+++
b/testbench/sample/camt054-CHDD_P_CH2909000000250094239_1110097484_0_20220615375204228751067.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20220615375204228751067</MsgId>
+ <CreDtTm>2022-06-15T23:20:22</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20220615375204228751070</Id>
+ <CreDtTm>2022-06-15T23:20:22</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-06-14T00:00:00</FrDtTm>
+ <ToDtTm>2022-06-15T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ </Acct>
+ <Ntry>
+ <NtryRef>41100000000872849</NtryRef>
+ <Amt Ccy="CHF">4.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2022-06-15</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-06-15</Dt>
+ </ValDt>
+ <AcctSvcrRef>0758103031480900</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>2</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<MsgId>MsgId-CHDD-Musterfile</MsgId>
+
<AcctSvcrRef>201-31295208-1</AcctSvcrRef>
+
<PmtInfId>PmtInfId-CHDD-1</PmtInfId>
+
<InstrId>InstrId-CHDD-1</InstrId>
+
<EndToEndId>E2EId-CHDD-1</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">1.50</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Maria
Bernasconi</Nm>
+ <PstlAdr>
+
<StrtNm>Place de la Gare 12</StrtNm>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel</TwnNm>
+
<Ctry>CH</Ctry>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RmtInf>
+ <Ustrd>Rechnung
1001</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-06-15T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ <TxDtls>
+ <Refs>
+
<MsgId>MsgId-CHDD-Musterfile</MsgId>
+
<AcctSvcrRef>201-31295208-2</AcctSvcrRef>
+
<PmtInfId>PmtInfId-CHDD-1</PmtInfId>
+
<InstrId>InstrId-CHDD-2</InstrId>
+
<EndToEndId>E2EId-CHDD-2</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">3.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>IDDT</Cd>
+
<SubFmlyCd>PMDD</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Maria
Bernasconi</Nm>
+ <PstlAdr>
+
<StrtNm>Place de la Gare 12</StrtNm>
+
<PstCd>2502</PstCd>
+
<TwnNm>Biel</TwnNm>
+
<Ctry>CH</Ctry>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RmtInf>
+ <Ustrd>Rechnung
1002</Ustrd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-06-15T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT CH-DD-BASISLASTSCHRIFT
ID-NR. DES ZAHLUNGSEMPFÄNGERS: 41100000000872849 REFERENZ-NR:
PmtInfId-CHDD-1</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2009.xml
b/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2009.xml
new file mode 100644
index 00000000..dc1d8241
--- /dev/null
+++
b/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2009.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2022-03-10T23:40:14</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2022-03-10T23:40:14</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-03-10T00:00:00</FrDtTm>
+ <ToDtTm>2022-03-10T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">522.10</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2022-03-10</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-03-10</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>ATXN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>NOTPROVIDED</EndToEndId>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">522.10</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>ATXN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Bernasconi
Maria</Nm>
+ <PstlAdr>
+
<AdrLine>Place de la Gare 12</AdrLine>
+
<AdrLine>2502 Biel/Bienne</AdrLine>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-03-10T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT AUFTRAGGEBER:
Bernasconi Maria Place de la Gare 12 2502 Biel/Bienne REFERENZEN: NOTPROVIDED
1006265-25bbb3b1a 2000000000000000</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2019.xml
b/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2019.xml
new file mode 100644
index 00000000..0647c09f
--- /dev/null
+++
b/testbench/sample/camt054_P_CH2909000000250094239_1111111112_0_2022031011011199_v2019.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/Users/burkhalterl/Documents/Musterfiles%20ISOV19/Schemen/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2022-03-10T23:40:14</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/2.0/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2022-03-10T23:40:14</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-03-10T00:00:00</FrDtTm>
+ <ToDtTm>2022-03-10T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ccy>CHF</Ccy>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">522.10</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2022-03-10</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-03-10</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>ATXN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>NOTPROVIDED</EndToEndId>
+
<UETR>b009c997-97b3-4a9c-803c-d645a7276bf0</UETR>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">522.10</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>ATXN</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Bernasconi Maria</Nm>
+
<PstlAdr>
+
<AdrLine>Place de la Gare 12</AdrLine>
+
<AdrLine>2502 Biel/Bienne</AdrLine>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE 20</AdrLine>
+
<AdrLine>3030 BERNE</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Strd>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-03-10T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GUTSCHRIFT AUFTRAGGEBER:
Bernasconi Maria Place de la Gare 12 2502 Biel/Bienne REFERENZEN: NOTPROVIDED
1006265-25bbb3b1a 2000000000000000</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2009.xml
b/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2009.xml
new file mode 100644
index 00000000..ed822f6d
--- /dev/null
+++
b/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2009.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04
camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2022-03-08T23:31:31</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2022-03-08T23:31:31</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-03-08T00:00:00</FrDtTm>
+ <ToDtTm>2022-03-08T23:59:59</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>OTHR</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">501.05</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2022-03-08</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-03-08</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>NOTPROVIDED</EndToEndId>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">501.05</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Nm>Bernasconi
Maria</Nm>
+ <PstlAdr>
+
<AdrLine>Place de la Gare 12</AdrLine>
+
<AdrLine>2502 Biel/Bienne</AdrLine>
+ </PstlAdr>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE , 20</AdrLine>
+
<AdrLine>3030 BERN</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Ustrd>Muster</Ustrd>
+ <Ustrd>
Musterfile</Ustrd>
+ <Strd>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-03-08T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH2909000000250094239 VERARBEITUNG VOM 08.03.2022 PAKET ID:
200000000000XXX</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2019.xml
b/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2019.xml
new file mode 100644
index 00000000..a4c2009b
--- /dev/null
+++
b/testbench/sample/camt054_P_CH2909000000250094239_1111111119_0_2022030911011199_v2019.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08
file:///C:/Users/burkhalterl/Documents/Musterfiles%20ISOV19/Schemen/camt.054.001.08.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20200618375204295372463</MsgId>
+ <CreDtTm>2022-03-08T23:31:31</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/2.0/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20200618375204295372465</Id>
+ <CreDtTm>2022-03-08T23:31:31</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2022-03-08T00:00:00</FrDtTm>
+ <ToDtTm>2022-03-08T23:59:59</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ccy>CHF</Ccy>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins
Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <NtryRef>CH2909000000250094239</NtryRef>
+ <Amt Ccy="CHF">501.05</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2022-03-08</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2022-03-08</Dt>
+ </ValDt>
+ <AcctSvcrRef>1000000000000000</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+
<AcctSvcrRef>2000000000000000</AcctSvcrRef>
+
<InstrId>1006265-25bbb3b1a</InstrId>
+
<EndToEndId>NOTPROVIDED</EndToEndId>
+
<UETR>b009c997-97b3-4a9c-803c-d645a7276b0</UETR>
+ <Prtry>
+ <Tp>00</Tp>
+
<Ref>00000000000000000000020</Ref>
+ </Prtry>
+ </Refs>
+ <Amt Ccy="CHF">501.05</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+
<Cd>RCDT</Cd>
+
<SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+
<Nm>Bernasconi Maria</Nm>
+
<PstlAdr>
+
<AdrLine>Place de la Gare 12</AdrLine>
+
<AdrLine>2502 Biel/Bienne</AdrLine>
+
</PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+
<IBAN>CH5109000000250092291</IBAN>
+ </Id>
+ </DbtrAcct>
+ <CdtrAcct>
+ <Id>
+
<IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ </CdtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+
<BICFI>POFICHBEXXX</BICFI>
+
<Nm>POSTFINANCE AG</Nm>
+
<PstlAdr>
+
<AdrLine>MINGERSTRASSE , 20</AdrLine>
+
<AdrLine>3030 BERN</AdrLine>
+
</PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Ustrd>Muster</Ustrd>
+ <Ustrd>
Musterfile</Ustrd>
+ <Strd>
+
<AddtlRmtInf>?REJECT?0</AddtlRmtInf>
+
<AddtlRmtInf>?ERROR?000</AddtlRmtInf>
+ </Strd>
+ </RmtInf>
+ <RltdDts>
+
<AccptncDtTm>2022-03-08T20:00:00</AccptncDtTm>
+ </RltdDts>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT FÜR KONTO:
CH2909000000250094239 VERARBEITUNG VOM 08.03.2022 PAKET ID:
200000000000XXX</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git
a/testbench/sample/pain002_CHDD_P_CH2909000000250094239_1110097483_0_20220614375204216308259.xml
b/testbench/sample/pain002_CHDD_P_CH2909000000250094239_1110097483_0_20220614375204216308259.xml
new file mode 100644
index 00000000..6f52b504
--- /dev/null
+++
b/testbench/sample/pain002_CHDD_P_CH2909000000250094239_1110097483_0_20220614375204216308259.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document
xmlns="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.six-interbank-clearing.com/de/pain.002.001.03.ch.02.xsd
pain.002.001.03.ch.02.xsd">
+ <CstmrPmtStsRpt>
+ <GrpHdr>
+ <MsgId>20220614375204216308259</MsgId>
+ <CreDtTm>2022-06-14T17:22:51</CreDtTm>
+ <InitgPty>
+ <Id>
+ <OrgId>
+ <BICOrBEI>POFICHBE</BICOrBEI>
+ </OrgId>
+ </Id>
+ </InitgPty>
+ </GrpHdr>
+ <OrgnlGrpInfAndSts>
+ <OrgnlMsgId>MsgId-CHDD-Musterfile</OrgnlMsgId>
+ <OrgnlMsgNmId>pain.008.001.02.ch.03</OrgnlMsgNmId>
+ </OrgnlGrpInfAndSts>
+ <OrgnlPmtInfAndSts>
+ <OrgnlPmtInfId>PmtInfId-CHDD-1</OrgnlPmtInfId>
+ <PmtInfSts>ACCP</PmtInfSts>
+ </OrgnlPmtInfAndSts>
+ </CstmrPmtStsRpt>
+</Document>
diff --git a/testbench/src/test/kotlin/Iso20022Test.kt
b/testbench/src/test/kotlin/Iso20022Test.kt
index 481961c0..7e0fc7b9 100644
--- a/testbench/src/test/kotlin/Iso20022Test.kt
+++ b/testbench/src/test/kotlin/Iso20022Test.kt
@@ -23,6 +23,22 @@ import java.nio.file.*
import kotlin.io.path.*
class Iso20022Test {
+ @Test
+ fun sample() {
+ for (sample in Path("sample").listDirectoryEntries()) {
+ val content = Files.newInputStream(sample)
+ val name = sample.toString()
+ println(name)
+ if (name.contains("HAC")) {
+ parseCustomerAck(content)
+ } else if (name.contains("pain.002")) {
+ parseCustomerPaymentStatusReport(content)
+ } else {
+ parseTxNotif(content, "CHF", mutableListOf())
+ }
+ }
+ }
+
@Test
fun logs() {
val root = Path("test")
@@ -40,7 +56,7 @@ class Iso20022Test {
} else if (name.contains("pain.002")) {
parseCustomerPaymentStatusReport(content)
} else {
- parseTxNotif(content, "CHF", mutableListOf(),
mutableListOf())
+ parseTxNotif(content, "CHF", mutableListOf())
}
}
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libeufin] branch master updated (1a8fd6b5 -> 4f2f3926),
gnunet <=