commit cfa5e2dacb4e9b5a58a7475d1f3a56969a909298
parent 52742e7145217d0562ffef2bd794b6d9bf4c70ff
Author: Antoine A <>
Date: Fri, 5 Dec 2025 17:10:52 +0100
nexus: add valiant foreign currency test
Diffstat:
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)