From 7871981c73645f1f12aa795c71b752226f0c2559 Mon Sep 17 00:00:00 2001 From: langfr Date: Fri, 6 Feb 2026 14:11:20 +0000 Subject: [PATCH] Add CalculationPercent (BT-101) and BasisAmount (BT-100) to allowances/charges on document level. --- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 24 ++++++++++++++----- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 5 ++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index d7aab617..61693ea5 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -811,8 +811,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml += "" + "" + "true" + - "" + - "" + currencyFormat(charge.getTotalAmount(calc)) + ""; + ""; + if (charge.getPercent() != null && (profile == Profiles.getByName("EN16931") || (profile == Profiles.getByName("EXTENDED")))) { + xml += "" + vatFormat(charge.getPercent()) + ""; + } + if (charge.getBasisAmount() != null && (profile == Profiles.getByName("EN16931") || (profile == Profiles.getByName("EXTENDED")))) { + xml += "" + currencyFormat(charge.getBasisAmount()) + ""; + } + xml += "" + currencyFormat(charge.getTotalAmount(calc)) + ""; if (charge.getReasonCode() != null) { xml += "" + charge.getReasonCode() + ""; } @@ -855,14 +861,20 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml += "" + "" + "false" + - "" + - "" + currencyFormat(allowance.getTotalAmount(calc)) + ""; - if (allowance.getReason() != null) { - xml += "" + XMLTools.encodeXML(allowance.getReason()) + ""; + ""; + if (allowance.getPercent() != null) { + xml += "" + vatFormat(allowance.getPercent()) + ""; } + if (allowance.getBasisAmount() != null) { + xml += "" + currencyFormat(allowance.getBasisAmount()) + ""; + } + xml += "" + currencyFormat(allowance.getTotalAmount(calc)) + ""; if (allowance.getReasonCode() != null) { xml += "" + allowance.getReasonCode() + ""; } + if (allowance.getReason() != null) { + xml += "" + XMLTools.encodeXML(allowance.getReason()) + ""; + } xml += "" + "VAT" + "" + allowance.getCategoryCode() + ""; diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index ade0ed6d..24a8ca63 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -763,8 +763,9 @@ public class ZF2PushTest extends TestCase { .setNumber(number) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) - .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")) - .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addCharge(new Charge().setPercent(new BigDecimal(50)).setBasisAmount(price).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK").setReason("Verschiedenes")) + .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("95").setReason("Mengenrabatt")) ); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8); assertTrue(theXML.contains("