﻿<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- Currency Type -->
    <xs:simpleType name="CurrencyType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="AED"/>
            <xs:enumeration value="AFN"/>
            <xs:enumeration value="ALL"/>
            <xs:enumeration value="AMD"/>
            <xs:enumeration value="ANG"/>
            <xs:enumeration value="AOA"/>
            <xs:enumeration value="ARS"/>
            <xs:enumeration value="AUD"/>
            <xs:enumeration value="AWG"/>
            <xs:enumeration value="AZN"/>
            <xs:enumeration value="BAM"/>
            <xs:enumeration value="BBD"/>
            <xs:enumeration value="BDT"/>
            <xs:enumeration value="BGN"/>
            <xs:enumeration value="BHD"/>
            <xs:enumeration value="BIF"/>
            <xs:enumeration value="BND"/>
            <xs:enumeration value="BOB"/>
            <xs:enumeration value="BRL"/>
            <xs:enumeration value="BSD"/>
            <xs:enumeration value="BWP"/>
            <xs:enumeration value="BYN"/>
            <xs:enumeration value="BZD"/>
            <xs:enumeration value="CAD"/>
            <xs:enumeration value="CDF"/>
            <xs:enumeration value="CHF"/>
            <xs:enumeration value="CLP"/>
            <xs:enumeration value="CNY"/>
            <xs:enumeration value="COP"/>
            <xs:enumeration value="CRC"/>
            <xs:enumeration value="CUP"/>
            <xs:enumeration value="CVE"/>
            <xs:enumeration value="CZK"/>
            <xs:enumeration value="DJF"/>
            <xs:enumeration value="DKK"/>
            <xs:enumeration value="DOP"/>
            <xs:enumeration value="DZD"/>
            <xs:enumeration value="EGP"/>
            <xs:enumeration value="ERN"/>
            <xs:enumeration value="ETB"/>
            <xs:enumeration value="EUR"/>
            <xs:enumeration value="FJD"/>
            <xs:enumeration value="GBP"/>
            <xs:enumeration value="GEL"/>
            <xs:enumeration value="GHS"/>
            <xs:enumeration value="GIP"/>
            <xs:enumeration value="GMD"/>
            <xs:enumeration value="GNF"/>
            <xs:enumeration value="GTQ"/>
            <xs:enumeration value="GYD"/>
            <xs:enumeration value="HKD"/>
            <xs:enumeration value="HNL"/>
            <xs:enumeration value="HRK"/>
            <xs:enumeration value="HTG"/>
            <xs:enumeration value="HUF"/>
            <xs:enumeration value="IDR"/>
            <xs:enumeration value="ILS"/>
            <xs:enumeration value="INR"/>
            <xs:enumeration value="IQD"/>
            <xs:enumeration value="IRR"/>
            <xs:enumeration value="ISK"/>
            <xs:enumeration value="JMD"/>
            <xs:enumeration value="JOD"/>
            <xs:enumeration value="JPY"/>
            <xs:enumeration value="KES"/>
            <xs:enumeration value="KGS"/>
            <xs:enumeration value="KHR"/>
            <xs:enumeration value="KMF"/>
            <xs:enumeration value="KRW"/>
            <xs:enumeration value="KWD"/>
            <xs:enumeration value="KZT"/>
            <xs:enumeration value="LAK"/>
            <xs:enumeration value="LBP"/>
            <xs:enumeration value="LKR"/>
            <xs:enumeration value="LRD"/>
            <xs:enumeration value="LSL"/>
            <xs:enumeration value="LYD"/>
            <xs:enumeration value="MAD"/>
            <xs:enumeration value="MDL"/>
            <xs:enumeration value="MGA"/>
            <xs:enumeration value="MKD"/>
            <xs:enumeration value="MMK"/>
            <xs:enumeration value="MNT"/>
            <xs:enumeration value="MOP"/>
            <xs:enumeration value="MRU"/>
            <xs:enumeration value="MUR"/>
            <xs:enumeration value="MVR"/>
            <xs:enumeration value="MWK"/>
            <xs:enumeration value="MXN"/>
            <xs:enumeration value="MYR"/>
            <xs:enumeration value="MZN"/>
            <xs:enumeration value="NAD"/>
            <xs:enumeration value="NGN"/>
            <xs:enumeration value="NIO"/>
            <xs:enumeration value="NOK"/>
            <xs:enumeration value="NPR"/>
            <xs:enumeration value="NZD"/>
            <xs:enumeration value="OMR"/>
            <xs:enumeration value="PAB"/>
            <xs:enumeration value="PEN"/>
            <xs:enumeration value="PGK"/>
            <xs:enumeration value="PHP"/>
            <xs:enumeration value="PKR"/>
            <xs:enumeration value="PLN"/>
            <xs:enumeration value="PYG"/>
            <xs:enumeration value="QAR"/>
            <xs:enumeration value="RON"/>
            <xs:enumeration value="RSD"/>
            <xs:enumeration value="RUB"/>
            <xs:enumeration value="RWF"/>
            <xs:enumeration value="SAR"/>
            <xs:enumeration value="SBD"/>
            <xs:enumeration value="SCR"/>
            <xs:enumeration value="SDG"/>
            <xs:enumeration value="SEK"/>
            <xs:enumeration value="SGD"/>
            <xs:enumeration value="SLE"/>
            <xs:enumeration value="SLL"/>
            <xs:enumeration value="SOS"/>
            <xs:enumeration value="SRD"/>
            <xs:enumeration value="SSP"/>
            <xs:enumeration value="STN"/>
            <xs:enumeration value="SVC"/>
            <xs:enumeration value="SYP"/>
            <xs:enumeration value="SZL"/>
            <xs:enumeration value="THB"/>
            <xs:enumeration value="TJS"/>
            <xs:enumeration value="TMT"/>
            <xs:enumeration value="TND"/>
            <xs:enumeration value="TOP"/>
            <xs:enumeration value="TRY"/>
            <xs:enumeration value="TTD"/>
            <xs:enumeration value="TWD"/>
            <xs:enumeration value="TZS"/>
            <xs:enumeration value="UAH"/>
            <xs:enumeration value="UGX"/>
            <xs:enumeration value="USD"/>
            <xs:enumeration value="UYU"/>
            <xs:enumeration value="UZS"/>
            <xs:enumeration value="VES"/>
            <xs:enumeration value="VND"/>
            <xs:enumeration value="VUV"/>
            <xs:enumeration value="WST"/>
            <xs:enumeration value="XAF"/>
            <xs:enumeration value="XCD"/>
            <xs:enumeration value="XDR"/>
            <xs:enumeration value="XOF"/>
            <xs:enumeration value="XPF"/>
            <xs:enumeration value="YER"/>
            <xs:enumeration value="ZAR"/>
            <xs:enumeration value="ZMW"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Payment Type -->
    <xs:simpleType name="PaymentType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="CASH"/>
            <xs:enumeration value="CARD"/>
            <xs:enumeration value="TRANSFER"/>
            <xs:enumeration value="COMPENSATION"/>
            <xs:enumeration value="PREPAYMENT"/>
            <xs:enumeration value="CASH_ON_DELIVERY"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- VAT Rate Type -->
    <xs:simpleType name="VATRateType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="27"/>
            <xs:enumeration value="26"/>
            <xs:enumeration value="25.5"/>
            <xs:enumeration value="25"/>
            <xs:enumeration value="24"/>
            <xs:enumeration value="23"/>
            <xs:enumeration value="22"/>
            <xs:enumeration value="21"/>
            <xs:enumeration value="20"/>
            <xs:enumeration value="19"/>
            <xs:enumeration value="18"/>
            <xs:enumeration value="17"/>
            <xs:enumeration value="16"/>
            <xs:enumeration value="15"/>
            <xs:enumeration value="14"/>
            <xs:enumeration value="13.5"/>
            <xs:enumeration value="13"/>
            <xs:enumeration value="12"/>
            <xs:enumeration value="10"/>
            <xs:enumeration value="9.5"/>
            <xs:enumeration value="9"/>
            <xs:enumeration value="8.1"/>
            <xs:enumeration value="8"/>
            <xs:enumeration value="7.7"/>
            <xs:enumeration value="7"/>
            <xs:enumeration value="6"/>
            <xs:enumeration value="5.5"/>
            <xs:enumeration value="5"/>
            <xs:enumeration value="4.8"/>
            <xs:enumeration value="4"/>
            <xs:enumeration value="3.8"/>
            <xs:enumeration value="3.7"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="2.6"/>
            <xs:enumeration value="2.5"/>
            <xs:enumeration value="2.1"/>
            <xs:enumeration value="0"/>
            <xs:enumeration value="ZW"/>
            <xs:enumeration value="NP"/>
            <xs:enumeration value="OO"/>
            <xs:enumeration value="0 EX"/>
            <xs:enumeration value="0 WDT"/>
            <xs:enumeration value="NP UE"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Procedure Code Type -->
    <xs:simpleType name="ProcedureCodeType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="B_MPV_PROWIZJA"/>
            <xs:enumeration value="B_SPV"/>
            <xs:enumeration value="B_SPV_DOSTAWA"/>
            <xs:enumeration value="I_42"/>
            <xs:enumeration value="I_63"/>
            <xs:enumeration value="TT_D"/>
            <xs:enumeration value="WSTO_EE"/>
            <xs:enumeration value="IED"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- GTU Code Type -->
    <xs:simpleType name="GTUCodeType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="GTU_01"/>
            <xs:enumeration value="GTU_02"/>
            <xs:enumeration value="GTU_03"/>
            <xs:enumeration value="GTU_04"/>
            <xs:enumeration value="GTU_05"/>
            <xs:enumeration value="GTU_06"/>
            <xs:enumeration value="GTU_07"/>
            <xs:enumeration value="GTU_08"/>
            <xs:enumeration value="GTU_09"/>
            <xs:enumeration value="GTU_10"/>
            <xs:enumeration value="GTU_11"/>
            <xs:enumeration value="GTU_12"/>
            <xs:enumeration value="GTU_13"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ProfitMargin Type -->
    <xs:simpleType name="ProfitMarginProcedureType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="TRAVEL_AGENCY"/>
            <xs:enumeration value="USED_GOODS"/>
            <xs:enumeration value="ART"/>
            <xs:enumeration value="COLLECTIBLES_ANTIQUES"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ProfitMargin Type -->
    <xs:simpleType name="ExemptVATBasis">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ART_43_SEC_1"/>
            <xs:enumeration value="ART_113_SEC_1"/>
            <xs:enumeration value="ART_82_SEC_3"/>
            <xs:enumeration value="EU_2006_112_EC"/>
            <xs:enumeration value="OTHER"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Vehicle Type -->
    <xs:simpleType name="VehicleType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="LAND"/>
            <xs:enumeration value="VESSEL"/>
            <xs:enumeration value="AIRCRAFT"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Receipment role -->
    <xs:simpleType name="ReceipmentRole">
        <xs:restriction base="xs:integer">
            <xs:enumeration value="2"/>
            <xs:enumeration value="8"/>
            <xs:enumeration value="10"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Define a new simple type with maxLength restriction -->
    <xs:simpleType name="String255">
        <xs:restriction base="xs:string">
            <xs:maxLength value="255"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="String50">
        <xs:restriction base="xs:string">
            <xs:maxLength value="50"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="String5">
        <xs:restriction base="xs:string">
            <xs:maxLength value="5"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- Root Element -->
    <xs:element name="ROOT">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="INVOICE">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:choice>
                                <xs:element name="NUMBER" type="String255" minOccurs="0"/>
                                <xs:element name="SUFFIX" type="String255" minOccurs="0"/>
                            </xs:choice>
                            <xs:element name="ISSUE_DATE" type="xs:date"/>
                            <xs:choice>
                                <xs:element name="SALE_DATE" type="xs:date"/>
                                <xs:sequence>
                                    <xs:element name="SALE_DATE_FROM" type="xs:date"/>
                                    <xs:element name="SALE_DATE_TO" type="xs:date"/>
                                </xs:sequence>
                            </xs:choice>
                            <xs:choice>
                                <xs:element name="DUE_DATE" type="xs:date"/>
                                <xs:element name="ACCORDING_TO_AGREEMENT" type="xs:boolean"/>
                            </xs:choice>
                            <xs:element name="NO_VAT" type="xs:boolean" minOccurs="0"/>
                            <xs:element name="CASH_BASIS" type="xs:boolean" minOccurs="0"/>
                            <xs:element name="PROFIT_MARGIN_TYPE" type="ProfitMarginProcedureType" minOccurs="0"/>
                            <xs:element name="EXEMPT_VAT_BASIS" type="ExemptVATBasis" minOccurs="0"/>
                            <xs:element name="CALCULATED_FROM_GROSS" type="xs:boolean" minOccurs="0"/>
                            <xs:element name="IS_MPP" type="xs:boolean" minOccurs="0"/>
                            <xs:element name="PURCHASER_CONTRACTOR_ID" type="xs:integer"/>
                            <xs:element name="SEND_TO_CONTRACTOR" type="xs:boolean" minOccurs="0"/>
                            <xs:sequence minOccurs="0">
                                <xs:element name="RECIPIENT_CONTRACTOR_ID" type="xs:integer"/>
                                <xs:element name="RECIPIENT_ROLE" type="ReceipmentRole"/>
                                <xs:element name="RECIPIENT_INTERNAL_ID" type="String5" minOccurs="0"/>
                            </xs:sequence>
                            <xs:element name="BANK_ACCOUNT" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="NUMBER" type="String255"/>
                                        <xs:element name="BANK" type="String255" minOccurs="0"/>
                                        <xs:element name="BIC_SWIFT" type="String255" minOccurs="0"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="CURRENCY_ISO4217" type="CurrencyType"/>
                            <xs:element name="CURRENCY_DATE" type="xs:date" minOccurs="0"/>
                            <xs:element name="PAYMENT_TYPE" type="PaymentType"/>
                            <xs:element name="ISSUE_PERSON" type="String255" minOccurs="0"/>
                            <xs:element name="ISSUE_TO_KSEF" type="xs:boolean" minOccurs="0"/>
                            <xs:element name="FOOTER" minOccurs="0">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="1000"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="INVOICE_ITEMS">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="INVOICE_ITEM" maxOccurs="10000">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="NAME" type="String255"/>
                                                    <xs:element name="PKWIU" type="String50" minOccurs="0"/>
                                                    <xs:element name="AMOUNT">
                                                        <xs:simpleType>
                                                            <xs:restriction base="xs:decimal">
                                                                <xs:minExclusive value="0.0"/>
                                                            </xs:restriction>
                                                        </xs:simpleType>
                                                    </xs:element>
                                                    <xs:element name="UNIT" type="String255"/>
                                                    <xs:element name="UNIT_VALUE">
                                                        <xs:simpleType>
                                                            <xs:restriction base="xs:decimal">
                                                                <xs:minInclusive value="0.0"/>
                                                            </xs:restriction>
                                                        </xs:simpleType>
                                                    </xs:element>
                                                    <xs:element name="DISCOUNT" minOccurs="0">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="DISCOUNT_TYPE">
                                                                    <xs:simpleType>
                                                                        <xs:restriction base="xs:string">
                                                                            <xs:enumeration value="AMOUNT"/>
                                                                            <xs:enumeration value="PERCENTAGE"/>
                                                                        </xs:restriction>
                                                                    </xs:simpleType>
                                                                </xs:element>
                                                                <xs:element name="DISCOUNT_VALUE">
                                                                    <xs:simpleType>
                                                                        <xs:restriction base="xs:decimal">
                                                                            <xs:minInclusive value="0.0"/>
                                                                        </xs:restriction>
                                                                    </xs:simpleType>
                                                                </xs:element>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                    <xs:element name="RATE" type="VATRateType" minOccurs="0"/>
                                                    <xs:element name="PROCEDURE_CODE" type="ProcedureCodeType" minOccurs="0"/>
                                                    <xs:element name="GTU_CODE" type="GTUCodeType" minOccurs="0"/>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="INVOICE_PAYMENTS" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="PAYMENT_AMOUNT">
                                            <xs:simpleType>
                                                <xs:restriction base="xs:decimal">
                                                    <xs:minInclusive value="0.0"/>
                                                </xs:restriction>
                                            </xs:simpleType>
                                        </xs:element>
                                        <xs:element name="PAYMENT_DATE" type="xs:date"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="NEW_TRANSPORT_VEHICLE" minOccurs="0">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="VEHICLE_TYPE" type="VehicleType"/>
                                        <xs:element name="ADMISSION_DATE" type="xs:date"/>
                                        <xs:element name="USAGE_METRICS" type="xs:integer"/>
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>