<?xml version="1.0"?>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
            elementFormDefault="qualified">

  <!-- ///////////////////////////////////////////////////////// -->
  <!--                            XMLInvoice                     -->
  <!--                                                           -->
  <!-- This structure defines the XMLInvoice structure used in   -->
  <!-- INVOICES by ReadSoft                                      -->
  <!--                                                           -->
  <!-- Version: 5-3                                              -->
  <!--                                                           -->
  <!-- History:                                                  -->
  <!-- 2005-02-25 - Created                                      -->
  <!--                                                           -->
  <!-- ///////////////////////////////////////////////////////// -->

  <!-- Invoice definition -->  

  <xsd:complexType name='EMail' mixed='true'>
    <xsd:attribute name='Type' type='xsd:string'/>
  </xsd:complexType>

  <xsd:complexType name='TableRow'>
    <xsd:sequence>
      <xsd:element name='Field' type='Field' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='Table'>
    <xsd:sequence>
      <xsd:element name='TableRow' type='TableRow' minOccurs='0' maxOccurs='unbounded'/>
    </xsd:sequence>
    <xsd:attribute name='Type' type='xsd:string' use='required'/>
  </xsd:complexType>

  <xsd:complexType name='Tables'>
    <xsd:sequence>
      <xsd:element name='Table' type='Table' minOccurs='0' maxOccurs='3'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='Field' mixed='true'>
    <xsd:attribute name='Name' type='xsd:string'/>
    <xsd:attribute name='Type' type='xsd:string' use='required'/>
    <xsd:attribute name='Format' type='xsd:string'/>
  </xsd:complexType>

  <xsd:complexType name='Fields'>
    <xsd:sequence>
      <xsd:element name='Field' type='Field' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='System'>
    <xsd:sequence>
      <xsd:element name='Field' type='Field' minOccurs='1' maxOccurs='unbounded'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='ProcessMessage'>
    <xsd:sequence>
    <xsd:element name='TimeStamp' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    <xsd:element name='Type' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    <xsd:element name='Module' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    <xsd:element name='Action' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    <xsd:element name='Owner' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    <xsd:element name='sMessage' type='xsd:string' minOccurs='1' maxOccurs='1'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='ProcessLog'>
    <xsd:sequence>
      <xsd:element name='ProcessMessage' type='ProcessMessage' minOccurs='0' maxOccurs='unbounded'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='PartyType'>
    <xsd:sequence>
      <xsd:element name='Name' type='xsd:string' minOccurs='1' maxOccurs='1'/>
      <xsd:element name='Identifier' type='xsd:string' minOccurs='0'/>
      <xsd:element name='Number' type='xsd:string' minOccurs='0'/>
      <xsd:element name='Description' type='xsd:string' minOccurs='0'/>
      <xsd:element name='CorporateGroupNumber' type='xsd:string' minOccurs='0'/>
      <xsd:element name='POBox' type='xsd:string' minOccurs='0'/>
      <xsd:element name='Street' type='xsd:string' minOccurs='0'/>
      <xsd:element name='StreetSupplement' type='xsd:string' minOccurs='0'/>
      <xsd:element name='PostalCode' type='xsd:string' minOccurs='0'/>
      <xsd:element name='City' type='xsd:string' minOccurs='0'/>
      <xsd:element name='CountryCode' type='xsd:string' minOccurs='0'/>
      <xsd:element name='CountryName' type='xsd:string' minOccurs='0'/>
      <xsd:element name='TelephoneNumber' type='xsd:string' minOccurs='0'/>
      <xsd:element name='FaxNumber' type='xsd:string' minOccurs='0'/>
      <xsd:element name='VATRegistrationNumber' type='xsd:string' minOccurs='0'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='Invoice'>
    <xsd:sequence>
      <xsd:element name='Supplier' type='PartyType' minOccurs='1' maxOccurs='1'/>
      <xsd:element name='Buyer' type='PartyType' minOccurs='1' maxOccurs='1'/>
      <xsd:element name='Fields' type='Fields' minOccurs='1' maxOccurs='1'/>
      <xsd:element name='Tables' type='Tables' minOccurs='0' maxOccurs='1'/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name='Document'>
    <xsd:sequence>
      <xsd:element name='Invoice' type='Invoice' minOccurs='1' maxOccurs='unbounded'/>
      <xsd:element name='System' type='System' minOccurs='0' maxOccurs='1'/>
      <xsd:element name='ProcessLog' type='ProcessLog' minOccurs='1' maxOccurs='1'/>
    </xsd:sequence>
    <xsd:attribute name='DocumentReference' type='xsd:string' use='required'/>
    <xsd:attribute name='ImageReference' type='xsd:string' use='required'/>
    <xsd:attribute name='CertificateReference' type='xsd:string' use='required'/>
    <xsd:attribute name='Version' type='xsd:string' use='required'/>
    <xsd:attribute name='Name' type='xsd:string' use='required'/>
    <xsd:attribute name='Type' type='xsd:string' use='required'/>
  </xsd:complexType>

  <xsd:element name='Documents'>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name='Document' type='Document' minOccurs='1' maxOccurs='unbounded'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

