<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cis="http://tribfe.ciscoop.cis/Schema_Fattura_SMImport.xsd"
           targetNamespace="http://tribfe.ciscoop.cis/Schema_Fattura_SMImport.xsd" 
           xmlns="http://tribfe.ciscoop.cis/Schema_Fattura_SMImport.xsd" 
         version="1.5">
 
  <xs:element name="FatturaElettronica"           type="cis:FatturaElettronicaType">
    <xs:annotation>
      <xs:documentation>XML schema fatture Import da OE</xs:documentation>
    </xs:annotation>
  </xs:element>
  
  <xs:complexType name="FatturaElettronicaType">
    <xs:sequence>
      <xs:element name="FatturaElettronicaHeader" type="cis:FatturaElettronicaHeaderType" />
      <xs:element name="FatturaElettronicaBody"   type="cis:FatturaElettronicaBodyType"  maxOccurs="unbounded" />
     </xs:sequence>
  </xs:complexType>
  <xs:complexType name="FatturaElettronicaHeaderType">
    <xs:sequence>
      <xs:element name="CedentePrestatore"        type="cis:CedentePrestatoreType" />
      <xs:element name="CessionarioCommittente"   type="cis:CessionarioCommittenteType" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="FatturaElettronicaBodyType">
    <xs:sequence>
      <xs:element name="DatiGenerali"    type="cis:DatiGeneraliType" />
      <xs:element name="DatiBeniServizi" type="cis:DatiBeniServiziType" />
      <xs:element name="Allegati"        type="AllegatiType"        minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="CodiceDestinatarioType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z0-9]{6,7}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="IdFiscaleType">
    <xs:sequence>
      <xs:element name="IdPaese"                  type="cis:NazioneType" />
      <xs:element name="IdCodice"                 type="cis:CodiceType" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="CodiceType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1" />
      <xs:maxLength value="28" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="DatiGeneraliType">
    <xs:annotation>
      <xs:documentation>
        Blocco relativo ai Dati Generali della Fattura Elettronica
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DatiGeneraliDocumento"    type="cis:DatiGeneraliDocumentoType" />
      <xs:element name="DatiFattureCollegate"	  type="cis:DatiDocumentiCorrelatiType" minOccurs="0" maxOccurs="unbounded" />
     </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DatiGeneraliDocumentoType">
    <xs:sequence>
      <xs:element name="Data"                     type="cis:DataFatturaType" />
      <xs:element name="Numero"                   type="String20Type" />
      <xs:element name="ImportoTotaleDocumento"   type="Amount2DecimalType"  minOccurs="0" />
      <xs:element name="RifContoLavoroPrimaDiBeni" type="RifContoLavoroPrimaDiBeniType" minOccurs="0" />
      <xs:element name="VariazioniContrattuali"	   type="VariazioniContrattualiType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DatiDocumentiCorrelatiType">
    <xs:sequence>
      <xs:element name="IdDocumento"               type="String20Type" />
      <xs:element name="Data"                      type="cis:DataFatturaType" />
    </xs:sequence>
  </xs:complexType>
  
  
  <xs:simpleType name="SoggettoEmittenteType">
    <xs:restriction base="xs:string">
      <xs:length value="2" />
      <xs:enumeration value="CC">
        <xs:annotation>
          <xs:documentation>Cessionario / Committente</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="TZ">
        <xs:annotation>
          <xs:documentation>Terzo</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="CedentePrestatoreType">
    <xs:annotation>
      <xs:documentation>
        Blocco relativo ai dati del Cedente / Prestatore
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DatiAnagrafici"           type="cis:DatiAnagraficiCedenteType" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DatiAnagraficiCedenteType">
    <xs:sequence>
      <xs:element name="IdFiscaleIVA"             type="cis:IdFiscaleType" />
      <xs:element name="CodiceFiscale"            type="cis:CodiceFiscaleType"  minOccurs="0" />
      <xs:element name="Anagrafica"               type="cis:AnagraficaType"  minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AnagraficaType">
    <xs:annotation>
      <xs:documentation>
        Il campo Denominazione Ã¨ in alternativa ai campi Nome e Cognome
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice>
        <xs:sequence>
          <xs:element name="Denominazione"        type="String80LatinType"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element name="Nome"                 type="String60LatinType"/>
          <xs:element name="Cognome"              type="String60LatinType"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="CessionarioCommittenteType">
    <xs:annotation>
      <xs:documentation>Blocco relativo ai dati del Cessionario / Committente</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DatiAnagrafici"           type="cis:DatiAnagraficiCessionarioType" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DatiAnagraficiCessionarioType">
    <xs:sequence>
      <xs:element name="IdFiscaleIVA"             type="cis:IdFiscaleType" />
      <xs:element name="CodiceFiscale"            type="cis:CodiceFiscaleType"  minOccurs="0" />
      <xs:element name="Anagrafica"               type="cis:AnagraficaType"  minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DatiBeniServiziType">
    <xs:annotation>
      <xs:documentation>
        Blocco relativo ai dati di Beni Servizi della Fattura Elettronica
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DettaglioLinee"           type="cis:DettaglioLineeType" maxOccurs="unbounded" />
      <xs:element name="DatiRiepilogo"            type="cis:DatiRiepilogoType"  maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="AllegatiType">
    <xs:annotation>
      <xs:documentation>Blocco relativo ai dati di eventuali allegati</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="NomeAttachment"        type="String60LatinType"                />
      <xs:element name="AlgoritmoCompressione" type="String10Type"       minOccurs="0" />
      <xs:element name="FormatoAttachment"     type="String10Type"       minOccurs="0" />
      <xs:element name="DescrizioneAttachment" type="String100LatinType" minOccurs="0" />
      <xs:element name="Attachment"            type="xs:base64Binary"                  />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="DettaglioLineeType">
    <xs:sequence>
      <xs:element name="NumeroLinea"              type="cis:NumeroLineaType" />
      <xs:element name="Nomenclatura"             type="cis:NomenclaturaType" minOccurs="0" />
      <xs:element name="DatiImporti"              type="cis:DatiImportiType"  minOccurs="1"  maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="DatiImportiType">
    <xs:sequence>
      <xs:element name="TipoMerce"                type="cis:TipoMerceType" />
      <xs:element name="Imponibile"               type="cis:ImpnibileType" />
      <xs:element name="Aliquota"                 type="cis:AliquotaType" />
      <xs:element name="NotaSMImport"    		  type="String200LatinType"   minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="DatiRiepilogoType">
    <xs:sequence>
      <xs:element name="Imponibile"               type="cis:Amount2DecimalType" />
      <xs:element name="Imposta"                  type="cis:ImpostaType" />
      <xs:element name="TipoMerce"                type="cis:TipoMerceType" />
      <xs:element name="Aliquota"                 type="cis:AliquotaType" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="CodiceFiscaleType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z0-9]{11,16}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="CodiceFiscalePFType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z0-9]{16}" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NazioneType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]{2}" />
    </xs:restriction>
  </xs:simpleType>
  
  <xs:complexType name="RifContoLavoroPrimaDiBeniType">
  	<xs:sequence>
      <xs:element name="RiferimentoCL"               type="String200LatinType" />
      <xs:element name="UltimoRifCL"                 type="UltimoRifCLType" />
    </xs:sequence>
  </xs:complexType>
  
  <xs:simpleType name="UltimoRifCLType">
    <xs:restriction base="xs:string">
      <xs:length value="2" />
      <xs:enumeration value="SI">
        <xs:annotation>
          <xs:documentation>SI = L'integrazione attesta l'avvenuto ingresso in territorio SM di tutti i beni le cui fatture di acquisto e lavorazione sono contrassegnate dal valore di [RiferimentoCL].</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="NO">
        <xs:annotation>
          <xs:documentation>NO = L'integrazione attesta la volontà di restare in attesa di ulteriori fatture inerenti la lavorazione dei beni e del loro ingresso in territorio SM.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="VariazioniContrattualiType">
    <xs:restriction base="xs:string">
      <xs:length value="2" />
      <xs:enumeration value="SI">
        <xs:annotation>
          <xs:documentation>SI = Documento emesso per attestare "premi contrattuali" o "adjustment fee".</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  
  <!--________________ NUMBERS ____________________-->
  <xs:simpleType name="Amount8DecimalType">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[\-]?[0-9]{1,11}\.[0-9]{2,8}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Amount2DecimalType">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[\-]{0,1}[0-9]{1,11}\.[0-9]{2}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="NumeroLineaType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1" />
      <xs:maxInclusive value="9999" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DataFatturaType">
    <xs:restriction base="xs:date">
      <xs:minInclusive value="1970-01-01" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TipoMerceType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1" />
      <xs:maxInclusive value="9" />
    </xs:restriction>
  </xs:simpleType>  
  <xs:simpleType name="AliquotaType">
    <xs:restriction base="xs:decimal">
      <xs:maxInclusive value="100.00" />
      <xs:pattern value="[0-9]{1,3}\.[0-9]{2}" />
    </xs:restriction>
  </xs:simpleType>  
  <xs:simpleType name="ImpostaType">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[\-]{0,1}[0-9]{1,11}\.[0-9]{2}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ImpnibileType">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[\-]?[0-9]{1,11}\.[0-9]{2,8}" />
    </xs:restriction>
  </xs:simpleType>  
  <xs:simpleType name="NomenclaturaType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{4}([ \.][0-9]{2})?([ \.][0-9]{2})?"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="String10Type">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="(\p{IsBasicLatin}{1,10})" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String20Type">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="(\p{IsBasicLatin}{1,20})" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String60LatinType">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,60}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String80LatinType">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,80}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String100LatinType">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,100}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="String200LatinType">
    <xs:restriction base="xs:normalizedString">
      <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,200}" />
    </xs:restriction>
  </xs:simpleType>
  
    
</xs:schema>