<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:common="https://www.hrm-systems.ch/schemas/uka-connect/import/abacus/v1/common"
           targetNamespace="https://www.hrm-systems.ch/schemas/uka-connect/import/abacus/v1/common"
           elementFormDefault="qualified"
           version="1.0">

    <xs:simpleType name="languageIsoAlpha2">
        <xs:annotation>
            <xs:documentation xml:lang="de">ISO-639-1 Codes gemäss dem Untercode Alpha-2, optional ergänzt um einen ISO-3166-1 Alpha 2 Code für die Region z.B. de-CH</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-z]{2}([-_][A-Z]{2})?"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="countryIsoAlpha2">
        <xs:annotation>
            <xs:documentation xml:lang="de">ISO-3166-1 Codes gemäss dem Untercode Alpha-2. ?? für unbekannt</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z]{2}|[?]{2}"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="nonEmptyString">
        <xs:restriction base="xs:string">
            <xs:pattern value=".*[^\s].*"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="descriptions">
        <xs:sequence>
            <xs:element name="description" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="common:nonEmptyString">
                            <xs:attribute name="language" type="common:languageIsoAlpha2" use="required">
                                <xs:annotation>
                                    <xs:documentation xml:lang="de">ISO-Alpha2 Sprachcode</xs:documentation>
                                </xs:annotation>
                            </xs:attribute>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="validity">
        <xs:annotation>
            <xs:documentation xml:lang="de">Gültigkeit der Daten</xs:documentation>
        </xs:annotation>
        <xs:choice>
            <xs:element name="validFrom" type="xs:date">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Gültig von</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="validityPeriod">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Gültigkeitszeitraum von - bis</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="from" type="xs:date">
                            <xs:annotation>
                                <xs:documentation xml:lang="de">Gültig von</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                        <xs:element name="to" type="xs:date" minOccurs="0">
                            <xs:annotation>
                                <xs:documentation xml:lang="de">Gültig bis. Wird weggelassen, wenn es sich beim akuellen Record um den neusten Record handelt</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>

    <xs:simpleType name="loadType">
        <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="fullLoad">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Alle Daten werden geliefert, die Daten werden komplett ersetzt, d.h. die nicht mehr gelieferten Daten werden gelöscht</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="incrementalLoad">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Die geänderten Daten werden geliefert und aktualisiert</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="address">
        <xs:sequence>
            <xs:element name="complementaryLine" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Zusatzzeile</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="street" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Strasse</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="houseNumber" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Hausnummer</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="postOfficeBox" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Postfach</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="locality" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Lokalität wie Region, Provinz etc.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="postalCode" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">PLZ</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="city" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Wohnort</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="country" type="common:countryIsoAlpha2" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Land</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:sequence>
                <xs:element name="validity" type="common:validity" minOccurs="0"/>
            </xs:sequence>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="paymentAddress">
        <xs:sequence>
            <xs:element name="accountOwner" type="common:nonEmptyString">
                <xs:annotation>
                    <xs:documentation xml:lang="de">Kontoinhaber</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="accountOwnerSpecialAddress" type="common:address" minOccurs="0">
                <xs:annotation>
                    <xs:documentation xml:lang="de">zusätzliche Adresse</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="iban">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{1,30}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="financialInstitution" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="common:nonEmptyString">
                            <xs:annotation>
                                <xs:documentation xml:lang="de">Name des Finanzinstituts</xs:documentation>
                            </xs:annotation>
                        </xs:element>
                        <xs:element name="address" type="common:address"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="validity" type="common:validity" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="insuranceContractType">
        <xs:annotation>
            <xs:documentation xml:lang="de">Typ des Versicherungsvertrags</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="KTG"/>
            <xs:enumeration value="UVG"/>
            <xs:enumeration value="UVGZ"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="canton">
        <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="AG"/>
            <xs:enumeration value="AI"/>
            <xs:enumeration value="AR"/>
            <xs:enumeration value="BE"/>
            <xs:enumeration value="BL"/>
            <xs:enumeration value="BS"/>
            <xs:enumeration value="FR"/>
            <xs:enumeration value="GE"/>
            <xs:enumeration value="GL"/>
            <xs:enumeration value="GR"/>
            <xs:enumeration value="JU"/>
            <xs:enumeration value="LU"/>
            <xs:enumeration value="NE"/>
            <xs:enumeration value="NW"/>
            <xs:enumeration value="OW"/>
            <xs:enumeration value="SG"/>
            <xs:enumeration value="SH"/>
            <xs:enumeration value="SO"/>
            <xs:enumeration value="SZ"/>
            <xs:enumeration value="TG"/>
            <xs:enumeration value="TI"/>
            <xs:enumeration value="UR"/>
            <xs:enumeration value="VD"/>
            <xs:enumeration value="VS"/>
            <xs:enumeration value="ZG"/>
            <xs:enumeration value="ZH"/>
            <xs:enumeration value="EX">
                <xs:annotation>
                    <xs:documentation>EX (EXtern oder EXpatriates)</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

</xs:schema>
