libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit cfa5e2dacb4e9b5a58a7475d1f3a56969a909298
parent 52742e7145217d0562ffef2bd794b6d9bf4c70ff
Author: Antoine A <>
Date:   Fri,  5 Dec 2025 17:10:52 +0100

nexus: add valiant foreign currency test

Diffstat:
Mlibeufin-nexus/sample/platform/valiant_camt052.xml | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlibeufin-nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt | 2+-
Mlibeufin-nexus/src/test/kotlin/Iso20022Test.kt | 7+++++++
Mlibeufin-nexus/src/test/kotlin/RegistrationTest.kt | 7+++++++
Mtestbench/src/test/kotlin/Iso20022Test.kt | 2+-
5 files changed, 105 insertions(+), 2 deletions(-)

diff --git a/libeufin-nexus/sample/platform/valiant_camt052.xml b/libeufin-nexus/sample/platform/valiant_camt052.xml @@ -835,6 +835,95 @@ </NtryDtls> <AddtlNtryInf>Vergütung</AddtlNtryInf> </Ntry> + <Ntry> + <Amt Ccy="CHF">4.55</Amt> + <CdtDbtInd>CRDT</CdtDbtInd> + <RvslInd>false</RvslInd> + <Sts> + <Cd>BOOK</Cd> + </Sts> + <BookgDt> + <Dt>2025-11-18</Dt> + </BookgDt> + <ValDt> + <Dt>2025-11-18</Dt> + </ValDt> + <AcctSvcrRef>ZV20251118/685062</AcctSvcrRef> + <BkTxCd> + <Domn> + <Cd>PMNT</Cd> + <Fmly> + <Cd>RCDT</Cd> + <SubFmlyCd>DMCT</SubFmlyCd> + </Fmly> + </Domn> + </BkTxCd> + <NtryDtls> + <Btch> + <NbOfTxs>1</NbOfTxs> + <TtlAmt Ccy="CHF">4.55</TtlAmt> + <CdtDbtInd>CRDT</CdtDbtInd> + </Btch> + <TxDtls> + <Refs> + <AcctSvcrRef>ZV20251118/685062/1</AcctSvcrRef> + <EndToEndId>NOTPROVIDED</EndToEndId> + <UETR>7b76d488-05d5-44ab-9d77-31d4165ec158</UETR> + <TxId>00204EQY370</TxId> + </Refs> + <Amt Ccy="CHF">4.55</Amt> + <CdtDbtInd>CRDT</CdtDbtInd> + <AmtDtls> + <InstdAmt> + <Amt Ccy="EUR">5</Amt> + </InstdAmt> + <TxAmt> + <Amt Ccy="EUR">5</Amt> + <CcyXchg> + <SrcCcy>CHF</SrcCcy> + <TrgtCcy>EUR</TrgtCcy> + <XchgRate>.911064</XchgRate> + </CcyXchg> + </TxAmt> + </AmtDtls> + <Chrgs> + <Rcrd> + <Amt Ccy="EUR">0</Amt> + <CdtDbtInd>CRDT</CdtDbtInd> + <Tp> + <Prtry> + <Id>SHA</Id> + </Prtry> + </Tp> + </Rcrd> + </Chrgs> + <RltdPties> + <Dbtr> + <Pty> + <Nm>1/HANS GROTHOFF</Nm> + <PstlAdr> + <AdrLine>2/BRUENNMATTEN 20</AdrLine> + <AdrLine>3/CH/2563 IPSACH</AdrLine> + </PstlAdr> + </Pty> + </Dbtr> + <Cdtr> + <Pty> + <Nm>VERD Finanzas AG</Nm> + <PstlAdr> + <AdrLine>3011 Bern</AdrLine> + </PstlAdr> + </Pty> + </Cdtr> + </RltdPties> + <RmtInf> + <Ustrd>TEST</Ustrd> + </RmtInf> + <AddtlTxInf>Gutschrift</AddtlTxInf> + </TxDtls> + </NtryDtls> + <AddtlNtryInf>Gutschrift</AddtlNtryInf> + </Ntry> </Rpt> </BkToCstmrAcctRpt> </Document> \ No newline at end of file diff --git a/libeufin-nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt b/libeufin-nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/camt.kt @@ -369,7 +369,7 @@ private fun XmlDestructor.complexAmount(charges: List<ChargeRecord>): ComplexAmo var fee: TalerAmount = TalerAmount.zero(amount.currency) for (chr in charges) { - if (chr.included) { + if (chr.included && !chr.amount.isZero()) { fee += chr.amount if (chr.kind == Kind.DBIT) { if (chr.bearer == ChargeBearer.DEBT) { diff --git a/libeufin-nexus/src/test/kotlin/Iso20022Test.kt b/libeufin-nexus/src/test/kotlin/Iso20022Test.kt @@ -314,6 +314,13 @@ class Iso20022Test { subject = "foreign iban 2025-10-30T12:03:58.0046 73747Z", executionTime = dateToInstant("2025-10-30") ), + IncomingPayment( + id = IncomingId("7b76d488-05d5-44ab-9d77-31d4165ec158", "00204EQY370", "ZV20251118/685062/1"), + amount = TalerAmount("CHF:4.55"), + subject = "TEST", + executionTime = dateToInstant("2025-11-18"), + debtor = null + ), ) )) ) diff --git a/libeufin-nexus/src/test/kotlin/RegistrationTest.kt b/libeufin-nexus/src/test/kotlin/RegistrationTest.kt @@ -356,6 +356,13 @@ class RegistrationTest { executionTime = dateToInstant("2025-10-30"), debtor = ibanPayto("CH7389144832588726658", "Grothoff Hans"), ), + IncomingPayment( + id = IncomingId("7b76d488-05d5-44ab-9d77-31d4165ec158", "00204EQY370", "ZV20251118/685062/1"), + amount = TalerAmount("CHF:4.55"), + subject = "TEST", + executionTime = dateToInstant("2025-11-18"), + debtor = null + ), ), outgoing = listOf( OutgoingPayment( diff --git a/testbench/src/test/kotlin/Iso20022Test.kt b/testbench/src/test/kotlin/Iso20022Test.kt @@ -108,7 +108,7 @@ class Iso20022Test { val content = Files.newInputStream(log) val name = log.toString() println(name) - if (name.contains("wssparam")) { + if (name.contains("wssparam") || name.endsWith(".txt")) { // Skip } else if (name.contains("HAC")) { parseCustomerAck(content)