diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 8e035e4b..a3d89bbf 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -20,6 +20,8 @@ */ package org.mustangproject.ZUGFeRD; +import static org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants.CATEGORY_CODES_WITH_EXEMPTION_REASON; + import java.io.IOException; import java.io.StringWriter; import java.io.UnsupportedEncodingException; @@ -263,16 +265,17 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { final VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); if (amount != null) { + final String amountCategoryCode = amount.getCategoryCode(); + final boolean displayExemptionReason = CATEGORY_CODES_WITH_EXEMPTION_REASON.contains(amountCategoryCode); xml += " \n" + " " + currencyFormat(amount.getCalculated()) + "\n" //currencyID=\"EUR\" + " VAT\n" - + exemptionReason + + (displayExemptionReason ? exemptionReason : "") + " " + currencyFormat(amount.getBasis()) + "\n" // currencyID=\"EUR\" + " " + amount.getCategoryCode() + "\n" + " " + vatFormat(currentTaxPercent) + "\n" + " \n"; - } } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 96818027..2bef4cc1 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -21,6 +21,7 @@ package org.mustangproject.ZUGFeRD; import static org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants.CORRECTEDINVOICE; +import static org.mustangproject.ZUGFeRD.model.TaxCategoryCodeTypeConstants.CATEGORY_CODES_WITH_EXEMPTION_REASON; import java.io.IOException; import java.io.StringWriter; @@ -29,7 +30,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Base64; import java.util.Date; -import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -507,20 +508,21 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { hasDueDate = false; } - final HashMap VATPercentAmountMap = calc.getVATPercentAmountMap(); + final Map VATPercentAmountMap = calc.getVATPercentAmountMap(); for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { final VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); if (amount != null) { - xml += " \n" - + " " + currencyFormat(amount.getCalculated()) - + "\n" //currencyID=\"EUR\" - + " VAT\n" - + exemptionReason - + " " + currencyFormat(amount.getBasis()) + "\n" // currencyID=\"EUR\" - + " " + amount.getCategoryCode() + "\n" - + " " + vatFormat(currentTaxPercent) - + "\n" + " \n"; - + final String amountCategoryCode = amount.getCategoryCode(); + final boolean displayExemptionReason = CATEGORY_CODES_WITH_EXEMPTION_REASON.contains(amountCategoryCode); + xml += " \n" + + " " + currencyFormat(amount.getCalculated()) + + "\n" //currencyID=\"EUR\" + + " VAT\n" + + (displayExemptionReason ? exemptionReason : "") + + " " + currencyFormat(amount.getBasis()) + "\n" // currencyID=\"EUR\" + + " " + amountCategoryCode + "\n" + + " " + + vatFormat(currentTaxPercent) + "\n" + " \n" ; } } if ((trans.getDetailedDeliveryPeriodFrom() != null) || (trans.getDetailedDeliveryPeriodTo() != null)) { diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/model/TaxCategoryCodeTypeConstants.java b/library/src/main/java/org/mustangproject/ZUGFeRD/model/TaxCategoryCodeTypeConstants.java index b7669ba0..62badd8c 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/model/TaxCategoryCodeTypeConstants.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/model/TaxCategoryCodeTypeConstants.java @@ -18,6 +18,10 @@ *********************************************************************** */ package org.mustangproject.ZUGFeRD.model; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + public class TaxCategoryCodeTypeConstants { public static final String STANDARDRATE = "S"; public static final String REVERSECHARGE = "AE"; @@ -25,4 +29,6 @@ public class TaxCategoryCodeTypeConstants { public static final String ZEROTAXPRODUCTS = "Z"; public static final String UNTAXEDSERVICE = "O"; public static final String INTRACOMMUNITY = "K"; + + public static Set CATEGORY_CODES_WITH_EXEMPTION_REASON = Stream.of(INTRACOMMUNITY, REVERSECHARGE).collect(Collectors.toSet()); }