<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:dgfip="urn:DGFIP:EtatFrais:OrdreMission"
    xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
    xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"
    targetNamespace="urn:DGFIP:EtatFrais:OrdreMission"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" schemaLocation="./xsd/common/UBL-CommonAggregateComponents-2.0.xsd"/>
    <xs:import namespace="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" schemaLocation="./xsd/common/UnqualifiedDataTypeSchemaModule-2.0.xsd"/>
    <xs:element name="EtatFraisExtension">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="dgfip:OrdreMission"/>
                <xs:element ref="dgfip:EtatFrais"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="OrdreMission">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ID" type="xs:ID"><xs:annotation><xs:documentation>Identifiant de l'ordre de mission</xs:documentation></xs:annotation></xs:element>
                <xs:element name="Valideur">
                    <xs:annotation><xs:documentation>Personne ayant validé l'ordre de mission</xs:documentation></xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="cac:PartyIdentification"><xs:annotation><xs:documentation>L'identifiant de la personne</xs:documentation></xs:annotation></xs:element>
                            <xs:element ref="cac:Person"></xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="DateValidation" type="xs:date"><xs:annotation><xs:documentation>Date de validation</xs:documentation></xs:annotation></xs:element>
                <xs:element name="NatureOM">
                    <xs:annotation><xs:documentation>Nature de l'ordre de mission</xs:documentation></xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="MISSION"/>
                            <xs:enumeration value="STAGE"/>
                            <xs:enumeration value="INTERIM"/>
                            <xs:enumeration value="ABSENCE_TEMPORAIRE"/>
                            <xs:enumeration value="SANS_FRAIS"/>
                            <xs:enumeration value="MAINTIEN_ORDRE"/>
                            <xs:enumeration value="AUTRE"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="MontantEstimatif" type="udt:AmountType" minOccurs="0"><xs:annotation><xs:documentation>Montant estimatif du frais</xs:documentation></xs:annotation></xs:element>
                <xs:element name="LieuDeplacement" type="dgfip:TLocalisation"><xs:annotation><xs:documentation>Lieu du déplacement</xs:documentation></xs:annotation></xs:element>
                <xs:element name="LieuDepart" type="dgfip:TLocalisation"><xs:annotation><xs:documentation>Lieu de départ du déplacement</xs:documentation></xs:annotation></xs:element>
                <xs:element name="LieuArrivee" type="dgfip:TLocalisation"><xs:annotation><xs:documentation>Lieu d'arrivée du déplacement</xs:documentation></xs:annotation></xs:element>
                <xs:element name="DateDepart" type="xs:dateTime"><xs:annotation><xs:documentation>Date de départ</xs:documentation></xs:annotation></xs:element>
                <xs:element name="DateRetour" type="xs:dateTime"><xs:annotation><xs:documentation>Date de retour</xs:documentation></xs:annotation></xs:element>
                <xs:element name="Agent" type="dgfip:TAgent"><xs:annotation><xs:documentation>Informations complémentaires sur l'agent</xs:documentation></xs:annotation></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="EtatFrais">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ComptableAssignataire" type="xs:string" minOccurs="0"/>
                <xs:element name="TotalFraisTransport" type="udt:AmountType" minOccurs="0"><xs:annotation><xs:documentation>Total des frais de transport</xs:documentation></xs:annotation></xs:element>
                <xs:element name="TotalIndemnitesSejour" type="udt:AmountType" minOccurs="0"><xs:annotation><xs:documentation>Total des indemnités de séjour</xs:documentation></xs:annotation></xs:element>
                <xs:element name="Valideur">
                    <xs:annotation><xs:documentation>Personne ayant validé l'état de frais</xs:documentation></xs:annotation>
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="cac:PartyIdentification"><xs:annotation><xs:documentation>Identifiant Chorus de l'utilisateur "technique" qui est positionné soit comme gestionnaire DP, soit comme responsable DP associée à l'EF.</xs:documentation></xs:annotation></xs:element>
                            <xs:element ref="cac:Person"></xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="EtatFraisChorus" minOccurs="0" type="dgfip:TEtatFraisChorus"></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="TEtatFraisChorus">
        <xs:annotation><xs:documentation>Précisions à propos d'un état de frais dans Chorus</xs:documentation></xs:annotation>
        <xs:sequence>
            <xs:element name="Societe" type="dgfip:string4e"></xs:element>
            <xs:element name="DomaineActivite" type="dgfip:string4e"></xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="TLocalisation">
        <xs:attribute name="Commune" type="dgfip:string38"/>
        <xs:attribute name="CP" type="dgfip:string10"/>
        <xs:attribute name="CodPays" use="optional" default="FR">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="2"/>
                    <xs:pattern value="[A-Z]*"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
    <xs:complexType name="TAgent">
        <xs:sequence>
            <xs:element name="EmploiFonction" type="dgfip:string38"/>
            <xs:element name="Statut" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="MILITAIRE"/>
                        <xs:enumeration value="CIVIL"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="SituationFamille" minOccurs="0">
                <xs:annotation><xs:documentation>La situation de famille de l'agent</xs:documentation></xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="CELIBATAIRE"/>
                        <xs:enumeration value="MARIE"/>
                        <xs:enumeration value="DIVORCE"/>
                        <xs:enumeration value="VEUF"/>
                        <xs:enumeration value="PACSE"/>
                        <xs:enumeration value="CONCUBINAGE"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="NbEnfants" type="xs:nonNegativeInteger" minOccurs="0"><xs:annotation><xs:documentation>Le nombre d'enfants de l'agent</xs:documentation></xs:annotation></xs:element>
            <xs:element name="Grade" minOccurs="0" type="xs:string"/>
            <xs:element name="AgentChorus" minOccurs="0" type="dgfip:TAgentChorus"></xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="TAgentChorus">
        <xs:annotation><xs:documentation>Précisions à propos d'un tiers dans Chorus</xs:documentation></xs:annotation>
        <xs:sequence>
            <xs:element name="TypeTiers">
                <xs:annotation><xs:documentation>Type de tiers</xs:documentation></xs:annotation>
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="ZCOM"><xs:annotation><xs:documentation>personne morale ou physique immatriculée dans les collectivités d’Outre Mer (Nouvelle Calédonie)</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZCPD"><xs:annotation><xs:documentation>tiers occasionnel</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZETR"><xs:annotation><xs:documentation>personne morale hors UE</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZEUR"><xs:annotation><xs:documentation>personne morale UE hors France</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZFRA"><xs:annotation><xs:documentation>personne morale ou physique immatriculées SIRET</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZPHY"><xs:annotation><xs:documentation>personne physique hors TAE</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZREG"><xs:annotation><xs:documentation>régie</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZSRV"><xs:annotation><xs:documentation>service de l’Etat ministériel</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZTAE"><xs:annotation><xs:documentation>tiers agent de l’Etat</xs:documentation></xs:annotation></xs:enumeration>
                        <xs:enumeration value="ZCOL"><xs:annotation><xs:documentation>tiers agent de l’Etat</xs:documentation></xs:annotation></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="IdFoncTiers" minOccurs="0" type="dgfip:string80">
                <xs:annotation>
                    <xs:documentation>Identifiant fonctionnel du tiers</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="IdChorusTiers" minOccurs="0" type="dgfip:string10">
                <xs:annotation>
                    <xs:documentation>Identifiant Chorus du tiers</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="string4e">
        <xs:restriction base="xs:string">
            <xs:length value="4"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string10">
        <xs:restriction base="xs:string">
            <xs:maxLength value="10"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string38">
        <xs:restriction base="xs:string">
            <xs:maxLength value="38"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string80">
        <xs:restriction base="xs:string">
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>