Skip to content

Commit 53623cf

Browse files
authored
Merge pull request #999 from langfr/bugfix/UNTAXEDSERVICE
Write RateApplicablePercent on head also for tax free (UNTAXEDSERVICE…
2 parents 17403c3 + 6a224a9 commit 53623cf

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ public void generateXML(IExportableTransaction trans) {
745745
}
746746
}
747747
if (trans.getDocumentCode() != null
748-
&& Set.of(DocumentCodeTypeConstants.CORRECTEDINVOICE, DocumentCodeTypeConstants.CREDITNOTE).contains(trans.getDocumentCode())) {
748+
&& Arrays.asList(DocumentCodeTypeConstants.CORRECTEDINVOICE, DocumentCodeTypeConstants.CREDITNOTE).contains(trans.getDocumentCode())) {
749749
hasDueDate = false;
750750
}
751751

@@ -769,10 +769,8 @@ public void generateXML(IExportableTransaction trans) {
769769
+ "<ram:BasisAmount>" + currencyFormat(amount.getBasis()) + "</ram:BasisAmount>" // currencyID=\"EUR\"
770770
+ "<ram:CategoryCode>" + amountCategoryCode + "</ram:CategoryCode>"
771771
+ (amountDueDateTypeCode != null ? "<ram:DueDateTypeCode>" + amountDueDateTypeCode + "</ram:DueDateTypeCode>" : "");
772-
if (!amountCategoryCode.equals(TaxCategoryCodeTypeConstants.UNTAXEDSERVICE)) {
773-
xml += "<ram:RateApplicablePercent>"
774-
+ vatFormat(amount.getApplicablePercent()) + "</ram:RateApplicablePercent>";
775-
}
772+
xml += "<ram:RateApplicablePercent>"
773+
+ vatFormat(amount.getApplicablePercent()) + "</ram:RateApplicablePercent>";
776774
xml += "</ram:ApplicableTradeTax>";
777775
}
778776
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ public void testApplicablePercentInUntaxedService() {
299299
String number = "123";
300300
String amountStr = "1.00";
301301
BigDecimal amount = new BigDecimal(amountStr);
302-
var i = new Invoice().setDueDate(new java.util.Date()).setIssueDate(new java.util.Date()).setDeliveryDate(new java.util.Date())
302+
Invoice i = new Invoice().setDueDate(new java.util.Date()).setIssueDate(new java.util.Date()).setDeliveryDate(new java.util.Date())
303303
.setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("DE4711").addVATID("DE0815").setEmail("info@example.org").setContact(new org.mustangproject.Contact("Hans Test", "+49123456789", "test@example.org")).addBankDetails(new org.mustangproject.BankDetails("DE12500105170648489890", "COBADEFXXX")))
304304
.setRecipient(recipient)
305305
.setReferenceNumber("991-01484-64")//leitweg-id
@@ -311,10 +311,14 @@ public void testApplicablePercentInUntaxedService() {
311311
zf2p.generateXML(i);
312312
String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
313313
// Untaxed services don't have the field RateApplicablePercent, since it would be always 0. An error is thrown on validation, if 0 is set.
314-
assertThat(theXML).valueByXPath("count(//*[local-name()='RateApplicablePercent'])")
314+
assertThat(theXML).valueByXPath("count(//*[local-name()='SpecifiedLineTradeSettlement']/*[local-name()='ApplicableTradeTax']/*[local-name()='RateApplicablePercent'])")
315315
.asInt()
316316
.isEqualTo(0);
317317

318+
assertThat(theXML).valueByXPath("count(//*[local-name()='ApplicableHeaderTradeSettlement']/*[local-name()='ApplicableTradeTax']/*[local-name()='RateApplicablePercent'])")
319+
.asInt()
320+
.isEqualTo(1);
321+
318322
//Exemption reason needs to be set if TaxCategoryCode == "O", reason should be at the product and in the ApplicableTradeTax
319323
assertThat(theXML).valueByXPath("count(//*[local-name()='ExemptionReason'])")
320324
.asInt()

0 commit comments

Comments
 (0)