<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="0.5">
    <xs:element name="DocumentPassport">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="DocumentType" type="string255" minOccurs="0"/>
                <xs:element name="DocumentNumber" type="string255" minOccurs="0"/>
                <xs:element name="DocumentDate" type="date" minOccurs="0"/>
                <xs:element name="DocumentVerification" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="VerificationSystem" type="string36"/>
                            <xs:element name="VerificationDate" type="xs:dateTime"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="OriginalFileName" type="string255" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Имя иходного файла документа. Например для УПД
                            ON_NSCHFDOPPR_2IJ1C99AE8A6E604C55BAE8837B1F1C26F1_2BEa799b7ec06894ca2935ca0db205f0a0e_20200317_f09b612d-659e-4afd-9eff-e99316e45183.xml,
                            для ДСФ же имя файла вложения
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="AttachmentFileName" type="string255" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>именя файла влложения, используется при обмене
                            ДСФ
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="AttachmentFileExtension" type="string255" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Расщирение имени файла влложения, используется при обмене
                            ДСФ
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Project" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Инфомрация о проекте, в рамках которого совершается
                            документооборот. Хараткерно для проектов ООО "Тандер"
                            оборудование/акты-премий/закурпка товаров или что бы выделить отдельный
                            проект, например проект для торговой сети ООО
                            "Максидом".
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="ProjectName" type="string36" minOccurs="0"/>
                            <xs:element name="ProjectId" type="xs:integer" minOccurs="0"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element ref="Signatures" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Инфомракция о подписях к файлу (OriginalFileName), для
                            ЮЗДО документов
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DocumentUUID" minOccurs="0" type="uuid">
                    <xs:annotation>
                        <xs:documentation>Уникальный иденитфикатор документа в формате
                            UUID
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DocFlowID" minOccurs="0" type="uuid">
                    <xs:annotation>
                        <xs:documentation>Идентификатор документооборота, в разрезе документа.
                            Правила использования идентификатора
                            http://confluence.jira.lan:8090/pages/viewpage.action?pageId=1380409
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="AdditionalData" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Row" minOccurs="0" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element ref="Reference" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Инфомрация о родительском документе. Для ФНС квитнации
                            -это инфо о УПД, для LEGACY_DES_ADV можно отразить инфо о LEGACY_ORDER.
                            Есть свзяь с функциональностью
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DocumentParties" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Блок информации об организации-отправителе и
                            организации-получателе документа
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Sender" minOccurs="0"/>
                            <xs:element ref="Receiver" minOccurs="0"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Marks" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Отметка системы работавшей с документом. Может
                            использоваться на всем интеграционном маршурте от выгрузки из исходной
                            интегриционной до загрузки в конечную систему
                        </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Mark" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="NamesBeforeExport" minOccurs="0" type="xs:boolean">
                    <xs:annotation>
                        <xs:documentation>
                            Пометка о том, новый это паспорт или нет
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Reference">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="DocumentReferenceDate" type="date" minOccurs="0"/>
                <xs:element name="DocumentReferenceNumber" type="string36"/>
                <xs:element name="DocumentReferenceType" type="string36"/>
                <xs:element ref="ReferenceElements" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Блок дополнительной информации о родительском документе
                            (UUID/UD/Filename and Other). Иными словом любые
                            атрибуты.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ReferenceElements">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
                <xs:element ref="ReferenceElement"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ReferenceElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Reference-Type" type="string36"/>
                <xs:element name="Reference-Id" type="string255" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Mark">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SystemID" type="string36">
                    <xs:annotation>
                        <xs:documentation>Идентификатор системы которая обрабатывает
                            документ
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="SystemDocumentID" type="xs:integer" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Системный идентификтор документа</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ParentDocumentID" type="xs:integer" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Системный идентификтор родительского
                            документа
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="SystemDocumentUUID" type="string36" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>UUID документа в системе, при наличии. Опциональное
                            поле
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="DocumentSource" type="Protocol" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Способ создания документа - UI или интегарция.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="SourceProtocol" type="TransportProtocol" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Прикалдной транспортный протокол который использовался при
                            получении документа
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ReadByReceiver" type="Protocol" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Способ получения контена документа от лица
                            организации-получателя
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ReadByReceiverProtocol" type="TransportProtocol" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Прикалдной транспортный протокол который использовался при
                            отправке документа с платформы
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Timestamps" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Timestamp" minOccurs="0" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="InboxIntergrationChannelID" minOccurs="0" type="xs:integer">
                    <xs:annotation>
                        <xs:documentation>Идентификатор входящего канала интеграции для платфомры
                            формирующею метку
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="OutboxIntergrationChannelID" minOccurs="0" type="xs:integer">
                    <xs:annotation>
                        <xs:documentation>Идентификатор исходящего канала интеграции для системы
                            формирующею метку
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>

                <xs:element name="AdditionalData" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Row" minOccurs="0" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Timestamp">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Type" type="TimestampValueType">
                    <xs:annotation>
                        <xs:documentation>Тип временной метки. Например время поступления документа
                            на платформу или время завершения обработки документа
                            обработчиком
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Value" type="xs:dateTime"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Sender">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ILN" minOccurs="0"/>
                <xs:element ref="INN" minOccurs="0"/>
                <xs:element ref="Name" minOccurs="0"/>
                <xs:element ref="FNSID" minOccurs="0"/>
                <xs:element ref="VatNumber" minOccurs="0"/>
                <xs:element ref="ReasonRegNumber" minOccurs="0"/>
                <xs:element ref="OrgType" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute type="xs:string" name="LastName" use="optional"/>
            <xs:attribute type="xs:string" name="FirstName" use="optional"/>
            <xs:attribute type="xs:string" name="SecondName" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="Receiver">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ILN" minOccurs="0"/>
                <xs:element ref="INN" minOccurs="0"/>
                <xs:element ref="Name" minOccurs="0"/>
                <xs:element ref="FNSID" minOccurs="0"/>
                <xs:element ref="VatNumber" minOccurs="0"/>
                <xs:element ref="ReasonRegNumber" minOccurs="0"/>
                <xs:element ref="OrgType" minOccurs="0"/>
            </xs:sequence>
            <xs:attribute type="xs:string" name="LastName" use="optional"/>
            <xs:attribute type="xs:string" name="FirstName" use="optional"/>
            <xs:attribute type="xs:string" name="SecondName" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="ILN" type="ILN"/>
    <xs:element name="INN" type="INN"/>
    <xs:element name="FNSID" type="string3-46"/>
    <xs:element name="Name" type="string255"/>


    <xs:element name="Signatures">
        <xs:annotation>
            <xs:documentation>Подписи к ЮЗДО дкоументу</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Signature" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="SequenceNumber" type="xs:integer" minOccurs="0">
                                <xs:annotation>
                                    <xs:documentation>Порядок подписи</xs:documentation>
                                </xs:annotation>
                            </xs:element>
                            <xs:element name="FileName" type="string255">
                                <xs:annotation>
                                    <xs:documentation>Имя файла подписи</xs:documentation>
                                </xs:annotation>
                            </xs:element>
                            <xs:element name="Signer" type="string36" minOccurs="0">
                                <xs:annotation>
                                    <xs:documentation>Чья подпись к документу,
                                        оптравтеля/получателя/покупателя/продавца. Свободное
                                        заполнение
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>
                            <xs:element name="PowerOfAttorney" minOccurs="0">
                                <xs:annotation>
                                    <xs:documentation>Данные о доверенности</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="Number" type="uuid"/>
                                        <xs:element name="INN" type="VatNumberType" minOccurs="0"/>
                                        <xs:element name="ConfidantINN" type="VatNumberType" minOccurs="0"/>
                                        <xs:element name="Issuers" minOccurs="0">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="Issuer" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="IssuerInn" type="VatNumberType"/>
                                                                <xs:element name="IssuerSnils" type="SnilsNumberType"  minOccurs="0"/>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="Confidants" minOccurs="0">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="Confidant" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="ConfidantInn" type="VatNumberType" minOccurs="0"/>
                                                                <xs:element name="ConfidantSnils" type="SnilsNumberType" minOccurs="0"/>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="SysStorInfo" type="string100" minOccurs="0"/>
                                        <xs:element name="PoaStatus" type="string255" minOccurs="0"/>
                                        <xs:element name="StartAt" type="xs:date" minOccurs="0"/>
                                        <xs:element name="EndAt" type="xs:date" minOccurs="0"/>
                                        <xs:element name="Powers" minOccurs="0">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="Power" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="Code" type="xs:string" minOccurs="0"/>
                                                                <xs:element name="Text" type="xs:string"/>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="ParentPoas" minOccurs="0" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="PoaNumber" type="uuid"/>
                                                    <xs:element name="OriginalPoaNumber" type="uuid" minOccurs="0"/>
                                                    <xs:element name="ParentPoaNumber" type="uuid" minOccurs="0"/>
                                                    <xs:element name="ChildPoaNumber" type="uuid" minOccurs="0" maxOccurs="unbounded"/>
                                                    <xs:element name="IssuerInn" type="VatNumberType"/>
                                                    <xs:element name="IssuerSnils" type="SnilsNumberType"  minOccurs="0"/>
                                                    <xs:element name="ConfidantInn" type="VatNumberType" minOccurs="0"/>
                                                    <xs:element name="ConfidantSnils" type="SnilsNumberType" minOccurs="0"/>
                                                    <xs:element name="SysStorInfo" type="string100" minOccurs="0"/>
                                                    <xs:element name="StartAt" type="xs:date" minOccurs="0"/>
                                                    <xs:element name="EndAt" type="xs:date" minOccurs="0"/>
                                                </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:element name="Row">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="DataType" type="string36"/>
                <xs:element name="DataValue" type="string255"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="VatNumber" type="VatNumberType"/>
    <xs:element name="ReasonRegNumber" type="ReasonRegNumberType"/>
    <xs:element name="OrgType" type="string36"/>
    <!--patterns-->
    <xs:simpleType name="date">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{4}-[0-9]{2}-[0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>
    <!--Types-->
    <xs:simpleType name="ILN">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{13}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="INN">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{10}|[0-9]{12}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="VatNumberType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{10}|[0-9]{12}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ReasonRegNumberType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{9}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="TimestampValueType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="DocumentReceiveDateTime"/>
            <xs:enumeration value="DocumentProcessDateTime"/>
            <xs:enumeration value="DocumentSentDateTime"/>
            <xs:enumeration value="DocumentReadDateTime"/>
            <xs:enumeration value="DocumentCreateDateTime"/>
            <xs:enumeration value="DocumentErrorDateTime"/>
            <xs:enumeration value="Other"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string3-46">
        <xs:restriction base="xs:string">
            <xs:minLength value="3"/>
            <xs:maxLength value="46"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string3">
        <xs:restriction base="xs:string">
            <xs:maxLength value="3"/>
            <xs:minLength value="0"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string36">
        <xs:restriction base="xs:string">
            <xs:maxLength value="36"/>
            <xs:minLength value="0"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string255">
        <xs:restriction base="xs:string">
            <xs:maxLength value="255"/>
            <xs:minLength value="0"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string100">
        <xs:restriction base="xs:string">
            <xs:maxLength value="100"/>
            <xs:minLength value="0"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Protocol">
        <xs:restriction base="xs:string">
            <xs:enumeration value="WEB"/>
            <xs:enumeration value="INTEGRATION"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="TransportProtocol">
        <xs:restriction base="xs:string">
            <xs:enumeration value="FTP"/>
            <xs:enumeration value="JMS"/>
            <xs:enumeration value="FOLDER"/>
            <xs:enumeration value="EMAIL"/>
            <xs:enumeration value="REST_API"/>
            <xs:enumeration value="SOAP"/>
            <xs:enumeration value="OTHER"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="uuid">
        <xs:restriction base="xs:string">
            <xs:pattern
                    value="([0-9]|[a-f]|[A-F]){8}-([0-9]|[a-f]|[A-F]){4}-([0-9]|[a-f]|[A-F]){4}-([0-9]|[a-f]|[A-F]){4}-([0-9]|[a-f]|[A-F]){12}"
            />

        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SnilsNumberType">
        <xs:annotation>
            <xs:documentation>Страховой номер индивидуального лицевого счета</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:length value="14"/>
            <xs:pattern value="[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{2}"/>
            <xs:pattern value="[0-9]{3}\-[0-9]{3}\-[0-9]{3} [0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>