From 9f7cdc82f8d99b72bb619d4c369516cb57a16733 Mon Sep 17 00:00:00 2001
From: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date: Wed, 31 Jul 2019 19:55:48 +0200
Subject: [PATCH] mdel: order xml elements (#35145)

And handle a possible attribute in the root element.
---
 passerelle/contrib/mdel/mdel.py           | 220 +++++++++--------
 tests/data/mdel/ActeEtatCivil-V1.A.xsd    | 274 ++++++++++++++++++++++
 tests/data/mdel/ILE_v1.1.xsd              | 218 +++++++++++++++++
 tests/data/mdel/formdata.json             |   7 +-
 tests/data/mdel/formdata_aec_deces.json   |   1 -
 tests/data/mdel/formdata_aec_mariage.json |  13 +-
 tests/test_mdel.py                        |  30 ++-
 7 files changed, 658 insertions(+), 105 deletions(-)
 create mode 100644 tests/data/mdel/ActeEtatCivil-V1.A.xsd
 create mode 100644 tests/data/mdel/ILE_v1.1.xsd

diff --git a/passerelle/contrib/mdel/mdel.py b/passerelle/contrib/mdel/mdel.py
index 24683d12..6c5fed2e 100644
--- a/passerelle/contrib/mdel/mdel.py
+++ b/passerelle/contrib/mdel/mdel.py
@@ -14,6 +14,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import collections
 import os
 import base64
 import datetime
@@ -256,52 +257,84 @@ class Data(MDELBase):
             if self.mapping.get(key, None):
                 elements[self.mapping[key]] = value
 
-        root = ElementFactory(self.root_element)
+        root = ElementFactory(self.root_element, **self.root_attributes)
 
-        for key, value in elements.items():
-            path = key.split('_')
-            root.append(json_to_xml(path, value, root), allow_new=False)
+        for key in self.mapping.values():
+            if key in elements:
+                value = elements[key]
+                path = key.split('_')
+                root.append(json_to_xml(path, value, root), allow_new=False)
 
         return root
 
 
 class ILEData(Data):
 
-    mapping = {
-        'nom_famille': 'Inscription_Electeur_Noms_NomFamille',
-        'nom_usage': 'Inscription_Electeur_Noms_NomUsage',
-        'prenoms': 'Inscription_Electeur_Prenoms_Prenom',
-        'date_naissance': 'Inscription_Electeur_DateDeNaissance',
-        'lieunaiss_localite': 'Inscription_Electeur_LieuDeNaissance_Localite',
-        'lieunaiss_division_territoriale': 'Inscription_Electeur_LieuDeNaissance_DivisionTerritoriale',
-        'lieunaiss_code_postal': 'Inscription_Electeur_LieuDeNaissance_CodePostal',
-        'lieunaiss_pays_raw': 'Inscription_Electeur_LieuDeNaissance_Pays',
-        'sexe_raw': 'Inscription_Electeur_Sexe',
-        'nationalite_raw': 'Inscription_Electeur_Nationalite',
-        'adresse_num_voie': 'Inscription_Electeur_AdresseDeLElecteur_NumeroVoie',
-        'adresse_type_voie': 'Inscription_Electeur_AdresseDeLElecteur_TypeVoie',
-        'adresse_nom_voie': 'Inscription_Electeur_AdresseDeLElecteur_NomVoie',
-        'adresse_complement': 'Inscription_Electeur_AdresseDeLElecteur_Complement',
-        'adresse_code_postal': 'Inscription_Electeur_AdresseDeLElecteur_CodePostal',
-        'adresse_localite': 'Inscription_Electeur_AdresseDeLElecteur_Localite',
-        'adresse_division_territoriale': 'Inscription_Electeur_AdresseDeLElecteur_DivisionTerritoriale',
-        'contact_uri': 'Inscription_Electeur_MethodeDeContact_URI',
-        'contact_code': 'Inscription_Electeur_MethodeDeContact_CanalCode',
-        'inscription_liste_type_raw': 'Inscription_TypeDeListe',
-        'inscription_localite': 'CommuneDInscription_Localite',
-        'inscription_division_territoriale': 'CommuneDInscription_DivisionTeritoriale',
-        'insription_code_insee': 'CommuneDInscription_CodeInsee',
-        'inscription_date': 'DateDInscription',
-        'inscription_type': 'TypeDInscription',
-        'anterieur_situation_raw': 'SituationElectoraleAnterieure_SituationDeLElecteur',
-        'anterieur_consulat': 'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_AmbassadeOuPosteConsulaire',
-        'anterieur_consulat_pays_raw': 'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_Pays',
-        'anterieur_localite': 'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_Localite',
-        'anterieur_division_territoriale': 'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_DivisionTerritoriale',
-        'anterieur_ue_localite': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_Localite',
-        'anterieur_ue_division_territoriale': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_DivisionTerritoriale',
-        'anterieur_ue_localite_pays_raw': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_Pays'
-    }
+    mapping = collections.OrderedDict([
+        ('nom_famille', 'Inscription_Electeur_Noms_NomFamille'),
+        ('nom_usage', 'Inscription_Electeur_Noms_NomUsage'),
+        ('prenoms', 'Inscription_Electeur_Prenoms_Prenom'),
+        ('date_naissance', 'Inscription_Electeur_DateDeNaissance'),
+        ('lieunaiss_localite', 'Inscription_Electeur_LieuDeNaissance_Localite'),
+        (
+            'lieunaiss_division_territoriale',
+            'Inscription_Electeur_LieuDeNaissance_DivisionTerritoriale'
+        ),
+        ('lieunaiss_code_postal', 'Inscription_Electeur_LieuDeNaissance_CodePostal'),
+        ('lieunaiss_pays_raw', 'Inscription_Electeur_LieuDeNaissance_Pays'),
+        ('sexe_raw', 'Inscription_Electeur_Sexe'),
+        ('nationalite_raw', 'Inscription_Electeur_Nationalite'),
+        ('adresse_complement', 'Inscription_Electeur_AdresseDeLElecteur_Complement'),
+        ('adresse_num_voie', 'Inscription_Electeur_AdresseDeLElecteur_NumeroVoie'),
+        ('adresse_type_voie', 'Inscription_Electeur_AdresseDeLElecteur_TypeVoie'),
+        ('adresse_nom_voie', 'Inscription_Electeur_AdresseDeLElecteur_NomVoie'),
+        ('adresse_code_postal', 'Inscription_Electeur_AdresseDeLElecteur_CodePostal'),
+        ('adresse_localite', 'Inscription_Electeur_AdresseDeLElecteur_Localite'),
+        (
+            'adresse_division_territoriale',
+            'Inscription_Electeur_AdresseDeLElecteur_DivisionTerritoriale'
+        ),
+        ('contact_code', 'Inscription_Electeur_MethodeDeContact_CanalCode'),
+        ('contact_uri', 'Inscription_Electeur_MethodeDeContact_URI'),
+        ('inscription_liste_type_raw', 'Inscription_TypeDeListe'),
+        ('inscription_localite', 'Inscription_CommuneDInscription_Localite'),
+        (
+            'inscription_division_territoriale',
+            'Inscription_CommuneDInscription_DivisionTerritoriale'),
+        ('inscription_code_insee', 'Inscription_CommuneDInscription_CodeInsee'),
+        ('inscription_date', 'DateDInscription'),
+        ('inscription_type', 'TypeDInscription'),
+        ('anterieur_situation_raw', 'SituationElectoraleAnterieure_SituationDeLElecteur'),
+        (
+            'anterieur_consulat',
+            'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription'
+            '_AmbassadeOuPosteConsulaire'
+        ),
+        (
+            'anterieur_consulat_pays_raw',
+            'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_Pays'
+        ),
+        (
+            'anterieur_localite',
+            'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_Localite'
+        ),
+        (
+            'anterieur_ue_localite',
+            'SituationElectoraleAnterieure_PaysUeDerniereInscription_Localite'
+        ),
+        (
+            'anterieur_division_territoriale',
+            'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_DivisionTerritoriale'
+        ),
+        (
+            'anterieur_ue_division_territoriale',
+            'SituationElectoraleAnterieure_PaysUeDerniereInscription_DivisionTerritoriale'
+        ),
+        (
+            'anterieur_ue_localite_pays_raw',
+            'SituationElectoraleAnterieure_PaysUeDerniereInscription_Pays'
+        )
+    ])
 
     required = [
         'nom_famille',
@@ -323,7 +356,7 @@ class ILEData(Data):
 
     def __init__(self, demand_id, data):
         self.root_element = 'AvisDInscription'
-
+        self.root_attributes = {}
         # only possible value : vol as 'Inscription Volontaire'
         data['inscription_type'] = 'vol'
 
@@ -332,59 +365,59 @@ class ILEData(Data):
 
 class AECData(Data):
 
-    mapping = {
-        'aec_nature': 'DemandeActe_NatureActe_Libelle',
-        'aec_nature_raw': 'DemandeActe_NatureActe_Code',
-        'aec_type': 'DemandeActe_TypeActe_Libelle',
-        'aec_type_raw': 'DemandeActe_TypeActe_Code',
-        'code_insee': 'DemandeActe_LieuActe_CodeINSEE',
-        'code_postal': 'DemandeActe_LieuActe_CodePostal',
-        'demandeur_adresse_adresse': 'DemandeActe_Demandeur_AdresseEtrangere_Adresse',
-        'demandeur_adresse_batiment': 'DemandeActe_Demandeur_AdresseFrancaise_Batiment',
-        'demandeur_adresse_boite_postal': 'DemandeActe_Demandeur_AdresseFrancaise_BoitePostale',
-        'demandeur_adresse_code_postal': 'DemandeActe_Demandeur_AdresseFrancaise_CodePostal',
-        'demandeur_adresse_etage': 'DemandeActe_Demandeur_AdresseFrancaise_Etage',
-        'demandeur_adresse_ville': 'DemandeActe_Demandeur_AdresseFrancaise_Ville',
-        'demandeur_adresse_etrangere': 'DemandeActe_Demandeur_AdresseEtrangere_Adresse',
-        'demandeur_adresse_etrangere_pays_raw': 'DemandeActe_Demandeur_AdresseEtrangere_Pays',
-        'demandeur_adresse_voie': 'DemandeActe_Demandeur_AdresseFrancaise_Voie',
-        'demandeur_civilite': 'DemandeActe_Demandeur_Civilite',
-        'demandeur_email': 'DemandeActe_Demandeur_Courriel',
-        'demandeur_nom': 'DemandeActe_Demandeur_Nom',
-        'demandeur_prenom': 'DemandeActe_Demandeur_Prenom',
-        'demandeur_telephone': 'DemandeActe_Demandeur_Telephone',
-        'nombre_exemplaires': 'DemandeActe_NombreExemplaires',
-        'motif_demande': 'DemandeActe_MotifDemande_Libelle',
-        'motif_demande_raw': 'DemandeActe_MotifDemande_Commentaire',
-        'qualite_demandeur': 'DemandeActe_Demandeur_QualiteDemandeur_Libelle',
-        'qualite_demandeur_raw': 'DemandeActe_Demandeur_QualiteDemandeur_Code',
-        'date_acte': 'DemandeActe_DateActe',
-        'titulaire_civilite': 'DemandeActe_Titulaire_Civilite',
-        'titulaire_mere_nom': 'DemandeActe_Titulaire_Filiation_Mere_Nom',
-        'titulaire_mere_prenoms': 'DemandeActe_Titulaire_Filiation_Mere_Prenoms',
-        'titulaire_naiss_date': 'DemandeActe_Titulaire_DateDeNaissance',
-        'titulaire_naiss_departement_raw': 'DemandeActe_Titulaire_DepartementDeNaissance',
-        'titulaire_nationalite_raw': 'DemandeActe_Titulaire_Nationalite',
-        'titulaire_naiss_pays_raw': 'DemandeActe_Titulaire_PaysDeNaissance',
-        'titulaire_naiss_ville': 'DemandeActe_Titulaire_LieuDeNaissance',
-        'titulaire_nom': 'DemandeActe_Titulaire_NomNaissance',
-        'titulaire_pere_nom': 'DemandeActe_Titulaire_Filiation_Pere_Nom',
-        'titulaire_pere_prenoms': 'DemandeActe_Titulaire_Filiation_Pere_Prenoms',
-        'titulaire_prenoms': 'DemandeActe_Titulaire_Prenoms',
-        'titulaire2_civilite': 'DemandeActe_Titulaire2_Civilite',
-        'titulaire2_mere_nom': 'DemandeActe_Titulaire2_Filiation_Mere_Nom',
-        'titulaire2_mere_prenoms': 'DemandeActe_Titulaire2_Filiation_Mere_Prenoms',
-        'titulaire2_naiss_date': 'DemandeActe_Titulaire2_DateDeNaissance',
-        'titulaire2_naiss_departement_raw': 'DemandeActe_Titulaire2_DepartementDeNaissance',
-        'titulaire2_nationalite_raw': 'DemandeActe_Titulaire2_Nationalite',
-        'titulaire2_naiss_pays_raw': 'DemandeActe_Titulaire2_PaysDeNaissance',
-        'titulaire2_naiss_ville': 'DemandeActe_Titulaire2_LieuDeNaissance',
-        'titulaire2_nom': 'DemandeActe_Titulaire2_NomNaissance',
-        'titulaire2_pere_nom': 'DemandeActe_Titulaire2_Filiation_Pere_Nom',
-        'titulaire2_pere_prenoms': 'DemandeActe_Titulaire2_Filiation_Pere_Prenoms',
-        'titulaire2_prenoms': 'DemandeActe_Titulaire2_Prenoms',
-        'ville': 'DemandeActe_LieuActe_Ville'
-    }
+    mapping = collections.OrderedDict([
+        ('aec_type_raw', 'DemandeActe_TypeActe_Code'),
+        ('aec_type', 'DemandeActe_TypeActe_Libelle'),
+        ('aec_nature_raw', 'DemandeActe_NatureActe_Code'),
+        ('aec_nature', 'DemandeActe_NatureActe_Libelle'),
+        ('date_acte', 'DemandeActe_DateActe'),
+        ('code_postal', 'DemandeActe_LieuActe_CodePostal'),
+        ('ville', 'DemandeActe_LieuActe_Ville'),
+        ('code_insee', 'DemandeActe_LieuActe_CodeINSEE'),
+        ('nombre_exemplaires', 'DemandeActe_NombreExemplaires'),
+        ('motif_demande', 'DemandeActe_MotifDemande_Libelle'),
+        ('motif_demande_raw', 'DemandeActe_MotifDemande_Commentaire'),
+        ('qualite_demandeur_raw', 'DemandeActe_Demandeur_QualiteDemandeur_Code'),
+        ('qualite_demandeur', 'DemandeActe_Demandeur_QualiteDemandeur_Libelle'),
+        ('demandeur_civilite', 'DemandeActe_Demandeur_Civilite'),
+        ('demandeur_nom', 'DemandeActe_Demandeur_Nom'),
+        ('demandeur_prenom', 'DemandeActe_Demandeur_Prenom'),
+        ('demandeur_adresse_etage', 'DemandeActe_Demandeur_AdresseFrancaise_Etage'),
+        ('demandeur_adresse_batiment', 'DemandeActe_Demandeur_AdresseFrancaise_Batiment'),
+        ('demandeur_adresse_voie', 'DemandeActe_Demandeur_AdresseFrancaise_Voie'),
+        ('demandeur_adresse_boite_postal', 'DemandeActe_Demandeur_AdresseFrancaise_BoitePostale'),
+        ('demandeur_adresse_code_postal', 'DemandeActe_Demandeur_AdresseFrancaise_CodePostal'),
+        ('demandeur_adresse_ville', 'DemandeActe_Demandeur_AdresseFrancaise_Ville'),
+        ('demandeur_adresse_adresse', 'DemandeActe_Demandeur_AdresseEtrangere_Adresse'),
+        ('demandeur_adresse_etrangere', 'DemandeActe_Demandeur_AdresseEtrangere_Adresse'),
+        ('demandeur_adresse_etrangere_pays_raw', 'DemandeActe_Demandeur_AdresseEtrangere_Pays'),
+        ('demandeur_email', 'DemandeActe_Demandeur_Courriel'),
+        ('demandeur_telephone', 'DemandeActe_Demandeur_Telephone'),
+        ('titulaire_civilite', 'DemandeActe_Titulaire_Civilite'),
+        ('titulaire_nom', 'DemandeActe_Titulaire_NomNaissance'),
+        ('titulaire_prenoms', 'DemandeActe_Titulaire_Prenoms'),
+        ('titulaire_pere_nom', 'DemandeActe_Titulaire_Filiation_Pere_Nom'),
+        ('titulaire_pere_prenoms', 'DemandeActe_Titulaire_Filiation_Pere_Prenoms'),
+        ('titulaire_mere_nom', 'DemandeActe_Titulaire_Filiation_Mere_Nom'),
+        ('titulaire_mere_prenoms', 'DemandeActe_Titulaire_Filiation_Mere_Prenoms'),
+        ('titulaire_naiss_date', 'DemandeActe_Titulaire_DateDeNaissance'),
+        ('titulaire_naiss_ville', 'DemandeActe_Titulaire_LieuDeNaissance'),
+        ('titulaire_naiss_departement_raw', 'DemandeActe_Titulaire_DepartementDeNaissance'),
+        ('titulaire_naiss_pays_raw', 'DemandeActe_Titulaire_PaysDeNaissance'),
+        ('titulaire_nationalite_raw', 'DemandeActe_Titulaire_Nationalite'),
+        ('titulaire2_civilite', 'DemandeActe_Titulaire2_Civilite'),
+        ('titulaire2_nom', 'DemandeActe_Titulaire2_NomNaissance'),
+        ('titulaire2_prenoms', 'DemandeActe_Titulaire2_Prenoms'),
+        ('titulaire2_pere_nom', 'DemandeActe_Titulaire2_Filiation_Pere_Nom'),
+        ('titulaire2_pere_prenoms', 'DemandeActe_Titulaire2_Filiation_Pere_Prenoms'),
+        ('titulaire2_mere_nom', 'DemandeActe_Titulaire2_Filiation_Mere_Nom'),
+        ('titulaire2_mere_prenoms', 'DemandeActe_Titulaire2_Filiation_Mere_Prenoms'),
+        ('titulaire2_naiss_date', 'DemandeActe_Titulaire2_DateDeNaissance'),
+        ('titulaire2_naiss_ville', 'DemandeActe_Titulaire2_LieuDeNaissance'),
+        ('titulaire2_naiss_departement_raw', 'DemandeActe_Titulaire2_DepartementDeNaissance'),
+        ('titulaire2_naiss_pays_raw', 'DemandeActe_Titulaire2_PaysDeNaissance'),
+        ('titulaire2_nationalite_raw', 'DemandeActe_Titulaire2_Nationalite'),
+    ])
 
     required = [
         'aec_nature',
@@ -413,6 +446,7 @@ class AECData(Data):
 
     def __init__(self, demand_id, data):
         self.root_element = 'EnveloppeMetierType'
+        self.root_attributes = {'canal_utilise': '0'}
 
         super(AECData, self).__init__(demand_id, data)
 
diff --git a/tests/data/mdel/ActeEtatCivil-V1.A.xsd b/tests/data/mdel/ActeEtatCivil-V1.A.xsd
new file mode 100644
index 00000000..21f85fd1
--- /dev/null
+++ b/tests/data/mdel/ActeEtatCivil-V1.A.xsd
@@ -0,0 +1,274 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<!-- Date de création : 18/03/13 
+	Nom de l'organisme : Bull Echirolles 
+	Nom	de l'auteur : Reynaud Angélique 
+	Numéro de version : 0.1 
+	Historique des modifications (pour chaque modification :) 
+		- Date de mise à jour :26/03/2013	
+		- Nom de l'organisme : Bull Echirolles
+		- Nom de l'auteur : Angélique Reynaud
+		- Numéro de version : 1.0
+		- Description : Mis à jour du document suite à l'atelier et aux échanges de mails
+			Ajout des balises : LieuActe , DateActe , AdresseEtrangere dans DemandeurType, Civilite dans DemandeurType et IndividuType , Titulaire2
+			Suppression de LieuActe et DateActe dans IndividuType
+			Declaration des type complexe : LieuActeType, CiviliteType, AdresseEtrangereType
+			
+		- Date de mise à jour :15/04/2013	
+		- Nom de l'organisme : Bull Echirolles
+		- Nom de l'auteur : Maxime PASQUIER
+		- Numéro de version : 1.A
+		- Description : Mise en conformité du schema avec la norme XSD pour SmartGuide Designer
+		
+		- Date de mise à jour :16/04/2013	
+		- Nom de l'organisme : Bull Echirolles
+		- Nom de l'auteur : Maxime PASQUIER
+		- Numéro de version : 1.B
+		- Description : Suite au mail du 15/04/13,
+			Ajout des champs ; Date de naissance ; Lieu de naissance ; Département de naissance ; Pays de naissance ; Nationalité
+			pour une demande d'acte de mariage ou de décès pour les personnes concernées.
+			Pas d'éclatement de l'adresse française.
+			
+		- Date de mise à jour :28/05/2013	
+		- Nom de l'organisme : Bull Echirolles
+		- Nom de l'auteur : Maxime PASQUIER
+		- Numéro de version : 1.C
+		- Description : Suite aux mantis 7560 et 7635
+			Correction du nom de la balise <Nationnalite> en <Nationalite>
+			Ajout des listes de valeur pour les balises <NatureActe>, <MotifDemande> et <QualiteDemandeur>
+			Ajout de l'information minOccurs=0 sur les balises <Telephone>, <Pere>, <Mere>, <LieuDeNaissance>, <DepartementDeNaissance>, <PaysDeNaissance> et <Nationalite>
+-->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+	<xsd:element name="EnveloppeMetierType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Le type des enveloppes metier possible
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:choice>
+					<xsd:element name="DemandeActe" type="DemandeActeType">
+						<xsd:annotation>
+							<xsd:documentation>
+								Ceci concerne la demande d'acte d'etat civil global (naissance,
+								mariage, deces)
+							</xsd:documentation>
+						</xsd:annotation>
+					</xsd:element>
+				</xsd:choice>
+			</xsd:sequence>
+			<xsd:attribute name="canal_utilise" type="xsd:string" use="required" />
+		</xsd:complexType>
+	</xsd:element>
+	
+	<xsd:complexType name="DemandeActeType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Informations decrivant une demande d'acte
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element name="TypeActe" type="TypeActeType">
+				<xsd:annotation>
+					<xsd:documentation>
+						Type d'acte: NAISSANCE, MARIAGE, DECES
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>
+			<xsd:element name="NatureActe" type="NatureActeType">
+				<xsd:annotation>
+					<xsd:documentation>
+						Nautre de l'acte: COPIE-INTEGRALE, EXTRAIT-AVEC-FILIATION, EXTRAIT-SANS-FILIATION, EXTRAIT-PLURILINGUE
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>
+			<xsd:element name="DateActe" type="xsd:date" >
+				<xsd:annotation>
+					<xsd:documentation>
+						Date de l'acte : date de naissance ou date du mariage ou date du décès
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>
+			<xsd:element name="LieuActe" type="LieuActeType">
+				<xsd:annotation>
+					<xsd:documentation>
+						Lieu de l'acte : lieu de naissance ou lieu de la cérémonie du mariage ou lieu du décès
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>			
+			<xsd:element name="NombreExemplaires">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:integer">
+						<xsd:minInclusive value="1" />
+					</xsd:restriction>
+				</xsd:simpleType>
+			</xsd:element>
+			<xsd:element name="MotifDemande" type="MotifDemandeType">
+				<xsd:annotation>
+					<xsd:documentation>
+						Motif de la demande : CarteNationaleIdentite, Passeport, CertificatDeNationaliteFrancaise, Mariage, Pension, ProcedureJudiciaire, PacteCivilDeSolidarite, ActeDeNotaire, Autre
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>
+			<xsd:element name="Demandeur" type="DemandeurType" />
+			<xsd:element name="Titulaire" type="IndividuType"/>
+			<xsd:element name="Titulaire2" type="IndividuType" minOccurs="0" />
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	
+	<xsd:simpleType name="NomType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Type des elements de nom Etat Civil
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:restriction base="xsd:string" />
+	</xsd:simpleType>
+	
+	<xsd:complexType name="ParentType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Information concernant un parent d'un individu
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element name="Nom" type="NomType" minOccurs="0" />
+			<xsd:element name="Prenoms" type="NomType" minOccurs="0" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="FiliationType">
+		<xsd:sequence>
+			<xsd:element name="Pere" type="ParentType" minOccurs="0" />
+			<xsd:element name="Mere" type="ParentType" minOccurs="0" />
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:complexType name="AdressePostaleFrancaiseType" mixed="true">
+		<xsd:annotation>
+			<xsd:documentation>L'adresse</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>			
+			<xsd:element name="Etage" type="xsd:string" minOccurs="0"/>
+			<xsd:element name="Batiment" type="xsd:string" minOccurs="0"/>
+			<xsd:element name="Voie" type="xsd:string" />
+			<xsd:element name="BoitePostale" type="xsd:string" minOccurs="0"/>
+			<xsd:element name="CodePostal" type="xsd:string" />
+			<xsd:element name="Ville" type="xsd:string" />	
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:complexType name="QualiteDemandeurType">
+		<xsd:sequence>
+			<xsd:element name="Code" type="xsd:string" />
+			<xsd:element name="Libelle" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="MotifDemandeType">
+		<xsd:sequence>
+			<xsd:element name="Libelle" type="xsd:string" />
+			<xsd:element name="Commentaire" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="TypeActeType">
+		<xsd:sequence>
+			<xsd:element name="Code">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:string">
+						<xsd:enumeration value="NAISSANCE" />
+						<xsd:enumeration value="MARIAGE" />
+						<xsd:enumeration value="DECES" />
+					</xsd:restriction>
+				</xsd:simpleType>
+			</xsd:element>
+			<xsd:element name="Libelle" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="NatureActeType">
+		<xsd:sequence>
+			<xsd:element name="Code">
+				<xsd:simpleType>
+					<xsd:restriction base="xsd:string">
+						<xsd:enumeration value="COPIE-INTEGRALE" />
+						<xsd:enumeration value="EXTRAIT-AVEC-FILIATION" />
+						<xsd:enumeration value="EXTRAIT-SANS-FILIATION" />
+						<xsd:enumeration value="EXTRAIT-PLURILINGUE" />
+					</xsd:restriction>
+				</xsd:simpleType>
+			</xsd:element>
+			<xsd:element name="Libelle" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:complexType name="IndividuType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Informations caracterisant un individu
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element name="Civilite" type="CiviliteType" />
+			<xsd:element name="NomNaissance" type="NomType" />
+			<xsd:element name="Prenoms" type="NomType" />
+			<xsd:element name="Filiation" type="FiliationType" minOccurs="0" />
+			<xsd:element name="DateDeNaissance" type="xsd:date" />
+			<xsd:element name="LieuDeNaissance" type="xsd:string" minOccurs="0" />
+			<xsd:element name="DepartementDeNaissance" type="xsd:string" minOccurs="0" />
+			<xsd:element name="PaysDeNaissance" type="xsd:string" minOccurs="0" />
+			<xsd:element name="Nationalite" type="xsd:string" minOccurs="0" />
+		</xsd:sequence>
+	</xsd:complexType>
+	
+	<xsd:complexType name="DemandeurType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Informations caracterisant le demandeur de l'acte
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element name="QualiteDemandeur" type="QualiteDemandeurType" minOccurs="0">
+				<xsd:annotation>
+					<xsd:documentation>
+						Motif de la demande : PersonneConcernee, PereMere, Conjoint, Fils, GrandPere, PetitFils, Representant, Heriter, Autre
+					</xsd:documentation>
+				</xsd:annotation>
+			</xsd:element>
+			<xsd:element name="Civilite" type="CiviliteType" />
+			<xsd:element name="Nom" type="NomType" />
+			<xsd:element name="Prenom" type="NomType" />
+			<xsd:choice>
+				<xsd:element name="AdresseFrancaise" type="AdressePostaleFrancaiseType" />
+				<xsd:element name="AdresseEtrangere" type="AdresseEtrangereType" />
+			</xsd:choice>
+			<xsd:element name="Courriel" type="xsd:string" />
+			<xsd:element name="Telephone" type="xsd:string" minOccurs="0" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:complexType name="LieuActeType">
+		<xsd:annotation>
+			<xsd:documentation>
+				Informations sur le lieu de l'acte
+			</xsd:documentation>
+		</xsd:annotation>
+		<xsd:sequence>
+			<xsd:element name="BoitePostale-LieuDit" type="xsd:string" minOccurs="0"/>
+			<xsd:element name="CodePostal" type="xsd:string" />
+			<xsd:element name="Ville" type="xsd:string" />
+			<xsd:element name="CodeINSEE" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>
+	<xsd:simpleType name="CiviliteType">
+		<xsd:restriction base="xsd:string">
+			<xsd:enumeration value="MONSIEUR"/>
+			<xsd:enumeration value="MADAME"/>
+		</xsd:restriction>
+	</xsd:simpleType>	
+	<xsd:complexType name="AdresseEtrangereType">
+		<xsd:sequence>
+			<xsd:element name="Adresse" type="xsd:string" />
+			<xsd:element name="Pays" type="xsd:string" />
+		</xsd:sequence>
+	</xsd:complexType>	
+	
+</xsd:schema>
\ No newline at end of file
diff --git a/tests/data/mdel/ILE_v1.1.xsd b/tests/data/mdel/ILE_v1.1.xsd
new file mode 100644
index 00000000..0462b914
--- /dev/null
+++ b/tests/data/mdel/ILE_v1.1.xsd
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2009 sp1 (http://www.altova.com) by Jean.dupont (EMBRACE) -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="AvisDInscription">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="Inscription" minOccurs="1">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="Electeur" minOccurs="1">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element name="Noms" minOccurs="1">
+                      <xs:complexType>
+                        <xs:sequence>
+                          <xs:element name="NomFamille">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="NomUsage" type="xs:string" minOccurs="0"/>
+                        </xs:sequence>
+                      </xs:complexType>
+                    </xs:element>
+                    <xs:element name="Prenoms" minOccurs="0">
+                      <xs:complexType>
+                        <xs:sequence>
+                          <xs:element name="Prenom" type="xs:string" maxOccurs="unbounded"/>
+                        </xs:sequence>
+                      </xs:complexType>
+                    </xs:element>
+                    <xs:element name="DateDeNaissance">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:minLength value="1"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                    <xs:element name="LieuDeNaissance" minOccurs="1">
+                      <xs:complexType>
+                        <xs:sequence>
+                          <xs:element name="Localite">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+                          <xs:element name="CodePostal" type="xs:string" minOccurs="0"/>
+                          <xs:element name="Subdivision" type="xs:string" minOccurs="0"/>
+                          <xs:element name="Pays">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                        </xs:sequence>
+                      </xs:complexType>
+                    </xs:element>
+                    <xs:element name="Sexe">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:minLength value="1"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                    <xs:element name="Nationalite">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:minLength value="1"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                    <xs:element name="AdresseDeLElecteur" minOccurs="0">
+                      <xs:complexType>
+                        <xs:sequence>
+                          <xs:element name="PointDeRemise" type="xs:string" minOccurs="0"/>
+                          <xs:element name="Complement" type="xs:string" minOccurs="0"/>
+                          <xs:element name="NumeroVoie" type="xs:string" minOccurs="0"/>
+                          <xs:element name="Extension" type="xs:string" minOccurs="0"/>
+                          <xs:element name="TypeVoie">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="NomVoie">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="LieuDit" type="xs:string" minOccurs="0"/>
+                          <xs:element name="CodePostal">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:length value="5"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="Localite">
+                            <xs:simpleType>
+                              <xs:restriction base="xs:string">
+                                <xs:minLength value="1"/>
+                              </xs:restriction>
+                            </xs:simpleType>
+                          </xs:element>
+                          <xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0"/>
+                        </xs:sequence>
+                      </xs:complexType>
+                    </xs:element>
+                    <xs:element name="MethodeDeContact" minOccurs="0" maxOccurs="unbounded">
+                      <xs:complexType>
+                        <xs:sequence>
+                          <xs:element name="CanalCode" type="xs:string" minOccurs="0"/>
+                          <xs:element name="URI" type="xs:string" minOccurs="0"/>
+                        </xs:sequence>
+                      </xs:complexType>
+                    </xs:element>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+              <xs:element name="TypeDeListe" type="xs:string" minOccurs="0"/>
+              <xs:element name="CommuneDInscription" minOccurs="1">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element name="Localite">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:minLength value="1"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                    <xs:element name="DivisionTerritoriale">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:minLength value="1"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                    <xs:element name="CodeInsee">
+                      <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                          <xs:length value="5"/>
+                        </xs:restriction>
+                      </xs:simpleType>
+                    </xs:element>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="DateDInscription" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>Date de réception de la demande en mairie</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="TypeDInscription" type="xs:string" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>Décrit le type d'inscription de l'électeur. Ex: vol pour volontaire …</xs:documentation>
+          </xs:annotation>
+        </xs:element>
+        <xs:element name="SituationElectoraleAnterieure" minOccurs="0">
+          <xs:annotation>
+            <xs:documentation>Décrit la situation antérieure de l'électeur (prem: première inscription, cci: réinscription ...)</xs:documentation>
+          </xs:annotation>
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="SituationDeLElecteur">
+                <xs:annotation>
+                  <xs:documentation>1ère inscription dans une commune française=prem, changement de commune d'inscription=cci. 
+Les déménagements à l'intérieur d'une même commune ou d'un même arrondissement pour Paris, Lyon et Marseille ne doivent pas être transmis à l'Insee</xs:documentation>
+                </xs:annotation>
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:minLength value="1"/>
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="ConsulatDePrecedenteInscription" minOccurs="0">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element name="AmbassadeOuPosteConsulaire" type="xs:string" minOccurs="0"/>
+                    <xs:element name="Pays" type="xs:string" minOccurs="0"/>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+              <xs:element name="CommuneDePrecedenteInscription" minOccurs="0">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element name="Localite" type="xs:string" minOccurs="0"/>
+                    <xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+              <xs:element name="PaysUeDerniereInscription" minOccurs="0">
+                <xs:complexType>
+                  <xs:sequence>
+                    <xs:element name="Localite" type="xs:string" minOccurs="0"/>
+                    <xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0"/>
+                    <xs:element name="Pays" type="xs:string" minOccurs="0"/>
+                  </xs:sequence>
+                </xs:complexType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
diff --git a/tests/data/mdel/formdata.json b/tests/data/mdel/formdata.json
index d5eda39d..e6a129c0 100644
--- a/tests/data/mdel/formdata.json
+++ b/tests/data/mdel/formdata.json
@@ -109,8 +109,8 @@
         "Habitation_raw": "Oui",
         "Inscription": "Oui",
         "Inscription_raw": "Oui",
-        "adresse_code_postal": "54 000",
-        "adresse_code_postal_raw": "54 000",
+        "adresse_code_postal": "54000",
+        "adresse_code_postal_raw": "54000",
         "adresse_complement1": "Apt 4112",
         "adresse_complement2": "Batiment B",
         "adresse_localite": "Nancy",
@@ -138,6 +138,9 @@
         "etranger_raw": "Non",
         "inscription_liste_type": "Liste Principale., Inscription pour les \u00e9lections municipales.",
         "inscription_liste_type_raw": "cm",
+        "inscription_localite": "Paris",
+        "inscription_code_insee": "75111",
+        "inscription_division_territoriale": "ile de france",
         "justificatif_domicile_hebergeur": {
             "content": "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L0FzY2VudCA4MzIKICAgL0Rlc2NlbnQgLTMwMAogICAvQ2FwSGVpZ2h0IDgzMgogICAvU3RlbVYgODAKICAgL1N0ZW1IIDgwCiAgIC9Gb250RmlsZTIgMTMgMCBSCj4+CmVuZG9iago2IDAgb2JqCjw8IC9UeXBlIC9Gb250CiAgIC9TdWJ0eXBlIC9UcnVlVHlwZQogICAvQmFzZUZvbnQgL1VTU1FYTCtMaWJlcmF0aW9uTW9ubwogICAvRmlyc3RDaGFyIDMyCiAgIC9MYXN0Q2hhciAxMTYKICAgL0ZvbnREZXNjcmlwdG9yIDE3IDAgUgogICAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwogICAvV2lkdGhzIFsgNjAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2MDAgMCAwIDYwMCA2MDAgMCAwIDYwMCA2MDAgMCAwIDYwMCAwIDAgNjAwIDYwMCBdCiAgICAvVG9Vbmljb2RlIDE1IDAgUgo+PgplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZXMKICAgL0tpZHMgWyA3IDAgUiBdCiAgIC9Db3VudCAxCj4+CmVuZG9iagoxOCAwIG9iago8PCAvQ3JlYXRvciAoY2Fpcm8gMS4xNC42IChodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcpKQogICAvUHJvZHVjZXIgKGNhaXJvIDEuMTQuNiAoaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnKSkKPj4KZW5kb2JqCjE5IDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nCiAgIC9QYWdlcyAxIDAgUgo+PgplbmRvYmoKeHJlZgowIDIwCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAxNTgxMCAwMDAwMCBuIAowMDAwMDAwMzQ4IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDMyNiAwMDAwMCBuIAowMDAwMDA5OTkxIDAwMDAwIG4gCjAwMDAwMTU0MDQgMDAwMDAgbiAKMDAwMDAwMDQ3NiAwMDAwMCBuIAowMDAwMDAwNzA0IDAwMDAwIG4gCjAwMDAwMDkyMzYgMDAwMDAgbiAKMDAwMDAwOTI1OSAwMDAwMCBuIAowMDAwMDA5NjkyIDAwMDAwIG4gCjAwMDAwMDk3MTUgMDAwMDAgbiAKMDAwMDAxMDQ0MyAwMDAwMCBuIAowMDAwMDE0NzM2IDAwMDAwIG4gCjAwMDAwMTQ3NjAgMDAwMDAgbiAKMDAwMDAxNTEwNiAwMDAwMCBuIAowMDAwMDE1MTI5IDAwMDAwIG4gCjAwMDAwMTU4NzUgMDAwMDAgbiAKMDAwMDAxNjAwMyAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDIwCiAgIC9Sb290IDE5IDAgUgogICAvSW5mbyAxOCAwIFIKPj4Kc3RhcnR4cmVmCjE2MDU2CiUlRU9GCg==",
             "content_type": "application/pdf",
diff --git a/tests/data/mdel/formdata_aec_deces.json b/tests/data/mdel/formdata_aec_deces.json
index 0acd7045..c41fe72b 100644
--- a/tests/data/mdel/formdata_aec_deces.json
+++ b/tests/data/mdel/formdata_aec_deces.json
@@ -29,7 +29,6 @@
         "demandeur_adresse_pays_raw": "FRA",
         "demandeur_adresse_ville": "Nancy",
         "demandeur_adresse_voie": "Rue de l'Aigle Blanc",
-        "demandeur_adresse_etrangere": "37, Rue de l'Aigle Blanc, 54000 Nancy",
         "demandeur_civilite": "Madame",
         "demandeur_civilite_raw": "Madame",
         "demandeur_email": "chelsea@whatever.com",
diff --git a/tests/data/mdel/formdata_aec_mariage.json b/tests/data/mdel/formdata_aec_mariage.json
index 5900ebb2..4a00157b 100644
--- a/tests/data/mdel/formdata_aec_mariage.json
+++ b/tests/data/mdel/formdata_aec_mariage.json
@@ -25,12 +25,13 @@
         "aec_nature": "Extrait avec filiation",
         "aec_nature_raw": "EXTRAIT-AVEC-FILIATION",
         "date_acte": "2008-08-18",
-        "demandeur_adresse_code_postal": "BC V5Y 1V4",
-        "demandeur_adresse_num": "274",
-        "demandeur_adresse_pays": "CANADA",
-        "demandeur_adresse_pays_raw": "CAN",
-        "demandeur_adresse_ville": "Vancouver",
-        "demandeur_adresse_voie": "West 12th Avenue",
+        "demandeur_adresse_code_postal": "94270",
+        "demandeur_adresse_num": "22",
+        "demandeur_adresse_pays": "FRANCE",
+        "demandeur_adresse_pays_raw": "FRA",
+        "demandeur_adresse_ville": "Kremlin Bicetre",
+        "demandeur_adresse_code_postal": "94270",
+        "demandeur_adresse_voie": "rue Danton",
         "demandeur_civilite": "Madame",
         "demandeur_civilite_raw": "Madame",
         "demandeur_email": "chelsea@whatever.com",
diff --git a/tests/test_mdel.py b/tests/test_mdel.py
index 0e006016..2e8bac29 100644
--- a/tests/test_mdel.py
+++ b/tests/test_mdel.py
@@ -21,7 +21,9 @@ import os
 import json
 import base64
 import copy
+
 from xml.etree import ElementTree as etree
+from lxml import etree as letree
 
 import pytest
 
@@ -31,6 +33,9 @@ from passerelle.contrib.mdel.utils import parse_date
 
 import utils
 
+AEC_XSD = 'ActeEtatCivil-V1.A.xsd'
+ILE_XSD = 'ILE_v1.1.xsd'
+
 
 def get_mdel_base_dir():
     return os.path.join(os.path.dirname(__file__), 'data', 'mdel')
@@ -42,6 +47,15 @@ def get_file_from_test_base_dir(filename):
         return fd.read()
 
 
+def validate_schema(doc, xsd):
+    xsd_path = os.path.join(get_mdel_base_dir(), xsd)
+    xsd = letree.parse(xsd_path).getroot()
+    schema = letree.XMLSchema(xsd)
+    parser = letree.XMLParser(schema=schema)
+    letree.parse(doc, parser=parser)  # Will raise an exception if schema not respected
+
+
+
 @pytest.fixture
 def setup(db):
     return utils.setup_access_rights(MDEL.objects.create(slug='test'))
@@ -123,6 +137,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
         assert resp.json['data']['demand_id'] == '15-4-AEC-LA'
 
         doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml')
+        validate_schema(doc, AEC_XSD)
+
         root = etree.parse(doc).getroot()
 
         assert root.tag == 'EnveloppeMetierType'
@@ -169,6 +185,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
         assert resp.json['data']['demand_id'] == '16-1-AEC-LA'
 
         doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml')
+        validate_schema(doc, AEC_XSD)
+
         root = etree.parse(doc).getroot()
 
         assert root.tag == 'EnveloppeMetierType'
@@ -191,8 +209,9 @@ def test_create_aec_demand_type(app, setup, aec_payload):
         assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
         assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
         assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur'
-        assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '274 West 12th Avenue, Vancouver, BC V5Y 1V4'
-        assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'CAN'
+        assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton'
+        assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270'
+        assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre'
 
         # Concerned
         assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
@@ -220,6 +239,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
         assert resp.json['data']['demand_id'] == '17-1-AEC-LA'
 
         doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml')
+        validate_schema(doc, AEC_XSD)
+
         root = etree.parse(doc).getroot()
 
         assert root.tag == 'EnveloppeMetierType'
@@ -273,12 +294,15 @@ def test_create_ile_demand_type(app, setup):
 
     base_doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-14-ILE-LA--0')
     doc = os.path.join(base_doc, '1-14-ILE-LA-doc-.xml')
+
+    validate_schema(doc, ILE_XSD)
+
     root = etree.parse(doc).getroot()
 
     assert root.tag == 'AvisDInscription'
 
     assert root.find('Inscription/Electeur/AdresseDeLElecteur/Localite').text == 'Nancy'
-    assert root.find('Inscription/Electeur/AdresseDeLElecteur/CodePostal').text == '54 000'
+    assert root.find('Inscription/Electeur/AdresseDeLElecteur/CodePostal').text == '54000'
     assert root.find('Inscription/Electeur/AdresseDeLElecteur/TypeVoie').text == 'RUE'
     assert root.find('Inscription/Electeur/AdresseDeLElecteur/NomVoie').text == 'RUE DU CHEVAL BLANC'
     assert root.find('Inscription/Electeur/AdresseDeLElecteur/NumeroVoie').text == '37'
-- 
2.20.1

