diff --git a/History.md b/History.md
index 9b468cc0..cd1b1502 100644
--- a/History.md
+++ b/History.md
@@ -1,3 +1,11 @@
+2.1.1
+=======
+
+- 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
+
2.1.0
=======
2020-01-19
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
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/library/src/main/java/org/mustangproject/Invoice.java b/library/src/main/java/org/mustangproject/Invoice.java
index 7562f41a..ba4602f8 100644
--- a/library/src/main/java/org/mustangproject/Invoice.java
+++ b/library/src/main/java/org/mustangproject/Invoice.java
@@ -33,12 +33,13 @@ 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;
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;
}
@@ -115,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;
}
@@ -209,9 +212,18 @@ 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
+ * usually the order number
* @param buyerOrderReferencedDocumentID string with number
* @return fluent setter
*/
@@ -220,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;
@@ -310,12 +336,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 +433,8 @@ public class Invoice implements IExportableTransaction {
return this;
}
- public IZUGFeRDExportableTradeParty getRecipient() {
+ @Override
+ public IZUGFeRDExportableTradeParty getRecipient() {
return recipient;
}
@@ -439,8 +468,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 +478,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 +488,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 +631,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..8f1f12c3 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
*
@@ -407,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/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 2a55d93b..8e035e4b 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) {
@@ -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"
+ " "
@@ -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"
+ " "
@@ -230,12 +236,12 @@ 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) {
- 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())
@@ -265,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";
}
}
@@ -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();
}
@@ -294,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"
@@ -318,17 +324,17 @@ 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$
+ + " " + lineID + "\n"
+ " \n"
+ " \n"
+ " \n"
@@ -352,7 +358,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider implements IXMLPr
+ " \n"
- + " " //$NON-NLS-2$
+ + " "
+ quantityFormat(currentItem.getQuantity()) + "\n"
+ " \n"
+ " \n"
@@ -383,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"
@@ -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..1041b67f 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);
}
@@ -129,9 +127,9 @@ 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"))) {
+ 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) {
@@ -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) + "";
}
@@ -287,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"
@@ -301,22 +299,22 @@ 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$
+ + " " + lineID + "\n"
+ notes
+ " \n"
@@ -332,19 +330,19 @@ 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);
}
}
- 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"
@@ -371,7 +369,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
+ " \n"
+ " \n"
- + " " //$NON-NLS-2$
+ + " "
+ quantityFormat(currentItem.getQuantity()) + "\n"
+ " \n"
+ " \n"
@@ -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"
@@ -475,12 +479,12 @@ 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) {
- 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())
@@ -513,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";
}
}
@@ -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" +
@@ -574,15 +578,15 @@ 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";
}
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,28 +605,33 @@ 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$
+ + " " + 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"
@@ -635,12 +644,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 +661,14 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
private String buildPaymentTermsXml() {
- IZUGFeRDPaymentTerms paymentTerms = trans.getPaymentTerms();
- if (paymentTerms==null) {
+ 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 +683,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");
}
}
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
+
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/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);
}
}
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");
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 23df88a9..00000000
Binary files a/validator/src/main/resources/xrechnung.invalid.pdf and /dev/null differ
diff --git a/validator/src/main/resources/xrechnung.pdf b/validator/src/main/resources/xrechnung.pdf
deleted file mode 100644
index 095f2019..00000000
Binary files a/validator/src/main/resources/xrechnung.pdf and /dev/null differ