<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  elementFormDefault="unqualified" 
  targetNamespace="http://www.impresainungiorno.gov.it/schema/base"
  xmlns:pi="http://www.impresainungiorno.gov.it/schema/base" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  version="1.0.0">
  <xs:simpleType name="Cap">
    <xs:restriction base="pi:Stringa">
      <xs:pattern value="\d{5}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="CodiceFiscale">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{11}"/>
      <!--xs:pattern value="[A-Z]{6}[0-9]{2}[ABCDEHLMPRST][0-9]{2}[A-Z][0-9]{3}[A-Z]"/-->
      <xs:pattern value="[A-Z]{6}[0-9A-Z][0-9LMNPQRSTUV][ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="CodiceFiscalePersona">
    <xs:annotation>
      <!-- E' bene che sia maiuscolo -->
      <xs:appinfo source="http://metaware.it/schema_process#before-set-code">if (%VALUE% != null) %VALUE% = %VALUE%.toUpperCase();</xs:appinfo>
      <xs:documentation>Codice fiscale, di 16 caratteri, appartenente a persona fisica</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <!--xs:pattern value="[A-Z]{6}[0-9]{2}[ABCDEHLMPRST][0-9]{2}[A-Z][0-9]{3}[A-Z]"/-->
      <xs:pattern value="[A-Z]{6}[0-9A-Z][0-9LMNPQRSTUV][ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="CodiceISTATAttivita">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]+(\.[0-9]+(\.([0-9A-Za-z]+))?)?"/>
      <!--xs:pattern value="[0-9]{1,2}(\.[0-9]+)*"/-->
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="Decimale">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[\-+]?\d+\.\d{2}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="EMailIndirizzo">
    <xs:annotation>
      <xs:appinfo source="http://metaware.it/schema_process#null-value">""</xs:appinfo>
      <xs:appinfo source="http://metaware.it/schema_process#before-set-code">if (%VALUE% != null) %VALUE% = %VALUE%.toLowerCase();</xs:appinfo>
    </xs:annotation>
    <xs:restriction base="pi:Stringa">
      <!--  Questa regexp dovrebbe essere la migliore -->
      <xs:pattern
        value="[\-!#$%&amp;'*+/0-9=?A-Z^_a-z{|}~](\.?[\-!#$%&amp;'*+/0-9=?A-Z^_a-z{|}~])*@[a-zA-Z0-9](-?[a-zA-Z0-9])*(\.[a-zA-Z0-9](-?[a-zA-Z0-9])*)+"
      />
    </xs:restriction>
  </xs:simpleType>
  <!-- 
  
   -->
  <xs:complexType name="EMail">
    <xs:simpleContent>
      <xs:extension base="pi:EMailIndirizzo">
        <xs:attribute default="Standard" name="tipo">
          <xs:annotation>
            <xs:documentation>Specifica meglio il tipo di indirizzo e-mail: ad esempio se si tratta di un indirizzo PEC o altri tipi (da
            definire)</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="Standard">
                <xs:annotation>
                  <xs:documentation>La normale posta elettronica</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="PEC">
                <xs:annotation>
                  <xs:documentation>Posta Elettronica Certificata</xs:documentation>
                </xs:annotation>
                <!-- 
                  Altri possibili valori possono essere PGP o GPG, o diversi layer di autenticazione/crittazione di e-mail
                 -->
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:simpleType name="NumeroREA">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{1,10}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="NumeroTelefono">
    <xs:annotation>
      <xs:documentation> Questo elemento non puo' assumere valore stringa vuota, al piu' non c'e' </xs:documentation>
      <xs:appinfo source="http://metaware.it/schema_process#null-value">""</xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{1,16}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="PartitaIVA">
    <xs:annotation>
      <xs:documentation> Questo elemento non puo' assumere valore stringa vuota, al piu' non c'e' </xs:documentation>
      <xs:appinfo source="http://metaware.it/schema_process#null-value">""</xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{11}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="Percentuale">
    <xs:restriction base="pi:Decimale">
      <xs:maxInclusive value="100.00"/>
      <xs:minInclusive value="0.00"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="PercentualeIntera">
    <xs:restriction base="xs:nonNegativeInteger">
      <xs:maxInclusive value="100"/>
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="RiferimentoPortale">
    <xs:restriction base="xs:string">
      <xs:annotation>
        <xs:documentation>Il primo pattern indica il progressivo pratica, mentre il secondo indica l'anno in cui e' stata presentata la pratica
          integrata di portale </xs:documentation>
      </xs:annotation>
      <xs:pattern value="[0-9]+/[0-9]{4}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="Sesso">
    <xs:restriction base="xs:string">
      <xs:enumeration value="M"/>
      <xs:enumeration value="F"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="Stringa">
    <xs:annotation>
      <xs:documentation> Questo elemento non puo' assumere valore stringa vuota, al piu' non c'e' </xs:documentation>
      <xs:appinfo source="http://metaware.it/schema_process#null-value">""</xs:appinfo>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="StringaBreve">
    <xs:restriction base="pi:Stringa">
      <xs:maxLength value="20"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="StringaLunga">
    <xs:restriction base="pi:Stringa">
      <xs:maxLength value="60"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="TargaVeicolo">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z0-9]{11}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="Testo">
    <xs:restriction base="pi:Stringa">
      <xs:maxLength value="512"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:simpleType name="TestoBreve">
    <xs:restriction base="pi:Stringa">
      <xs:maxLength value="256"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
        
  -->
  <xs:group name="Citta">
    <xs:sequence>
      <xs:element name="stato" type="pi:Stato"/>
      <xs:choice>
        <xs:annotation>
          <xs:appinfo source="http://metaware.it/schema_process#java-name">Citta</xs:appinfo>
        </xs:annotation>
        <xs:group ref="pi:CittaItaliana">
          <xs:annotation>
            <xs:documentation>Se stato e' 'I'</xs:documentation>
          </xs:annotation>
        </xs:group>
        <xs:group ref="pi:CittaStraniera">
          <xs:annotation>
            <xs:documentation>Se stato non e' 'I'</xs:documentation>
          </xs:annotation>
        </xs:group>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <!--
    
  -->
  <xs:group name="CittaRI">
    <xs:annotation><xs:documentation>
      E' la versione con tutti i dati opzionali cosi' come possono arrivare dal R.I.
    </xs:documentation></xs:annotation>
    <xs:sequence>
      <xs:element name="stato" type="pi:Stato"/>
      <xs:choice>
        <xs:annotation>
          <xs:appinfo source="http://metaware.it/schema_process#java-name">Citta</xs:appinfo>
        </xs:annotation>
        <xs:group ref="pi:CittaItalianaRI">
          <xs:annotation>
            <xs:documentation>Se stato e' 'I'</xs:documentation>
          </xs:annotation>
        </xs:group>
        <xs:group ref="pi:CittaStraniera">
          <xs:annotation>
            <xs:documentation>Se stato non e' 'I'</xs:documentation>
          </xs:annotation>
        </xs:group>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="CittaItaliana">
    <xs:sequence>
      <xs:element name="provincia" type="pi:Provincia"/>
      <xs:element name="comune" type="pi:Comune"/>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="CittaItalianaRI">
    <xs:annotation>
      <xs:documentation>Versione con dati opzionali</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="provincia" type="pi:ProvinciaRI" minOccurs="0"/>
      <xs:element name="comune" type="pi:ComuneRI" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <!--
    
  -->
  <xs:group name="CittaStraniera">
    <xs:sequence>
      <xs:element name="citta-straniera" type="pi:StringaLunga"/>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="DatiIndirizzo">
    <xs:sequence>
      <xs:annotation>
        <xs:documentation>Dati sempre utili per l'indirizzo, sia italiano che estero </xs:documentation>
      </xs:annotation>
      <xs:element name="denominazione-stradale" type="pi:StringaLunga"/>
      <xs:element name="numero-civico" type="pi:StringaBreve"/>
      <xs:element minOccurs="0" name="frazione" type="pi:StringaLunga"/>      
    </xs:sequence>
  </xs:group>
  <!--
    
  -->
  <xs:group name="DatiIndirizzoRI">
    <xs:sequence>
      <xs:annotation>
        <xs:documentation>Versione con dati opzionali</xs:documentation>
      </xs:annotation>
      <xs:element name="denominazione-stradale" type="pi:StringaLunga" minOccurs="0"/>
      <xs:element name="numero-civico" type="pi:StringaBreve" minOccurs="0"/>
      <xs:element minOccurs="0" name="frazione" type="pi:StringaLunga"/>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="DatiIndirizzoItaliano">
    <xs:sequence>
      <xs:annotation>
        <xs:documentation>Dati specifici per un indirizzo italiano </xs:documentation>
      </xs:annotation>
      <xs:element name="cap" type="pi:Cap"/>
      <xs:element name="toponimo" type="pi:StringaBreve">
        <xs:annotation><xs:documentation>
          Corrisponde al qualificatore di toponimo o DUG (Denominazione Urbanistica Generica)
        </xs:documentation></xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!--
    
  -->
  <xs:group name="DatiIndirizzoItalianoRI">
    <xs:sequence>
      <xs:annotation>
        <xs:documentation>Versione con dati opzionali</xs:documentation>
      </xs:annotation>
      <xs:element name="cap" type="pi:Cap" minOccurs="0"/>
      <xs:element name="toponimo" type="pi:StringaBreve" minOccurs="0">
        <xs:annotation><xs:documentation>
          Corrisponde al qualificatore di toponimo o DUG (Denominazione Urbanistica Generica)
        </xs:documentation></xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="Recapiti">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="e-mail" type="pi:EMail"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="telefono" type="pi:Telefono"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="sito-web" type="xs:anyURI"/>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:group name="RecapitiObbligatori">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="1" name="e-mail" type="pi:EMail"/>
      <xs:element minOccurs="1" name="telefono" type="pi:Telefono"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="sito-web" type="xs:anyURI"/>
    </xs:sequence>
  </xs:group>
  <!--
        
  -->
  <xs:complexType name="Ammontare">
    <xs:simpleContent>
      <xs:extension base="pi:Decimale">
        <xs:attribute default="EUR" name="valuta" type="pi:Stringa" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="AmmontareNonNegativo">
    <xs:simpleContent>
      <xs:restriction base="pi:Ammontare">
        <xs:minInclusive value="0.00"/>
      </xs:restriction>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="AmmontarePositivo">
    <xs:simpleContent>
      <xs:restriction base="pi:Ammontare">
        <xs:minExclusive value="0.00"/>
      </xs:restriction>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Anagrafica">
    <xs:sequence>
      <xs:element name="cognome" type="pi:StringaLunga"/>
      <xs:element name="nome" type="pi:StringaLunga"/>
      <xs:element name="codice-fiscale" type="pi:CodiceFiscalePersona"/>
      <xs:element minOccurs="0" name="nazionalita" type="pi:Stato"/>
      <xs:element minOccurs="0" name="partita-iva" type="pi:PartitaIVA"/>
    </xs:sequence>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="AnagraficaCompleta">
    <xs:annotation>
      <xs:documentation>Anagrafica completa, contiene i dati sufficienti e necessari a validare un cf</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="pi:Anagrafica">
        <xs:sequence>
          <xs:element name="sesso" type="pi:Sesso"/>
          <xs:element name="nascita">
            <xs:complexType>
              <xs:sequence>
                <xs:group ref="pi:Citta"/>
                <xs:element name="data" type="xs:date"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="AnagraficaImpresa">
    <xs:annotation>
      <xs:documentation>Questo elemento contiene i dati identificativi di un'impresa. Forma-giuridica: contiene come attributo il codice della forma
        giuridica, come contenuto il nome esteso. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element minOccurs="0" name="forma-giuridica" type="pi:FormaGiuridica"/>
      <xs:element name="ragione-sociale" type="pi:Stringa"/>
      <xs:element name="codice-fiscale" type="pi:CodiceFiscale"/>
      <xs:element minOccurs="0" name="partita-iva" type="pi:PartitaIVA"/>
    </xs:sequence>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="AttivitaEsercitata">
    <xs:annotation>
      <xs:documentation>@deprecated: utilizzare AttivitaISTAT</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="codice-istat" type="pi:CodiceISTATAttivita">
          <xs:annotation>
            <xs:documentation> Codice ISTAT (ATECO 2004) dell'attivita' economica, andra' definito un valore per attivita' non elencate
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="AttivitaISTAT">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="codice-istat" type="pi:CodiceISTATAttivita" use="required">
          <xs:annotation>
            <xs:documentation>Codice ISTAT dell'attivita' economica o finanziaria</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="catalogo" use="required">
          <xs:annotation>
            <xs:documentation>Tipo di catalogo da utilizzare per interpretare il codice-istat</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:enumeration value="ATECO2002"/>
              <xs:enumeration value="ATECO2004"/>
              <xs:enumeration value="ATECO2007"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="principale" type="xs:boolean">
          <xs:annotation>
            <xs:documentation>Indica se una attivita' e' la principale per l'impresa</xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="CodiceREA">
    <xs:simpleContent>
      <xs:extension base="pi:NumeroREA">
        <xs:attribute name="provincia" use="required">
          <xs:annotation>
            <xs:documentation> Questo elemento non puo' assumere valore stringa vuota, al piu' non c'e' </xs:documentation>
            <xs:appinfo source="http://metaware.it/schema_process#null-value">""</xs:appinfo>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[A-Z]{2}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="data-iscrizione" type="xs:date"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Comune">
    <xs:annotation>
      <xs:appinfo source="http://metaware.it/schema_process#delegate-access">delegate-access</xs:appinfo>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="codice-catastale" use="required">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice catastale del comune, che corrisponde ai caratteri dal 12 al 15 di un
              codice fiscale di una persona. </xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Z]{1}\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-istat" use="optional">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice istat del comune. E' di 6 cifre le prime 3 sono il codice della provincia
              e le ultime 3 sono il codice del comune.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="\d{6}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="ComuneRI">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="codice-catastale" use="optional">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice catastale del comune, che corrisponde ai caratteri dal 12 al 15 di un
              codice fiscale di una persona. </xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Z]{1}\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-istat" use="optional">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice istat del comune. E' di 6 cifre le prime 3 sono il codice della provincia
              e le ultime 3 sono il codice del comune.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="\d{6}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="DatiPersona">
    <xs:complexContent>
      <xs:extension base="pi:AnagraficaCompleta">
        <xs:sequence>
          <xs:element name="residenza" type="pi:Indirizzo"/>
          <xs:group ref="pi:Recapiti"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Errore">
    <xs:sequence>
      <xs:element minOccurs="0" name="causa" type="pi:Errore"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="parametro" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="codice" type="pi:StringaBreve" use="required"/>
    <xs:attribute default="GRAVE" name="gravita" type="pi:StringaBreve"/>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="FormaGiuridica">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="codice" type="pi:StringaBreve" use="required">
          <xs:annotation>
            <xs:documentation>Id della forma giuridica per il portale</xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute name="categoria" type="pi:StringaLunga" use="optional">
          <xs:annotation>
            <xs:documentation>
              Categoria della forma giuridica per il portale. Attualemnte assume questi valori:
              SOCIETA, INDIVIDUALE, ACCOMANDITA, COLLETTIVO, SOGGETTO_ESTERO
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Indirizzo">
    <xs:annotation>
      <xs:documentation>Identificazione di indirizzo, italiano o straniera</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="pi:Citta"/>
      <xs:group minOccurs="0" ref="pi:DatiIndirizzoItaliano">
        <xs:annotation>
          <xs:documentation>obbligatori se stato e' itali</xs:documentation>
        </xs:annotation>
      </xs:group>
      <xs:group ref="pi:DatiIndirizzo"/>
    </xs:sequence>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="IndirizzoRI">
    <xs:annotation>
      <xs:documentation>E' la versione con tutti i dati opzionali cosi' come possono arrivare dal R.I.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="pi:Citta"/>
      <xs:group minOccurs="0" ref="pi:DatiIndirizzoItalianoRI">
        <xs:annotation>
          <xs:documentation>obbligatori se stato e' itali</xs:documentation>
        </xs:annotation>
      </xs:group>
      <xs:group ref="pi:DatiIndirizzoRI"/>
    </xs:sequence>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="IndirizzoConRecapiti">
    <xs:complexContent>
      <xs:extension base="pi:Indirizzo">
        <xs:group ref="pi:Recapiti"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="IndirizzoConRecapitiRI">
    <xs:annotation>
      <xs:documentation>E' la versione con tutti i dati opzionali cosi' come possono arrivare dal R.I.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="pi:IndirizzoRI">
        <xs:group ref="pi:Recapiti"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="IndirizzoConRecapitiObbligatori">
    <xs:complexContent>
      <xs:extension base="pi:Indirizzo">
        <xs:group ref="pi:RecapitiObbligatori"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="IndirizzoItaliano">
    <xs:annotation>
      <xs:documentation>Identificazione di indirizzo italiano, per i casi in cui un indirizzo straniero non e' valido </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="pi:CittaItaliana"/>
      <xs:group ref="pi:DatiIndirizzoItaliano"/>
      <xs:group ref="pi:DatiIndirizzo"/>
    </xs:sequence>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="IndirizzoItalianoRI">
    <xs:annotation>
      <xs:documentation>E' la versione con tutti i dati opzionali cosi' come possono arrivare dal R.I.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="pi:CittaItalianaRI"/>
      <xs:group ref="pi:DatiIndirizzoItalianoRI"/>
      <xs:group ref="pi:DatiIndirizzoRI"/>
    </xs:sequence>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="IndirizzoItalianoConRecapiti">
    <xs:complexContent>
      <xs:extension base="pi:IndirizzoItaliano">
        <xs:group ref="pi:Recapiti"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="IndirizzoStraniero">
    <xs:annotation>
      <xs:documentation>Identificazione di indirizzo straniero, per i casi in cui un indirizzo italiano non e' valido </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="pi:CittaStraniera"/>
      <xs:group ref="pi:DatiIndirizzo"/>
    </xs:sequence>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Provincia">
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="sigla" use="required">
          <xs:annotation>
            <xs:documentation>questo attributo va valorizzato con la sigla della provincia</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Z]{2}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-istat" use="optional">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice istat della provincia.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <!--
    
  -->
  <xs:complexType name="ProvinciaRI">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="sigla" use="optional">
          <xs:annotation>
            <xs:documentation>questo attributo va valorizzato con la sigla della provincia</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[A-Z]{2}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-istat" use="optional">
          <xs:annotation>
            <xs:documentation>Questo attributo va valorizzato con il codice istat della provincia.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="Stato">
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="codice" use="required">
          <xs:annotation>
            <xs:documentation>
              Puo' contenere qualsiasi dei codici di identificazione di uno stato, sigle, iso, istat ecc...
            </xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Za-z0-9]{1,4}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-istat">
          <xs:annotation>
            <xs:documentation>Codice ISTAT dello stato estero</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="codice-catastale">
          <xs:annotation>
            <xs:documentation>Codice catastale dello stato estero</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Z]\d{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iso">
          <xs:annotation>
            <xs:documentation>Codice di tre cifre secondo lo standard ISO 3316-1</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="pi:Stringa">
              <xs:pattern value="[A-Z]{3}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:complexType name="Telefono">
    <xs:annotation>
      <xs:documentation>TODO: rinominare in RecapitoTelefonico</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pi:NumeroTelefono">
        <xs:attribute default="Ufficio" name="tipo">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="Ufficio"/>
              <xs:enumeration value="Abitazione"/>
              <xs:enumeration value="Fax"/>
              <xs:enumeration value="Cellulare"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
        
  -->
  <xs:simpleType name="StatoImpresa">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ATTIVA"/>
      <xs:enumeration value="RIATTIVATA"/>
      <xs:enumeration value="SOSPESA"/>
      <xs:enumeration value="CESSATA"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
		
	-->
  <xs:complexType name="Carica">
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="codice" type="pi:CodiceCaricaSocietaria" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!-- 
	
	 -->
  <xs:simpleType name="CodiceCaricaSocietaria">
    <xs:annotation>
      <xs:documentation>Andra' definita una tabella codice - carica, tre caratteri per identificare la carica sono sufficienti</xs:documentation>
    </xs:annotation>
    <xs:restriction base="pi:Stringa">
      <xs:pattern value="[A-Z]{1,3}"/>
    </xs:restriction>
  </xs:simpleType>
  <!--
		
	-->
  <xs:complexType name="LegaleRappresentante">
    <xs:annotation>
      <xs:documentation>@deprecated</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="pi:DatiPersona">
        <xs:sequence>
          <xs:element name="carica" type="pi:Carica"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
		
	-->
  <xs:complexType name="AnagraficaRappresentante">
    <xs:complexContent>
      <xs:extension base="pi:Anagrafica">
        <xs:sequence>
          <xs:element name="carica" type="pi:Carica" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:complexType name="EntitaComposta">
    <xs:annotation>
      <xs:documentation>Tipo generico da usare in caso di entita' composta da un codice e da una descrizione</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="pi:Stringa">
        <xs:attribute name="codice" type="pi:Stringa" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <!--
  
  
      Di seguito ci sono i tipi che stavano in tipi_strutturati    
      
      
  -->
  <xs:complexType name="DettaglioImpresa">
    <xs:complexContent>
      <xs:extension base="pi:AnagraficaImpresa">
        <xs:sequence>
          <xs:element name="codice-REA" type="pi:CodiceREA" minOccurs="0"/>
          <xs:element name="indirizzo" type="pi:IndirizzoConRecapiti" minOccurs="0"/>
          <!-- FIXME: in realta' e' un array 0+ -->
          <xs:element name="legale-rappresentante" type="pi:LegaleRappresentante"
            minOccurs="0">
            <xs:annotation>
              <xs:documentation>@deprecated usare rappresentante: il tipo
                LegaleRappresentante andra' a scomparire</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element type="pi:AnagraficaRappresentante" name="rappresentante"
            minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>Lisa delle anagrafiche sintetiche dei legali
                rappresentanti di una impresa</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="attivita"
            type="pi:AttivitaISTAT"/>
        </xs:sequence>
        <xs:attribute name="data-inizio-attivita" type="xs:date"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
    
  -->
  <xs:simpleType name="IBAN">
    <xs:annotation>
      <xs:documentation> Campo che contiene un codice IBAN. Sono un massimo di 34 caratteri
        (38 se si conta il prefisso IBAN). </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:maxLength value="34"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- 
    
  -->
  <!--
    
  -->
  <xs:complexType name="UtentePortale">
    <xs:annotation>
      <xs:documentation> Questo tipo contiene tutti i dati relativi al profilo dell'utente,
        ossia i dati immessi dall'utente al momento della registrazione: obbligatori sono codice fiscale, 
        nome e cognome, cosi' da poter creare l'utente di scrivania (non Archeometra)
        nel caso l'utente sia sconosciuto al sistema </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="pi:Anagrafica">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="delegato">
            <xs:complexType>
              <xs:simpleContent>
                <xs:extension base="pi:CodiceFiscalePersona">
                  <xs:attribute name="ente" type="pi:StringaBreve" use="required">
                    <xs:annotation>
                      <xs:documentation> Questo attributo deve contenere un
                        identificatore di ente valido. </xs:documentation>
                    </xs:annotation>
                  </xs:attribute>
                </xs:extension>
              </xs:simpleContent>
            </xs:complexType>
          </xs:element>
          <xs:element minOccurs="0" name="domicilio" type="pi:IndirizzoConRecapiti"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <!--
  -->
  <xs:element name="ricevuta" type="pi:Ricevuta"/>
  <xs:element name="dati-mittente" type="pi:UtentePortale"/>
  <xs:complexType name="Ricevuta">
    <xs:sequence>
      <xs:element name="operazione" type="pi:Stringa">
        <xs:annotation>
          <xs:documentation>Tipo di operazione effettuata (iscrizione societa', variazione
            denominazione...)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" name="codice-fiscale-impresa" type="pi:CodiceFiscale"/>
      <xs:element minOccurs="0" name="ragione-sociale-impresa" type="pi:Stringa"/>
      <xs:element form="qualified" name="operatore" type="pi:UtentePortale">
        <xs:annotation>
          <xs:documentation>Profilo utente (nome, cognome, codice fiscale) dell'utente di
            portale che effettivamente ha inviato la pratica, ossia utente
            loggato</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:choice>
        <xs:element maxOccurs="unbounded" minOccurs="1" name="ente" type="pi:EnteRicevuta">
          <xs:annotation>
            <xs:documentation>Dettagli specifici degli enti a cui si e' inviato un
              adempimento</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element maxOccurs="unbounded" minOccurs="1" name="errore" type="pi:Errore"/>
      </xs:choice>
      <xs:element name="lista-adempimenti" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation> Una lista di coppie ente - idAdempimento da compilare a
            carico del sender </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ente" type="pi:StringaBreve"/>
            <xs:element name="id" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="riferimento-portale" type="pi:RiferimentoPortale" use="optional">
      <xs:annotation>
        <xs:documentation>Riferimento unico assegnato dal portale alla
          pratica</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="tempo-invio" type="xs:dateTime" use="required">
      <xs:annotation>
        <xs:documentation>Istante in cui il portale ha iniziato ad inviare gli adempimenti
          agli enti</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="EnteRicevuta">
    <xs:sequence>
      <xs:element minOccurs="0" name="delegante" type="pi:UtentePortale">
        <xs:annotation>
          <xs:documentation>Il profilo utente del delegato d'impresa che l'utente
            rappresenta presso l'ente, se assente si intende che l'utente loggato e' un
            delegato d'impresa</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element maxOccurs="unbounded" minOccurs="1" name="invio" type="pi:InvioAdempimento"
      />
    </xs:sequence>
    <xs:attribute name="nome" type="pi:StringaBreve"/>
  </xs:complexType>
  <xs:complexType name="InvioAdempimento">
    <xs:annotation>
      <xs:documentation>Un invio e' un tentativo da parte del portale di inviare un adempimento
        ad un ente. Fintanto che l'adempimento non e' accettato o respinto dall'ente, ossia
        finche' problemi di connettivita' impediscono all'ente di prendere in carico
        l'adempimento, il portale permette all'utente di tentare l'invio dell'adempimento.
        Tutti gli invii falliti vengono memorizzati</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="esito" type="pi:Stringa"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="messaggio">
        <xs:annotation>
          <xs:documentation>messaggi informativi inviati dall'ente quali
            spiegazioni/integrazioni dell'esito</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="pi:Stringa">
              <xs:attribute name="titolo" type="pi:Stringa" use="required"/>
              <xs:attribute name="attributo" type="xs:string"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="tempo-invio" type="xs:dateTime" use="required"/>
  </xs:complexType>
  <!-- 
  -->
  <xs:complexType name="DocumentoAllegato">
    <xs:sequence>
      <xs:element name="nome" type="pi:Stringa">
        <xs:annotation><xs:documentation>
          E' il nome del file. Es: regol.pdf.p7m
        </xs:documentation></xs:annotation>
      </xs:element> 
      <xs:element name="dimensione" type="xs:nonNegativeInteger"/>
      <xs:element name="uri" type="xs:anyURI" minOccurs="0"/><!-- capre perche' e' opzionale -->
      <xs:element name="tipologia" type="pi:Stringa" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="mime" type="pi:Stringa" use="optional"/>
  </xs:complexType>   
  <!--
    <xs:complexType name="RichiestaReinvioAdempimento">
    <xs:complexContent>
    <xs:extension base="pi:RichiestaOperazionePratica">
    <xs:attribute name="ente" type="pi:Enti"/>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>  
    <xs:element name="richiesta-ricevuta" type="pi:RichiestaOperazionePratica"/>
    <xs:element name="richiesta-reinvio" type="pi:RichiestaReinvioAdempimento"/>
  -->
</xs:schema>
