<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.egis-online.de/EBC/schema/InvoiceQueryResponse"
    xmlns="http://www.egis-online.de/EBC/schema/InvoiceQueryResponse"
    elementFormDefault="qualified">
    <xs:element name="InvoiceQueryResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TransactionHeader"/>
                <xs:element name="Invoice" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Header"/>
                            <xs:element ref="Body"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="TransactionHeader">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="VersionId" type="xs:decimal"/>
                <xs:element name="GenerationDateTime" type="xs:dateTime"/>
                <xs:element ref="Exception" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="DocumentReference">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="PurchaseOrderReference" maxOccurs="unbounded"/>
                <xs:element ref="DeliveryNoteReference" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="DeliveryNoteReference">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryDeliveryNoteIdentifier"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryDeliveryNoteIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="ProprietaryDeliveryNoteId"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryDeliveryNoteId" type="xs:positiveInteger"/>
    <xs:element name="DistributorInvoiceIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorInvoiceNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="DistributorInvoiceNumber" type="xs:string"/>
    <xs:element name="PurchaseOrderReference">
        <xs:complexType>
			<xs:choice>
				<xs:sequence>
					<xs:element ref="ProprietaryPurchaseOrderIdentifier"/>
					<xs:element ref="PartnerPurchaseOrderIdentifier" minOccurs="0" maxOccurs="1"/>
				</xs:sequence>
				<xs:element ref="PurchaseOrderLineItemReference"/>
			</xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="PartnerPurchaseOrderIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="PartnerPurchaseOrderNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="PartnerPurchaseOrderNumber" type="xs:string" nillable="true"/>
    <xs:element name="PurchaseOrderLineItemReference">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryPurchaseOrderLineNumber"/>
				<xs:element ref="ProductIdentification"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryPurchaseOrderLineNumber" type="xs:positiveInteger"/>
    <xs:element name="InvoiceReference">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryInvoiceIdentifier"/>
                <xs:element ref="DistributorInvoiceIdentifier"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryInvoiceIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ProprietaryInvoiceId" type="xs:positiveInteger"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryPurchaseOrderIdentifier">
        <xs:complexType>
            <xs:sequence>
				<xs:element ref="ProprietaryPurchaseOrderNumber"/>
                <xs:element ref="ProprietaryPurchaseOrderDate"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
	<xs:element name="ProprietaryPurchaseOrderNumber">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:maxLength value="10"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="ProprietaryPurchaseOrderDate" type="xs:date" nillable="true"/>
    <xs:element name="Header">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="InvoiceReference"/>
                <xs:element ref="DocumentReference"/>
                <xs:element ref="BillingAdress" minOccurs="0"/>
                <xs:element ref="InvoiceInformation"/>
				<xs:element ref="DistributorDescription"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Body">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="LineItem"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="LineItem">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryLineNumber"/>
                <xs:element ref="DocumentReference" minOccurs="0"/>
                <xs:element ref="ProductIdentification" minOccurs="0"/>
                <xs:element ref="Quantity"/>
                <xs:element ref="UnitPrice"/>
                <xs:element ref="GrossTotalPrice" minOccurs="0"/>
                <xs:element ref="NetTotalPrice" minOccurs="0"/>
                <xs:element ref="VATAmount" minOccurs="0"/>
                <xs:element ref="VATRate"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryLineNumber" type="xs:integer"/>
    <xs:element name="ProductIdentification">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryProductNumber" minOccurs="0"/>
                <xs:element ref="ProprietaryProductDescription" minOccurs="0"/>
                <xs:element ref="DistributorProductNumber"/>
                <xs:element ref="DistributorProductDescription"/>
                <xs:element ref="ManufacturerName" minOccurs="0"/>
                <xs:element ref="ManufacturerProductNumber"/>
                <xs:element ref="GlobalProductNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryProductNumber" type="xs:string" nillable="true"/>
    <xs:element name="ProprietaryProductDescription" type="xs:string" nillable="true"/>
    <xs:element name="DistributorProductNumber" type="xs:string"/>
    <xs:element name="DistributorProductDescription" type="xs:string"/>
    <xs:element name="ManufacturerName" nillable="true">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="id" type="xs:positiveInteger"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="ManufacturerProductNumber" type="xs:string" nillable="true"/>
    <xs:element name="GlobalProductNumber" type="xs:string" nillable="true"/>
    <xs:element name="Quantity">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="InvoicedQuantity"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="InvoicedQuantity" type="xs:integer"/>
    <xs:element name="UnitPrice">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="MonetaryAmount"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="GrossTotalPrice">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="MonetaryAmount"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="NetTotalPrice">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="MonetaryAmount"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="VATAmount">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="MonetaryAmount"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="VATRate" type="xs:decimal"/>
    <xs:element name="MonetaryAmount" type="xs:decimal" nillable="true"/>
    <xs:element name="InvoiceInformation">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="InvoiceDate" type="xs:date"/>
                <xs:element name="CurrencyCode" type="xs:string" minOccurs="0" nillable="true"/>
                <xs:element name="GrossInvoiceAmount" >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="MonetaryAmount"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="NetInvoiceAmount" >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="MonetaryAmount"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="VATAmount" >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="MonetaryAmount"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="CurrencyCode" type="xs:string" minOccurs="0" nillable="true"/>
                <xs:element name="VATRegistrationNumber" type="xs:string" minOccurs="0" nillable="true"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="BillingAdress">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Address" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ContactInformation">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ContactName"/>
                <xs:element ref="EmailAddress"/>
                <xs:element ref="TelefonNumber"/>
                <xs:element ref="FacsimileNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ContactName">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="40"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="EmailAddress">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="50"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="TelefonNumber" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="25"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="FacsimileNumber" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="25"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Address">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Name1"/>
                <xs:element ref="Name2"  minOccurs="0"/>
                <xs:element ref="Name3"  minOccurs="0"/>
                <xs:element ref="Street"/>
                <xs:element ref="City"/>
                <xs:element ref="PostalCode"/>
                <xs:element ref="GlobalCountryCode" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Name1">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:minLength value="1"/>
                <xs:maxLength value="40"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Name2" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="35"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Name3" nillable="true">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="35"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="Street">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="50"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="City">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="35"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="PostalCode">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="GlobalCountryCode" type="xs:string"/>
    <xs:element name="Exception">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ErrorNumber" type="xs:int"/>
                <xs:element name="ErrorMessage" type="xs:string"/>
                <xs:element name="ErrorDescription" type="xs:string" nillable="true"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
	<xs:element name="DistributorDescription">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="DistributorName"/>
                <xs:element ref="ProprietaryDistributorIdentifier"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="DistributorName">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="35"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="ProprietaryDistributorIdentifier">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="ProprietaryDistributorNumber"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ProprietaryDistributorNumber">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>