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());
}