<?xml version="1.0" encoding="UTF-8"?>
<!--
  tekenverklaring.nl - uitwisselformaat ingevulde verklaring, versie 1.0
  Integriteit: SHA-256 over de canonieke JSON (methode tv-canoniek-1), zie README.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:tv="https://tekenverklaring.nl/schema/1.0"
           targetNamespace="https://tekenverklaring.nl/schema/1.0"
           elementFormDefault="qualified">

  <xs:simpleType name="Sha256Hex">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9a-f]{64}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="SnaOnderdeel">
    <xs:restriction base="xs:string">
      <xs:enumeration value="CON"/>
      <xs:enumeration value="RIS"/>
      <xs:enumeration value="OMV"/>
      <xs:enumeration value="ZLF"/>
      <xs:enumeration value="DOS"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Toets">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ZT"/>
      <xs:enumeration value="WT"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="VraagType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="text"/>
      <xs:enumeration value="textarea"/>
      <xs:enumeration value="email"/>
      <xs:enumeration value="tel"/>
      <xs:enumeration value="url"/>
      <xs:enumeration value="date"/>
      <xs:enumeration value="month"/>
      <xs:enumeration value="number"/>
      <xs:enumeration value="kvk"/>
      <xs:enumeration value="btw"/>
      <xs:enumeration value="single"/>
      <xs:enumeration value="multi"/>
      <xs:enumeration value="select"/>
      <xs:enumeration value="declaration"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="tekenverklaring">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="meta" type="tv:Meta"/>
        <xs:element name="kerngegevens" type="tv:Kerngegevens"/>
        <xs:element name="antwoorden" type="tv:Antwoorden"/>
        <xs:element name="signalen" type="tv:Signalen"/>
        <xs:element name="ondertekening" type="tv:Ondertekening"/>
        <xs:element name="integriteit" type="tv:Integriteit"/>
      </xs:sequence>
      <xs:attribute name="schemaVersie" type="xs:string" use="required" fixed="1.0"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="Meta">
    <xs:sequence>
      <xs:element name="formulierId" type="xs:token"/>
      <xs:element name="formulierVersie" type="xs:token"/>
      <xs:element name="normVersie" type="xs:string"/>
      <xs:element name="modules">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="module" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:attribute name="id" type="xs:token" use="required"/>
                <xs:attribute name="versie" type="xs:token" use="required"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="organisatie">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="naam" type="xs:string"/>
          </xs:sequence>
          <xs:attribute name="id" type="xs:token" use="required"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="aangemaakt" type="xs:dateTime"/>
      <xs:element name="generator" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Kerngegevens">
    <xs:annotation><xs:documentation>Afgeleide velden voor eenvoudige import. Leidend zijn de antwoorden.</xs:documentation></xs:annotation>
    <xs:sequence>
      <xs:element name="naam" type="xs:string"/>
      <xs:element name="handelsnaam" type="xs:string"/>
      <xs:element name="kvkNummer">
        <xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="[0-9]{8}"/></xs:restriction></xs:simpleType>
      </xs:element>
      <xs:element name="btwNummer" type="xs:string" minOccurs="0"/>
      <xs:element name="email" type="xs:string"/>
      <xs:element name="telefoon" type="xs:string"/>
      <xs:element name="beroep" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Antwoorden">
    <xs:sequence>
      <xs:element name="sectie" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="vraag" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="label" type="xs:string"/>
                  <xs:element name="waarde" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:simpleContent>
                        <xs:extension base="xs:string">
                          <xs:attribute name="label" type="xs:string"/>
                        </xs:extension>
                      </xs:simpleContent>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="id" type="xs:token" use="required"/>
                <xs:attribute name="type" type="tv:VraagType" use="required"/>
                <xs:attribute name="sna" type="tv:SnaOnderdeel"/>
                <xs:attribute name="toets" type="tv:Toets"/>
                <xs:attribute name="signaal" type="xs:boolean" use="required"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="id" type="xs:token" use="required"/>
          <xs:attribute name="titel" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Signalen">
    <xs:annotation><xs:documentation>Antwoorden die volgens de formulierdefinitie richting een dienstverband wijzen. Indicatief, geen oordeel.</xs:documentation></xs:annotation>
    <xs:sequence>
      <xs:element name="signaal" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="vraag" type="xs:token" use="required"/>
          <xs:attribute name="sna" type="tv:SnaOnderdeel"/>
          <xs:attribute name="toets" type="tv:Toets"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="aantal" type="xs:nonNegativeInteger" use="required"/>
  </xs:complexType>

  <xs:complexType name="Ondertekening">
    <xs:sequence>
      <xs:element name="naam" type="xs:string"/>
      <xs:element name="plaats" type="xs:string"/>
      <xs:element name="datum" type="xs:date"/>
      <xs:element name="handtekening">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:base64Binary">
              <xs:attribute name="mimeType" type="xs:string" use="required" fixed="image/png"/>
              <xs:attribute name="sha256" type="tv:Sha256Hex" use="required"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Integriteit">
    <xs:simpleContent>
      <xs:extension base="tv:Sha256Hex">
        <xs:attribute name="algoritme" type="xs:string" use="required" fixed="SHA-256"/>
        <xs:attribute name="methode" type="xs:string" use="required" fixed="tv-canoniek-1"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>
