<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:simpleType name="TKwota">
        <xsd:annotation>
            <xsd:documentation>Wartość pieniężna</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:decimal">
            <xsd:pattern value="\d{1,13}\.\d{2}"></xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="TData">
        <xsd:annotation>
            <xsd:documentation>Data w formacie RRRR-MM-DD</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:date"></xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="TOkres">
        <xsd:annotation>
            <xsd:documentation>
                Okres w formacie RRRR-MM
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\d{4,4}\-\d{2,2}"></xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="TKursWaluty">
        <xsd:annotation>
            <xsd:documentation>
                Kurs średni waluty publikowany przez NBP
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:decimal">
            <xsd:pattern value="\d{1,11}\.\d{4}"></xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:complexType name="TTabelaNBP">
        <xsd:sequence>
            <xsd:element name="Numer" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Numer tabeli NBP, z której jest brany kurs średni.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Dzien" type="TData">
                <xsd:annotation>
                    <xsd:documentation>Dzień publikacji kursu.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="KursSredni" type="TKursWaluty">
                <xsd:annotation>
                    <xsd:documentation>Kurs sredni, wedlug którego przeliczone jest podsumowanie.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:complexType name="TWaluta">
        <xsd:sequence>
            <xsd:element name="KodWaluty" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Kod ISO waluty</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="TabelaNBP" type="TTabelaNBP" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Wystepuję tylko wtedy, gdy waluta jest inna niż PLN</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:simpleType name="TIlosc">
        <xsd:annotation>
            <xsd:documentation>
                Ilość produktów w pozycji faktury
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:decimal">
            <xsd:pattern value="\d{1,11}\.\d{4}"></xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="TRabat">
        <xsd:annotation>
            <xsd:documentation>
                Wartość rabatu w procentach. Wartość 50.00 odpowiada rabatowi 50%
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="TKwota">
            <xsd:minInclusive value="0"></xsd:minInclusive>
            <xsd:maxInclusive value="100"></xsd:maxInclusive>
        </xsd:restriction>
    </xsd:simpleType>
    
    <xsd:simpleType name="TRodzajCeny">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="netto"></xsd:enumeration>
            <xsd:enumeration value="brutto"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    
 <xsd:complexType name="TCena">
    <xsd:simpleContent>
        <xsd:extension base="TKwota">
            <xsd:attribute type="TRodzajCeny" name="rodzaj"/>
        </xsd:extension>
    </xsd:simpleContent>
</xsd:complexType>
   
    <xsd:simpleType name="TStawkaVAT">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="23"></xsd:enumeration>
            <xsd:enumeration value="8"></xsd:enumeration>
            <xsd:enumeration value="5"></xsd:enumeration>
            <xsd:enumeration value="22"></xsd:enumeration>
            <xsd:enumeration value="7"></xsd:enumeration>
            <xsd:enumeration value="3"></xsd:enumeration>
            <xsd:enumeration value="0"></xsd:enumeration>
            <xsd:enumeration value="WDT"></xsd:enumeration>
            <xsd:enumeration value="NP"></xsd:enumeration>
            <xsd:enumeration value="NPUE"></xsd:enumeration>
            <xsd:enumeration value="ZW"></xsd:enumeration>
            <xsd:enumeration value="EXP"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    
    
    <xsd:element name="Faktura">
        <xsd:complexType>
            <xsd:sequence>           
                <xsd:element ref="Naglowek"></xsd:element>
                <xsd:element ref="Sprzedawca"></xsd:element>
                <xsd:element ref="Nabywca"></xsd:element>
                <xsd:element ref="Pozycje"></xsd:element>
                <xsd:element ref="Podsumowanie"></xsd:element>
                <xsd:element ref="Adnotacje"></xsd:element>
                <xsd:any processContents="skip" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="Naglowek">
        <xsd:annotation>
            <xsd:documentation>Podstawowe dane faktury</xsd:documentation>
        </xsd:annotation>
        
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Rodzaj" type="xsd:string"/>
                <xsd:element name="Wersja" type="xsd:int"/>
                <xsd:element name="NumerFaktury"      type="xsd:string"></xsd:element>
                <xsd:element name="DataWystawienia"   type="TData"></xsd:element>
                <xsd:element name="DataSprzedazy"     type="TData"  minOccurs="0"></xsd:element>
                <xsd:element name="OkresSprzedazy"    type="TOkres" minOccurs="0"></xsd:element>
                <xsd:element name="TerminPlatnosci"   type="TData"></xsd:element>
                <xsd:element name="Duplikat"          type="TData"  minOccurs="0">
                    <xsd:annotation>
                        <xsd:documentation>Data wystawienia duplikatu</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="MetodaPlatnosci">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:enumeration value="przelew"></xsd:enumeration>
                            <xsd:enumeration value="gotówka"></xsd:enumeration>
                            <xsd:enumeration value="kompensata"></xsd:enumeration>
                            <xsd:enumeration value="za pobraniem"></xsd:enumeration>
                            <xsd:enumeration value="karta płatnicza"></xsd:enumeration>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="Waluta"            type="TWaluta"></xsd:element>
                <xsd:element name="Razem"             type="TKwota"></xsd:element>
                <xsd:element name="Zaplacono"         type="TKwota"></xsd:element>
                <xsd:element name="DoZaplaty"         type="TKwota"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="Sprzedawca">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Nazwa" type="xsd:string"></xsd:element>
                <xsd:element name="Ulica" type="xsd:string"></xsd:element>
                <xsd:element name="KodPocztowy" type="xsd:string"></xsd:element>
                <xsd:element name="Miasto" type="xsd:string"></xsd:element>
                <xsd:element name="NIP" type="xsd:string"></xsd:element>
                <xsd:element name="RachunekBankowy" type="xsd:string" minOccurs="0"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="Nabywca">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Nazwa"  type="xsd:string"></xsd:element>
                <xsd:element name="Ulica"  type="xsd:string"></xsd:element>
                <xsd:element name="KodPocztowy" type="xsd:string"></xsd:element>
                <xsd:element name="Miasto" type="xsd:string"></xsd:element>
                <xsd:element name="NIP"    type="xsd:string"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>    
    
    <xsd:element name="Pozycja">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Lp"            type="xsd:integer"></xsd:element>
                <xsd:element name="Nazwa"         type="xsd:string"></xsd:element>
                <xsd:element name="KodTowaru"     type="xsd:string" minOccurs="0"></xsd:element>
                <xsd:element name="PKWiU"         type="xsd:string" minOccurs="0"></xsd:element>
                <xsd:element name="Jednostka"     type="xsd:string"></xsd:element>
                <xsd:element name="Ilosc"         type="TIlosc"></xsd:element>
                <xsd:element name="Cena"          type="TCena"></xsd:element>
                <xsd:element name="Rabat"         type="TRabat" minOccurs="0"></xsd:element>
                <xsd:element name="StawkaVAT"     type="TStawkaVAT"></xsd:element>
                <xsd:element name="WartoscNetto"  type="TKwota"></xsd:element>
                <xsd:element name="WartoscBrutto" type="TKwota"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="Pozycje">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Pozycja" minOccurs="1" maxOccurs="unbounded"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:complexType name="TPozycjaPodsumowania">
        <xsd:sequence>
            <xsd:element name="WartoscNetto" type="TKwota"></xsd:element>
            <xsd:element name="KwotaVAT" type="TKwota"></xsd:element>
            <xsd:element name="WartoscBrutto" type="TKwota"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    
    
    <xsd:element name="Podsumowanie">
        <xsd:annotation>
            <xsd:documentation>Podsumowanie stawek VAT w złotych (niezależnie od waluty faktury)</xsd:documentation>
        </xsd:annotation>
        
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Stawka" minOccurs="1" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:complexContent>
                            <xsd:extension base="TPozycjaPodsumowania">
                                <xsd:attribute name="VAT" type="TStawkaVAT"></xsd:attribute>
                            </xsd:extension>
                        </xsd:complexContent>
                    </xsd:complexType>
                </xsd:element>

                <xsd:element name="Razem" type="TPozycjaPodsumowania"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="Adnotacje">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="DodatkoweInformacje" type="xsd:string" minOccurs="0" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>Dodatkowe informacje na fakturze</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="Naglowek" type="xsd:string" minOccurs="0" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>Dodatkowe informacje w naglowku faktury</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="Stopka" type="xsd:string" minOccurs="0" maxOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>Dodatkowe informacje w stopce faktury</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    
</xsd:schema>
