commit 205590d3da19748ad6b2f9067f0c239cd63a5d76
parent b94f2c309e68984f3771dfcc8a97a0b6ebafb1f7
Author: Antoine A <>
Date: Tue, 24 Mar 2026 11:45:04 +0100
nexus: add raiffeisen samples
Diffstat:
4 files changed, 317 insertions(+), 2 deletions(-)
diff --git a/libeufin-nexus/sample/platform/raiffeisen_camt053.xml b/libeufin-nexus/sample/platform/raiffeisen_camt053.xml
@@ -0,0 +1,269 @@
+<?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 camt.053.001.08.xsd">
+ <BkToCstmrStmt>
+ <GrpHdr>
+ <MsgId>M/20574741277/CA</MsgId>
+ <CreDtTm>2025-09-26T00:54:24+02:00</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.7/PROD</AddtlInf>
+ </GrpHdr>
+ <Stmt>
+ <Id>M/20574741277/CA</Id>l <ElctrncSeqNb>268</ElctrncSeqNb>
+ <CreDtTm>2025-09-26T00:54:24+02:00</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2025-09-25T00:00:00+02:00</FrDtTm>
+ <ToDtTm>2025-09-26T00:00:00+02:00</ToDtTm>
+ </FrToDt>
+ <Acct>
+ <Id>
+ <IBAN>CH7389144832588726658</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Taler Operations AG</Nm>
+ </Ownr>
+ <Svcr>
+ <FinInstnId>
+ <Nm>Raiffeisenbank Seeland</Nm>
+ </FinInstnId>
+ </Svcr>
+ </Acct>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>OPBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">458.16</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2025-09-25</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLBD</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">458.16</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2025-09-25</Dt>
+ </Dt>
+ </Bal>
+ <Bal>
+ <Tp>
+ <CdOrPrtry>
+ <Cd>CLAV</Cd>
+ </CdOrPrtry>
+ </Tp>
+ <Amt Ccy="CHF">458.16</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Dt>
+ <Dt>2025-09-25</Dt>
+ </Dt>
+ </Bal>
+ <Ntry>
+ <Amt Ccy="CHF">20000</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2025-12-23</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2025-12-23</Dt>
+ </ValDt>
+ <AcctSvcrRef>A200020494367552</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>DMCT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>1000</Cd>
+ </Prtry>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+ <AcctSvcrRef>A200020494367552</AcctSvcrRef>
+ <InstrId>01-470006005102602025</InstrId>
+ <EndToEndId>430002300186732025</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">20000</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RltdPties>
+ <Dbtr>
+ <Pty>
+ <Nm>KANTON BERN</Nm>
+ <PstlAdr>
+ <StrtNm>Munsterplatz</StrtNm>
+ <BldgNb>12</BldgNb>
+ <PstCd>3011</PstCd>
+ <TwnNm>Bern</TwnNm>
+ <Ctry>CH</Ctry>
+ </PstlAdr>
+ </Pty>
+ </Dbtr>
+ <DbtrAcct>
+ <Id>
+ <IBAN>CH7389144832588726658</IBAN>
+ </Id>
+ </DbtrAcct>
+ </RltdPties>
+ <RltdAgts>
+ <DbtrAgt>
+ <FinInstnId>
+ <BICFI>POFICHBE</BICFI>
+ <Nm>PostFinance</Nm>
+ <PstlAdr>
+ <StrtNm>Nordring 8</StrtNm>
+ <PstCd>3030</PstCd>
+ <TwnNm>Bern</TwnNm>
+ <Ctry>CH</Ctry>
+ </PstlAdr>
+ </FinInstnId>
+ </DbtrAgt>
+ </RltdAgts>
+ <RmtInf>
+ <Ustrd>1. TZ 2025</Ustrd>
+ </RmtInf>
+ </TxDtls>
+ </NtryDtls>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">15</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2025-12-30</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2025-12-31</Dt>
+ </ValDt>
+ <AcctSvcrRef>19868398389</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>ACMT</Cd>
+ <Fmly>
+ <Cd>MDOP</Cd>
+ <SubFmlyCd>FEES</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>8002</Cd>
+ </Prtry>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+ <AcctSvcrRef>19868398389</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">15</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>Gebührenbelastung Kontoführung
+ 01.10.2025 - 31.12.2025</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">2</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2025-12-31</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2025-12-31</Dt>
+ </ValDt>
+ <AcctSvcrRef>19890406743</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>ACMT</Cd>
+ <Fmly>
+ <Cd>MDOP</Cd>
+ <SubFmlyCd>FEES</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>8002</Cd>
+ </Prtry>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+ <AcctSvcrRef>19890406743</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">2</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>Gebührenbelastung Belege und Auszüge
+ 01.10.2025 - 31.12.2025</AddtlNtryInf>
+ </Ntry>
+ <Ntry>
+ <Amt Ccy="CHF">3</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <Sts>
+ <Cd>BOOK</Cd>
+ </Sts>
+ <BookgDt>
+ <Dt>2025-12-31</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2025-12-31</Dt>
+ </ValDt>
+ <AcctSvcrRef>19885172770</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>ACMT</Cd>
+ <Fmly>
+ <Cd>MDOP</Cd>
+ <SubFmlyCd>FEES</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ <Prtry>
+ <Cd>8002</Cd>
+ </Prtry>
+ </BkTxCd>
+ <NtryDtls>
+ <Btch>
+ <NbOfTxs>1</NbOfTxs>
+ </Btch>
+ <TxDtls>
+ <Refs>
+ <AcctSvcrRef>19885172770</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">3</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>Gebührenbelastung Versand und Verpackung
+ 01.10.2025 - 31.12.2025</AddtlNtryInf>
+ </Ntry>
+ </Stmt>
+ </BkToCstmrStmt>
+</Document>
+\ No newline at end of file
diff --git a/libeufin-nexus/sample/platform/raiffeisen_pain001.xml b/libeufin-nexus/sample/platform/raiffeisen_pain001.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09 pain.001.001.09.ch.03.xsd"><CstmrCdtTrfInitn><GrpHdr><MsgId>MESSAGE_ID</MsgId><CreDtTm>2024-09-09T00:00:00Z</CreDtTm><NbOfTxs>3</NbOfTxs><CtrlSum>47.32</CtrlSum><InitgPty><Nm>myname</Nm></InitgPty></GrpHdr><PmtInf><PmtInfId>NOTPROVIDED</PmtInfId><PmtMtd>TRF</PmtMtd><BtchBookg>false</BtchBookg><NbOfTxs>3</NbOfTxs><CtrlSum>47.32</CtrlSum><ReqdExctnDt><Dt>2024-09-09Z</Dt></ReqdExctnDt><Dbtr><Nm>myname</Nm></Dbtr><DbtrAcct><Id><IBAN>CH7789144474425692816</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>BIC</BICFI></FinInstnId></DbtrAgt><ChrgBr>SLEV</ChrgBr><CdtTrfTxInf><PmtId><InstrId>TX_FIRST</InstrId><EndToEndId>TX_FIRST</EndToEndId></PmtId><Amt><InstdAmt Ccy="CHF">42</InstdAmt></Amt><Cdtr><Nm>Test</Nm></Cdtr><CdtrAcct><Id><IBAN>CH4189144589712575493</IBAN></Id></CdtrAcct><RmtInf><Ustrd>Test 42</Ustrd></RmtInf></CdtTrfTxInf><CdtTrfTxInf><PmtId><InstrId>TX_SECOND</InstrId><EndToEndId>TX_SECOND</EndToEndId></PmtId><Amt><InstdAmt Ccy="CHF">5.11</InstdAmt></Amt><Cdtr><Nm>Test</Nm></Cdtr><CdtrAcct><Id><IBAN>CH4189144589712575493</IBAN></Id></CdtrAcct><RmtInf><Ustrd>Test 5.11</Ustrd></RmtInf></CdtTrfTxInf><CdtTrfTxInf><PmtId><InstrId>TX_THIRD</InstrId><EndToEndId>TX_THIRD</EndToEndId></PmtId><Amt><InstdAmt Ccy="CHF">0.21</InstdAmt></Amt><Cdtr><Nm>Test</Nm></Cdtr><CdtrAcct><Id><IBAN>CH4189144589712575493</IBAN></Id></CdtrAcct><RmtInf><Ustrd>Test 0.21</Ustrd></RmtInf></CdtTrfTxInf></PmtInf></CstmrCdtTrfInitn></Document>
+\ No newline at end of file
diff --git a/libeufin-nexus/src/test/kotlin/Iso20022Test.kt b/libeufin-nexus/src/test/kotlin/Iso20022Test.kt
@@ -1,6 +1,6 @@
/*
* This file is part of LibEuFin.
- * Copyright (C) 2024-2025 Taler Systems S.A.
+ * Copyright (C) 2024, 2025, 2026 Taler Systems S.A.
* LibEuFin is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -327,6 +327,47 @@ class Iso20022Test {
}
@Test
+ fun raiffeisen_camt053() {
+ assertContentEquals(
+ parseTx(Path("sample/platform/raiffeisen_camt053.xml").inputStream()),
+ listOf(AccountTransactions(
+ iban = "CH7389144832588726658",
+ currency = null,
+ txs = listOf(
+ IncomingPayment(
+ id = IncomingId(null, null, "A200020494367552"),
+ amount = TalerAmount("CHF:20000"),
+ subject = "1. TZ 2025",
+ executionTime = dateToInstant("2025-12-23"),
+ debtor = ibanPayto("CH7389144832588726658", "KANTON BERN")
+ ),
+ OutgoingPayment(
+ id = OutgoingId(null, null, "19868398389"),
+ amount = TalerAmount("CHF:15"),
+ executionTime = dateToInstant("2025-12-31"),
+ subject = null,
+ creditor = null
+ ),
+ OutgoingPayment(
+ id = OutgoingId(null, null, "19890406743"),
+ amount = TalerAmount("CHF:2"),
+ executionTime = dateToInstant("2025-12-31"),
+ subject = null,
+ creditor = null
+ ),
+ OutgoingPayment(
+ id = OutgoingId(null, null, "19885172770"),
+ amount = TalerAmount("CHF:3"),
+ executionTime = dateToInstant("2025-12-31"),
+ subject = null,
+ creditor = null
+ ),
+ )
+ ))
+ )
+ }
+
+ @Test
fun gls_camt052() {
assertContentEquals(
parseTx(Path("sample/platform/gls_camt052.xml").inputStream()),
diff --git a/testbench/src/test/kotlin/Iso20022Test.kt b/testbench/src/test/kotlin/Iso20022Test.kt
@@ -1,6 +1,6 @@
/*
* This file is part of LibEuFin.
- * Copyright (C) 2024-2025 Taler Systems S.A.
+ * Copyright (C) 2024, 2025, 2026 Taler Systems S.A.
* LibEuFin is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -100,6 +100,8 @@ class Iso20022Test {
}
// Load config
+ val path = root.resolve("platform").resolve("${platform.fileName}.conf")
+ if (!path.exists()) continue
val cfg = nexusConfig(root.resolve("platform").resolve("${platform.fileName}.conf"))
val currency = cfg.currency
val dialect = cfg.ebics.dialect