Skip to content

Commit 755a371

Browse files
committed
Add Tax ExemptionReasonCode on document level.
1 parent 0239069 commit 755a371

4 files changed

Lines changed: 26 additions & 0 deletions

File tree

library/src/main/java/org/mustangproject/ZUGFeRD/TransactionCalculator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ protected HashMap<BigDecimal, VATAmount> getVATPercentAmountMap() {
208208
if (reasonText != null) {
209209
itemVATAmount.setVatExemptionReasonText(reasonText);
210210
}
211+
String reasonCode = currentItem.getProduct().getTaxExemptionReasonCode();
212+
if (reasonCode != null) {
213+
itemVATAmount.setVatExemptionReasonCode(reasonCode);
214+
}
211215
VATAmount current = hm.get(percent.stripTrailingZeros());
212216
if (current == null) {
213217
hm.put(percent.stripTrailingZeros(), itemVATAmount);
@@ -281,6 +285,10 @@ protected List<VATAmount> getVATAmountList() {
281285
if (reasonText != null) {
282286
itemVATAmount.setVatExemptionReasonText(reasonText);
283287
}
288+
final String reasonCode = currentItem.getProduct().getTaxExemptionReasonCode();
289+
if (reasonCode != null) {
290+
itemVATAmount.setVatExemptionReasonCode(reasonCode);
291+
}
284292
final Optional<VATAmount> currentVatAmount = this.getCurrentVatAmount(vatAmounts, currentItem.getProduct().getTaxCategoryCode(), percent);
285293
if (currentVatAmount.isEmpty()) {
286294
vatAmounts.add(itemVATAmount);

library/src/main/java/org/mustangproject/ZUGFeRD/VATAmount.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public class VATAmount {
3939

4040
protected String vatExemptionReasonText;
4141

42+
protected String vatExemptionReasonCode;
43+
4244
protected String dueDateTypeCode;
4345

4446

@@ -105,6 +107,15 @@ public VATAmount setVatExemptionReasonText(String theText) {
105107
return this;
106108
}
107109

110+
public String getVatExemptionReasonCode() {
111+
return vatExemptionReasonCode;
112+
}
113+
114+
public VATAmount setVatExemptionReasonCode(String taxExemptionReasonCode) {
115+
this.vatExemptionReasonCode = taxExemptionReasonCode;
116+
return this;
117+
}
118+
108119
/**
109120
*
110121
* @deprecated Use {@link #getCategoryCode() instead}

library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,13 +832,19 @@ public BigDecimal getQuantity() {
832832
exemptionReasonTextXML = "<ram:ExemptionReason>" + XMLTools.encodeXML(amount.getVatExemptionReasonText()) + "</ram:ExemptionReason>";
833833
}
834834

835+
String exemptionReasonCodeXML = "";
836+
if (amount.getVatExemptionReasonCode() != null) {
837+
exemptionReasonCodeXML = "<ram:ExemptionReasonCode>" + XMLTools.encodeXML(amount.getVatExemptionReasonCode()) + "</ram:ExemptionReasonCode>";
838+
}
839+
835840
xml += "<ram:ApplicableTradeTax>"
836841
+ "<ram:CalculatedAmount>" + currencyFormat(amount.getCalculated())
837842
+ "</ram:CalculatedAmount>" //currencyID=\"EUR\"
838843
+ "<ram:TypeCode>VAT</ram:TypeCode>"
839844
+ exemptionReasonTextXML
840845
+ "<ram:BasisAmount>" + currencyFormat(amount.getBasis()) + "</ram:BasisAmount>" // currencyID=\"EUR\"
841846
+ "<ram:CategoryCode>" + amountCategoryCode + "</ram:CategoryCode>"
847+
+ exemptionReasonCodeXML
842848
+ (amountDueDateTypeCode != null ? "<ram:DueDateTypeCode>" + amountDueDateTypeCode + "</ram:DueDateTypeCode>" : "");
843849
xml += "<ram:RateApplicablePercent>"
844850
+ vatFormat(amount.getApplicablePercent()) + "</ram:RateApplicablePercent>";

library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ public void testAttachmentsExport() {
187187

188188
assertEquals("EUR", zi.getInvoiceCurrencyCode());
189189
assertTrue(zi.getUTF8().contains(taxID));
190+
assertThat(zi.getUTF8()).valueByXPath("//*[local-name()=\"ApplicableHeaderTradeSettlement\"]/*[local-name()=\"ExemptionReasonCode\"]");
190191

191192
// Reading ZUGFeRD
192193
assertEquals("1.00", zi.getAmount());

0 commit comments

Comments
 (0)