<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="https://www.pdkexport.cz/docs/specs/pdk-conversion-delivery-note/v1"
           targetNamespace="https://www.pdkexport.cz/docs/specs/pdk-conversion-delivery-note/v1"
           elementFormDefault="qualified"
           version="1.3.260226">

  <xs:annotation>
    <xs:documentation xml:lang="en">
      XML Schema (XSD) for the pdkexport.cz conversion input — supplier
      delivery note. Mirrors pdk-conversion-delivery-note.schema.json
      one to one. The service converts the payload into the Czech PDK
      format required by the recipient. Use whichever validator your
      toolchain prefers; for the canonical definition consult the JSON
      Schema.
    </xs:documentation>
  </xs:annotation>

  <!-- ===== Simple types ===== -->

  <xs:simpleType name="SupplierCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[!-~]{1,16}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="InternalId">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,32}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NationalCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{8}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="RecipientName">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="30"/>
      <xs:pattern value="[^|&#xD;&#xA;&#x9;]+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Email">
    <xs:restriction base="xs:string">
      <xs:maxLength value="150"/>
      <xs:pattern value="[^@\s]+@[^@\s]+\.[^@\s]+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="DeliveryNoteNumber">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,12}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="OrderNumber">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,36}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="DeliveryPlace">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,20}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="IsoDate">
    <xs:restriction base="xs:date">
      <xs:pattern value="20[0-9]{2}-[0-9]{2}-[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Price">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
      <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Quantity">
    <xs:restriction base="xs:decimal">
      <xs:minExclusive value="0"/>
      <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="VatRate">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="99.9"/>
      <xs:fractionDigits value="1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="PdkCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,16}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="ItemName">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="50"/>
      <xs:pattern value="[^|&#xD;&#xA;&#x9;]+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="BatchCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Za-z0-9._\-]{1,20}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Barcode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{8,16}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="UdiCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[ -&quot;%-?A-Z_a-z]{1,256}"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- ===== Complex types ===== -->

  <xs:complexType name="Supplier">
    <xs:sequence>
      <xs:element name="code" type="SupplierCode"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Recipient">
    <xs:sequence>
      <xs:element name="internalId"   type="InternalId"/>
      <xs:element name="nationalCode" type="NationalCode"/>
      <xs:element name="name"         type="RecipientName"/>
      <xs:element name="email"        type="Email"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Item">
    <xs:sequence>
      <xs:element name="pdkCode"             type="PdkCode"/>
      <xs:element name="name"                type="ItemName" minOccurs="0"/>
      <xs:element name="quantity"            type="Quantity"/>
      <xs:element name="unitPriceWithoutTax" type="Price"/>
      <xs:element name="unitPriceWithTax"    type="Price"/>
      <xs:element name="vatRate"             type="VatRate"/>
      <xs:element name="batchCode"           type="BatchCode"  minOccurs="0"/>
      <xs:element name="expirationDate"      type="IsoDate"    minOccurs="0"/>
      <xs:element name="barcode"             type="Barcode"    minOccurs="0"/>
      <xs:element name="udiCode"             type="UdiCode"    minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DeliveryNote">
    <xs:sequence>
      <xs:element name="supplier"             type="Supplier"/>
      <xs:element name="recipient"            type="Recipient"/>
      <xs:element name="deliveryNoteNumber"   type="DeliveryNoteNumber"/>
      <xs:element name="orderNumber"          type="OrderNumber"   minOccurs="0"/>
      <xs:element name="dateOfIssue"          type="IsoDate"/>
      <xs:element name="dateOfDelivery"       type="IsoDate"       minOccurs="0"/>
      <xs:element name="deliveryPlace"        type="DeliveryPlace" minOccurs="0"/>
      <xs:element name="totalPriceWithoutTax" type="Price"/>
      <xs:element name="totalPriceWithTax"    type="Price"/>
      <xs:element name="item"                 type="Item" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- ===== Root element ===== -->

  <xs:element name="deliveryNote" type="DeliveryNote"/>

</xs:schema>
