<?xml version="1.0" encoding="utf-8"?>
<!--
Version: 1
Revision date: 2024-02-21

Changelog:
2021-08-19: Initial release
2022-01-25: Fix: Changed attribute 'creditornumber' to 'debtornumber' in element 'prices' > 'sales'
2022-02-28: Product element expanded: warehouse
2024-02-21: Composition element expanded: isdivisible
-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="guid">
    <xs:annotation>
      <xs:documentation xml:lang="en">The representation of a GUID, generally the id of an element.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength25">
    <xs:restriction base="xs:string">
      <xs:maxLength value="25"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength50">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength100">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength255">
    <xs:restriction base="xs:string">
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength4096">
    <xs:restriction base="xs:string">
      <xs:maxLength value="4096"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlength8192">
    <xs:restriction base="xs:string">
      <xs:maxLength value="8192"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string_maxlengthinfinite">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <xs:simpleType name="color" final="restriction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="green"/>
      <xs:enumeration value="red"/>
      <xs:enumeration value="blue"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="documenttypes" final="restriction">
    <xs:annotation>
      <xs:documentation xml:lang="en">Enumeration with allowed document types. Case-sensitive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[Pp][Rr][Oo][Dd][Uu][[Cc][Tt][Ss]"/>
      <xs:pattern value="[Rr][Ee][Ll][Aa][Tt][Ii][Oo][Nn][Ww][Ii][Tt][Hh][Pp][Rr][Oo][Dd][Uu][Cc][Tt][Ss]"/>
      <xs:pattern value="[Rr][Ee][Ll][Aa][Tt][Ii][Oo][Nn][Ss]"/>
      <xs:pattern value="[Pp][Rr][Ii][Cc][Ee][Ss]"/>
      <xs:pattern value="[Oo][Rr][Dd][Ee][Rr][Ss]"/>
      <xs:pattern value="[Oo][Rr][Dd][Ee][Rr][Rr][Ee][Cc][Ee][Ii][Pp][Tt][Ss]"/>
      <xs:pattern value="[Oo][Rr][Dd][Ee][Rr][Dd][Ee][Ll][Ii][Vv][Ee][Rr][Ii][Ee][Ss]"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="document">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="header">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="datetimecreatedutc" type="xs:dateTime"/>
              <xs:element name="referencenumber" type="string_maxlength100"/>
              <xs:element name="documenttype" type="documenttypes"/>
              <xs:element name="version" type="xs:unsignedByte"/>
              <xs:element name="sender" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="name" type="string_maxlength255" minOccurs="0" />
                    <xs:element name="vatnumber" type="string_maxlength25" minOccurs="0" />
                    <xs:element name="cocnumber" type="string_maxlength50" minOccurs="0" />
                    <xs:element name="connectid" type="string_maxlength25" minOccurs="0" />
                    <xs:element name="address" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="streetname" type="string_maxlength255" minOccurs="0" />
                          <xs:element name="cityname" type="string_maxlength100" minOccurs="0" />
                          <xs:element name="postalzone" type="string_maxlength25" minOccurs="0" />
                          <xs:element name="country" minOccurs="0">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="string_maxlength255">
                                  <xs:attribute name="code" type="string_maxlength25" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="gs1gln" type="string_maxlength25" minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="contact" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="phone" type="string_maxlength50" minOccurs="0" />
                          <xs:element name="email" type="string_maxlength255" minOccurs="0" />
                          <xs:element name="website" type="string_maxlength255" minOccurs="0" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="receiver" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="idrelation" type="guid" minOccurs="0" />
                    <xs:element name="code" type="string_maxlength25" minOccurs="0" />
                    <xs:element name="name" type="string_maxlength255" minOccurs="0" />
                    <xs:element name="creditornumber" type="string_maxlength50" minOccurs="0" />
                    <xs:element name="debtornumber" type="string_maxlength50" minOccurs="0" />
                    <xs:element name="vatnumber" type="string_maxlength25" minOccurs="0" />
                    <xs:element name="cocnumber" type="string_maxlength50" minOccurs="0" />
                    <xs:element name="gs1gln" type="string_maxlength25" minOccurs="0" />
                    <xs:element name="connectid" type="string_maxlength25" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="data" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="productgroups">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="productgroup" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="idproductgroup" type="guid" minOccurs="0" />
                          <xs:element name="code" type="string_maxlength25" minOccurs="0" />
                          <xs:element name="name" type="string_maxlength255" />
                          <xs:element name="mainproductgroup" minOccurs="0" maxOccurs="1">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="code" type="string_maxlength25" minOccurs="0" />
                                <xs:element name="name" type="string_maxlength255" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="products">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="product" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:all>
                                      <xs:element name="idproduct" type="guid" minOccurs="0" />
                                      <xs:element name="type" type="xs:unsignedByte" minOccurs="0" />
                                      <xs:element name="typedescription" type="string_maxlength25" minOccurs="0" />
                                      <xs:element name="code" type="string_maxlength25" minOccurs="0" />
                                      <xs:element name="name" type="string_maxlength255" />
                                      <xs:element name="additionaldescription" type="string_maxlength8192" minOccurs="0" />
                                      <xs:element name="ingredientsdeclaration" type="string_maxlength8192" minOccurs="0" />
                                      <xs:element name="allergens" minOccurs="0">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="allergen" minOccurs="0" maxOccurs="unbounded">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="idallergen" type="guid" minOccurs="0" />
                                                  <xs:element name="name" type="string_maxlength255" />
                                                  <xs:element name="nameshort" type="string_maxlength25" minOccurs="0" />
                                                  <xs:element name="extcode" type="string_maxlength25" minOccurs="0" />
                                                  <xs:element name="value" type="xs:unsignedByte" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                          <xs:attribute name="declaration" type="string_maxlength8192" />
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="nutrients" minOccurs="0">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="nutrient" minOccurs="0" maxOccurs="unbounded">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="idnutrient" type="guid" minOccurs="0" />
                                                  <xs:element name="name" type="string_maxlength255" />
                                                  <xs:element name="nameshort" type="string_maxlength25" minOccurs="0" />
                                                  <xs:element name="extcode" type="string_maxlength25" minOccurs="0" />
                                                  <xs:element name="unitofmeasurement" type="string_maxlength25" minOccurs="0" />
                                                  <xs:element name="measurementprecision" type="xs:unsignedByte" minOccurs="0" />
                                                  <xs:element name="value" type="xs:decimal" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                          <xs:attribute name="declaration" type="string_maxlength8192" />
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="composition" minOccurs="0">
                                        <xs:complexType>
                                          <xs:all>
                                            <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                            <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="content" type="xs:decimal" minOccurs="0" />
                                            <xs:element name="contentuom" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="isbaseuom" type="xs:boolean" minOccurs="0" />
                                            <xs:element name="isweightuom" type="xs:boolean" minOccurs="0" />
                                            <xs:element name="isdivisible" type="xs:boolean" minOccurs="0" />
                                          </xs:all>
                                          <xs:attribute name="summary" type="string_maxlength255" />
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="warehouse" minOccurs="0">
                                        <xs:complexType>
                                          <xs:all>
                                            <xs:element name="name" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="location" minOccurs="0">
                                              <xs:complexType>
                                                <xs:simpleContent>
                                                  <xs:extension base="string_maxlength255">
                                                    <xs:attribute name="code" type="string_maxlength25" />
                                                  </xs:extension>
                                                </xs:simpleContent>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:all>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="additionalproperties" minOccurs="0">
                                        <xs:complexType>
                                          <xs:all>
                                            <xs:element name="manufacturer" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="brand" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="barcode" type="string_maxlength255" minOccurs="0" />
                                            <xs:element name="package" minOccurs="0">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="size" minOccurs="0">
                                                    <xs:complexType>
                                                      <xs:all>
                                                        <xs:element name="height" type="xs:decimal" minOccurs="0" />
                                                        <xs:element name="width" type="xs:decimal" minOccurs="0" />
                                                        <xs:element name="depth" type="xs:decimal" minOccurs="0" />
                                                        <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                      </xs:all>
                                                    </xs:complexType>
                                                  </xs:element>
                                                  <xs:element name="weight" minOccurs="0">
                                                    <xs:complexType>
                                                      <xs:all>
                                                        <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                        <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                      </xs:all>
                                                    </xs:complexType>
                                                  </xs:element>
                                                  <xs:element name="content" minOccurs="0">
                                                    <xs:complexType>
                                                      <xs:all>
                                                        <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                        <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                      </xs:all>
                                                    </xs:complexType>
                                                  </xs:element>
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="tareweight" minOccurs="0">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                  <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="storagetemperature" minOccurs="0">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                  <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="shelflife" minOccurs="0">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                  <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="deliverytime" minOccurs="0">
                                              <xs:complexType>
                                                <xs:all>
                                                  <xs:element name="value" type="xs:decimal" minOccurs="0" />
                                                  <xs:element name="valueuom" type="string_maxlength255" minOccurs="0" />
                                                </xs:all>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:all>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="defaultpurchaseprice" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="defaultpurchasepricebase" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="purchaseprice" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="purchasepricebase" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="defaultsalesprice" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="defaultsalespricebase" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="salesprice" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="salespricebase" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="vatpercent" type="xs:decimal" minOccurs="0" />
                                      <xs:element name="isblockedforpurchase" type="xs:boolean" minOccurs="0" />
                                      <xs:element name="isblockedforproduction" type="xs:boolean" minOccurs="0" />
                                      <xs:element name="isblockedforsale" type="xs:boolean" minOccurs="0" />
                                      <xs:element name="prices" minOccurs="0">
                                        <xs:complexType>
                                          <xs:all>
                                            <xs:element name="purchase" minOccurs="0">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element name="relation" minOccurs="0" maxOccurs="unbounded">
                                                    <xs:complexType>
                                                      <xs:simpleContent>
                                                        <xs:extension base="xs:decimal">
                                                          <xs:attribute name="idrelation" type="guid" />
                                                          <xs:attribute name="code" type="string_maxlength25" />
                                                          <xs:attribute name="name" type="string_maxlength255" use="required" />
                                                          <xs:attribute name="creditornumber" type="string_maxlength50" />
                                                          <xs:attribute name="gs1gln" type="string_maxlength25" />
                                                        </xs:extension>
                                                      </xs:simpleContent>
                                                    </xs:complexType>
                                                  </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="default" type="xs:decimal"  />
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="sales" minOccurs="0">
                                              <xs:complexType>
                                                <xs:sequence>
                                                  <xs:element name="relation" minOccurs="0" maxOccurs="unbounded">
                                                    <xs:complexType>
                                                      <xs:simpleContent>
                                                        <xs:extension base="xs:decimal">
                                                          <xs:attribute name="idrelation" type="guid"  />
                                                          <xs:attribute name="code" type="string_maxlength25"  />
                                                          <xs:attribute name="name" type="string_maxlength255" use="required"  />
                                                          <xs:attribute name="debtornumber" type="string_maxlength50 " />
                                                          <xs:attribute name="gs1gln" type="string_maxlength25"  />
                                                        </xs:extension>
                                                      </xs:simpleContent>
                                                    </xs:complexType>
                                                  </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="default" type="xs:decimal" />
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:all>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:all>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
