<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

	<xs:annotation>
		<xs:documentation>
			Docura XML — INVOICE. Sent by the supplier to the buyer.
			UTF-8, one invoice per file. Dates CCYY-MM-DD, decimal separator ".".
			See wiki page Docura_XML_INVOICE for field descriptions.
		</xs:documentation>
	</xs:annotation>

	<!-- ============ Common types ============ -->

	<xs:simpleType name="ILNType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9]{13}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="EANType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9]{13,14}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="CountryType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[A-Z]{2}"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="DocumentFunctionCodeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="9"/>
			<xs:enumeration value="4"/>
			<xs:enumeration value="3"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="TaxCategoryCodeType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="S"/>
			<xs:enumeration value="Z"/>
			<xs:enumeration value="E"/>
			<xs:enumeration value="O"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="BankInfoType">
		<xs:sequence>
			<xs:element name="BankName" type="xs:string" minOccurs="0"/>
			<xs:element name="Swift" type="xs:string" minOccurs="0"/>
			<xs:element name="BankAccNumber" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

	<!-- Full party (Buyer, Seller) -->
	<xs:complexType name="PartyType">
		<xs:sequence>
			<xs:element name="ILN" type="ILNType"/>
			<xs:element name="TaxID" type="xs:string" minOccurs="0"/>
			<xs:element name="Name" type="xs:string" minOccurs="0"/>
			<xs:element name="StreetAndNumber" type="xs:string" minOccurs="0"/>
			<xs:element name="CityName" type="xs:string" minOccurs="0"/>
			<xs:element name="PostalCode" type="xs:string" minOccurs="0"/>
			<xs:element name="Country" type="CountryType" minOccurs="0"/>
			<xs:element name="BankInfo" type="BankInfoType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

	<!-- ============ Root ============ -->

	<xs:element name="Document-Invoice">
		<xs:complexType>
			<xs:sequence>

				<xs:element name="Invoice-Header">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="InvoiceNumber" type="xs:string"/>
							<xs:element name="InvoiceDate" type="xs:date"/>
							<xs:element name="InvoiceCurrency" type="xs:string"/>
							<xs:element name="InvoicePaymentDueDate" type="xs:date" minOccurs="0"/>
							<xs:element name="DocumentFunctionCode" type="DocumentFunctionCodeType"/>
							<xs:element name="Remarks" type="xs:string" minOccurs="0"/>
							<xs:element name="Order" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="BuyerOrderNumber" type="xs:string" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Reference" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="ContractNumber" type="xs:string" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Delivery" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="DeliveryLocationNumber" type="ILNType" minOccurs="0"/>
										<xs:element name="Name" type="xs:string" minOccurs="0"/>
										<xs:element name="StreetAndNumber" type="xs:string" minOccurs="0"/>
										<xs:element name="CityName" type="xs:string" minOccurs="0"/>
										<xs:element name="PostalCode" type="xs:string" minOccurs="0"/>
										<xs:element name="Country" type="CountryType" minOccurs="0"/>
										<xs:element name="DeliveryDate" type="xs:date" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>

				<xs:element name="Document-Parties">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Sender">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="ILN" type="ILNType"/>
										<xs:element name="Name" type="xs:string" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Receiver">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="ILN" type="ILNType"/>
										<xs:element name="Name" type="xs:string" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="Creator" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Name" type="xs:string" minOccurs="0"/>
										<xs:element name="TelephoneNumber" type="xs:string" minOccurs="0"/>
										<xs:element name="E-mail" type="xs:string" minOccurs="0"/>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>

				<xs:element name="Invoice-Parties">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Buyer" type="PartyType"/>
							<xs:element name="Seller" type="PartyType"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>

				<xs:element name="Invoice-Lines">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Line" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Line-Item">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="LineNumber" type="xs:string"/>
													<xs:element name="EAN" type="EANType" minOccurs="0"/>
													<xs:element name="SupplierItemCode" type="xs:string" minOccurs="0"/>
													<xs:element name="ItemDescription" type="xs:string" minOccurs="0"/>
													<xs:element name="ItemType" type="xs:string" minOccurs="0"/>
													<xs:element name="InvoiceQuantity" type="xs:decimal"/>
													<xs:element name="InvoiceUnitNetPrice" type="xs:decimal" minOccurs="0"/>
													<xs:element name="UnitOfMeasure" type="xs:string" minOccurs="0"/>
													<xs:element name="TaxRate" type="xs:decimal" minOccurs="0"/>
													<xs:element name="TaxCategoryCode" type="TaxCategoryCodeType" minOccurs="0"/>
													<xs:element name="TaxAmount" type="xs:decimal" minOccurs="0"/>
													<xs:element name="NetAmount" type="xs:decimal" minOccurs="0"/>
													<xs:element name="GrossAmount" type="xs:decimal" minOccurs="0"/>
													<xs:element name="ExpirationDate" type="xs:date" minOccurs="0"/>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>

				<xs:element name="Invoice-Summary">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="TotalLines" type="xs:nonNegativeInteger"/>
							<xs:element name="TotalNetAmount" type="xs:decimal"/>
							<xs:element name="TotalTaxAmount" type="xs:decimal" minOccurs="0"/>
							<xs:element name="TotalGrossAmount" type="xs:decimal" minOccurs="0"/>
							<xs:element name="Tax-Summary" minOccurs="0">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="Tax-Summary-Line" maxOccurs="unbounded">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="TaxRate" type="xs:decimal"/>
													<xs:element name="TaxCategoryCode" type="TaxCategoryCodeType"/>
													<xs:element name="TaxAmount" type="xs:decimal"/>
													<xs:element name="TaxableAmount" type="xs:decimal"/>
												</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:schema>
