<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="Invoice" type="Invoice"/>
 <xs:complexType name="Invoice">
  <xs:sequence>
   <xs:element name="InvoiceHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element default="2.0" name="Version" type="xs:string"/>
      <xs:element name="CountryCode" type="xs:string"/>
      <xs:element name="AccountNumber" type="xs:string"/>
      <xs:element name="InvoiceType">
       <xs:simpleType>
        <xs:restriction base="xs:string">
         <xs:enumeration value="Invoice"/>
         <xs:enumeration value="Credit Memo"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element name="InvoiceNumber" type="xs:string"/>
      <xs:element name="InvoiceDate">
       <xs:simpleType>
        <xs:restriction base="xs:dateTime">
         <xs:pattern value="([\-]?|([1-9][0-9]*)*)[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9](Z|[\-+][0-9][0-9]:[0-9][0-9])?"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element name="OrderEntryDate">
       <xs:simpleType>
        <xs:restriction base="xs:dateTime">
         <xs:pattern value="([\-]?|([1-9][0-9]*)*)[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9](Z|[\-+][0-9][0-9]:[0-9][0-9])?"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element name="CustomerPO" type="xs:string"/>
      <xs:element name="SalesOrderNumber" type="xs:string"/>
      <xs:element minOccurs="0" name="EndUserPO" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element maxOccurs="4" minOccurs="4" name="Address">
    <xs:complexType>
     <xs:sequence>
      <xs:element minOccurs="0" name="FulfilmentFlag">
       <xs:simpleType>
        <xs:restriction base="xs:string">
         <xs:enumeration value="Y"/>
         <xs:enumeration value="N"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="AddressID" type="xs:string"/>
      <xs:element minOccurs="0" name="Attention" type="xs:string"/>
      <xs:element minOccurs="0" name="VATNumber" type="xs:string"/>
      <xs:element name="Name" type="xs:string"/>
      <xs:element name="AddressLine1" type="xs:string"/>
      <xs:element minOccurs="0" name="AddressLine2" type="xs:string"/>
      <xs:element minOccurs="0" name="AddressLine3" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element minOccurs="0" name="Province" type="xs:string"/>
      <xs:element minOccurs="0" name="PostalCode" type="xs:string"/>
      <xs:element minOccurs="0" name="CountryCode" type="xs:string"/>
     </xs:sequence>
     <xs:attribute name="Type" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="Customer"/>
        <xs:enumeration value="RemitTo"/>
        <xs:enumeration value="ShipTo"/>
        <xs:enumeration value="ShipFrom"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:complexType>
   </xs:element>
   <xs:element name="Currency">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="CurrencyCode" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="PaymentTerms">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="TermsCode" type="xs:string"/>
      <xs:element name="TermsDescription" type="xs:string"/>
      <xs:element name="TermsNetDays">
       <xs:simpleType>
        <xs:restriction base="xs:decimal">
         <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element name="PaymentDueDate">
       <xs:simpleType>
        <xs:restriction base="xs:dateTime">
         <xs:pattern value="([\-]?|([1-9][0-9]*)*)[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9](Z|[\-+][0-9][0-9]:[0-9][0-9])?"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="AvailableDiscounts">
    <xs:complexType>
     <xs:sequence>
      <xs:element minOccurs="0" name="TermsDiscountPercent" type="xs:decimal"/>
      <xs:element minOccurs="0" name="TermsDiscountDays">
       <xs:simpleType>
        <xs:restriction base="xs:decimal">
         <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="TermsDiscountDueDate">
       <xs:simpleType>
        <xs:restriction base="xs:dateTime">
         <xs:pattern value="([\-]?|([1-9][0-9]*)*)[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9](Z|[\-+][0-9][0-9]:[0-9][0-9])?"/>
        </xs:restriction>
       </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="TermsDiscountAmount" type="xs:decimal"/>
      <xs:element minOccurs="0" name="CashDiscountPercent" type="xs:decimal"/>
      <xs:element minOccurs="0" name="CashDiscountAmount" type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="AdditionalInformation">
    <xs:complexType>
     <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="Item">
       <xs:complexType>
        <xs:simpleContent>
         <xs:extension base="xs:string">
          <xs:attribute name="Name" type="xs:string" use="required"/>
         </xs:extension>
        </xs:simpleContent>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="HeaderCommentHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="HeaderComment" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="LineItemHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="LineItem">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="Product">
          <xs:complexType>
           <xs:sequence>
            <xs:element name="IngramPartNumber" type="xs:string"/>
            <xs:element name="UPC" type="xs:string"/>
            <xs:element name="ManufacturerPartNumber" type="xs:string"/>
            <xs:element name="CustomerPartNumber" type="xs:string"/>
            <xs:element name="ProductDescriptionHeader">
             <xs:complexType>
              <xs:sequence>
               <xs:element maxOccurs="unbounded" name="ProductDescription" type="xs:string"/>
              </xs:sequence>
             </xs:complexType>
            </xs:element>
            <xs:element name="ProductCommentHeader">
             <xs:complexType>
              <xs:sequence>
               <xs:element maxOccurs="unbounded" minOccurs="0" name="ProductComment" type="xs:string"/>
              </xs:sequence>
             </xs:complexType>
            </xs:element>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="SerialNumberHeader">
          <xs:complexType>
           <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="ProductSerialNumbers">
             <xs:complexType>
              <xs:sequence>
               <xs:element maxOccurs="unbounded" name="SerialNumber">
                <xs:complexType>
                 <xs:simpleContent>
                  <xs:extension base="xs:string">
                   <xs:attribute name="Type" type="xs:string" use="required"/>
                  </xs:extension>
                 </xs:simpleContent>
                </xs:complexType>
               </xs:element>
              </xs:sequence>
             </xs:complexType>
            </xs:element>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="LineMonetaryInfo">
          <xs:complexType>
           <xs:sequence>
            <xs:element name="UnitPrice" type="xs:decimal"/>
            <xs:element name="LineItemAmount" type="xs:decimal"/>
            <xs:element name="UnitPriceIncFees" type="xs:decimal"/>
            <xs:element name="LineItemAmountIncFees" type="xs:decimal"/>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="Tax" type="Tax"/>
         <xs:element name="FeeItemHeader">
          <xs:complexType>
           <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="FeeItem">
             <xs:complexType>
              <xs:sequence>
               <xs:element name="FeeDescription" type="xs:string"/>
               <xs:element name="FeePerUnit" type="xs:decimal"/>
               <xs:element name="TotalLineFeeAmount" type="xs:decimal"/>
               <xs:element name="Tax" type="Tax"/>
              </xs:sequence>
              <xs:attribute name="ChargeLineNumber" use="required">
               <xs:simpleType>
                <xs:restriction base="xs:decimal">
                 <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
                </xs:restriction>
               </xs:simpleType>
              </xs:attribute>
              <xs:attribute name="ChargeCode" type="xs:string" use="required"/>
              <xs:attribute name="InvoicedQuantity" use="required">
               <xs:simpleType>
                <xs:restriction base="xs:decimal">
                 <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
                </xs:restriction>
               </xs:simpleType>
              </xs:attribute>
             </xs:complexType>
            </xs:element>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="IntrastatCode" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="IngramLineNumber" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="CustomerLineNumber">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="InvoicedQuantity" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="MiscellaneousChargeItemHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="MiscellaneousChargeItem">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="Charge">
          <xs:complexType>
           <xs:sequence>
            <xs:element name="ChargeDescriptionHeader">
             <xs:complexType>
              <xs:sequence>
               <xs:element maxOccurs="unbounded" name="ChargeDescription" type="xs:string"/>
              </xs:sequence>
             </xs:complexType>
            </xs:element>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="LineMonetaryInfo">
          <xs:complexType>
           <xs:sequence>
            <xs:element name="UnitPrice" type="xs:decimal"/>
            <xs:element name="LineItemAmount" type="xs:decimal"/>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
         <xs:element name="Tax" type="Tax"/>
        </xs:sequence>
        <xs:attribute name="ChargeLineNumber" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="InvoicedQuantity" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:pattern value="(?=[\-+]?[0-9]+\z)([\-+]?\d+(\.)?)"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="TaxRateSummaryHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="TaxRateSummary">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="TaxableAmount" type="xs:decimal"/>
         <xs:element name="TaxAmount" type="xs:decimal"/>
         <xs:element maxOccurs="unbounded" minOccurs="0" name="DestinationTaxReporting">
          <xs:complexType mixed="true">
           <xs:sequence>
            <xs:element minOccurs="0" name="CurrencyCode" type="xs:string"/>
            <xs:element minOccurs="0" name="ExchangeRate" type="xs:decimal"/>
            <xs:element minOccurs="0" name="TaxableAmount" type="xs:decimal"/>
            <xs:element minOccurs="0" name="TaxAmount" type="xs:decimal"/>
           </xs:sequence>
          </xs:complexType>
         </xs:element>
        </xs:sequence>
        <xs:attribute name="TaxPercentage" type="xs:decimal" use="required"/>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element maxOccurs="unbounded" name="TotalInformation">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="TotalInformation">
       <xs:attribute name="Type" type="xs:string" use="required"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
   <xs:element maxOccurs="unbounded" name="TotalFinancial">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="TotalFinancial">
       <xs:attribute name="Type" type="xs:string" use="required"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
   <xs:element maxOccurs="unbounded" name="Final">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="Final">
       <xs:attribute name="Type" type="xs:string" use="required"/>
       <xs:attribute name="LocalCurrencyCode" type="xs:string"/>
       <xs:attribute name="ExchangeRate" type="xs:decimal"/>
       <xs:attribute name="DestinationExchangeRate" type="xs:decimal"/>
       <xs:attribute name="DestinationCurrencyCode">
        <xs:simpleType>
         <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
         </xs:restriction>
        </xs:simpleType>
       </xs:attribute>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="TotalInformation">
  <xs:restriction base="xs:decimal"/>
 </xs:simpleType>
 <xs:simpleType name="TotalFinancial">
  <xs:restriction base="xs:decimal"/>
 </xs:simpleType>
 <xs:simpleType name="Final">
  <xs:restriction base="xs:decimal"/>
 </xs:simpleType>
 <xs:complexType name="Tax">
  <xs:sequence>
   <xs:element name="TaxPercentage" type="xs:decimal"/>
   <xs:element name="TaxAmount" type="xs:decimal"/>
   <xs:element minOccurs="0" name="TaxExemptionDetailHeader">
    <xs:complexType>
     <xs:sequence>
      <xs:element minOccurs="0" name="TaxExemptionDetail1" type="xs:string"/>
      <xs:element minOccurs="0" name="TaxExemptionDetail2" type="xs:string"/>
      <xs:element minOccurs="0" name="TaxExemptionDetail3" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="TaxType" type="xs:string" use="required"/>
 </xs:complexType>
</xs:schema>
