<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://e-dokumenty.mf.gov.pl" xmlns:mf="http://e-dokumenty.mf.gov.pl" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://e-dokumenty.mf.gov.pl" elementFormDefault="qualified">
    <xs:element name="InitUpload" type="mf:InitUploadType"/>
    <xs:complexType name="InitUploadType">
        <xs:sequence>
            <xs:element name="DocumentType" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>JPK - dokumenty przesyłane cyklicznie, JPKAH - dokumenty przesyłane doraźnie w ramach kontroli</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="JPK">
                            <xs:annotation>
                                <xs:documentation>Dokumenty przesyłane cyklicznie</xs:documentation>
                            </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="JPKAH">
                            <xs:annotation>
                                <xs:documentation>Dokumenty przesyłane doraźnie w ramach kontroli</xs:documentation>
                            </xs:annotation>
                        </xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Version" fixed="01.02.01.20160617" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string"/>
                </xs:simpleType>
            </xs:element>
            <xs:element name="EncryptionKey" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:restriction base="mf:EncryptionKeyRSAType">
                            <xs:minLength value="344"/>
                            <xs:maxLength value="344"/>
                        </xs:restriction>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="DocumentList" type="mf:ArrayOfDocumentType" minOccurs="1" maxOccurs="1">
                <xs:unique name="UniqueDocumentFileName">
                    <xs:selector xpath="mf:Document"/>
                    <xs:field xpath="mf:FileName"/>
                </xs:unique>
            </xs:element>
            <xs:element name="AuthData" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>To opcjonalne pole powinno zawierać dokument XML zgodny z opublikowaną schemą SIG-2008_v2-0.xsd zaszyfrowany z wykorzystaniem algorytmu symetrycznego AES256. Powinien zostać wykorzystany ten sam klucz, który jest wykorzystywany do szyfrowania części skompresowanego archiwum pliku JPK i załączany do niniejszego pliku metadanych. Algorytm kodowania zaszyfrowanych danych to Base64.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string"/>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ArrayOfDocumentType">
        <xs:sequence>
            <xs:element name="Document" minOccurs="1">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:extension base="mf:DocumentType"/>
                    </xs:complexContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="DocumentType">
        <xs:sequence>
            <xs:element name="FormCode">
                <xs:annotation>
                    <xs:documentation>KodFormularza zawarty w nagłówku pliku XML.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="systemCode" type="xs:string" use="required">
                                <xs:annotation>
                                    <xs:documentation>Atrybut kodSystemowy elementu KodFormularza z pliku XML.</xs:documentation>
                                </xs:annotation>
                            </xs:attribute>
                            <xs:attribute name="schemaVersion" type="xs:string" use="required">
                                <xs:annotation>
                                    <xs:documentation>Atrybut wersjaSchemy elementu KodFormularza z pliku XML.</xs:documentation>
                                </xs:annotation>
                            </xs:attribute>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="FileName">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[a-zA-Z0-9_\.\-]{5,55}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ContentLength" type="xs:long"/>
            <xs:element name="HashValue" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:restriction base="mf:HashValueSHAType">
                            <xs:minLength value="44"/>
                            <xs:maxLength value="44"/>
                        </xs:restriction>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="FileSignatureList" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                    <xs:complexContent>
                        <xs:extension base="mf:ArrayOfFileSignatureType">
                            <xs:attribute name="filesNumber" use="required">
                                <xs:simpleType>
                                    <xs:restriction base="xs:int">
                                        <xs:minInclusive value="1"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:attribute>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
                <xs:unique name="UniqueFileSignatureFileName">
                    <xs:selector xpath="mf:FileSignature"/>
                    <xs:field xpath="mf:FileName"/>
                </xs:unique>
                <xs:unique name="UniqueFileSignatureOrdinalNumber">
                    <xs:selector xpath="mf:FileSignature"/>
                    <xs:field xpath="mf:OrdinalNumber"/>
                </xs:unique>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ArrayOfFileSignatureType">
        <xs:sequence>
            <xs:element name="Packaging">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="SplitZip">
                            <xs:complexType>
                                <xs:attribute name="type" use="required" fixed="split"/>
                                <xs:attribute name="mode" use="required" fixed="zip"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="Encryption">
                <xs:complexType>
                    <xs:choice>
                        <xs:element name="AES">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="IV">
                                        <xs:complexType>
                                            <xs:simpleContent>
                                                <xs:restriction base="mf:EncryptionAESIVType">
                                                    <xs:minLength value="24"/>
                                                    <xs:maxLength value="24"/>
                                                </xs:restriction>
                                            </xs:simpleContent>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                                <xs:attribute name="size" type="xs:int" use="required" fixed="256"/>
                                <xs:attribute name="block" type="xs:int" use="required" fixed="16"/>
                                <xs:attribute name="mode" use="required" fixed="CBC"/>
                                <xs:attribute name="padding" use="required" fixed="PKCS#7"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="FileSignature" type="mf:FileSignatureType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="FileSignatureType">
        <xs:sequence>
            <xs:element name="OrdinalNumber">
                <xs:simpleType>
                    <xs:restriction base="xs:int">
                        <xs:minInclusive value="1"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="FileName" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[a-zA-Z0-9_\.\-]{5,55}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="ContentLength" type="xs:int" minOccurs="1" maxOccurs="1"/>
            <xs:element name="HashValue">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:restriction base="mf:HashValueMD5Type">
                            <xs:minLength value="24"/>
                            <xs:maxLength value="24"/>
                        </xs:restriction>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="HashValueSHAType">
        <xs:simpleContent>
            <xs:extension base="xs:token">
                <xs:attribute name="algorithm" use="required" fixed="SHA-256"/>
                <xs:attribute name="encoding" use="required" fixed="Base64"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="HashValueMD5Type">
        <xs:simpleContent>
            <xs:extension base="xs:token">
                <xs:attribute name="algorithm" use="required" fixed="MD5"/>
                <xs:attribute name="encoding" use="required" fixed="Base64"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="EncryptionAESIVType">
        <xs:simpleContent>
            <xs:extension base="xs:token">
                <xs:attribute name="bytes" use="required" fixed="16"/>
                <xs:attribute name="encoding" use="required" fixed="Base64"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="EncryptionKeyRSAType">
        <xs:simpleContent>
            <xs:extension base="xs:token">
                <xs:attribute name="algorithm" use="required" fixed="RSA"/>
                <xs:attribute name="mode" use="required" fixed="ECB"/>
                <xs:attribute name="padding" use="required" fixed="PKCS#1"/>
                <xs:attribute name="encoding" use="required" fixed="Base64"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:schema>
