<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema
    targetNamespace="urn:cz:isvs:aisc:schemas:AiscCtiRequest:v1"
    xmlns:self="urn:cz:isvs:aisc:schemas:AiscCtiRequest:v1"
    xmlns:t="urn:cz:isvs:aisc:schemas:AiscCtiTypy:v1"
    xmlns:reg="urn:cz:isvs:reg:schemas:RegTypy:v1"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified"
    version="3.0"
>

  <xs:annotation>
    <xs:documentation xml:lang="cs">Návrh XML schématu s definicemi dat pro dotazování AISC.</xs:documentation>
  </xs:annotation>

  <!-- Verze 3.0.0, 05.10.2022, Martin Štulc -->

  <xs:import namespace="urn:cz:isvs:reg:schemas:RegTypy:v1" schemaLocation="../../RegTypy.xsd" />
  <xs:import namespace="urn:cz:isvs:aisc:schemas:AiscCtiTypy:v1" schemaLocation="AiscCtiTypy.xsd" />

  <xs:complexType name="ZadostAbstractType" abstract="true">
    <xs:sequence>
      <xs:element name="ZadostInfo" type="reg:ZadostInfoType" />
      <xs:element name="AutorizaceInfo" type="reg:AutorizaceType" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AiscCtiDataAbstractType" abstract="true">
  </xs:complexType>

  <xs:complexType name="AiscCtiAifo3DataType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Čtení údajů podle AIFO v3, dotaz.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="self:AiscCtiDataAbstractType">
        <xs:sequence>
          <xs:element name="Aifo" type="reg:LokalniAifoType" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="AiscCtiAifo3DataResponseType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Čtení údajů podle AIFO v3, odpověď.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="self:AiscDotazyDataResponseType">
        <xs:sequence>
          <xs:element name="Osoba" type="t:OsobaCis" minOccurs="0" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="AiscCtiPodleUdaju3DataType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Čtení údajů, dotaz.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="self:AiscCtiDataAbstractType">
        <xs:sequence>
          <xs:element name="RodneCislo" type="t:RodneCislo" minOccurs="0" />
          <xs:element name="Jmeno" type="reg:NonEmptyNormStringType" minOccurs="0" />
          <xs:element name="Prijmeni" type="reg:NonEmptyNormStringType" minOccurs="0" />
          <xs:element name="RodnePrijmeni" type="reg:NonEmptyNormStringType" minOccurs="0" />
          <xs:element name="Pohlavi" type="t:Pohlavi" minOccurs="0" />
          <xs:element name="DatumNarozeni" type="self:DatumNarozeni" minOccurs="0" />
          <xs:element name="CisloPkp" type="reg:NonEmptyNormStringType" minOccurs="0" />
        </xs:sequence>
        <xs:attribute name="typPorovnani" type="self:TypPorovnaniType" default="diakritika" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="AiscCtiPodleUdaju3DataResponseType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Čtení údajů, odpověď.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="self:AiscDotazyDataResponseType">
        <xs:sequence>
          <xs:element name="SeznamOsob" type="self:SeznamOsob" minOccurs="0" />
        </xs:sequence>
        <xs:attribute name="detail" type="xs:boolean" use="required" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>


  <xs:complexType name="SeznamOsob">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Seznam osob.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="OsobaCis" type="t:OsobaCis" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DatumNarozeni">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Parametr datum narození. Lze zadat alternativně datum,
        rok, nebo rok a měsíc.
      </xs:documentation>
    </xs:annotation>
    <xs:choice>
      <xs:element name="Datum" type="t:Datum" minOccurs="0" />
      <xs:sequence>
        <xs:element name="Rok" type="xs:int" />
        <xs:element name="Mesic" type="xs:int" minOccurs="0" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>

  <xs:simpleType name="TypPorovnaniType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Indikátor, jaký typ porovnání hledaných dat vůči DB
        je nutno použít.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="diakritika">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Respektování diakritiky bez ohledu na velikost
            písmen.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="asciiAnyOrder">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Nerespektování diakritiky a pořadí slov ve jménech.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="AiscSeznamUdaju" type="self:AiscSeznamUdajuType" substitutionGroup="reg:AisSeznamUdajuAbstract" />

  <xs:simpleType name="AiscSeznamUdajuType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Seznam názvů datových položek, jež jsou uloženy v AIS CIS.</xs:documentation>
    </xs:annotation>
    <xs:list itemType="self:AiscUdajType" />
  </xs:simpleType>

  <xs:simpleType name="AiscUdajType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Názvy datových položek, jež jsou uloženy v AIS CIS.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="reg:AisUdajType">
      <xs:enumeration value="Aifo" />
      <xs:enumeration value="RodneCislo" />
      <xs:enumeration value="Jmeno" />
      <xs:enumeration value="Prijmeni" />
      <xs:enumeration value="RodnePrijmeni" />
      <xs:enumeration value="OstatniJmena" />
      <xs:enumeration value="StatniPrislusnost" />
      <xs:enumeration value="DatumNarozeni" />
      <xs:enumeration value="MistoNarozeni" />
      <xs:enumeration value="DatumUmrti" />
      <xs:enumeration value="MistoUmrti" />
      <xs:enumeration value="Pohlavi" />
      <xs:enumeration value="AdresaPobytu" />
      <xs:enumeration value="TypPobytu" />
      <xs:enumeration value="PovoleniPobytu" />
      <xs:enumeration value="SkutecnyPobyt" />
      <xs:enumeration value="PravniZpusobilost" />
      <xs:enumeration value="Vyhosteni" />
      <xs:enumeration value="RodinnyStav" />
      <xs:enumeration value="MistoManzelstviPartnerstvi" />
      <xs:enumeration value="Partner" />
      <xs:enumeration value="Matka" />
      <xs:enumeration value="Otec" />
      <xs:enumeration value="DorucovaciAdresa" />
      <xs:enumeration value="Osvojeni" />
      <xs:enumeration value="ObcanstviPartnera" />
      <xs:enumeration value="Deti" />
      <xs:enumeration value="DetiMistoNarozeni" />
      <xs:enumeration value="DetiObcanstvi" />
      <xs:enumeration value="RodiceObcanstvi" />
      <xs:enumeration value="ZakonnyZastupce" />
      <xs:enumeration value="OsobyDlePismeneU" />
      <xs:enumeration value="DrivejsiJmenaPrijmeni" />
      <xs:enumeration value="DrivejsiRodnaCisla" />
      <xs:enumeration value="DrivejsiRodnaPrijmeni" />
      <xs:enumeration value="ZmenaPohlavi" />
      <xs:enumeration value="PredchoziMistaPobytu" />
      <xs:enumeration value="PredchoziManzelstviPartnerstvi" />
      <xs:enumeration value="ZnepristupniLog" />
      <xs:enumeration value="Volby" />
      <xs:enumeration value="Zamestnani" />
      <xs:enumeration value="Nezvestnost" />
      <xs:enumeration value="ZakazPobytu" />
      <xs:enumeration value="AdresaUradu" />

      <xs:enumeration value="Osvojenec.TypOsvojeni" />
      <xs:enumeration value="Osvojenec.PuvodniRodneCislo" />
      <xs:enumeration value="Osvojenec.PuvodniJmeno" />
      <xs:enumeration value="Osvojenec.PuvodniPrijmeni" />
      <xs:enumeration value="Osvojenec.OsvojitelkaDatumOd" />
      <xs:enumeration value="Osvojenec.OsvojitelkaDatumDo" />
      <xs:enumeration value="Osvojenec.OsvojitelDatumOd" />
      <xs:enumeration value="Osvojenec.OsvojitelDatumDo" />
      <xs:enumeration value="Osvojenec.OtecRodneCislo" />
      <xs:enumeration value="Osvojenec.OtecDatumNarozeni" />
      <xs:enumeration value="Osvojenec.OtecJmeno" />
      <xs:enumeration value="Osvojenec.OtecPrijmeni" />
      <xs:enumeration value="Osvojenec.OtecRodnePrijmeni" />
      <xs:enumeration value="Osvojenec.OtecLokalniAifo" />
      <xs:enumeration value="Osvojenec.MatkaRodneCislo" />
      <xs:enumeration value="Osvojenec.MatkaDatumNarozeni" />
      <xs:enumeration value="Osvojenec.MatkaJmeno" />
      <xs:enumeration value="Osvojenec.MatkaPrijmeni" />
      <xs:enumeration value="Osvojenec.MatkaRodnePrijmeni" />
      <xs:enumeration value="Osvojenec.MatkaLokalniAifo" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="OdpovedAbstractType" abstract="true">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Univerzální odpověd na žádost, obálka pro data.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="OdpovedInfo" type="reg:OdpovedInfoType" />
      <xs:element name="MapaAifo" type="reg:MapaAifoType" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AiscDotazyDataResponseType" abstract="true">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Společný předek všech odpovědí na dotazy AISC.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="AiscAplikacniStatus" type="self:AiscAplikacniStatusType" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AiscAplikacniStatusType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">
        Aplikační chyba, doplnění k StatusType ze systémové části zprávy, odpověď.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="VysledekAiscKodType" type="reg:VysledekKodType" />
      <xs:element name="VysledekDetail" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="VysledekSubKod" type="self:VysledekSubKodAiscType" />
            <xs:element name="VysledekPopis" type="reg:VysledekPopisType" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- chyby a varování -->
  <xs:simpleType name="VysledekSubKodAiscType">
    <xs:annotation>
      <xs:documentation xml:lang="cs">Detailní kód výsledku, výčtový typ.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <!-- VAROVÁNÍ -->
      <xs:enumeration value="OSOBA_NENALEZENA">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Nenalezena žádná osoba.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="PREKROCEN_LIMIT">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Překročen limit na počet vrácených záznamů.
          </xs:documentation>
        </xs:annotation>
      </xs:enumeration>

      <!-- CHYBA -->
      <xs:enumeration value="NEVALIDNI_DATA">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Nesplněna minimální množina vstupních parametrů,
            nebo je nějaký z parametrů chybně zadán</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="NEPOVOLENY_PRISTUP">
        <xs:annotation>
          <xs:documentation
              xml:lang="cs">Není oprávnění podle autorizačních údajů v hlavičce požadavku.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="NEOCEKAVANA_CHYBA">
        <xs:annotation>
          <xs:documentation xml:lang="cs">Neočekávaná chyba aplikace.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
