From 61267edb8d051b2f903edafab5b42429b02ed8b6 Mon Sep 17 00:00:00 2001 From: burak Date: Sun, 11 Jan 2026 17:17:26 +0300 Subject: [PATCH] fix: Add UBL CreditNote support in ZUGFeRDInvoiceImporter --- library/src/main/java/org/mustangproject/Item.java | 2 +- .../org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index 5c9d8976..a7229fbc 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -107,7 +107,7 @@ public class Item implements IZUGFeRDExportableItem { icnm.getAsBigDecimal("BaseQuantity").ifPresent(this::setBasisQuantity); }); - itemMap.getNode("InvoicedQuantity").ifPresent(icn -> { + itemMap.getNode(new String[]{"InvoicedQuantity", "CreditedQuantity"}).ifPresent(icn -> { // ubl setQuantity(new BigDecimal(icn.getTextContent().trim())); product.setUnit(icn.getAttributes().getNamedItem("unitCode").getNodeValue()); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index 09803e59..972e2672 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -609,7 +609,7 @@ public class ZUGFeRDInvoiceImporter { // //*[local-name()="Invoice" or local-name()="CreditNote"] number = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"ID\"]").trim(); potentialCashDiscountTerms = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"PaymentTerms\"]/*[local-name()=\"Note\"]").trim(); - typeCode = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"InvoiceTypeCode\"]").trim(); + typeCode = extractString("/*[local-name()=\"Invoice\"]/*[local-name()=\"InvoiceTypeCode\"] | /*[local-name()=\"CreditNote\"]/*[local-name()=\"CreditNoteTypeCode\"]").trim(); String issueDateStr = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"IssueDate\"]").trim(); if (!issueDateStr.isEmpty()) { issueDate = parseDate(issueDateStr, "yyyy-MM-dd"); @@ -626,7 +626,7 @@ public class ZUGFeRDInvoiceImporter { } - String dueDt = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"DueDate\"]").trim(); + String dueDt = extractString("/*[local-name()=\"Invoice\" or local-name()=\"CreditNote\"]/*[local-name()=\"DueDate\"] | /*[local-name()=\"CreditNote\"]/*[local-name()=\"PaymentMeans\"]/*[local-name()=\"PaymentDueDate\"]").trim(); if (!dueDt.isEmpty()) { dueDate = parseDate(dueDt, "yyyy-MM-dd"); } @@ -1077,7 +1077,7 @@ public class ZUGFeRDInvoiceImporter { zpp.setReferenceNumber(buyerReference); } - xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]|//*[local-name()=\"InvoiceLine\"]"); + xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]|//*[local-name()=\"InvoiceLine\"]|//*[local-name()=\"CreditNoteLine\"]"); nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); if (nodes.getLength() != 0) {