From 597075e0dc7ace1b25a2ca47561cd49973fe2b59 Mon Sep 17 00:00:00 2001 From: Sebastian Sieber Date: Wed, 20 Jan 2021 09:32:41 +0100 Subject: [PATCH 01/11] Support SellerOrderReferencedDocumentId --- .../main/java/org/mustangproject/Invoice.java | 46 +++-- .../ZUGFeRD/IExportableTransaction.java | 8 + .../ZUGFeRD/ZUGFeRD1PullProvider.java | 64 +++---- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 78 +++++---- .../ZUGFeRD/ZUGFeRDImporter.java | 160 ++++++++++-------- 5 files changed, 209 insertions(+), 147 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index 7562f41a..6fd87275 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -39,6 +39,7 @@ public class Invoice implements IExportableTransaction { protected TradeParty sender = null, recipient = null, deliveryAddress = null; protected ArrayList ZFItems = null; protected ArrayList notes = null; + private String sellerOrderReferencedDocumentID; protected String contractReferencedDocument = null; protected ArrayList xmlEmbeddedFiles=null; @@ -50,7 +51,7 @@ public class Invoice implements IExportableTransaction { protected IZUGFeRDPaymentTerms paymentTerms = null; - public Invoice() { + public Invoice() { ZFItems = new ArrayList(); setCurrency("EUR"); } @@ -60,7 +61,8 @@ public class Invoice implements IExportableTransaction { return documentName; } - public String getContractReferencedDocument() { + @Override + public String getContractReferencedDocument() { return contractReferencedDocument; } @@ -81,13 +83,14 @@ public class Invoice implements IExportableTransaction { public Invoice embedFileInXML(FileAttachment fa) { if (xmlEmbeddedFiles == null) { - xmlEmbeddedFiles=new ArrayList(); + xmlEmbeddedFiles= new ArrayList<>(); } xmlEmbeddedFiles.add(fa); return this; } - public FileAttachment[] getAdditionalReferencedDocuments() { + @Override + public FileAttachment[] getAdditionalReferencedDocuments() { if (xmlEmbeddedFiles == null) { return null; } @@ -209,7 +212,16 @@ public class Invoice implements IExportableTransaction { public String getBuyerOrderReferencedDocumentID() { return buyerOrderReferencedDocumentID; } + @Override + public String getSellerOrderReferencedDocumentID() { + return sellerOrderReferencedDocumentID; + } + + public Invoice setSellerOrderReferencedDocumentID(String sellerOrderReferencedDocumentID) { + this.sellerOrderReferencedDocumentID = sellerOrderReferencedDocumentID; + return this; + } /*** * usually the order number or in case of a correction the original invoice number * @param buyerOrderReferencedDocumentID string with number @@ -310,12 +322,14 @@ public class Invoice implements IExportableTransaction { } - public String getOwnLocation() { + @Override + public String getOwnLocation() { return sender.getLocation(); } - public String getOwnCountry() { + @Override + public String getOwnCountry() { return sender.getCountry(); } @@ -405,7 +419,8 @@ public class Invoice implements IExportableTransaction { return this; } - public IZUGFeRDExportableTradeParty getRecipient() { + @Override + public IZUGFeRDExportableTradeParty getRecipient() { return recipient; } @@ -439,8 +454,9 @@ public class Invoice implements IExportableTransaction { public IZUGFeRDAllowanceCharge[] getZFAllowances() { if (Allowances.isEmpty()) { return null; - } else - return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]); + } else { + return Allowances.toArray(new IZUGFeRDAllowanceCharge[0]); + } } @@ -448,8 +464,9 @@ public class Invoice implements IExportableTransaction { public IZUGFeRDAllowanceCharge[] getZFCharges() { if (Charges.isEmpty()) { return null; - } else - return Charges.toArray(new IZUGFeRDAllowanceCharge[0]); + } else { + return Charges.toArray(new IZUGFeRDAllowanceCharge[0]); + } } @@ -457,8 +474,9 @@ public class Invoice implements IExportableTransaction { public IZUGFeRDAllowanceCharge[] getZFLogisticsServiceCharges() { if (LogisticsServiceCharges.isEmpty()) { return null; - } else - return LogisticsServiceCharges.toArray(new IZUGFeRDAllowanceCharge[0]); + } else { + return LogisticsServiceCharges.toArray(new IZUGFeRDAllowanceCharge[0]); + } } @@ -599,7 +617,7 @@ public class Invoice implements IExportableTransaction { */ public Invoice addNote(String text) { if (notes == null) { - notes = new ArrayList(); + notes = new ArrayList<>(); } notes.add(text); return this; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 70fa9e50..2f306ab2 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -398,6 +398,14 @@ public interface IExportableTransaction { } + /** + * get the ID of the SellerOrderReferencedDocument, which sits in the ApplicableSupplyChainTradeAgreement/ApplicableHeaderTradeAgreement + * + * @return the ID of the document + */ + default String getSellerOrderReferencedDocumentID() { + return null; + } /** * get the ID of the BuyerOrderReferencedDocument, which sits in the ApplicableSupplyChainTradeAgreement * diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 2a55d93b..325cc9d9 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -20,13 +20,6 @@ */ package org.mustangproject.ZUGFeRD; -import org.dom4j.Document; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.io.OutputFormat; -import org.dom4j.io.XMLWriter; -import org.mustangproject.XMLTools; - import java.io.IOException; import java.io.StringWriter; import java.io.UnsupportedEncodingException; @@ -37,6 +30,13 @@ import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.XMLWriter; +import org.mustangproject.XMLTools; + public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLProvider { @@ -82,20 +82,20 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr byte[] res = zugferdData; - StringWriter sw = new StringWriter(); + final StringWriter sw = new StringWriter(); Document document = null; try { document = DocumentHelper.parseText(new String(zugferdData)); - } catch (DocumentException e1) { + } catch (final DocumentException e1) { Logger.getLogger(ZUGFeRD1PullProvider.class.getName()).log(Level.SEVERE, null, e1); } try { - OutputFormat format = OutputFormat.createPrettyPrint(); - XMLWriter writer = new XMLWriter(sw, format); + final OutputFormat format = OutputFormat.createPrettyPrint(); + final XMLWriter writer = new XMLWriter(sw, format); writer.write(document); res = sw.toString().getBytes("UTF-8"); - } catch (IOException e) { + } catch (final IOException e) { Logger.getLogger(ZUGFeRD1PullProvider.class.getName()).log(Level.SEVERE, null, e); } @@ -110,7 +110,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr this.calc = new TransactionCalculator(trans); boolean hasDueDate = false; - SimpleDateFormat germanDateFormat = new SimpleDateFormat("dd.MM.yyyy"); + final SimpleDateFormat germanDateFormat = new SimpleDateFormat("dd.MM.yyyy"); String exemptionReason = ""; if (trans.getPaymentTermDescription() != null) { @@ -199,6 +199,12 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr xml += " \n"; + if (trans.getSellerOrderReferencedDocumentID() != null) { + xml = xml + " \n" + + " " + + XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "\n" + + " \n"; + } if (trans.getBuyerOrderReferencedDocumentID() != null) { xml = xml + " \n" + " " @@ -235,7 +241,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr + " " + trans.getCurrency() + "\n"; if (trans.getTradeSettlementPayment() != null) { - for (IZUGFeRDTradeSettlementPayment payment : trans.getTradeSettlementPayment()) { + for (final IZUGFeRDTradeSettlementPayment payment : trans.getTradeSettlementPayment()) { if (payment != null) { hasDueDate = true; xml += payment.getSettlementXML(); @@ -243,7 +249,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr } } if (trans.getTradeSettlement() != null) { - for (IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { + for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { if (payment != null) { if (payment instanceof IZUGFeRDTradeSettlementPayment) { hasDueDate = true; @@ -253,9 +259,9 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr } } - HashMap VATPercentAmountMap = calc.getVATPercentAmountMap(); - for (BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { - VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); + final HashMap VATPercentAmountMap = calc.getVATPercentAmountMap(); + for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { + final VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); if (amount != null) { xml += " \n" + " " + currencyFormat(amount.getCalculated()) @@ -275,7 +281,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr + " " + paymentTermsDescription + "\n"; if (trans.getTradeSettlement() != null) { - for (IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { + for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { if ((payment != null) && (payment instanceof IZUGFeRDTradeSettlementDebit)) { xml += payment.getPaymentXML(); } @@ -318,14 +324,14 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr int lineID = 0; - for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) { + for (final IZUGFeRDExportableItem currentItem : trans.getZFItems()) { lineID++; if (currentItem.getProduct().getTaxExemptionReason() != null) { exemptionReason = "" + XMLTools.encodeXML(currentItem.getProduct().getTaxExemptionReason()) + ""; } - LineCalculator lc = new LineCalculator(currentItem); + final LineCalculator lc = new LineCalculator(currentItem); xml = xml + " \n" + " \n" + " " + lineID + "\n" //$NON-NLS-2$ @@ -404,11 +410,11 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr xml = xml + " \n" + ""; - byte[] zugferdRaw; + final byte[] zugferdRaw; try { zugferdRaw = xml.getBytes("UTF-8"); zugferdData = XMLTools.removeBOM(zugferdRaw); - } catch (UnsupportedEncodingException e) { + } catch (final UnsupportedEncodingException e) { Logger.getLogger(ZUGFeRD1PullProvider.class.getName()).log(Level.SEVERE, null, e); } } @@ -421,9 +427,9 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr private String buildPaymentTermsXml() { String paymentTermsXml = ""; - IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); - IZUGFeRDPaymentDiscountTerms discountTerms = paymentTerms.getDiscountTerms(); - Date dueDate = paymentTerms.getDueDate(); + final IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); + final IZUGFeRDPaymentDiscountTerms discountTerms = paymentTerms.getDiscountTerms(); + final Date dueDate = paymentTerms.getDueDate(); if (dueDate != null && discountTerms != null && discountTerms.getBaseDate() != null) { throw new IllegalStateException( "if paymentTerms.dueDate is specified, paymentTerms.discountTerms.baseDate has not to be specified"); @@ -438,14 +444,14 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr if (discountTerms != null) { paymentTermsXml += ""; - String currency = trans.getCurrency(); - String basisAmount = currencyFormat(calc.getGrandTotal()); + final String currency = trans.getCurrency(); + final String basisAmount = currencyFormat(calc.getGrandTotal()); paymentTermsXml += "" + basisAmount + ""; paymentTermsXml += "" + discountTerms.getCalculationPercentage().toString() + ""; if (discountTerms.getBaseDate() != null) { - Date baseDate = discountTerms.getBaseDate(); + final Date baseDate = discountTerms.getBaseDate(); paymentTermsXml += ""; paymentTermsXml += "" + zugferdDateFormat.format(baseDate) + ""; paymentTermsXml += ""; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 0e937e3d..269400ca 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -20,17 +20,18 @@ */ package org.mustangproject.ZUGFeRD; +import static org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants.CORRECTEDINVOICE; + import java.io.IOException; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; -import java.math.RoundingMode; import java.text.SimpleDateFormat; +import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.Base64; import org.dom4j.Document; import org.dom4j.DocumentException; @@ -39,9 +40,6 @@ import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; import org.mustangproject.FileAttachment; import org.mustangproject.XMLTools; -import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants; - -import static org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants.CORRECTEDINVOICE; public class ZUGFeRD2PullProvider implements IXMLProvider { @@ -82,20 +80,20 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { byte[] res = zugferdData; - StringWriter sw = new StringWriter(); + final StringWriter sw = new StringWriter(); Document document = null; try { document = DocumentHelper.parseText(new String(zugferdData)); - } catch (DocumentException e1) { + } catch (final DocumentException e1) { Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e1); } try { - OutputFormat format = OutputFormat.createPrettyPrint(); - XMLWriter writer = new XMLWriter(sw, format); + final OutputFormat format = OutputFormat.createPrettyPrint(); + final XMLWriter writer = new XMLWriter(sw, format); writer.write(document); res = sw.toString().getBytes("UTF-8"); - } catch (IOException e) { + } catch (final IOException e) { Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e); } @@ -210,7 +208,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { // only in extended profile reason = "" + XMLTools.encodeXML(allowance.getReason()) + ""; } - String allowanceChargeStr = "" + + final String allowanceChargeStr = "" + chargeIndicator + "" + percentage + "" + priceFormat(allowance.getTotalAmount(item)) + "" + reason + @@ -224,7 +222,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { this.calc = new TransactionCalculator(trans); boolean hasDueDate = false; - SimpleDateFormat germanDateFormat = new SimpleDateFormat("dd.MM.yyyy"); + final SimpleDateFormat germanDateFormat = new SimpleDateFormat("dd.MM.yyyy"); String exemptionReason = ""; @@ -265,7 +263,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } String notes = ""; if (trans.getNotes() != null) { - for (String currentNote : trans.getNotes()) { + for (final String currentNote : trans.getNotes()) { notes = notes + "" + XMLTools.encodeXML(currentNote) + ""; } @@ -301,19 +299,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " \n" + " \n"; int lineID = 0; - for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) { + for (final IZUGFeRDExportableItem currentItem : trans.getZFItems()) { lineID++; if (currentItem.getProduct().getTaxExemptionReason() != null) { exemptionReason = "" + XMLTools.encodeXML(currentItem.getProduct().getTaxExemptionReason()) + ""; } notes = ""; if (currentItem.getNotes() != null) { - for (String currentNote : currentItem.getNotes()) { + for (final String currentNote : currentItem.getNotes()) { notes = notes + "" + XMLTools.encodeXML(currentNote) + ""; } } - LineCalculator lc = new LineCalculator(currentItem); + final LineCalculator lc = new LineCalculator(currentItem); xml = xml + " \n" + " \n" + " " + lineID + "\n" //$NON-NLS-2$ @@ -332,12 +330,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } String allowanceChargeStr = ""; if (currentItem.getItemAllowances() != null && currentItem.getItemAllowances().length > 0) { - for (IZUGFeRDAllowanceCharge allowance : currentItem.getItemAllowances()) { + for (final IZUGFeRDAllowanceCharge allowance : currentItem.getItemAllowances()) { allowanceChargeStr += getAllowanceChargeStr(allowance, currentItem); } } if (currentItem.getItemCharges() != null && currentItem.getItemCharges().length > 0) { - for (IZUGFeRDAllowanceCharge charge : currentItem.getItemCharges()) { + for (final IZUGFeRDAllowanceCharge charge : currentItem.getItemCharges()) { allowanceChargeStr += getAllowanceChargeStr(charge, currentItem); } @@ -423,6 +421,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml += getTradePartyAsXML(trans.getRecipient(), false, false); xml += " \n"; + if (trans.getSellerOrderReferencedDocumentID() != null) { + xml = xml + " \n" + + " " + + XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "\n" + + " \n"; + } if (trans.getBuyerOrderReferencedDocumentID() != null) { xml = xml + " \n" + " " @@ -438,7 +442,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { // Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung) if (trans.getAdditionalReferencedDocuments() != null) { - for (FileAttachment f : trans.getAdditionalReferencedDocuments()) { + for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) { final String documentContent = new String(Base64.getEncoder().encodeToString(f.getData())); xml = xml + " \n" + " " + f.getFilename() + "\n" @@ -480,7 +484,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " " + trans.getCurrency() + "\n"; if (trans.getTradeSettlementPayment() != null) { - for (IZUGFeRDTradeSettlementPayment payment : trans.getTradeSettlementPayment()) { + for (final IZUGFeRDTradeSettlementPayment payment : trans.getTradeSettlementPayment()) { if (payment != null) { hasDueDate = true; xml += payment.getSettlementXML(); @@ -488,7 +492,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } } if (trans.getTradeSettlement() != null) { - for (IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { + for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { if (payment != null) { if (payment instanceof IZUGFeRDTradeSettlementPayment) { hasDueDate = true; @@ -501,9 +505,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { hasDueDate = false; } - HashMap VATPercentAmountMap = calc.getVATPercentAmountMap(); - for (BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { - VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); + final HashMap VATPercentAmountMap = calc.getVATPercentAmountMap(); + for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { + final VATAmount amount = VATPercentAmountMap.get(currentTaxPercent); if (amount != null) { xml += " \n" + " " + currencyFormat(amount.getCalculated()) @@ -532,7 +536,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { if ((trans.getZFCharges() != null) && (trans.getZFCharges().length > 0)) { - for (BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { + for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { if (calc.getChargesForPercent(currentTaxPercent).compareTo(BigDecimal.ZERO) != 0) { @@ -555,7 +559,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } if ((trans.getZFAllowances() != null) && (trans.getZFAllowances().length > 0)) { - for (BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { + for (final BigDecimal currentTaxPercent : VATPercentAmountMap.keySet()) { if (calc.getAllowancesForPercent(currentTaxPercent).compareTo(BigDecimal.ZERO) != 0) { xml = xml + " \n" + " \n" + @@ -582,7 +586,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } if (trans.getTradeSettlement() != null) { - for (IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { + for (final IZUGFeRDTradeSettlement payment : trans.getTradeSettlement()) { if ((payment != null) && (payment instanceof IZUGFeRDTradeSettlementDebit)) { xml += payment.getPaymentXML(); } @@ -601,9 +605,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - String allowanceTotalLine = "" + currencyFormat(calc.getAllowancesForPercent(null)) + ""; + final String allowanceTotalLine = "" + currencyFormat(calc.getAllowancesForPercent(null)) + ""; - String chargesTotalLine = "" + currencyFormat(calc.getChargesForPercent(null)) + ""; + final String chargesTotalLine = "" + currencyFormat(calc.getChargesForPercent(null)) + ""; xml = xml + " \n" + " " + currencyFormat(calc.getTotal()) + "\n" //$NON-NLS-2$ @@ -635,12 +639,12 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml = xml + " \n" + ""; - byte[] zugferdRaw; + final byte[] zugferdRaw; try { zugferdRaw = xml.getBytes("UTF-8"); zugferdData = XMLTools.removeBOM(zugferdRaw); - } catch (UnsupportedEncodingException e) { + } catch (final UnsupportedEncodingException e) { Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e); } } @@ -652,14 +656,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { private String buildPaymentTermsXml() { - IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); + final IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); if (paymentTerms==null) { return ""; } String paymentTermsXml = ""; - IZUGFeRDPaymentDiscountTerms discountTerms = paymentTerms.getDiscountTerms(); - Date dueDate = paymentTerms.getDueDate(); + final IZUGFeRDPaymentDiscountTerms discountTerms = paymentTerms.getDiscountTerms(); + final Date dueDate = paymentTerms.getDueDate(); if (dueDate != null && discountTerms != null && discountTerms.getBaseDate() != null) { throw new IllegalStateException( "if paymentTerms.dueDate is specified, paymentTerms.discountTerms.baseDate has not to be specified"); @@ -674,14 +678,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { if (discountTerms != null) { paymentTermsXml += ""; - String currency = trans.getCurrency(); - String basisAmount = currencyFormat(calc.getGrandTotal()); + final String currency = trans.getCurrency(); + final String basisAmount = currencyFormat(calc.getGrandTotal()); paymentTermsXml += "" + basisAmount + ""; paymentTermsXml += "" + discountTerms.getCalculationPercentage().toString() + ""; if (discountTerms.getBaseDate() != null) { - Date baseDate = discountTerms.getBaseDate(); + final Date baseDate = discountTerms.getBaseDate(); paymentTermsXml += ""; paymentTermsXml += "" + zugferdDateFormat.format(baseDate) + ""; paymentTermsXml += ""; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index c66ae41b..5c546aa5 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -21,23 +21,31 @@ import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.xpath.*; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; -import org.mustangproject.Item; -import org.mustangproject.Product; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary; import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode; import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; +import org.mustangproject.Item; +import org.mustangproject.Product; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -74,7 +82,7 @@ public class ZUGFeRDImporter { public ZUGFeRDImporter(String pdfFilename) { try (InputStream bis = Files.newInputStream(Paths.get(pdfFilename), StandardOpenOption.READ)) { extractLowLevel(bis); - } catch (IOException e) { + } catch (final IOException e) { Logger.getLogger(ZUGFeRDImporter.class.getName()).log(Level.SEVERE, null, e); throw new ZUGFeRDExportException(e); } @@ -84,7 +92,7 @@ public class ZUGFeRDImporter { public ZUGFeRDImporter(InputStream pdfStream) { try { extractLowLevel(pdfStream); - } catch (IOException e) { + } catch (final IOException e) { Logger.getLogger(ZUGFeRDImporter.class.getName()).log(Level.SEVERE, null, e); throw new ZUGFeRDExportException(e); } @@ -99,7 +107,7 @@ public class ZUGFeRDImporter { private void extractLowLevel(InputStream pdfStream) throws IOException { try (PDDocument doc = PDDocument.load(pdfStream)) { // PDDocumentInformation info = doc.getDocumentInformation(); - PDDocumentNameDictionary names = new PDDocumentNameDictionary(doc.getDocumentCatalog()); + final PDDocumentNameDictionary names = new PDDocumentNameDictionary(doc.getDocumentCatalog()); //start if (doc.getDocumentCatalog() == null || doc.getDocumentCatalog().getMetadata() == null) { @@ -107,15 +115,15 @@ public class ZUGFeRDImporter { return; } - InputStream XMP = doc.getDocumentCatalog().getMetadata().exportXMPMetadata(); + final InputStream XMP = doc.getDocumentCatalog().getMetadata().exportXMPMetadata(); xmpString = convertStreamToString(XMP); - PDEmbeddedFilesNameTreeNode etn = names.getEmbeddedFiles(); + final PDEmbeddedFilesNameTreeNode etn = names.getEmbeddedFiles(); if (etn == null) { return; } - Map efMap = etn.getNames(); + final Map efMap = etn.getNames(); // String filePath = "/tmp/"; if (efMap != null) { @@ -123,9 +131,9 @@ public class ZUGFeRDImporter { // https://memorynotfound.com/apache-pdfbox-extract-embedded-file-pdf-document/ } else { - List> kids = etn.getKids(); - for (PDNameTreeNode node : kids) { - Map namesL = node.getNames(); + final List> kids = etn.getKids(); + for (final PDNameTreeNode node : kids) { + final Map namesL = node.getNames(); extractFiles(namesL); } } @@ -134,17 +142,17 @@ public class ZUGFeRDImporter { private void extractFiles(Map names) throws IOException { - for (String alias : names.keySet()) { + for (final String alias : names.keySet()) { - PDComplexFileSpecification fileSpec = names.get(alias); - String filename = fileSpec.getFilename(); + final PDComplexFileSpecification fileSpec = names.get(alias); + final String filename = fileSpec.getFilename(); /** * filenames for invoice data (ZUGFeRD v1 and v2, Factur-X) */ if ((filename.equals("ZUGFeRD-invoice.xml") || (filename.equals("zugferd-invoice.xml")) || filename.equals("factur-x.xml")) || filename.equals("xrechnung.xml") || filename.equals("order-x.xml")) { containsMeta = true; - PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile(); + final PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile(); // String embeddedFilename = filePath + filename; // File file = new File(filePath + filename); // System.out.println("Writing " + embeddedFilename); @@ -158,7 +166,7 @@ public class ZUGFeRDImporter { // fos.close(); } if (filename.startsWith("additional_data")) { - PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile(); + final PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile(); additionalXMLs.put(filename, embeddedFile.toByteArray()); } } @@ -171,10 +179,10 @@ public class ZUGFeRDImporter { private void setDocument() throws ParserConfigurationException, IOException, SAXException { - DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance(); + final DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance(); xmlFact.setNamespaceAware(false); - DocumentBuilder builder = xmlFact.newDocumentBuilder(); - ByteArrayInputStream is = new ByteArrayInputStream(rawXML); + final DocumentBuilder builder = xmlFact.newDocumentBuilder(); + final ByteArrayInputStream is = new ByteArrayInputStream(rawXML); /// is.skip(guessBOMSize(is)); document = builder.parse(is); } @@ -197,13 +205,13 @@ public class ZUGFeRDImporter { if (!containsMeta) { throw new ZUGFeRDExportException("No suitable data/ZUGFeRD file could be found."); } - String result; + final String result; try { - Document document = getDocument(); - XPathFactory xpathFact = XPathFactory.newInstance(); - XPath xpath = xpathFact.newXPath(); + final Document document = getDocument(); + final XPathFactory xpathFact = XPathFactory.newInstance(); + final XPath xpath = xpathFact.newXPath(); result = xpath.evaluate(xpathStr, document); - } catch (XPathExpressionException e) { + } catch (final XPathExpressionException e) { Logger.getLogger(ZUGFeRDImporter.class.getName()).log(Level.SEVERE, null, e); throw new ZUGFeRDExportException(e); } @@ -263,7 +271,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ApplicableHeaderTradeSettlement//InvoiceCurrencyCode"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -273,13 +281,31 @@ public class ZUGFeRDImporter { * @return the IssuerAssigned ID */ public String getIssuerAssignedID() { + return extractIssuerAssignedID("BuyerOrderReferencedDocument"); + } + + /** + * @return the SellerOrderReferencedDocument IssuerAssigned ID + */ + public String getSellerOrderReferencedDocumentIssuerAssignedID() { + return extractIssuerAssignedID("SellerOrderReferencedDocument"); + } + + /** + * @return the IssuerAssigned ID + */ + public String getContractOrderReferencedDocumentIssuerAssignedID() { + return extractIssuerAssignedID("ContractReferencedDocument"); + } + + private String extractIssuerAssignedID(String propertyName) { try { if (getVersion() == 1) { return extractString("//BuyerOrderReferencedDocument//ID"); } else { return extractString("//BuyerOrderReferencedDocument//IssuerAssignedID"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -302,7 +328,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ExchangedDocument//IssueDateTime//DateTimeString"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -318,7 +344,7 @@ public class ZUGFeRDImporter { } else { return extractString("//SpecifiedTradeSettlementHeaderMonetarySummation//TaxBasisTotalAmount"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -334,7 +360,7 @@ public class ZUGFeRDImporter { } else { return extractString("//SpecifiedTradeSettlementHeaderMonetarySummation//TaxTotalAmount"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -350,7 +376,7 @@ public class ZUGFeRDImporter { } else { return extractString("//SpecifiedTradeSettlementHeaderMonetarySummation//RoundingAmount"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -366,7 +392,7 @@ public class ZUGFeRDImporter { } else { return extractString("//SpecifiedTradeSettlementHeaderMonetarySummation//TotalPrepaidAmount"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -404,7 +430,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ExchangedDocument//IncludedNote"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -429,7 +455,7 @@ public class ZUGFeRDImporter { } else { return extractString("//SpecifiedTradeSettlementHeaderMonetarySummation//LineTotalAmount"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -452,7 +478,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ActualDeliverySupplyChainEvent//OccurrenceDateTime//DateTimeString"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -468,7 +494,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ExchangedDocument//ID"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -486,7 +512,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ExchangedDocument/TypeCode"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -503,7 +529,7 @@ public class ZUGFeRDImporter { } else { return extractString("//ApplicableHeaderTradeAgreement/BuyerReference"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return ""; } @@ -628,7 +654,7 @@ public class ZUGFeRDImporter { } - byte[] bomlessData; + final byte[] bomlessData; if ((rawXML[0] == (byte) 0xEF) && (rawXML[1] == (byte) 0xBB) @@ -664,7 +690,7 @@ public class ZUGFeRDImporter { // SpecifiedExchangedDocumentContext is in the schema, so a relatively good // indication if zugferd is present - better than just invoice - String meta = getMeta(); + final String meta = getMeta(); return (meta != null) && (meta.length() > 0) && ((meta.contains("SpecifiedExchangedDocumentContext") /* ZF1 */ || meta.contains("ExchangedDocumentContext") /* ZF2 */)); } @@ -673,7 +699,7 @@ public class ZUGFeRDImporter { static String convertStreamToString(java.io.InputStream is) { // source https://stackoverflow.com/questions/309424/how-do-i-read-convert-an-inputstream-into-a-string-in-java referring to // https://community.oracle.com/blogs/pat/2004/10/23/stupid-scanner-tricks - Scanner s = new Scanner(is, "UTF-8").useDelimiter("\\A"); + final Scanner s = new Scanner(is, "UTF-8").useDelimiter("\\A"); return s.hasNext() ? s.next() : ""; } @@ -691,7 +717,7 @@ public class ZUGFeRDImporter { } else { nl = getNodeListByPath("//CrossIndustryInvoice//SupplyChainTradeTransaction//ApplicableHeaderTradeAgreement//BuyerTradeParty//PostalTradeAddress"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return null; } @@ -706,7 +732,7 @@ public class ZUGFeRDImporter { public PostalTradeAddress getSellerTradePartyAddress() { NodeList nl = null; - PostalTradeAddress address = new PostalTradeAddress(); + final PostalTradeAddress address = new PostalTradeAddress(); try { if (getVersion() == 1) { @@ -714,7 +740,7 @@ public class ZUGFeRDImporter { } else { nl = getNodeListByPath("//CrossIndustryInvoice//SupplyChainTradeTransaction//ApplicableHeaderTradeAgreement//SellerTradeParty//PostalTradeAddress"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return null; } @@ -723,15 +749,15 @@ public class ZUGFeRDImporter { } private PostalTradeAddress getAddressFromNodeList(NodeList nl) { - PostalTradeAddress address = new PostalTradeAddress(); + final PostalTradeAddress address = new PostalTradeAddress(); if (nl != null) { for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); - NodeList nodes = n.getChildNodes(); + final NodeList nodes = n.getChildNodes(); for (int j = 0; j < nodes.getLength(); j++) { n = nodes.item(j); - short nodeType = n.getNodeType(); + final short nodeType = n.getNodeType(); if (nodeType==Node.ELEMENT_NODE){ switch (n.getNodeName()) { case "ram:PostcodeCode": @@ -789,16 +815,16 @@ public class ZUGFeRDImporter { * @return a List of LineItem instances */ public List getLineItemList() { - List nodeList = getLineItemNodes(); - List lineItemList = new ArrayList<>(); + final List nodeList = getLineItemNodes(); + final List lineItemList = new ArrayList<>(); - for (Node n: nodeList) { - Item lineItem = new Item(null, null, null); + for (final Node n: nodeList) { + final Item lineItem = new Item(null, null, null); lineItem.setProduct(new Product(null,null,null,null)); - NodeList nl = n.getChildNodes(); + final NodeList nl = n.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { - Node nn = nl.item(i); + final Node nn = nl.item(i); Node node = null; switch (nn.getNodeName()) { case "ram:SpecifiedLineTradeAgreement": @@ -806,12 +832,12 @@ public class ZUGFeRDImporter { node = getNodeByName(nn.getChildNodes(), "ram:NetPriceProductTradePrice"); if (node != null) { - NodeList tradeAgreementChildren = node.getChildNodes(); + final NodeList tradeAgreementChildren = node.getChildNodes(); node = getNodeByName(tradeAgreementChildren, "ram:ChargeAmount"); lineItem.setPrice(tryBigDecimal(getNodeValue(node))); node = getNodeByName(tradeAgreementChildren, "ram:BasisQuantity"); if(node != null && node.getAttributes()!=null) { - Node unitCodeAttribute = node.getAttributes().getNamedItem("unitCode"); + final Node unitCodeAttribute = node.getAttributes().getNamedItem("unitCode"); if(unitCodeAttribute != null) { lineItem.getProduct().setUnit(unitCodeAttribute.getNodeValue()); } @@ -905,7 +931,7 @@ public class ZUGFeRDImporter { * @return a List of Node instances */ public List getLineItemNodes() { - List lineItemNodes = new ArrayList<>(); + final List lineItemNodes = new ArrayList<>(); NodeList nl = null; try { if (getVersion() == 1) { @@ -913,12 +939,12 @@ public class ZUGFeRDImporter { } else { nl = getNodeListByPath("//CrossIndustryInvoice//SupplyChainTradeTransaction//IncludedSupplyChainTradeLineItem"); } - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); } for (int i = 0; i < nl.getLength(); i++) { - Node n = nl.item(i); + final Node n = nl.item(i); lineItemNodes.add(n); } return lineItemNodes; @@ -935,7 +961,7 @@ public class ZUGFeRDImporter { if (nl.item(i).getNodeName() == name) { return nl.item(i); } else if (nl.item(i).getChildNodes().getLength() > 0) { - Node node = getNodeByName(nl.item(i).getChildNodes(), name); + final Node node = getNodeByName(nl.item(i).getChildNodes(), name); if (node != null) { return node; } @@ -951,14 +977,14 @@ public class ZUGFeRDImporter { */ public NodeList getNodeListByPath(String path) { - XPathFactory xpathFact = XPathFactory.newInstance(); - XPath xPath = xpathFact.newXPath(); - String s = path; + final XPathFactory xpathFact = XPathFactory.newInstance(); + final XPath xPath = xpathFact.newXPath(); + final String s = path; try { - XPathExpression xpr = xPath.compile(s); + final XPathExpression xpr = xPath.compile(s); return (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); return null; } @@ -986,10 +1012,10 @@ public class ZUGFeRDImporter { private BigDecimal tryBigDecimal(String nodeValue) { try { return new BigDecimal(nodeValue); - } catch (Exception e) { + } catch (final Exception e) { try { return new BigDecimal(Float.valueOf(nodeValue)); - } catch (Exception ex) { + } catch (final Exception ex) { return new BigDecimal("0.00"); } } From 50f70e64cfae63c62a53010521dccd8027ed0281 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 21 Jan 2021 15:47:06 +0100 Subject: [PATCH 02/11] no message --- History.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/History.md b/History.md index 9b468cc0..6f412bce 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,8 @@ +2.1.1 +======= + +- PR #217 seller order referenced document + 2.1.0 ======= 2020-01-19 From 9b1cff77be057c1aadda96a18e9e9b316d93a993 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:27:18 +0100 Subject: [PATCH 03/11] added some order-x schema files --- ...SCRDMCCBDACIOMessageStructure_100pD20B.xsd | 24 + ...EDIFICAS-EU_AccountingAccountType_D11A.xsd | 18 + ...EN16931_AllowanceChargeReasonCode_D20A.xsd | 207 +++ ...d_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd | 190 +++ ...odelist_standard_UNECE_ActionCode_D20A.xsd | 129 ++ ...d_UNECE_AllowanceChargeReasonCode_D20A.xsd | 116 ++ ...tandard_UNECE_ContactFunctionCode_D20A.xsd | 114 ++ ..._standard_UNECE_DeliveryTermsCode_2010.xsd | 24 + ...d_UNECE_DeliveryTermsFunctionCode_D20A.xsd | 19 + ...t_standard_UNECE_DocumentNameCode_D20A.xsd | 806 +++++++++ ...standard_UNECE_DocumentStatusCode_D20A.xsd | 53 + ...standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd | 65 + ..._UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd | 32 + ...tandard_UNECE_MessageFunctionCode_D20A.xsd | 80 + ...st_standard_UNECE_PackageTypeCode_2006.xsd | 416 +++++ ...t_standard_UNECE_PaymentMeansCode_D20A.xsd | 94 ++ ..._standard_UNECE_ReferenceTypeCode_D20A.xsd | 828 ++++++++++ ...ct_data_standard_QualifiedDataType_128.xsd | 104 ++ ...AggregateBusinessInformationEntity_128.xsd | 1191 ++++++++++++++ ..._data_standard_UnqualifiedDataType_128.xsd | 92 ++ ...wo-letterCountryCode_SecondEdition2006.xsd | 260 +++ ...SCRDMCCBDACIOMessageStructure_100pD20B.xsd | 24 + ...EDIFICAS-EU_AccountingAccountType_D11A.xsd | 18 + ...EN16931_AllowanceChargeReasonCode_D20A.xsd | 207 +++ ...d_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd | 190 +++ ...odelist_standard_UNECE_ActionCode_D20A.xsd | 129 ++ ...d_UNECE_AllowanceChargeReasonCode_D20A.xsd | 116 ++ ...tandard_UNECE_ContactFunctionCode_D20A.xsd | 114 ++ ..._standard_UNECE_DeliveryTermsCode_2010.xsd | 24 + ...d_UNECE_DeliveryTermsFunctionCode_D20A.xsd | 19 + ...t_standard_UNECE_DocumentNameCode_D20A.xsd | 806 +++++++++ ...standard_UNECE_DocumentStatusCode_D20A.xsd | 53 + ...standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd | 65 + ..._UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd | 32 + ...dard_UNECE_EventTimeReferenceCode_D20A.xsd | 76 + ...tandard_UNECE_MessageFunctionCode_D20A.xsd | 80 + ...st_standard_UNECE_PackageTypeCode_2006.xsd | 416 +++++ ...t_standard_UNECE_PaymentMeansCode_D20A.xsd | 94 ++ ..._standard_UNECE_ReferenceTypeCode_D20A.xsd | 828 ++++++++++ ...tandard_UNECE_TimePointFormatCode_D19B.xsd | 17 + ...ct_data_standard_QualifiedDataType_128.xsd | 124 ++ ...AggregateBusinessInformationEntity_128.xsd | 1453 +++++++++++++++++ ..._data_standard_UnqualifiedDataType_128.xsd | 92 ++ ...wo-letterCountryCode_SecondEdition2006.xsd | 260 +++ .../src/main/resources/xrechnung.invalid.pdf | Bin 99742 -> 0 bytes validator/src/main/resources/xrechnung.pdf | Bin 100185 -> 0 bytes 46 files changed, 10099 insertions(+) create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_EventTimeReferenceCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_TimePointFormatCode_D19B.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd delete mode 100644 validator/src/main/resources/xrechnung.invalid.pdf delete mode 100644 validator/src/main/resources/xrechnung.pdf diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B.xsd new file mode 100644 index 00000000..cf70d04c --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B.xsd @@ -0,0 +1,24 @@ + + + + + + + + + Order-X_Comfort Message Structure + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd new file mode 100644 index 00000000..1a112b69 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd new file mode 100644 index 00000000..066bb5ea --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd new file mode 100644 index 00000000..61d9134a --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd new file mode 100644 index 00000000..00139e82 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd new file mode 100644 index 00000000..e2eb28a7 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd new file mode 100644 index 00000000..01da8fb0 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd new file mode 100644 index 00000000..6e76a289 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd new file mode 100644 index 00000000..7af91966 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd new file mode 100644 index 00000000..70a343a4 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd @@ -0,0 +1,806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd new file mode 100644 index 00000000..b3050df0 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd new file mode 100644 index 00000000..ea17f8ca --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd new file mode 100644 index 00000000..c774418f --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd new file mode 100644 index 00000000..08530348 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd new file mode 100644 index 00000000..d8fcea8a --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd new file mode 100644 index 00000000..d3bffc55 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd new file mode 100644 index 00000000..34751789 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd @@ -0,0 +1,828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd new file mode 100644 index 00000000..67fcfc47 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd new file mode 100644 index 00000000..64111e86 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd @@ -0,0 +1,1191 @@ + + + + + + + Document Context Parameter + + + + + ID + + + + + + + Document Line + + + + + Line ID + + + + + Status Code + + + + + Note + + + + + + + Exchanged Document Context + + + + + Test Indicator + + + + + Business Process + + + + + Guideline + + + + + + + Exchanged Document + + + + + ID + + + + + Name + + + + + Type Code + + + + + Status Code + + + + + Issue Date Time + + + + + + + + Purpose Code + + + + + Response Request Type Code + + + + + Note + + + + + Effective Period + + + + + + + Header Trade Agreement + + + + + Buyer Reference Text + + + + + Seller + + + + + Buyer + + + + + Buyer Requisitioner + + + + + Trade Delivery Terms + + + + + Seller Order Document + + + + + Buyer Order Document + + + + + Quotation Document + + + + + Contract Document + + + + + Requisition Document + + + + + Additional Document + + + + + Catalogue Document + + + + + Blanket Order Document + + + + + Previous Order Document + + + + + Previous Order Change Document + + + + + Previous Order Response Document + + + + + Procuring Project + + + + + + + Header Trade Delivery + + + + + Ship To Party + + + + + Ship From Party + + + + + Requested Delivery Event + + + + + Requested Despatch Event + + + + + + + Header Trade Settlement + + + + + Order Currency Code + + + + + Invoicee + + + + + Payment Means + + + + + Allowance/Charge + + + + + Payment Terms + + + + + Monetary Summation + + + + + Accounts Receivable + + + + + + + Legal Organization + + + + + ID + + + + + Trading Name + + + + + + + Line Trade Agreement + + + + + Buyer Order Document + + + + + Quotation Document + + + + + Additional Document + + + + + Product Gross Price + + + + + Product Net Price + + + + + Catalogue Document + + + + + Blanket Order Document + + + + + + + Line Trade Delivery + + + + + Partial Delivery Allowed Indicator + + + + + Requested Quantity + + + + + Agreed Quantity + + + + + Package Quantity + + + + + Per Package Unit Quantity + + + + + Requested Despatch Event + + + + + Requested Delivery Event + + + + + + + Line Trade Settlement + + + + + Trade Tax + + + + + Allowance/Charge + + + + + Monetary Summation + + + + + Accounts Receivable + + + + + + + Note + + + + + Content Text + + + + + Subject Code + + + + + + + Procuring Project + + + + + ID + + + + + Name + + + + + + + Product Characteristic + + + + + Type Code + + + + + Description + + + + + Value Measure + + + + + Value Text + + + + + + + Product Classification + + + + + Class Code + + + + + Class Name + + + + + + + Referenced Document + + + + + Issuer Assigned ID + + + + + URI + + + + + Line ID + + + + + Type Code + + + + + Name + + + + + Attached Binary Object + + + + + Reference Type Code + + + + + + + Referenced Product + + + + + ID + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Name + + + + + Description + + + + + + + Spatial Dimensions + + + + + Width + + + + + Length + + + + + Height + + + + + + + Period + + + + + Start Date Time + + + + + End Date Time + + + + + + + Supply Chain Event + + + + + Occurrence Date Time + + + + + Occurrence Period + + + + + + + Supply Chain Packaging + + + + + Type Code + + + + + Dimensions + + + + + + + Supply Chain Trade Line Item + + + + + Associated Document Line + + + + + Trade Product + + + + + Substituted Product + + + + + Line Trade Agreement + + + + + Line Trade Delivery + + + + + Line Trade Settlement + + + + + + + Supply Chain Trade Transaction + + + + + Included Trade Line Item + + + + + Header Trade Agreement + + + + + Header Trade Delivery + + + + + Header Trade Settlement + + + + + + + Tax Registration + + + + + ID + + + + + + + Trade Accounting Account + + + + + ID + + + + + Type Code + + + + + + + Trade Address + + + + + Postcode + + + + + Line One + + + + + Line Two + + + + + Line Three + + + + + City Name + + + + + Country Code + + + + + Country Sub-Division Name + + + + + + + Trade Allowance/Charge + + + + + Charge Indicator + + + + + Sequence Number + + + + + Calculation Percent + + + + + Basis Amount + + + + + Actual Amount + + + + + Reason Code + + + + + Reason Text + + + + + Tax Category + + + + + + + Trade Contact + + + + + Person Name + + + + + Department Name + + + + + Type Code + + + + + Telephone + + + + + Email Address + + + + + + + Trade Country + + + + + Code + + + + + + + Trade Delivery Terms + + + + + Code + + + + + Description + + + + + Function Code + + + + + Relevant Location + + + + + + + Trade Location + + + + + ID + + + + + Name + + + + + + + Trade Party + + + + + ID + + + + + Global ID + + + + + Name + + + + + Description + + + + + Legal Organization + + + + + Defined Contact Details + + + + + Postal Address + + + + + URI + + + + + Tax Registration + + + + + + + Trade Payment Terms + + + + + Description + + + + + + + Trade Price + + + + + Charge Amount + + + + + Basis Quantity + + + + + Applied Allowance/Charge + + + + + + + Trade Product Instance + + + + + Batch ID + + + + + Serial ID + + + + + + + Trade Product + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Name + + + + + Description + + + + + Batch ID + + + + + Brand Name + + + + + Characteristic + + + + + Classification + + + + + Individual Product Instance + + + + + Packaging + + + + + Origin Country + + + + + Additional Document + + + + + + + Trade Settlement Header Monetary Summation + + + + + Line Total Amount + + + + + Charge Total Amount + + + + + Allowance Total Amount + + + + + Tax Basis Total Amount + + + + + Tax Total Amount + + + + + Grand Total Amount + + + + + + + Trade Settlement Line Monetary Summation + + + + + Line Total Amount + + + + + + + Trade Settlement Payment Means + + + + + Type Code + + + + + Information + + + + + + + Trade Tax + + + + + Type Code + + + + + Category Code + + + + + Applicable Rate Percent + + + + + + + Communication + + + + + URI + + + + + Complete Number + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd new file mode 100644 index 00000000..3d2f109f --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd new file mode 100644 index 00000000..93265d22 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B.xsd new file mode 100644 index 00000000..fbef8df9 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B.xsd @@ -0,0 +1,24 @@ + + + + + + + + + Order-X_Extended + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd new file mode 100644 index 00000000..1a112b69 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EDIFICAS-EU_AccountingAccountType_D11A.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd new file mode 100644 index 00000000..066bb5ea --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_EN16931_AllowanceChargeReasonCode_D20A.xsd @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd new file mode 100644 index 00000000..61d9134a --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd new file mode 100644 index 00000000..00139e82 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd new file mode 100644 index 00000000..e2eb28a7 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_AllowanceChargeReasonCode_D20A.xsd @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd new file mode 100644 index 00000000..01da8fb0 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ContactFunctionCode_D20A.xsd @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd new file mode 100644 index 00000000..6e76a289 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd new file mode 100644 index 00000000..7af91966 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd new file mode 100644 index 00000000..70a343a4 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd @@ -0,0 +1,806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd new file mode 100644 index 00000000..b3050df0 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd new file mode 100644 index 00000000..ea17f8ca --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyTaxFeeTypeCode_D20A.xsd @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd new file mode 100644 index 00000000..c774418f --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DutyorTaxorFeeCategoryCode_D20A.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_EventTimeReferenceCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_EventTimeReferenceCode_D20A.xsd new file mode 100644 index 00000000..0b1abc79 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_EventTimeReferenceCode_D20A.xsd @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd new file mode 100644 index 00000000..08530348 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd new file mode 100644 index 00000000..d8fcea8a --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PackageTypeCode_2006.xsd @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd new file mode 100644 index 00000000..d3bffc55 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_PaymentMeansCode_D20A.xsd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd new file mode 100644 index 00000000..34751789 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ReferenceTypeCode_D20A.xsd @@ -0,0 +1,828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_TimePointFormatCode_D19B.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_TimePointFormatCode_D19B.xsd new file mode 100644 index 00000000..7d7509fb --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_TimePointFormatCode_D19B.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd new file mode 100644 index 00000000..362ab17d --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd new file mode 100644 index 00000000..cbfb4bba --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd @@ -0,0 +1,1453 @@ + + + + + + + Document Context Parameter + + + + + ID + + + + + + + Document Line + + + + + Line ID + + + + + Status Code + + + + + Note + + + + + + + Exchanged Document Context + + + + + Test Indicator + + + + + Business Process + + + + + Guideline + + + + + + + Exchanged Document + + + + + ID + + + + + Name + + + + + Type Code + + + + + Status Code + + + + + Issue Date Time + + + + + + + + Language Code + + + + + Purpose Code + + + + + Response Request Type Code + + + + + Note + + + + + Effective Period + + + + + + + Header Trade Agreement + + + + + Buyer Reference Text + + + + + Seller + + + + + Buyer + + + + + Buyer Requisitioner + + + + + End User + + + + + Trade Delivery Terms + + + + + Seller Order Document + + + + + Buyer Order Document + + + + + Quotation Document + + + + + Contract Document + + + + + Requisition Document + + + + + Additional Document + + + + + Buyer Agent + + + + + Catalogue Document + + + + + Blanket Order Document + + + + + Previous Order Document + + + + + Previous Order Change Document + + + + + Previous Order Response Document + + + + + Procuring Project + + + + + Ultimate Customer Order Document + + + + + + + Header Trade Delivery + + + + + Ship To Party + + + + + Ultimate Ship To Party + + + + + Ship From Party + + + + + Requested Delivery Event + + + + + Requested Despatch Event + + + + + + + Header Trade Settlement + + + + + Tax Currency Code + + + + + Order Currency Code + + + + + Invoice Currency Code + + + + + Invoicer + + + + + Invoicee + + + + + Payment Means + + + + + Trade Tax + + + + + Allowance/Charge + + + + + Logistics Service Charge + + + + + Payment Terms + + + + + Monetary Summation + + + + + Accounts Receivable + + + + + + + Legal Organization + + + + + ID + + + + + Trading Name + + + + + Postal Address + + + + + + + Line Trade Agreement + + + + + Minimum Product Orderable Quantity + + + + + Maximum Product Orderable Quantity + + + + + Buyer Requisitioner + + + + + Buyer Order Document + + + + + Quotation Document + + + + + Contract Document + + + + + Additional Document + + + + + Product Gross Price + + + + + Product Net Price + + + + + Catalogue Document + + + + + Blanket Order Document + + + + + Ultimate Customer Order Document + + + + + + + Line Trade Delivery + + + + + Partial Delivery Allowed Indicator + + + + + Requested Quantity + + + + + Agreed Quantity + + + + + Package Quantity + + + + + Per Package Unit Quantity + + + + + Ship To Party + + + + + Ultimate Ship To Party + + + + + Ship From Party + + + + + Requested Despatch Event + + + + + Requested Delivery Event + + + + + + + Line Trade Settlement + + + + + Trade Tax + + + + + Allowance/Charge + + + + + Monetary Summation + + + + + Accounts Receivable + + + + + + + Logistics Service Charge + + + + + Description + + + + + Applied Amount + + + + + Trade Tax + + + + + + + Note + + + + + Content Code + + + + + Content Text + + + + + Subject Code + + + + + + + Procuring Project + + + + + ID + + + + + Name + + + + + + + Product Characteristic + + + + + Type Code + + + + + Description + + + + + Value Measure + + + + + Value Text + + + + + + + Product Classification + + + + + Class Code + + + + + Class Name + + + + + + + Referenced Document + + + + + Issuer Assigned ID + + + + + URI + + + + + Line ID + + + + + Type Code + + + + + Name + + + + + Attached Binary Object + + + + + Reference Type Code + + + + + Formatted Issue Date Time + + + + + + + Referenced Product + + + + + ID + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Industry Assigned ID + + + + + Name + + + + + Description + + + + + Unit Quantity + + + + + + + Spatial Dimensions + + + + + Width + + + + + Length + + + + + Height + + + + + + + Period + + + + + Start Date Time + + + + + End Date Time + + + + + + + Supply Chain Event + + + + + Occurrence Date Time + + + + + Unit Quantity + + + + + Occurrence Period + + + + + + + Supply Chain Packaging + + + + + Type Code + + + + + Dimensions + + + + + + + Supply Chain Trade Line Item + + + + + Associated Document Line + + + + + Trade Product + + + + + Substituted Product + + + + + Line Trade Agreement + + + + + Line Trade Delivery + + + + + Line Trade Settlement + + + + + + + Supply Chain Trade Transaction + + + + + Included Trade Line Item + + + + + Header Trade Agreement + + + + + Header Trade Delivery + + + + + Header Trade Settlement + + + + + + + Tax Registration + + + + + ID + + + + + + + Trade Accounting Account + + + + + ID + + + + + Type Code + + + + + + + Trade Address + + + + + Postcode + + + + + Line One + + + + + Line Two + + + + + Line Three + + + + + City Name + + + + + Country Code + + + + + Country Sub-Division Name + + + + + + + Trade Allowance/Charge + + + + + Charge Indicator + + + + + Sequence Number + + + + + Calculation Percent + + + + + Basis Amount + + + + + Basis Quantity + + + + + Actual Amount + + + + + Reason Code + + + + + Reason Text + + + + + Tax Category + + + + + + + Trade Contact + + + + + Person Name + + + + + Department Name + + + + + Type Code + + + + + Telephone + + + + + Fax + + + + + Email Address + + + + + + + Trade Country + + + + + Code + + + + + + + Trade Delivery Terms + + + + + Code + + + + + Description + + + + + Function Code + + + + + Relevant Location + + + + + + + Trade Location + + + + + ID + + + + + Name + + + + + + + Trade Party + + + + + ID + + + + + Global ID + + + + + Name + + + + + Description + + + + + Legal Organization + + + + + Defined Contact Details + + + + + Postal Address + + + + + URI + + + + + Tax Registration + + + + + + + Trade Payment Terms + + + + + Description + + + + + + + Trade Price + + + + + Charge Amount + + + + + Basis Quantity + + + + + Minimum Quantity + + + + + Maximum Quantity + + + + + Applied Allowance/Charge + + + + + Included Tax + + + + + + + Trade Product Instance + + + + + Batch ID + + + + + Serial ID + + + + + + + Trade Product + + + + + ID + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Industry Assigned ID + + + + + Model ID + + + + + Name + + + + + Description + + + + + Batch ID + + + + + Brand Name + + + + + Model Name + + + + + Characteristic + + + + + Classification + + + + + Individual Product Instance + + + + + Packaging + + + + + Origin Country + + + + + Additional Document + + + + + Included Product + + + + + + + Trade Settlement Header Monetary Summation + + + + + Line Total Amount + + + + + Charge Total Amount + + + + + Allowance Total Amount + + + + + Tax Basis Total Amount + + + + + Tax Total Amount + + + + + Rounding Amount + + + + + Grand Total Amount + + + + + Total Prepaid Amount + + + + + Due Payable Amount + + + + + + + Trade Settlement Line Monetary Summation + + + + + Line Total Amount + + + + + Charge Total Amount + + + + + Allowance Total Amount + + + + + Tax Total Amount + + + + + Total Allowance/Charge Amount + + + + + + + Trade Settlement Payment Means + + + + + Type Code + + + + + Information + + + + + + + Trade Tax + + + + + Calculated Amount + + + + + Type Code + + + + + Exemption Reason Text + + + + + Basis Amount + + + + + Line Total Basis Amount + + + + + Allowance/Charge Basis Amount + + + + + Category Code + + + + + Exemption Reason Code + + + + + Due Date Type Code + + + + + Applicable Rate Percent + + + + + + + Communication + + + + + URI + + + + + Complete Number + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd new file mode 100644 index 00000000..2c5f76df --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd new file mode 100644 index 00000000..93265d22 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/extended/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/xrechnung.invalid.pdf b/validator/src/main/resources/xrechnung.invalid.pdf deleted file mode 100644 index 23df88a9aecdb231f3e6b409b898dc82fe228cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99742 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 C(aX>P diff --git a/validator/src/main/resources/xrechnung.pdf b/validator/src/main/resources/xrechnung.pdf deleted file mode 100644 index 095f201918460e1be6d5a6d4de414c7ad6a584e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100185 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 HtK|O!sT);h From 670e59146acdebf4ed4374a6be35a9ea2f8ed6f2 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:28:04 +0100 Subject: [PATCH 04/11] only deploy library and validator to maven central, not core nor cli --- library/pom.xml | 2 ++ pom.xml | 2 ++ validator/pom.xml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/library/pom.xml b/library/pom.xml index 318d2223..a88f9c6c 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -48,6 +48,8 @@ 1.8 1.8 1.8 + true + diff --git a/pom.xml b/pom.xml index f8bacf91..ebd0d717 100644 --- a/pom.xml +++ b/pom.xml @@ -158,6 +158,8 @@ 1.8 1.8 1.8 + true diff --git a/validator/pom.xml b/validator/pom.xml index 5e8597b2..97ec12c2 100644 --- a/validator/pom.xml +++ b/validator/pom.xml @@ -27,6 +27,8 @@ UTF-8 + false + From 66b495f9a8ede17a5a0657c83f11f5e2d2dd8fe6 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:28:44 +0100 Subject: [PATCH 05/11] some more order-x schema files --- ...SCRDMCCBDACIOMessageStructure_100pD20B.xsd | 24 + ...d_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd | 190 +++++ ...odelist_standard_UNECE_ActionCode_D20A.xsd | 129 +++ ..._standard_UNECE_DeliveryTermsCode_2010.xsd | 24 + ...d_UNECE_DeliveryTermsFunctionCode_D20A.xsd | 19 + ...t_standard_UNECE_DocumentNameCode_D20A.xsd | 806 ++++++++++++++++++ ...standard_UNECE_DocumentStatusCode_D20A.xsd | 53 ++ ...tandard_UNECE_MessageFunctionCode_D20A.xsd | 80 ++ ...ct_data_standard_QualifiedDataType_128.xsd | 65 ++ ...AggregateBusinessInformationEntity_128.xsd | 732 ++++++++++++++++ ..._data_standard_UnqualifiedDataType_128.xsd | 64 ++ ...wo-letterCountryCode_SecondEdition2006.xsd | 260 ++++++ 12 files changed, 2446 insertions(+) create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd create mode 100644 validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B.xsd new file mode 100644 index 00000000..e856ec88 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B.xsd @@ -0,0 +1,24 @@ + + + + + + + + + Order-X_Basic Message Structure + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd new file mode 100644 index 00000000..61d9134a --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_ISO_ISO3AlphaCurrencyCode_2012-08-31.xsd @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd new file mode 100644 index 00000000..00139e82 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_ActionCode_D20A.xsd @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd new file mode 100644 index 00000000..6e76a289 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsCode_2010.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd new file mode 100644 index 00000000..7af91966 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DeliveryTermsFunctionCode_D20A.xsd @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd new file mode 100644 index 00000000..70a343a4 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentNameCode_D20A.xsd @@ -0,0 +1,806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd new file mode 100644 index 00000000..b3050df0 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_DocumentStatusCode_D20A.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd new file mode 100644 index 00000000..08530348 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_codelist_standard_UNECE_MessageFunctionCode_D20A.xsd @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd new file mode 100644 index 00000000..da640544 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_QualifiedDataType_128.xsd @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd new file mode 100644 index 00000000..7a3a721f --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_ReusableAggregateBusinessInformationEntity_128.xsd @@ -0,0 +1,732 @@ + + + + + + + Document Context Parameter + + + + + ID + + + + + + + Document Line + + + + + Line ID + + + + + Status Code + + + + + Note + + + + + + + Exchanged Document Context + + + + + Test Indicator + + + + + Business Process + + + + + Guideline + + + + + + + Exchanged Document + + + + + ID + + + + + Name + + + + + Type Code + + + + + Status Code + + + + + Issue Date Time + + + + + + + + Purpose Code + + + + + Response Request Type Code + + + + + Note + + + + + + + Header Trade Agreement + + + + + Buyer Reference Text + + + + + Seller + + + + + Buyer + + + + + Trade Delivery Terms + + + + + Buyer Order Document + + + + + Quotation Document + + + + + Contract Document + + + + + Blanket Order Document + + + + + Previous Order Document + + + + + Previous Order Change Document + + + + + Previous Order Response Document + + + + + + + Header Trade Delivery + + + + + Ship To Party + + + + + Ship From Party + + + + + Requested Delivery Event + + + + + Requested Despatch Event + + + + + + + Header Trade Settlement + + + + + Order Currency Code + + + + + Monetary Summation + + + + + Accounts Receivable + + + + + + + Legal Organization + + + + + ID + + + + + Trading Name + + + + + + + Line Trade Agreement + + + + + Buyer Order Document + + + + + Product Net Price + + + + + Blanket Order Document + + + + + + + Line Trade Delivery + + + + + Partial Delivery Allowed Indicator + + + + + Requested Quantity + + + + + Agreed Quantity + + + + + + + Line Trade Settlement + + + + + Monetary Summation + + + + + + + Note + + + + + Content Text + + + + + Subject Code + + + + + + + Referenced Document + + + + + Issuer Assigned ID + + + + + Line ID + + + + + + + Referenced Product + + + + + ID + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Name + + + + + + + Period + + + + + Start Date Time + + + + + End Date Time + + + + + + + Supply Chain Event + + + + + Occurrence Date Time + + + + + Occurrence Period + + + + + + + Supply Chain Trade Line Item + + + + + Associated Document Line + + + + + Trade Product + + + + + Substituted Product + + + + + Line Trade Agreement + + + + + Line Trade Delivery + + + + + Line Trade Settlement + + + + + + + Supply Chain Trade Transaction + + + + + Included Trade Line Item + + + + + Header Trade Agreement + + + + + Header Trade Delivery + + + + + Header Trade Settlement + + + + + + + Tax Registration + + + + + ID + + + + + + + Trade Accounting Account + + + + + ID + + + + + + + Trade Address + + + + + Postcode + + + + + Line One + + + + + Line Two + + + + + Line Three + + + + + City Name + + + + + Country Code + + + + + Country Sub-Division Name + + + + + + + Trade Contact + + + + + Person Name + + + + + Department Name + + + + + Telephone + + + + + Email Address + + + + + + + Trade Delivery Terms + + + + + Code + + + + + Function Code + + + + + + + Trade Party + + + + + ID + + + + + Global ID + + + + + Name + + + + + Legal Organization + + + + + Defined Contact Details + + + + + Postal Address + + + + + URI + + + + + Tax Registration + + + + + + + Trade Price + + + + + Charge Amount + + + + + Basis Quantity + + + + + + + Trade Product + + + + + Global ID + + + + + Seller Assigned ID + + + + + Buyer Assigned ID + + + + + Name + + + + + + + Trade Settlement Header Monetary Summation + + + + + Line Total Amount + + + + + Charge Total Amount + + + + + Allowance Total Amount + + + + + Tax Basis Total Amount + + + + + Tax Total Amount + + + + + Grand Total Amount + + + + + + + Trade Settlement Line Monetary Summation + + + + + Line Total Amount + + + + + + + Communication + + + + + URI + + + + + Complete Number + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd new file mode 100644 index 00000000..4f87a19c --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_data_standard_UnqualifiedDataType_128.xsd @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd new file mode 100644 index 00000000..93265d22 --- /dev/null +++ b/validator/src/main/resources/schema/ox09/basic/SCRDMCCBDACIOMessageStructure_100pD20B_urn_un_unece_uncefact_identifierlist_standard_ISO_ISOTwo-letterCountryCode_SecondEdition2006.xsd @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From cf3ba8376bfed9001d3da7334c92277762640162 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:29:29 +0100 Subject: [PATCH 06/11] - a correction should reference the original invoice via invoiceReferencedDocument, not buyerOrderReferencedDocument --- .../main/java/org/mustangproject/Invoice.java | 20 +++++++++++++--- .../ZUGFeRD/IExportableTransaction.java | 8 +++++++ .../ZUGFeRD/ZUGFeRD2PullProvider.java | 23 +++++++++++-------- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java index 6fd87275..ba4602f8 100644 --- a/library/src/main/java/org/mustangproject/Invoice.java +++ b/library/src/main/java/org/mustangproject/Invoice.java @@ -33,7 +33,7 @@ import java.util.Date; */ public class Invoice implements IExportableTransaction { - protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null; + protected String documentName = null, documentCode = null, number = null, ownOrganisationFullPlaintextInfo = null, referenceNumber = null, shipToOrganisationID = null, shipToOrganisationName = null, shipToStreet = null, shipToZIP = null, shipToLocation = null, shipToCountry = null, buyerOrderReferencedDocumentID = null, invoiceReferencedDocumentID = null, buyerOrderReferencedDocumentIssueDateTime = null, ownForeignOrganisationID = null, ownOrganisationName = null, currency = null, paymentTermDescription = null; protected Date issueDate = null, dueDate = null, deliveryDate = null; protected BigDecimal totalPrepaidAmount = null; protected TradeParty sender = null, recipient = null, deliveryAddress = null; @@ -118,7 +118,7 @@ public class Invoice implements IExportableTransaction { * @return this object (fluent setter) */ public Invoice setCorrection(String number) { - setBuyerOrderReferencedDocumentID(number); + setInvoiceReferencedDocumentID(number); documentCode = DocumentCodeTypeConstants.CORRECTEDINVOICE; return this; } @@ -223,7 +223,7 @@ public class Invoice implements IExportableTransaction { return this; } /*** - * usually the order number or in case of a correction the original invoice number + * usually the order number * @param buyerOrderReferencedDocumentID string with number * @return fluent setter */ @@ -232,6 +232,20 @@ public class Invoice implements IExportableTransaction { return this; } + /*** + * usually in case of a correction the original invoice number + * @param invoiceReferencedDocumentID string with number + * @return fluent setter + */ + public Invoice setInvoiceReferencedDocumentID(String invoiceReferencedDocumentID) { + this.invoiceReferencedDocumentID = invoiceReferencedDocumentID; + return this; + } + @Override + public String getInvoiceReferencedDocumentID() { + return invoiceReferencedDocumentID; + } + @Override public String getBuyerOrderReferencedDocumentIssueDateTime() { return buyerOrderReferencedDocumentIssueDateTime; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java index 2f306ab2..8f1f12c3 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IExportableTransaction.java @@ -415,6 +415,14 @@ public interface IExportableTransaction { return null; } + /** + * get the ID of the prceding invoice, which is e.g. to be corrected if this is a correction + * + * @return the ID of the document + */ + default String getInvoiceReferencedDocumentID() { + return null; + } /** * get the issue timestamp of the BuyerOrderReferencedDocument, which sits in the ApplicableSupplyChainTradeAgreement diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 269400ca..3d8b94e9 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -610,23 +610,28 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { final String chargesTotalLine = "" + currencyFormat(calc.getChargesForPercent(null)) + ""; xml = xml + " \n" - + " " + currencyFormat(calc.getTotal()) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getTotal()) + "\n" + chargesTotalLine + allowanceTotalLine - + " " + currencyFormat(calc.getTaxBasis()) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getTaxBasis()) + "\n" // // // currencyID=\"EUR\" + " " - + currencyFormat(calc.getGrandTotal().subtract(calc.getTaxBasis()))+ "\n" - + " " + currencyFormat(calc.getGrandTotal()) + "\n" //$NON-NLS-2$ + + currencyFormat(calc.getGrandTotal().subtract(calc.getTaxBasis())) + "\n" + + " " + currencyFormat(calc.getGrandTotal()) + "\n" // // // currencyID=\"EUR\" + " " + currencyFormat(calc.getTotalPrepaid()) + "\n" - + " " + currencyFormat(calc.getGrandTotal().subtract(calc.getTotalPrepaid())) + "\n" //$NON-NLS-2$ - // // - // currencyID=\"EUR\" - + " \n" - + " \n"; + + " " + currencyFormat(calc.getGrandTotal().subtract(calc.getTotalPrepaid())) + "\n" + + " \n"; + if (trans.getInvoiceReferencedDocumentID() != null) { + xml = xml + " \n" + + " " + + XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + "\n" + + " \n"; + } + + xml = xml + " \n"; // + " \n" // + " \n" // + " \n" From 3ab5d752c8c2e52a16597cdc10c3a79e031a8692 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:29:45 +0100 Subject: [PATCH 07/11] mnore work on order-x --- .../main/java/org/mustangproject/validator/EPart.java | 2 +- .../org/mustangproject/validator/XMLValidator.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/validator/src/main/java/org/mustangproject/validator/EPart.java b/validator/src/main/java/org/mustangproject/validator/EPart.java index b3f715bc..b56268a3 100644 --- a/validator/src/main/java/org/mustangproject/validator/EPart.java +++ b/validator/src/main/java/org/mustangproject/validator/EPart.java @@ -1,5 +1,5 @@ package org.mustangproject.validator; public enum EPart { - fx, xr, pdf, none + fx, ox, xr, pdf, none } diff --git a/validator/src/main/java/org/mustangproject/validator/XMLValidator.java b/validator/src/main/java/org/mustangproject/validator/XMLValidator.java index 5ac6e220..5d20e272 100644 --- a/validator/src/main/java/org/mustangproject/validator/XMLValidator.java +++ b/validator/src/main/java/org/mustangproject/validator/XMLValidator.java @@ -172,6 +172,7 @@ public class XMLValidator extends Validator { context.setProfile(booking.getNodeValue()); } + boolean isOrderX = false; boolean isMiniumum = false; boolean isBasic = false; boolean isBasicWithoutLines = false; @@ -185,6 +186,15 @@ public class XMLValidator extends Validator { // urn:cen.eu:en16931:2017 // urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:basic + if (root.getNodeName().equalsIgnoreCase("rsm:SCRDMCCBDACIOMessageStructure")) { + context.setVersion("1"); + isOrderX=true; + isBasic = context.getProfile().contains("basic"); + isEN16931 = context.getProfile().contains("comfort"); + isExtended = context.getProfile().contains("extended"); + validateSchema(zfXML.getBytes(StandardCharsets.UTF_8), "ox09/comfort/SCRDMCCBDACIOMessageStructure_100pD20B.xsd", 99, EPart.ox); + + } if (root.getNodeName().equalsIgnoreCase("rsm:CrossIndustryInvoice")) { // ZUGFeRD 2.0 or Factur-X context.setVersion("2"); From 4933a6936906ad2d93bcd3765dd0499a22439bcd Mon Sep 17 00:00:00 2001 From: jstaerk Date: Tue, 26 Jan 2021 15:30:11 +0100 Subject: [PATCH 08/11] removed eclipse translation markers --- History.md | 2 ++ .../IZUGFeRDTradeSettlementPayment.java | 8 +++---- .../ZUGFeRD/ZUGFeRD1PullProvider.java | 22 +++++++++---------- .../ZUGFeRD/ZUGFeRD2PullProvider.java | 22 +++++++++---------- .../validator/SchematronPipeline.java | 2 +- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/History.md b/History.md index 6f412bce..a22e4f4f 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,8 @@ ======= - PR #217 seller order referenced document +- only deploy library and validator to maven central, not core nor cli +- a correction should reference the original invoice via invoiceReferencedDocument, not buyerOrderReferencedDocument 2.1.0 ======= diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java index 65561315..0bc6a335 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java @@ -63,7 +63,7 @@ public interface IZUGFeRDTradeSettlementPayment extends IZUGFeRDTradeSettlement default String getSettlementXML() { String accountNameStr=""; if (getAccountName()!=null) { - accountNameStr="" + XMLTools.encodeXML(getAccountName()) + "\n"; //$NON-NLS-2$ + accountNameStr="" + XMLTools.encodeXML(getAccountName()) + "\n"; } @@ -71,13 +71,13 @@ public interface IZUGFeRDTradeSettlementPayment extends IZUGFeRDTradeSettlement + " 42\n" + " Bank transfer\n" + " \n" - + " " + XMLTools.encodeXML(getOwnIBAN()) + "\n"; //$NON-NLS-2$ + + " " + XMLTools.encodeXML(getOwnIBAN()) + "\n"; xml+= accountNameStr; xml+= " \n" + " \n" - + " " + XMLTools.encodeXML(getOwnBIC()) + "\n" //$NON-NLS-2$ + + " " + XMLTools.encodeXML(getOwnBIC()) + "\n" // + " "+trans.getOwnBankName()+"\n" - // //$NON-NLS-2$ + // + " \n" + " \n"; return xml; diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index 325cc9d9..8e035e4b 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -164,7 +164,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr + " \n" + " \n" + " \n" - + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" //$NON-NLS-2$ + + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" + " RECHNUNG\n" + " " + typecode + "\n" + " " @@ -236,8 +236,8 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr * " 2013-51112\n" + * " \n" */ - + " \n" + " \n" //$NON-NLS-2$ - + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" //$NON-NLS-2$ + + " \n" + " \n" + + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" + " " + trans.getCurrency() + "\n"; if (trans.getTradeSettlementPayment() != null) { @@ -271,7 +271,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr + " " + currencyFormat(amount.getBasis()) + "\n" // currencyID=\"EUR\" + " " + amount.getCategoryCode() + "\n" + " " + vatFormat(currentTaxPercent) - + "\n" + " \n"; //$NON-NLS-2$ + + "\n" + " \n"; } } @@ -300,23 +300,23 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr } xml = xml + " \n" - + " " + currencyFormat(calc.getTotal()) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getTotal()) + "\n" // currencyID=\"EUR\" + " 0.00\n" // currencyID=\"EUR\" + " 0.00\n" // // currencyID=\"EUR\" // + " 5.80\n" // + " 14.73\n" - + " " + currencyFormat(calc.getTotal()) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getTotal()) + "\n" // // // currencyID=\"EUR\" + " " + currencyFormat(calc.getGrandTotal().subtract(calc.getTotal())) + "\n" - + " " + currencyFormat(calc.getGrandTotal()) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getGrandTotal()) + "\n" // // // currencyID=\"EUR\" + " " + currencyFormat(calc.getTotalPrepaid()) + "\n" - + " " + currencyFormat(calc.getGrandTotal().subtract(calc.getTotalPrepaid())) + "\n" //$NON-NLS-2$ + + " " + currencyFormat(calc.getGrandTotal().subtract(calc.getTotalPrepaid())) + "\n" // // // currencyID=\"EUR\" + " \n" @@ -334,7 +334,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr final LineCalculator lc = new LineCalculator(currentItem); xml = xml + " \n" + " \n" - + " " + lineID + "\n" //$NON-NLS-2$ + + " " + lineID + "\n" + " \n" + " \n" + " \n" @@ -358,7 +358,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr + " \n" - + " " //$NON-NLS-2$ + + " " + quantityFormat(currentItem.getQuantity()) + "\n" + " \n" + " \n" @@ -389,7 +389,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getBuyerAssignedID()) + "\n"; } - xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getName()) + "\n" //$NON-NLS-2$ + xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getName()) + "\n" + " " + XMLTools.encodeXML(currentItem.getProduct().getDescription()) + "\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 3d8b94e9..4883a314 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -127,7 +127,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { xml = xml + " " + XMLTools.encodeXML(party.getGlobalID()) + "\n"; } - xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; //$NON-NLS-2$ + xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; if ((party.getContact() != null) && (isSender || profile == Profiles.getByName("Extended"))) { xml = xml + "\n" + " " + XMLTools.encodeXML(party.getContact().getName()) @@ -285,7 +285,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " \n" + " \n" + " \n" - + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" //$NON-NLS-2$ + + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" // + " RECHNUNG\n" // + " 380\n" + " " + typecode + "\n" @@ -314,7 +314,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { final LineCalculator lc = new LineCalculator(currentItem); xml = xml + " \n" + " \n" - + " " + lineID + "\n" //$NON-NLS-2$ + + " " + lineID + "\n" + notes + " \n" @@ -342,7 +342,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getName()) + "\n" //$NON-NLS-2$ + xml = xml + " " + XMLTools.encodeXML(currentItem.getProduct().getName()) + "\n" + " " + XMLTools.encodeXML(currentItem.getProduct().getDescription()) + "\n" + " \n" @@ -369,7 +369,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " \n" + " \n" - + " " //$NON-NLS-2$ + + " " + quantityFormat(currentItem.getQuantity()) + "\n" + " \n" + " \n" @@ -479,8 +479,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { * " 2013-51112\n" + * " \n" */ - + " \n" + " \n" //$NON-NLS-2$ - + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" //$NON-NLS-2$ + + " \n" + " \n" + + " " + XMLTools.encodeXML(trans.getNumber()) + "\n" + " " + trans.getCurrency() + "\n"; if (trans.getTradeSettlementPayment() != null) { @@ -517,7 +517,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { + " " + currencyFormat(amount.getBasis()) + "\n" // currencyID=\"EUR\" + " " + amount.getCategoryCode() + "\n" + " " + vatFormat(currentTaxPercent) - + "\n" + " \n"; //$NON-NLS-2$ + + "\n" + " \n"; } } @@ -578,10 +578,10 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } - if ((trans.getPaymentTerms() == null)&&((paymentTermsDescription!=null)||(trans.getTradeSettlement()!=null)||(hasDueDate))) { + if ((trans.getPaymentTerms() == null) && ((paymentTermsDescription != null) || (trans.getTradeSettlement() != null) || (hasDueDate))) { xml = xml + "\n"; - if (paymentTermsDescription!=null) { + if (paymentTermsDescription != null) { xml = xml + "" + paymentTermsDescription + "\n"; } @@ -662,7 +662,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { private String buildPaymentTermsXml() { final IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms(); - if (paymentTerms==null) { + if (paymentTerms == null) { return ""; } String paymentTermsXml = ""; diff --git a/validator/src/main/java/org/mustangproject/validator/SchematronPipeline.java b/validator/src/main/java/org/mustangproject/validator/SchematronPipeline.java index 25357634..bda4b7a2 100644 --- a/validator/src/main/java/org/mustangproject/validator/SchematronPipeline.java +++ b/validator/src/main/java/org/mustangproject/validator/SchematronPipeline.java @@ -39,7 +39,7 @@ public class SchematronPipeline { try { return factory.newTemplates(new StreamSource(cl.getResourceAsStream(transName))); } catch (TransformerConfigurationException excep) { - throw new IllegalStateException("Policy Schematron transformer XSL " + transName + " not found.", excep); //$NON-NLS-2$ + throw new IllegalStateException("Policy Schematron transformer XSL " + transName + " not found.", excep); } } From 45475bee2e25f3ca12a10034f4b6835adc22c3fe Mon Sep 17 00:00:00 2001 From: Sewan Aleanakian Date: Wed, 27 Jan 2021 13:34:02 +0100 Subject: [PATCH 09/11] Allow setting Contact for recipient TradeParty in XRechnung fixes ZUGFeRD/mustangproject#216 --- .../java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java index 4883a314..1041b67f 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java @@ -129,7 +129,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider { } xml += " " + XMLTools.encodeXML(party.getName()) + "\n"; - if ((party.getContact() != null) && (isSender || profile == Profiles.getByName("Extended"))) { + if ((party.getContact() != null) && (isSender || profile == Profiles.getByName("Extended") || profile == Profiles.getByName("XRechnung"))) { xml = xml + "\n" + " " + XMLTools.encodeXML(party.getContact().getName()) + "\n"; if (party.getContact().getPhone() != null) { From 688a46f99a54c5e908927e885f5783c3ad3bb5be Mon Sep 17 00:00:00 2001 From: jstaerk Date: Wed, 27 Jan 2021 14:15:07 +0100 Subject: [PATCH 10/11] updated history --- History.md | 1 + 1 file changed, 1 insertion(+) diff --git a/History.md b/History.md index a22e4f4f..cd1b1502 100644 --- a/History.md +++ b/History.md @@ -2,6 +2,7 @@ ======= - PR #217 seller order referenced document +- PR #218 allow recipient contact in XRechnung thanks to seeeeew - only deploy library and validator to maven central, not core nor cli - a correction should reference the original invoice via invoiceReferencedDocument, not buyerOrderReferencedDocument From 2bb1118a3bc943a583332b0d0e868889d2dc31f0 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Thu, 28 Jan 2021 07:10:28 +0100 Subject: [PATCH 11/11] updated notice file --- NOTICE | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NOTICE b/NOTICE index 85b08d6a..f37587ae 100644 --- a/NOTICE +++ b/NOTICE @@ -26,4 +26,8 @@ Copyright (c) 2010 Atos Worldline SAS Based on VeraPDF-library https://github.com/veraPDF/veraPDF-library licensed under the MPL 2.0 Based on PH-Schematron https://github.com/phax/ph-schematron licensed under the APL2.0 +Based on CII2UBL https://github.com/phax/en16931-cii2ubl licensed under the APL2.0 Based on https://github.com/itplr-kosit/xrechnung-schematron licensed under the APL2.0 +Based on https://github.com/itplr-kosit/xrechnung-visualization licensed under the APL2.0 +Based on Saxon-HE https://sourceforge.net/projects/saxon/ licensed under the MPL 2.0 +Based on DOM4j https://dom4j.github.io/ licensed under the BSD license