From 1ca4ac62d1a8cfa72812dbba0da1ce763b38f299 Mon Sep 17 00:00:00 2001
From: Marty Fabien <fabien_marty@yahoo.fr>
Date: Thu, 7 May 2020 08:11:02 +0000
Subject: [PATCH] maj 2020

---
 conf/Gruntfile.js                             |    6 +-
 .../patrimoine_saisie_patrimoine_element.json | 1608 +++++++++++++++++
 ...atrimoine_saisie_patrimoine_perimetre.json | 1399 ++++++++++++++
 .../module/javascript/script_module.js        |   66 +
 .../module/lang/lang-en.json                  |    6 +
 .../module/lang/lang-fr.json                  |   12 +
 .../web_service/ws/Commune.class.inc          |   45 +
 .../ws/Element_bati_qualite.class.inc         |  278 +++
 .../ws/Element_bati_qualites.class.inc        |  396 ++++
 .../web_service/ws/Patrimoine.class.inc       |   42 +
 .../web_service/ws/Patrimoine.class.sql.inc   |   36 +
 .../ws/Perimetre_porteur_qualite.class.inc    |  238 +++
 .../ws/Perimetre_porteur_qualites.class.inc   |  379 ++++
 .../web_service/ws/Protection_etat.class.inc  |   45 +
 .../web_service/ws/Protection_etats.class.inc |  131 ++
 .../web_service/ws/Theme.class.inc            |   45 +
 .../web_service/ws/Themes.class.inc           |  131 ++
 .../web_service/ws/Valeur.class.inc           |   45 +
 .../web_service/ws/Valeurs.class.inc          |  131 ++
 ...immo_saisie_suivi_prod_immo_operation.json |  225 +--
 ..._prod_immo_operation_operation_acteur.json |  102 +-
 ...od_immo_operation_operation_financier.json |  228 ++-
 ...o_operation_operation_mode_operatoire.json |  100 +-
 ...mmo_operation_operation_programmation.json |  225 ++-
 ..._prod_immo_programme_programme_acteur.json |   28 +-
 ..._prod_immo_programme_programme_detail.json |  806 +++++++++
 ..._immo_programme_programme_encadrement.json |  268 ++-
 ...rod_immo_programme_programme_synthese.json |   69 +
 ...activite_industrie_activite_industrie.json |  489 +++++
 ...sie_dep_suivi_prod_immo_bureau_bureau.json |  405 +++++
 ..._cp_composition_habitat_specifique_cp.json |  613 +++++++
 ...ition_logement_familliaux_location_cp.json |  561 ++++++
 ...pement_structure_equipement_structure.json |  445 +++++
 ...prod_immo_granulometrie_granulometrie.json |  503 ++++++
 ...mmerce_service_hotel_commerce_service.json |  529 ++++++
 ...cession_logement_familliaux_accession.json |  518 ++++++
 ...libre_profil_acheteur_accession_libre.json |  473 +++++
 ...i_prod_immo_repartition_type_logement.json |  503 ++++++
 ...prod_immo_stationnement_stationnement.json |  473 +++++
 .../module/lang/lang-fr.json                  |   47 +
 .../ws/Activite_industrie.class.inc           |   57 +
 .../ws/Activite_industries.class.inc          |  313 ++++
 .../web_service/ws/Bureau.class.inc           |   57 +
 .../web_service/ws/Bureaus.class.inc          |  313 ++++
 ...omposition_habitat_specifique_cp.class.inc |   57 +
 ...mposition_habitat_specifique_cps.class.inc |  313 ++++
 ..._logement_familliaux_location_cp.class.inc |   57 +
 ...logement_familliaux_location_cps.class.inc |  313 ++++
 .../ws/Equipement_structure.class.inc         |   57 +
 .../ws/Equipement_structures.class.inc        |  313 ++++
 .../web_service/ws/Granulometrie.class.inc    |   57 +
 .../web_service/ws/Granulometries.class.inc   |  331 ++++
 .../ws/Hotel_commerce_service.class.inc       |   57 +
 .../ws/Hotel_commerce_services.class.inc      |  313 ++++
 .../web_service/ws/Ilots.class.inc            |   56 +-
 .../Logement_familliaux_accession.class.inc   |   57 +
 .../Logement_familliaux_accessions.class.inc  |  313 ++++
 .../web_service/ws/Operation.class.inc        |   30 +-
 .../ws/OperationLastUpdate.class.inc          |    6 +-
 .../web_service/ws/Operations.class.inc       |   93 +-
 .../web_service/ws/Perimetre.class.inc        |   45 +
 .../web_service/ws/Perimetres.class.inc       |  131 ++
 .../Profil_acheteur_accession_libre.class.inc |   57 +
 ...Profil_acheteur_accession_libres.class.inc |  313 ++++
 .../web_service/ws/Programme.class.inc        |   38 +-
 .../ws/ProgrammeLastUpdate.class.inc          |    9 +-
 .../web_service/ws/Programmes.class.inc       |  137 +-
 .../ws/Repartition_type_logement.class.inc    |   57 +
 .../ws/Repartition_type_logements.class.inc   |  328 ++++
 .../web_service/ws/Stationnement.class.inc    |   57 +
 .../web_service/ws/Stationnements.class.inc   |  313 ++++
 .../ws/Suivi_prod_immo.class.sql.inc          |   57 +-
 .../web_service/ws/Querys.class.inc           |    7 +-
 src/vitis/client/css/icons/style.css          |    3 +
 .../externs/formReader/formReaderDrtv.js      |    9 +-
 .../externs/formReader/formReaderSrvc.js      |    8 +-
 src/vitis/vas/doc/sport/club.php              |  140 ++
 src/vitis/vas/doc/sport/equipement.php        |    6 +-
 .../vas/doc/sport/equipement_commune.php      |    4 +-
 .../doc/sport/equipement_commune_complet.php  |    6 +-
 src/vitis/vas/doc/sport/footer_club.html      |   11 +
 src/vitis/vas/doc/sport/header_club.html      |   31 +
 src/vitis/vas/doc/sport/properties_sport.inc  |    3 +-
 .../doc/suivi_prod_immo/form_3_porteur.html   |    2 +-
 .../doc/suivi_prod_immo/form_3_porteur.php    |    2 +-
 .../doc/suivi_prod_immo/get_1_operation.html  |   22 +-
 .../doc/suivi_prod_immo/get_1_operation.php   |   18 +-
 .../vas/doc/suivi_prod_immo/get_2_type.php    |    4 +-
 .../doc/suivi_prod_immo/get_3_porteur.html    |    2 +-
 .../vas/doc/suivi_prod_immo/get_3_porteur.php |   18 +-
 .../suivi_prod_immo/get_3_porteur_excel.php   |   14 +-
 .../doc/suivi_prod_immo/get_4_logement.php    |   20 +-
 src/vitis/vas/doc/suivi_prod_immo/js/form.js  |   12 +-
 .../properties_suivi_prod_immo.inc            |    2 +-
 .../rest/class/vitis_lib/Connection.class.inc |    1 +
 95 files changed, 17298 insertions(+), 401 deletions(-)
 create mode 100644 src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_element.json
 create mode 100644 src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_perimetre.json
 create mode 100644 src/module_patrimoine/module/javascript/script_module.js
 create mode 100644 src/module_patrimoine/module/lang/lang-en.json
 create mode 100644 src/module_patrimoine/module/lang/lang-fr.json
 create mode 100644 src/module_patrimoine/web_service/ws/Commune.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Element_bati_qualite.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Element_bati_qualites.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Patrimoine.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Patrimoine.class.sql.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Perimetre_porteur_qualite.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Perimetre_porteur_qualites.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Protection_etat.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Protection_etats.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Theme.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Themes.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Valeur.class.inc
 create mode 100644 src/module_patrimoine/web_service/ws/Valeurs.class.inc
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_detail.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie_activite_industrie.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau_bureau.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp_composition_habitat_specifique_cp.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp_composition_logement_familliaux_location_cp.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure_equipement_structure.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie_granulometrie.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service_hotel_commerce_service.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession_logement_familliaux_accession.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre_profil_acheteur_accession_libre.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_repartition_type_logement.json
 create mode 100644 src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement_stationnement.json
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Activite_industrie.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Activite_industries.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Bureau.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Bureaus.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cp.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cps.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cp.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cps.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Equipement_structure.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Equipement_structures.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Granulometrie.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Granulometries.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_service.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_services.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accession.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accessions.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Perimetre.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Perimetres.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libre.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libres.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Repartition_type_logement.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Repartition_type_logements.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Stationnement.class.inc
 create mode 100644 src/module_suivi_prod_immo/web_service/ws/Stationnements.class.inc
 create mode 100644 src/vitis/vas/doc/sport/club.php
 create mode 100644 src/vitis/vas/doc/sport/footer_club.html
 create mode 100644 src/vitis/vas/doc/sport/header_club.html

diff --git a/conf/Gruntfile.js b/conf/Gruntfile.js
index a6c6c748..1b2bf24a 100755
--- a/conf/Gruntfile.js
+++ b/conf/Gruntfile.js
@@ -44,7 +44,9 @@ module.exports = function (grunt) {
                         // Fichiers ANC
                         sHome + 'modules/anc/javascript/**/*.js',
                         // Fichiers suivi_prod_immo
-                        sHome + 'modules/suivi_prod_immo/**/*.js'
+                        sHome + 'modules/suivi_prod_immo/**/*.js',
+						// Fichiers patrimoine
+                        sHome + 'modules/patrimoine/**/*.js',
                     ]
                 },
                 options: {
@@ -129,6 +131,8 @@ module.exports = function (grunt) {
                     '"' + sHome + 'modules/anc/javascript ' + sClosureDepsHome + 'modules/anc/javascript"',
                     // Fichiers suivi_prod_immo
                     '"' + sHome + 'modules/suivi_prod_immo ' + sClosureDepsHome + 'modules/suivi_prod_immo"',
+                    // Fichiers patrimoine
+                    '"' + sHome + 'modules/patrimoine ' + sClosureDepsHome + 'modules/patrimoine"',
                     // Closure library
                     '"' + sHome + 'conf/node_modules/google-closure-library/closure/goog ' + sClosureDepsHome + 'conf/node_modules/google-closure-library/closure/goog"'
                 ]
diff --git a/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_element.json b/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_element.json
new file mode 100644
index 00000000..13a7c07b
--- /dev/null
+++ b/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_element.json
@@ -0,0 +1,1608 @@
+{
+    "display":{
+        "name":"patrimoine_saisie_patrimoine_element-form",
+        "title":"PATRIMOINE_ELEMENT_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "id_bati",
+					"label": "Identifiant du bâti",
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "label",
+					"name": "titre",
+					"label": "Titre",
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "ref_cadastre",
+					"label": "Références cadastrales",
+					"nb_cols": 10,
+					"id": "Element_0_1583758609210"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "adresse",
+					"label": "Adresse",
+					"nb_cols": 8,
+					"id": "Element_2_1583493459656"
+				  },
+				  {
+					"type": "label",
+					"name": "nom_commune",
+					"label": "Commune",
+					"nb_cols": 4,
+					"id": "Element_0_1583493456078"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "niveau_classement",
+					"label": "Niveau d’intérêt de l’élément bâti",
+					"nb_cols": 2,
+					"id": "Element_1_1583758616142"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "proposition_classement_label",
+					"label": "Proposition de classement au PLU-H",
+					"nb_cols": 2,
+					"id": "Element_0_1583501763160"
+				  },
+				  {
+					"type": "label",
+					"name": "classement_au_pluh_label",
+					"label": "Classement en EBP au PLU-H",
+					"nb_cols": 2,
+					"id": "Element_1_1583501767205"
+				  },
+				  {
+					"type": "label",
+					"name": "id_ebq_pluh",
+					"label": "Identifiant EBP au PLU-H",
+					"nb_cols": 2,
+					"id": "Element_1_1583501767205"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "descriptif",
+					"label": "Descriptif",
+					"nb_cols": 12,
+					"id": "Element_0_1583500264734"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "bo_grid",
+					"name": "valeur",
+					"label": "Valeur(s)",
+					"required": false,
+					"pattern": "",
+					"nb_cols": 4,
+					"id": "Element_0_1583763643016",
+					"options": {
+					  "enableRowSelection": true,
+					  "enableSelectAll": true,
+					  "enablePagination": false,
+					  "enablePaginationControls": false,
+					  "enableColumnMenus": false,
+					  "enableColumnResizing": true,
+					  "appHeader": false,
+					  "appHeaderTitleBar": false,
+					  "columnDefs": [],
+					  "data": []
+					},
+					"bo_id": "element_bati_qualite_valeur",
+					"bo_filter_attr": "id_ebq",
+					"form_filter_value": "id_element_bati_qualite"
+				  },
+				  {
+					"type": "bo_grid",
+					"name": "theme",
+					"label": "Thème(s)",
+					"required": false,
+					"pattern": "",
+					"nb_cols": 4,
+					"id": "Element_1_1583765115272",
+					"options": {
+					  "enableRowSelection": true,
+					  "enableSelectAll": true,
+					  "enablePagination": false,
+					  "enablePaginationControls": false,
+					  "enableColumnMenus": false,
+					  "enableColumnResizing": true,
+					  "appHeader": false,
+					  "appHeaderTitleBar": false,
+					  "columnDefs": [],
+					  "data": []
+					},
+					"form_filter_value": "id_element_bati_qualite",
+					"bo_filter_attr": "id_ebq",
+					"bo_id": "element_bati_qualite_theme"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "preconisation",
+					"label": "Préconisation",
+					"nb_cols": 12,
+					"id": "Element_1_1583501124119"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "typologie_tissus",
+					"label": "Typologie tissus",
+					"nb_cols": 6,
+					"id": "Element_0_1583499754397"
+				  },
+				  {
+					"type": "label",
+					"name": "sous_typologie_tissus",
+					"label": "Sous-typologie tissus",
+					"nb_cols": 6,
+					"id": "Element_1_1583499757263"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "morphologie_batiment",
+					"label": "Morphologie bâtiment",
+					"nb_cols": 6,
+					"id": "Element_0_1583751315055"
+				  },
+				  {
+					"type": "label",
+					"name": "sous_morphologie_batiment",
+					"label": "Sous morphologie bâtiment",
+					"nb_cols": 6,
+					"id": "Element_1_1583751316259"
+				  }
+				]
+			},
+
+			{
+				"fields": [
+				  {
+					"type": "bo_grid",
+					"name": "protection_etat",
+					"label": "Protection(s) état",
+					"required": false,
+					"pattern": "",
+					"nb_cols": 4,
+					"id": "Element_0_1583765113367",
+					"options": {
+					  "enableRowSelection": true,
+					  "enableSelectAll": true,
+					  "enablePagination": false,
+					  "enablePaginationControls": false,
+					  "enableColumnMenus": false,
+					  "enableColumnResizing": true,
+					  "appHeader": false,
+					  "appHeaderTitleBar": false,
+					  "columnDefs": [],
+					  "data": []
+					},
+					"form_filter_value": "id_element_bati_qualite",
+					"bo_filter_attr": "id_ebq",
+					"bo_id": "element_bati_qualite_protection"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "procedure_pluh",
+					"label": "procédure PLU-H",
+					"nb_cols": 6,
+					"id": "procedure_pluh"
+				  },
+				  {
+					"type": "label",
+					"name": "procedure_modification",
+					"label": "Numéro de modification procédure",
+					"nb_cols": 2,
+					"id": "procedure_modification"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "nom_enqueteur",
+					"label": "Enquêteur",
+					"nb_cols": 12,
+					"id": "Element_1_1583500979694"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "date_creation_fiche",
+					"label": "Date de création de la fiche",
+					"nb_cols": 2,
+					"id": "Element_0_1583493674730"
+				  },
+				  {
+					"type": "label",
+					"name": "date_maj",
+					"label": "Date de mise à jour",
+					"nb_cols": 2,
+					"id": "Element_1_1583493693844"
+				  }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "image_wsdata",
+						"name": "photos",
+						"label": "Photo(s)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1588165731143",
+						"multiple": true,
+						"displayOnly":true
+					}
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "commentaire",
+					"label": "Commentaires",
+					"nb_cols": 12,
+					"id": "Element_2_1583499759232"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "descriptif_commentaire",
+					"label": "Commentaires sur le descriptif",
+					"nb_cols": 12,
+					"id": "Element_2_1583500394559"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "commentaire_complementaire",
+					"label": "Commentaires complémentaires",
+					"nb_cols": 12,
+					"id": "Element_2_1583500268908"
+				  }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+		"tabs": {
+			"position": "top",
+			"list": [
+			{
+			  "label": "Général",
+			  "elements": [
+				"display_button",
+				"nom_commune",
+				"id_bati",
+				"adresse",
+				"titre",
+				"descriptif",
+				"preconisation",
+				"proposition_classement_label",
+				"classement_au_pluh_label",
+				"id_ebq_pluh",
+				"ref_cadastre",
+				"niveau_classement",
+				"valeur",
+				"theme",
+				"typologie_tissus",
+				"sous_typologie_tissus",
+				"morphologie_batiment",
+				"sous_morphologie_batiment",
+				"photos"
+			  ]
+			},
+			{
+			  "label": "Protection état",
+			  "elements": [
+				"display_button",
+				"protection_etat"
+			  ]
+			},
+			{
+			  "label": "Détails fiche",
+			  "elements": [
+				"display_button",
+				"procedure_pluh",
+				"procedure_modification",
+				"date_creation_fiche",
+				"date_maj",
+				"nom_enqueteur"
+			  ]
+			},
+			{
+			  "label": "Commentaires",
+			  "elements": [
+				"display_button",
+				"commentaire",
+				"commentaire_complementaire",
+				"descriptif_commentaire"
+			  ]
+			}
+		]
+    }
+    },
+    "search":{
+        "name":"patrimoine_saisie_patrimoine_element-form",
+        "title":"PATRIMOINE_SAISIE_ELEMENT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"id_bati",
+                        "label":"Identifiant du bâti",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"id_bati"
+                    },
+                    {
+                        "type":"text",
+                        "name":"titre",
+                        "label":"Titre",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":4,
+                        "id":"titre"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"code_insee",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        },
+                        "id_from":"code_insee_from"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en EBP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_bati",
+                        "titre",
+						"code_insee",
+						"classement_au_pluh"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"patrimoine_saisie_patrimoine_element-form",
+        "title":"PATRIMOINE_ELEMENT_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+				  {
+					"type": "number",
+					"name": "num_batiment",
+					"label": "Numéro du bâtiment",
+                    "required":true,
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "text",
+					"name": "titre",
+					"label": "Titre",
+                    "required":false,
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"ref_cadastre",
+                        "label":"Références cadastrales",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"ref_cadastre"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "adresse",
+						"label": "Adresse",
+						"required":false,
+						"nb_cols": 8,
+						"id": "Element_2_1583493459656"
+					},
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"code_insee",
+                        "id_from":"code_insee_from",
+                        "datasource":{
+                            "datasource_id":"datasource_commune",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        }
+                    }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"niveau_classement",
+                        "label":"Niveau d’intérêt de l’élément bâti",
+                        "required": false,
+                        "nb_cols": 2,
+                        "id":"niveau_classement",
+                        "id_from":"niveau_classement_from",
+                        "datasource":{
+                            "datasource_id":"datasource_niveau_classement",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"alias",
+                            "order_by":"alias",
+                            "id_key":"valeur",
+                            "attributs":"valeur|alias"
+                        }
+                    }
+                ]
+            },
+			{
+				"fields":[
+                    {
+                        "type":"radio",
+                        "name":"proposition_classement",
+                        "label":"Proposition de classement au PLU-H",
+                        "nb_cols":2,
+                        "id":"proposition_classement",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    },
+                    {
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en EBP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"preconisation",
+                        "label":"Préconisation",
+                        "required":false,
+                        "nb_rows":5,
+                        "nb_cols":12,
+                        "id":"preconisation"
+                    }
+                ]
+            },
+			{
+				"fields": [
+                    {
+                        "type":"select",
+                        "name":"code_procedure_pluh",
+                        "label":"Procédure PLU-H",
+                        "required":false,
+                        "nb_cols":6,
+                        "id":"code_procedure_pluh",
+                        "id_from":"code_procedure_pluh_from",
+                        "datasource":{
+                            "datasource_id":"datasource_procedure_pluh",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"procedure_pluh",
+                            "order_by":"procedure_pluh",
+                            "id_key":"code_procedure_pluh",
+                            "attributs":"code_procedure_pluh|procedure_pluh"
+                        }
+                    },
+					{
+						"type": "text",
+						"name": "procedure_modification",
+						"label": "Numéro de modification procédure",
+						"required":false,
+						"nb_cols": 2,
+						"id": "procedure_modification"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_enqueteur",
+                        "label":"Enquêteur",
+                        "required":false,
+                        "nb_cols":3,
+                        "id":"id_enqueteur",
+                        "id_from":"id_enqueteur",
+                        "datasource":{
+                            "datasource_id":"datasource_enqueteur",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_enqueteur",
+                            "order_by":"nom_enqueteur",
+                            "id_key":"id_enqueteur",
+                            "attributs":"id_enqueteur|nom_enqueteur"
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"descriptif",
+                        "label":"Descriptif",
+                        "required":false,
+                        "nb_rows":3,
+                        "nb_cols":12,
+                        "id":"descriptif"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_typologie_tissus",
+                        "label":"Typologie de tissus",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_typologie_tissus",
+                        "id_from":"id_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"typologie_tissus",
+                            "order_by":"typologie_tissus",
+                            "id_key":"id_typologie_tissus",
+                            "attributs":"id_typologie_tissus|typologie_tissus"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_typologie_tissus",
+                        "label":"Sous-typologie de tissus",
+                        "required":false,
+                        "nb_cols":5,
+                        "id":"id_sous_typologie_tissus",
+                        "id_from":"id_sous_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_typologie_tissus",
+                            "order_by":"sous_typologie_tissus",
+                            "id_key":"id_sous_typologie_tissus",
+                            "attributs":"id_sous_typologie_tissus|sous_typologie_tissus",
+                            "parents":[
+                                {
+                                    "name":"id_typologie_tissus",
+                                    "filter_attr":"id_typologie_tissus",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_morphologie_batiment",
+                        "label":"Morphologie du bâtiment",
+                        "required":false,
+                        "nb_cols":2,
+                        "id":"id_morphologie_batiment",
+                        "id_from":"id_morphologie_batiment",
+                        "datasource":{
+                            "datasource_id":"datasource_morphologie_batiment",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"morphologie_batiment",
+                            "order_by":"morphologie_batiment",
+                            "id_key":"id_morphologie_batiment",
+                            "attributs":"id_morphologie_batiment|morphologie_batiment"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_morphologie_batiment",
+                        "label":"Sous morphologie du bâtiment",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_sous_morphologie_batiment",
+                        "id_from":"id_sous_morphologie_batiment",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_morphologie_batiment",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_morphologie_batiment",
+                            "order_by":"sous_morphologie_batiment",
+                            "id_key":"id_sous_morphologie_batiment",
+                            "attributs":"id_sous_morphologie_batiment|sous_morphologie_batiment",
+                            "parents":[
+                                {
+                                    "name":"id_morphologie_batiment",
+                                    "filter_attr":"id_morphologie_batiment",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire",
+                        "label":"Commentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"descriptif_commentaire",
+                        "label":"Commentaires sur le descriptif",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"descriptif_commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_complementaire",
+                        "label":"Commentaires complémentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_complementaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+		"tabs": {
+			"position": "top",
+			"list": [
+				{
+					"label": "Général",
+					"elements": [
+                        "insert_button",
+						"code_insee",
+						"num_batiment",
+						"adresse",
+						"titre",
+						"ref_cadastre",
+						"descriptif",
+						"niveau_classement",
+						"preconisation",
+						"proposition_classement",
+						"classement_au_pluh",
+						"valeur",
+						"theme",
+						"id_typologie_tissus",
+						"id_sous_typologie_tissus",
+						"id_morphologie_batiment",
+						"id_sous_morphologie_batiment"
+					]
+				},
+				{
+					"label": "Détails fiche",
+					"elements": [
+                        "insert_button",
+						"code_procedure_pluh",
+						"procedure_modification",
+						"id_enqueteur"
+					]
+				},
+					
+				{
+					"label": "Commentaires",
+					"elements": [
+                        "insert_button",
+						"commentaire",
+						"commentaire_complementaire",
+						"descriptif_commentaire"
+					]
+				}
+			]
+		}
+    },
+    "update":{
+        "name":"patrimoine_saisie_patrimoine_element-form",
+        "title":"PATRIMOINE_ELEMENT_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "id_bati",
+					"label": "Identifiant du bati",
+                    "required":true,
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "text",
+					"name": "titre",
+					"label": "Titre",
+                    "required":false,
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"ref_cadastre",
+                        "label":"Références cadastrales",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"ref_cadastre"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "adresse",
+						"label": "Adresse",
+						"required":false,
+						"nb_cols": 8,
+						"id": "Element_2_1583493459656"
+					},
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"code_insee",
+                        "id_from":"code_insee_from",
+                        "datasource":{
+                            "datasource_id":"datasource_commune",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        }
+                    }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"niveau_classement",
+                        "label":"Niveau d’intérêt de l’élément bâti",
+                        "required": false,
+                        "nb_cols": 2,
+                        "id":"niveau_classement",
+                        "id_from":"niveau_classement_from",
+                        "datasource":{
+                            "datasource_id":"datasource_niveau_classement",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"alias",
+                            "order_by":"alias",
+                            "id_key":"valeur",
+                            "attributs":"valeur|alias"
+                        }
+                    }
+                ]
+            },
+			{
+				"fields":[
+                    {
+                        "type":"radio",
+                        "name":"proposition_classement",
+                        "label":"Proposition de classement au PLU-H",
+                        "nb_cols":2,
+                        "id":"proposition_classement",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    },
+                    {
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en EBP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    },
+					{
+						"type": "label",
+						"name": "id_ebq_pluh",
+						"label": "Identifiant EBP au PLU-H",
+						"nb_cols": 2,
+						"id": "Element_1_1583501767205"
+					}
+                ]
+            },
+			{
+				"fields": [
+                    {
+                        "type":"select",
+                        "name":"code_procedure_pluh",
+                        "label":"Procédure PLU-H",
+                        "required":false,
+                        "nb_cols":6,
+                        "id":"code_procedure_pluh",
+                        "id_from":"code_procedure_pluh_from",
+                        "datasource":{
+                            "datasource_id":"datasource_procedure_pluh",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"procedure_pluh",
+                            "order_by":"procedure_pluh",
+                            "id_key":"code_procedure_pluh",
+                            "attributs":"code_procedure_pluh|procedure_pluh"
+                        }
+                    },
+					{
+						"type": "text",
+						"name": "procedure_modification",
+						"label": "Numéro de modification procédure",
+						"required":false,
+						"nb_cols": 2,
+						"id": "procedure_modification"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_enqueteur",
+                        "label":"Enquêteur",
+                        "required":false,
+                        "nb_cols":3,
+                        "id":"id_enqueteur",
+                        "id_from":"id_enqueteur",
+                        "datasource":{
+                            "datasource_id":"datasource_enqueteur",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_enqueteur",
+                            "order_by":"nom_enqueteur",
+                            "id_key":"id_enqueteur",
+                            "attributs":"id_enqueteur|nom_enqueteur"
+                        }
+                    }
+                ]
+            },
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "date_creation_fiche",
+					"label": "Date de création de la fiche",
+					"nb_cols": 2,
+					"id": "Element_0_1583493674730"
+				  },
+				  {
+					"type": "label",
+					"name": "date_maj",
+					"label": "Date de mise à jour",
+					"nb_cols": 2,
+					"id": "Element_1_1583493693844"
+				  }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"descriptif",
+                        "label":"Descriptif",
+                        "required":false,
+                        "nb_rows":3,
+                        "nb_cols":12,
+                        "id":"descriptif"
+                    }
+                ]
+            },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "valeurs",
+					"label": "Valeurs de l'élément",
+					"required": false,
+					"nb_cols": 5,
+					"id": "Element_0_4_1",
+					"name_to": "valeurs",
+					"name_from": "valeurs_from",
+					"size": 5,
+					"label_from": "valeurs non associées",
+					"label_to": "valeurs associées à l'élément",
+					"web_service": {
+						"ressource_id": "patrimoine/valeurs",
+						"id_key": "id_valeur",
+						"label_key": "valeur",
+						"parameters": {
+							"order_by": "valeur"
+						}
+					}
+				  }
+				]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"preconisation",
+                        "label":"Préconisation",
+                        "required":false,
+                        "nb_rows":5,
+                        "nb_cols":12,
+                        "id":"preconisation"
+                    }
+                ]
+            },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "themes",
+					"label": "Thèmes du périmètre",
+					"required": false,
+					"nb_cols": 4,
+					"id": "Element_0_4_1",
+					"name_to": "themes",
+					"name_from": "themes_from",
+					"size": 6,
+					"label_from": "thèmes non associés",
+					"label_to": "thèmes associés à l'élément",
+					"web_service": {
+						"ressource_id": "patrimoine/themes",
+						"id_key": "id_theme",
+						"label_key": "theme",
+						"parameters": {
+							"order_by": "theme"
+						}
+					}
+				  }
+				]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_typologie_tissus",
+                        "label":"Typologie de tissus",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_typologie_tissus",
+                        "id_from":"id_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"typologie_tissus",
+                            "order_by":"typologie_tissus",
+                            "id_key":"id_typologie_tissus",
+                            "attributs":"id_typologie_tissus|typologie_tissus"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_typologie_tissus",
+                        "label":"Sous-typologie de tissus",
+                        "required":false,
+                        "nb_cols":5,
+                        "id":"id_sous_typologie_tissus",
+                        "id_from":"id_sous_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_typologie_tissus",
+                            "order_by":"sous_typologie_tissus",
+                            "id_key":"id_sous_typologie_tissus",
+                            "attributs":"id_sous_typologie_tissus|sous_typologie_tissus",
+                            "parents":[
+                                {
+                                    "name":"id_typologie_tissus",
+                                    "filter_attr":"id_typologie_tissus",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_morphologie_batiment",
+                        "label":"Morphologie du bâtiment",
+                        "required":false,
+                        "nb_cols":2,
+                        "id":"id_morphologie_batiment",
+                        "id_from":"id_morphologie_batiment",
+                        "datasource":{
+                            "datasource_id":"datasource_morphologie_batiment",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"morphologie_batiment",
+                            "order_by":"morphologie_batiment",
+                            "id_key":"id_morphologie_batiment",
+                            "attributs":"id_morphologie_batiment|morphologie_batiment"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_morphologie_batiment",
+                        "label":"Sous morphologie du bâtiment",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_sous_morphologie_batiment",
+                        "id_from":"id_sous_morphologie_batiment",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_morphologie_batiment",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_morphologie_batiment",
+                            "order_by":"sous_morphologie_batiment",
+                            "id_key":"id_sous_morphologie_batiment",
+                            "attributs":"id_sous_morphologie_batiment|sous_morphologie_batiment",
+                            "parents":[
+                                {
+                                    "name":"id_morphologie_batiment",
+                                    "filter_attr":"id_morphologie_batiment",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "protection_etats",
+					"label": "Protections état de l'élément",
+					"required": false,
+					"nb_cols": 6,
+					"id": "Element_0_4_1",
+					"name_to": "protection_etats",
+					"name_from": "protection_etats_from",
+					"size": 6,
+					"label_from": "protections état non associées",
+					"label_to": "protections état associées à l'élément",
+					"web_service": {
+						"ressource_id": "patrimoine/protection_etats",
+						"id_key": "id_protection_etat",
+						"label_key": "protection_etat",
+						"parameters": {
+							"order_by": "protection_etat"
+						}
+					}
+				  }
+				]
+            },
+			{
+				"fields": [
+					{
+						"type": "image_wsdata",
+						"name": "photos",
+						"label": "Photo(s)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1588165731143",
+						"multiple": true
+					}
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire",
+                        "label":"Commentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"descriptif_commentaire",
+                        "label":"Commentaires sur le descriptif",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"descriptif_commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_complementaire",
+                        "label":"Commentaires complémentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_complementaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+		"tabs": {
+			"position": "top",
+			"list": [
+				{
+					"label": "Général",
+					"elements": [
+                        "update_button",
+						"code_insee",
+						"id_bati",
+						"adresse",
+						"titre",
+						"descriptif",
+						"niveau_classement",
+						"ref_cadastre",
+						"preconisation",
+						"proposition_classement",
+						"classement_au_pluh",
+						"id_ebq_pluh",
+						"valeurs",
+						"themes",
+						"id_typologie_tissus",
+						"id_sous_typologie_tissus",
+						"id_morphologie_batiment",
+						"id_sous_morphologie_batiment",
+						"photos"
+					]
+				},
+				{
+					"label": "Protection état",
+					"elements": [
+                        "update_button",
+						"protection_etats"
+					]
+				},
+				{
+					"label": "Détails fiche",
+					"elements": [
+                        "update_button",
+						"code_procedure_pluh",
+						"procedure_modification",
+						"id_enqueteur",
+						"date_creation_fiche",
+						"date_maj"
+					]
+				},
+				{
+					"label": "Commentaires",
+					"elements": [
+                        "update_button",
+						"commentaire",
+						"commentaire_complementaire",
+						"descriptif_commentaire"
+					]
+				}
+			]
+		}
+    },
+    "datasources":{
+        "datasource_classification_qualite":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"classification_qualite",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"classification_type_qualite"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_classification_qualite"
+        },
+        "datasource_enqueteur":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"enqueteur",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"enqueteur"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_enqueteur"
+        },
+        "datasource_typologie_tissus":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"typologie_tissus",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"typologie_tissus"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_typologie_tissus"
+        },
+        "datasource_sous_typologie_tissus":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"sous_typologie_tissus",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"sous_typologie_tissus"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_sous_typologie_tissus"
+        },
+        "datasource_morphologie_batiment":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"morphologie_batiment",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"morphologie_batiment"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_morphologie_batiment"
+        },
+        "datasource_sous_morphologie_batiment":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"sous_morphologie_batiment",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"sous_morphologie_batiment"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_sous_morphologie_batiment"
+        },
+        "datasource_commune":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"commune",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"commune"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_commune"
+        },
+        "datasource_niveau_classement":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"niveau_classement",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"param_liste",
+                "filter": {"id_nom_table": "element_bati_qualite", "nom_liste": "niveau_classement"}
+            },
+            "ressource_id":"vitis/genericquerys"
+        },
+        "datasource_procedure_pluh":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"procedure_pluh",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"procedure_pluh"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_procedure_pluh"
+        }
+    }
+}
diff --git a/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_perimetre.json b/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_perimetre.json
new file mode 100644
index 00000000..15272801
--- /dev/null
+++ b/src/module_patrimoine/module/forms/patrimoine_saisie/patrimoine_saisie_patrimoine_perimetre.json
@@ -0,0 +1,1399 @@
+{
+    "display":{
+        "name":"patrimoine_saisie_patrimoine_perimetre-form",
+        "title":"PATRIMOINE_PERIMETRE_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "nom_commune",
+					"label": "Commune",
+					"nb_cols": 4,
+					"id": "Element_0_1583493456078"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "id_ensemble",
+					"label": "Identifiant de l'ensemble",
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "label",
+					"name": "titre",
+					"label": "Titre",
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "localisation",
+					"label": "Localisation",
+					"nb_cols": 8,
+					"id": "Element_2_1583493459656"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "classification_qualite",
+					"label": "Justification du niveau de qualité",
+					"nb_cols": 12,
+					"id": "Element_0_1583500976468"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "typologie_tissus",
+					"label": "Typologie de tissus",
+					"nb_cols": 6,
+					"id": "Element_0_1583499754397"
+				  },
+				  {
+					"type": "label",
+					"name": "sous_typologie_tissus",
+					"label": "Sous-typologie de tissus",
+					"nb_cols": 6,
+					"id": "Element_1_1583499757263"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "proposition_classement_label",
+					"label": "Proposition au classement",
+					"nb_cols": 2,
+					"id": "Element_0_1583501763160"
+				  },
+				  {
+					"type": "label",
+					"name": "classement_au_pluh_label",
+					"label": "Classement en PIP au PLU-H",
+					"nb_cols": 2,
+					"id": "Element_1_1583501767205"
+				  },
+				  {
+					"type": "label",
+					"name": "id_pip_pluh",
+					"label": "Identifiant PIP au PLU-H",
+					"nb_cols": 2,
+					"id": "Element_1_1583501767205"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "procedure_pluh",
+					"label": "procédure PLU-H",
+					"nb_cols": 6,
+					"id": "procedure_pluh"
+				  },
+				  {
+					"type": "label",
+					"name": "procedure_modification",
+					"label": "Numéro de modification procédure",
+					"nb_cols": 2,
+					"id": "procedure_modification"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "nom_enqueteur",
+					"label": "Enquêteur",
+					"nb_cols": 12,
+					"id": "Element_1_1583500979694"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "date_creation_fiche",
+					"label": "Date de création de la fiche",
+					"nb_cols": 2,
+					"id": "Element_0_1583493674730"
+				  },
+				  {
+					"type": "label",
+					"name": "date_maj",
+					"label": "Date de mise à jour",
+					"nb_cols": 2,
+					"id": "Element_1_1583493693844"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "descriptif",
+					"label": "Descriptif",
+					"nb_cols": 12,
+					"id": "Element_0_1583500264734"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "bo_grid",
+					"name": "valeur",
+					"label": "Valeur(s)",
+					"required": false,
+					"pattern": "",
+					"nb_cols": 4,
+					"id": "Element_0_1583769359221",
+					"options": {
+					  "enableRowSelection": true,
+					  "enableSelectAll": true,
+					  "enablePagination": false,
+					  "enablePaginationControls": false,
+					  "enableColumnMenus": false,
+					  "enableColumnResizing": true,
+					  "appHeader": false,
+					  "appHeaderTitleBar": false,
+					  "columnDefs": [],
+					  "data": []
+					},
+					"bo_filter_attr": "id_epq",
+					"form_filter_value": "id_perimetre_porteur_qualite",
+					"bo_id": "perimetre_porteur_qualite_valeur"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "preconisation",
+					"label": "Préconisation",
+					"nb_cols": 12,
+					"id": "Element_1_1583501124119"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "bo_grid",
+					"name": "protection_etat",
+					"label": "Protection(s) état",
+					"required": false,
+					"pattern": "",
+					"nb_cols": 4,
+					"id": "Element_1_1583769360103",
+					"options": {
+					  "enableRowSelection": true,
+					  "enableSelectAll": true,
+					  "enablePagination": false,
+					  "enablePaginationControls": false,
+					  "enableColumnMenus": false,
+					  "enableColumnResizing": true,
+					  "appHeader": false,
+					  "appHeaderTitleBar": false,
+					  "columnDefs": [],
+					  "data": []
+					},
+					"form_filter_value": "id_perimetre_porteur_qualite",
+					"bo_filter_attr": "id_epq",
+					"bo_id": "perimetre_porteur_qualite_protec"
+				  }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "image_wsdata",
+						"name": "photos",
+						"label": "Photo(s)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1588165731143",
+						"multiple": true,
+						"displayOnly":true
+					}
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "commentaire",
+					"label": "Commentaires",
+					"nb_cols": 12,
+					"id": "Element_2_1583499759232"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "commentaire_titre",
+					"label": "Commentaires sur le titre",
+					"nb_cols": 12,
+					"id": "Element_1_1583500266645"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "descriptif_commentaire",
+					"label": "Commentaires sur le descriptif",
+					"nb_cols": 12,
+					"id": "Element_2_1583500394559"
+				  }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "commentaire_complementaire",
+					"label": "Commentaires complémentaires",
+					"nb_cols": 12,
+					"id": "Element_2_1583500268908"
+				  }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+		"tabs": {
+			"position": "top",
+			"list": [
+				{
+					"label": "Général",
+					"elements": [
+                        "display_button",
+						"nom_commune",
+						"id_ensemble",
+						"localisation",
+						"titre",
+						"descriptif",
+						"classification_qualite",
+						"typologie_tissus",
+						"sous_typologie_tissus",
+						"preconisation",
+						"proposition_classement_label",
+						"classement_au_pluh_label",
+						"id_pip_pluh",
+						"valeur",
+						"photos"
+					]
+				},
+				{
+					"label": "Protection état",
+					"elements": [
+                        "display_button",
+						"protection_etat"
+					]
+				},
+				{
+					"label": "Détails fiche",
+					"elements": [
+						"nom_enqueteur",
+						"date_creation_fiche",
+						"date_maj",
+						"procedure_modification",
+						"procedure_pluh"
+					]
+				},
+				{
+					"label": "Commentaires",
+					"elements": [
+                        "display_button",
+						"commentaire",
+						"commentaire_titre",
+						"commentaire_complementaire",
+						"descriptif_commentaire"
+					]
+				}
+			]
+		}
+    },
+    "search":{
+        "name":"patrimoine_saisie_patrimoine_perimetre-form",
+        "title":"PATRIMOINE_SAISIE_PERIMETRE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"id_ensemble",
+                        "label":"Identifiant de l'élément",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"id_ensemble"
+                    },
+                    {
+                        "type":"text",
+                        "name":"titre",
+                        "label":"Titre",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":4,
+                        "id":"titre"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"code_insee",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        },
+                        "id_from":"code_insee_from"
+                    }
+                ]
+            },
+			{
+				"fields":[
+                    {
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en PIP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_ensemble",
+                        "titre",
+						"code_insee",
+						"classement_au_pluh"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"patrimoine_saisie_patrimoine_perimetre-form",
+        "title":"PATRIMOINE_PERIMETRE_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"code_insee",
+                        "id_from":"code_insee_from",
+                        "datasource":{
+                            "datasource_id":"datasource_commune",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        }
+                    }
+				]
+			},
+			{
+				"fields": [
+				  {
+					"type": "number",
+					"name": "num_ensemble",
+					"label": "Numéro de l'ensemble",
+                    "required":true,
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "text",
+					"name": "titre",
+					"label": "Titre",
+                    "required":false,
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "localisation",
+						"label": "Localisation",
+						"required":false,
+						"nb_cols": 8,
+						"id": "Element_2_1583493459656"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_classification_qualite",
+                        "label":"Justification du niveau de qualité",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"id_classification_qualite",
+                        "id_from":"id_classification_qualite_from",
+                        "datasource":{
+                            "datasource_id":"datasource_classification_qualite",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"classification_qualite",
+                            "order_by":"classification_qualite",
+                            "id_key":"id_classification_qualite",
+                            "attributs":"id_classification_qualite|classification_qualite"
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"preconisation",
+                        "label":"Préconisation",
+                        "required":false,
+                        "nb_rows":5,
+                        "nb_cols":12,
+                        "id":"preconisation"
+                    }
+                ]
+            },
+			{
+				"fields":[
+                    {
+                        "type":"radio",
+                        "name":"proposition_classement",
+                        "label":"Proposition au classement",
+                        "nb_cols":2,
+                        "id":"proposition_classement",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    },
+                    {
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en PIP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    }
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"select",
+                        "name":"code_procedure_pluh",
+                        "label":"Procédure PLU-H",
+                        "required":false,
+                        "nb_cols":6,
+                        "id":"code_procedure_pluh",
+                        "id_from":"code_procedure_pluh_from",
+                        "datasource":{
+                            "datasource_id":"datasource_procedure_pluh",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"procedure_pluh",
+                            "order_by":"procedure_pluh",
+                            "id_key":"code_procedure_pluh",
+                            "attributs":"code_procedure_pluh|procedure_pluh"
+                        }
+                    },
+					{
+						"type": "text",
+						"name": "procedure_modification",
+						"label": "Numéro de modification procédure",
+						"required":false,
+						"nb_cols": 2,
+						"id": "procedure_modification"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_enqueteur",
+                        "label":"Enquêteur",
+                        "required":false,
+                        "nb_cols":3,
+                        "id":"id_enqueteur",
+                        "id_from":"id_enqueteur",
+                        "datasource":{
+                            "datasource_id":"datasource_enqueteur",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_enqueteur",
+                            "order_by":"nom_enqueteur",
+                            "id_key":"id_enqueteur",
+                            "attributs":"id_enqueteur|nom_enqueteur"
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"descriptif",
+                        "label":"Descriptif",
+                        "required":false,
+                        "nb_rows":3,
+                        "nb_cols":12,
+                        "id":"descriptif"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_typologie_tissus",
+                        "label":"Typologie de tissus",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_typologie_tissus",
+                        "id_from":"id_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"typologie_tissus",
+                            "order_by":"typologie_tissus",
+                            "id_key":"id_typologie_tissus",
+                            "attributs":"id_typologie_tissus|typologie_tissus"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_typologie_tissus",
+                        "label":"Sous-typologie de tissus",
+                        "required":false,
+                        "nb_cols":5,
+                        "id":"id_sous_typologie_tissus",
+                        "id_from":"id_sous_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_typologie_tissus",
+                            "order_by":"sous_typologie_tissus",
+                            "id_key":"id_sous_typologie_tissus",
+                            "attributs":"id_sous_typologie_tissus|sous_typologie_tissus",
+                            "parents":[
+                                {
+                                    "name":"id_typologie_tissus",
+                                    "filter_attr":"id_typologie_tissus",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire",
+                        "label":"Commentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_titre",
+                        "label":"Commentaires sur le titre",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_titre"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"descriptif_commentaire",
+                        "label":"Commentaires sur le descriptif",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"descriptif_commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_complementaire",
+                        "label":"Commentaires complémentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_complementaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+		"tabs": {
+			"position": "top",
+			"list": [
+				{
+					"label": "Général",
+					"elements": [
+                        "insert_button",
+						"code_insee",
+						"num_ensemble",
+						"localisation",
+						"titre",
+						"descriptif",
+						"id_classification_qualite",
+						"id_typologie_tissus",
+						"id_sous_typologie_tissus",
+						"preconisation",
+						"proposition_classement",
+						"classement_au_pluh",
+						"valeur"
+					]
+				},
+				{
+					"label": "Détails fiche",
+					"elements": [
+						"id_enqueteur",
+						"date_creation_fiche",
+						"date_maj",
+						"procedure_modification",
+						"code_procedure_pluh"
+					]
+				},
+				{
+					"label": "Commentaires",
+					"elements": [
+                        "insert_button",
+						"commentaire",
+						"commentaire_titre",
+						"commentaire_complementaire",
+						"descriptif_commentaire"
+					]
+				}
+			]
+		}
+    },
+    "update":{
+        "name":"patrimoine_saisie_patrimoine_perimetre-form",
+        "title":"PATRIMOINE_PERIMETRE_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "id_ensemble",
+					"label": "Identifiant de l'ensemble",
+                    "required":true,
+					"nb_cols": 2,
+					"id": "Element_1_1583493459156"
+				  },
+				  {
+					"type": "text",
+					"name": "titre",
+					"label": "Titre",
+                    "required":false,
+					"nb_cols": 10,
+					"id": "Element_3_1583493460040"
+				  }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "localisation",
+						"label": "Localisation",
+						"required":false,
+						"nb_cols": 8,
+						"id": "Element_2_1583493459656"
+					},
+                    {
+                        "type":"select",
+                        "name":"code_insee",
+                        "label":"Commune",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"code_insee",
+                        "id_from":"code_insee_from",
+                        "datasource":{
+                            "datasource_id":"datasource_commune",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"code_insee",
+                            "attributs":"code_insee|nom_commune"
+                        }
+                    }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_classification_qualite",
+                        "label":"Justification du niveau de qualité",
+                        "required":true,
+                        "nb_cols":4,
+                        "id":"id_classification_qualite",
+                        "id_from":"id_classification_qualite_from",
+                        "datasource":{
+                            "datasource_id":"datasource_classification_qualite",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"classification_qualite",
+                            "order_by":"classification_qualite",
+                            "id_key":"id_classification_qualite",
+                            "attributs":"id_classification_qualite|classification_qualite"
+                        }
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_typologie_tissus",
+                        "label":"Typologie de tissus",
+                        "required":false,
+                        "nb_cols":4,
+                        "id":"id_typologie_tissus",
+                        "id_from":"id_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"typologie_tissus",
+                            "order_by":"typologie_tissus",
+                            "id_key":"id_typologie_tissus",
+                            "attributs":"id_typologie_tissus|typologie_tissus"
+                        }
+                    },
+                    {
+                        "type":"select",
+                        "name":"id_sous_typologie_tissus",
+                        "label":"Sous-typologie de tissus",
+                        "required":false,
+                        "nb_cols":5,
+                        "id":"id_sous_typologie_tissus",
+                        "id_from":"id_sous_typologie_tissus",
+                        "datasource":{
+                            "datasource_id":"datasource_sous_typologie_tissus",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"sous_typologie_tissus",
+                            "order_by":"sous_typologie_tissus",
+                            "id_key":"id_sous_typologie_tissus",
+                            "attributs":"id_sous_typologie_tissus|sous_typologie_tissus",
+                            "parents":[
+                                {
+                                    "name":"id_typologie_tissus",
+                                    "filter_attr":"id_typologie_tissus",
+                                    "filter_equality":"=",
+                                    "wait_for_parent":true
+                                }
+                            ]
+                        }
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"preconisation",
+                        "label":"Préconisation",
+                        "required":false,
+                        "nb_rows":5,
+                        "nb_cols":12,
+                        "id":"preconisation"
+                    }
+                ]
+            },
+			{
+				"fields":[
+                    {
+                        "type":"radio",
+                        "name":"proposition_classement",
+                        "label":"Proposition au classement",
+                        "nb_cols":2,
+                        "id":"proposition_classement",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    },
+                    {
+                        "type":"radio",
+                        "name":"classement_au_pluh",
+                        "label":"Classement en PIP au PLU-H",
+                        "nb_cols":2,
+                        "id":"classement_au_pluh",
+                        "options":{
+                            "choices":[
+                                {
+                                    "label":"Oui",
+                                    "value":true
+                                },
+                                {
+                                    "label":"Non",
+                                    "value":false
+                                }
+                            ]
+                        },
+                        "visible": true
+                    }
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"select",
+                        "name":"code_procedure_pluh",
+                        "label":"Procédure PLU-H",
+                        "required":false,
+                        "nb_cols":6,
+                        "id":"code_procedure_pluh",
+                        "id_from":"code_procedure_pluh_from",
+                        "datasource":{
+                            "datasource_id":"datasource_procedure_pluh",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"procedure_pluh",
+                            "order_by":"procedure_pluh",
+                            "id_key":"code_procedure_pluh",
+                            "attributs":"code_procedure_pluh|procedure_pluh"
+                        }
+                    },
+					{
+						"type": "text",
+						"name": "procedure_modification",
+						"label": "Numéro de modification procédure",
+						"required":false,
+						"nb_cols": 2,
+						"id": "procedure_modification"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_enqueteur",
+                        "label":"Enquêteur",
+                        "required":false,
+                        "nb_cols":3,
+                        "id":"id_enqueteur",
+                        "id_from":"id_enqueteur",
+                        "datasource":{
+                            "datasource_id":"datasource_enqueteur",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_enqueteur",
+                            "order_by":"nom_enqueteur",
+                            "id_key":"id_enqueteur",
+                            "attributs":"id_enqueteur|nom_enqueteur"
+                        }
+                    }
+                ]
+            },
+			{
+				"fields": [
+				  {
+					"type": "label",
+					"name": "date_creation_fiche",
+					"label": "Date de création de la fiche",
+					"nb_cols": 2,
+					"id": "Element_0_1583493674730"
+				  },
+				  {
+					"type": "label",
+					"name": "date_maj",
+					"label": "Date de mise à jour",
+					"nb_cols": 2,
+					"id": "Element_1_1583493693844"
+				  }
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"tinymce",
+                        "name":"descriptif",
+                        "label":"Descriptif",
+                        "required":false,
+                        "nb_rows":3,
+                        "nb_cols":12,
+                        "id":"descriptif"
+                    }
+                ]
+            },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "valeurs",
+					"label": "Valeurs du périmètre",
+					"required": false,
+					"nb_cols": 5,
+					"id": "Element_0_4_1",
+					"name_to": "valeurs",
+					"name_from": "valeurs_from",
+					"size": 5,
+					"label_from": "valeurs non associées",
+					"label_to": "valeurs associées au périmètre",
+					"web_service": {
+						"ressource_id": "patrimoine/valeurs",
+						"id_key": "id_valeur",
+						"label_key": "valeur",
+						"parameters": {
+							"order_by": "valeur"
+						}
+					}
+				  }
+				]
+            },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "protection_etats",
+					"label": "Protections état du périmètre",
+					"required": false,
+					"nb_cols": 6,
+					"id": "Element_0_4_1",
+					"name_to": "protection_etats",
+					"name_from": "protection_etats_from",
+					"size": 6,
+					"label_from": "protections état non associées",
+					"label_to": "protections état associées au périmètre",
+					"web_service": {
+						"ressource_id": "patrimoine/protection_etats",
+						"id_key": "id_protection_etat",
+						"label_key": "protection_etat",
+						"parameters": {
+							"order_by": "protection_etat"
+						}
+					}
+				  }
+				]
+            },
+			{
+				"fields": [
+					{
+						"type": "image_wsdata",
+						"name": "photos",
+						"label": "Photo(s)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1588165731143",
+						"multiple": true,
+						"displayOnly":false
+					}
+				]
+			},
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire",
+                        "label":"Commentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_titre",
+                        "label":"Commentaires sur le titre",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_titre"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"descriptif_commentaire",
+                        "label":"Commentaires sur le descriptif",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"descriptif_commentaire"
+                    }
+                ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"textarea",
+                        "name":"commentaire_complementaire",
+                        "label":"Commentaires complémentaires",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":12,
+                        "id":"commentaire_complementaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+		"tabs": {
+			"position": "top",
+			"list": [
+				{
+					"label": "Général",
+					"elements": [
+                        "update_button",
+						"code_insee",
+						"id_ensemble",
+						"localisation",
+						"titre",
+						"descriptif",
+						"id_classification_qualite",
+						"id_typologie_tissus",
+						"id_sous_typologie_tissus",
+						"preconisation",
+						"proposition_classement",
+						"classement_au_pluh",
+						"id_pip_pluh",
+						"valeurs",
+						"photos"
+					]
+				},
+				{
+					"label": "Protection état",
+					"elements": [
+                        "display_button",
+						"protection_etats"
+					]
+				},
+				{
+					"label": "Détails fiche",
+					"elements": [
+						"id_enqueteur",
+						"date_creation_fiche",
+						"date_maj",
+						"procedure_modification",
+						"code_procedure_pluh"
+					]
+				},
+				{
+					"label": "Commentaires",
+					"elements": [
+                        "update_button",
+						"commentaire",
+						"commentaire_titre",
+						"commentaire_complementaire",
+						"descriptif_commentaire"
+					]
+				}
+			]
+		}
+    },
+    "datasources":{
+        "datasource_classification_qualite":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"classification_qualite",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"classification_type_qualite"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_classification_qualite"
+        },
+        "datasource_enqueteur":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"enqueteur",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"enqueteur"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_enqueteur"
+        },
+        "datasource_typologie_tissus":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"typologie_tissus",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"typologie_tissus"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_typologie_tissus"
+        },
+        "datasource_sous_typologie_tissus":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"sous_typologie_tissus",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"sous_typologie_tissus"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_sous_typologie_tissus"
+        },
+        "datasource_commune":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"commune",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"commune"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_commune"
+        },
+        "datasource_procedure_pluh":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"procedure_pluh",
+            "description":"",
+            "parameters":{
+                "schema":"patrimoine",
+                "table":"procedure_pluh"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_procedure_pluh"
+        }
+    }
+}
diff --git a/src/module_patrimoine/module/javascript/script_module.js b/src/module_patrimoine/module/javascript/script_module.js
new file mode 100644
index 00000000..639dbf3a
--- /dev/null
+++ b/src/module_patrimoine/module/javascript/script_module.js
@@ -0,0 +1,66 @@
+/* global vitisApp, goog, angular, bootbox, oVFB */
+
+'use strict';
+goog.provide('vmap.patrimoine.script_module');
+goog.require('vmap.patrimoine.dashboard');
+vitisApp.on('appMainDrtvLoaded', function () {
+
+    /**
+     * loadSuiviProdImmoRepartitionLogControl function.
+     * Chargement de la section "Prétraitement" de l'onglet "Contrôle".
+     */
+    angular.element(vitisApp.appMainDrtv).scope()["loadPatrimoineLogControl"] = function () {
+        // Injection des services.
+        /*var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appMainDrtv).injector().get(["$rootScope"]);
+        var $translate = angular.element(vitisApp.appMainDrtv).injector().get(["$translate"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("loadSuiviProdImmoRepartitionLogControl");
+        // Sauve certaines données de la liste.
+        var sSortedBy = envSrvc["oSelectedObject"]["sorted_by"];
+        var sSortedDir = envSrvc["oSelectedObject"]["sorted_dir"];
+        var sEditColumn = envSrvc["oSelectedObject"]["edit_column"];
+        var sShowColumn = envSrvc["oSelectedObject"]["show_column"];
+        // Colonne et sens de tri.
+        envSrvc["oSelectedObject"]["sorted_by"] = "id_traitement";
+        envSrvc["oSelectedObject"]["sorted_dir"] = "ASC";
+        envSrvc["oSelectedObject"]["edit_column"] = "editModalSectionForm";
+        envSrvc["oSelectedObject"]["show_column"] = "showModalSectionForm";
+        // "sIdField" pour les boutons du mode "update" et "display".
+        envSrvc["oSelectedObject"]["sIdField"] = "id_controle";
+        // Affiche la liste des prétraitements du contrôle.
+        $translate(["GRID_TITLE_ANC_SAISIE_ANC_CONTROLE_CONTROLE_TRAITEMENT"]).then(function (oTranslations) {
+            // Paramètres de la liste + boutons.
+            var oGridOptions = {
+                "appHeader": true,
+                "appHeaderSearchForm": false,
+                "appGridTitle": oTranslations["GRID_TITLE_ANC_SAISIE_ANC_CONTROLE_CONTROLE_TRAITEMENT"],
+                "appShowActions": true,
+                "appIdField": "id_traitement"
+            };
+            //
+            $rootScope["loadSectionList"](oGridOptions);
+        });
+        // Attends que les boutons du "header" soient ajoutés.
+        var clearListener = $rootScope.$on('workspaceListHeaderActionsAdded', function (event, oGridOptions) {
+            // Supprime le "listener".
+            clearListener();
+            // Restaure les données originales de la liste.
+            envSrvc["oSelectedObject"]["sorted_by"] = sSortedBy;
+            envSrvc["oSelectedObject"]["sorted_dir"] = sSortedDir;
+            envSrvc["oSelectedObject"]["edit_column"] = sEditColumn;
+            envSrvc["oSelectedObject"]["show_column"] = sShowColumn;
+            // Boutons d'ajout et de suppression d'un traitement.
+            for (var i = 0; i < oGridOptions["appActions"].length; i++) {
+                if (oGridOptions["appActions"][i]["name"].indexOf("_add") != -1)
+                    oGridOptions["appActions"][i]["event"] = "addModalSectionForm()";
+                else if (oGridOptions["appActions"][i]["name"].indexOf("_delete") != -1)
+                    oGridOptions["appActions"][i]["event"] = "DeleteSelection({'sIdField':'id_traitement'})";
+            }
+        });*/
+    };
+	
+
+
+});
\ No newline at end of file
diff --git a/src/module_patrimoine/module/lang/lang-en.json b/src/module_patrimoine/module/lang/lang-en.json
new file mode 100644
index 00000000..ba0e2de9
--- /dev/null
+++ b/src/module_patrimoine/module/lang/lang-en.json
@@ -0,0 +1,6 @@
+{
+    "TEXT_MODE_SUIVI_PROD_IMMO_SAISIE" : "Inventaire du patrimoine d' l'Agence d'urbanisme de Lyon",
+    "TITLE_MODE_SUIVI_PROD_IMMO_SAISIE" : "Patrimoine",
+	"PATRIMOINE_SAISIE_PERIMETRE" : "Périmètre porteur qualité",
+	"PATRIMOINE_SAISIE_ELEMENT" : "Éléments bâti qualité"
+}
diff --git a/src/module_patrimoine/module/lang/lang-fr.json b/src/module_patrimoine/module/lang/lang-fr.json
new file mode 100644
index 00000000..f6a5799b
--- /dev/null
+++ b/src/module_patrimoine/module/lang/lang-fr.json
@@ -0,0 +1,12 @@
+{
+    "TEXT_MODE_PATRIMOINE_SAISIE" : "Inventaire du patrimoine d' l'Agence d'urbanisme de Lyon",
+    "TITLE_MODE_PATRIMOINE_SAISIE" : "Patrimoine",
+	"PATRIMOINE_SAISIE_PERIMETRE" : "Périmètre porteur qualité",
+	"PATRIMOINE_SAISIE_ELEMENT" : "Élément bâti de qualité",
+	"PATRIMOINE_PERIMETRE_TITLE_DISPLAY" : "Périmètre porteur de qualité",
+	"PATRIMOINE_ELEMENT_TITLE_DISPLAY" : "Élément bâti de qualité",
+	"PATRIMOINE_PERIMETRE_TITLE_UPDATE" : "Mise à jour d'un périmètre porteur de qualité",
+	"PATRIMOINE_ELEMENT_TITLE_UPDATE" : "Mise à jour d'un élément bâti de qualité",
+	"PATRIMOINE_PERIMETRE_TITLE_INSERT" : "Ajout d'un périmètre porteur de qualité",
+	"PATRIMOINE_ELEMENT_TITLE_INSERT" : "Ajout d'un élément bâti de qualité"
+}
diff --git a/src/module_patrimoine/web_service/ws/Commune.class.inc b/src/module_patrimoine/web_service/ws/Commune.class.inc
new file mode 100644
index 00000000..6f65c524
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Commune.class.inc
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Patrimoine.class.inc
+ * \class Patrimoine
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Patrimoine php class
+ *
+ * This class defines commune for one Patrimoine
+ * 
+ */
+
+class Commune extends Patrimoine {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about commune
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "commune", "code_insee");
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Element_bati_qualite.class.inc b/src/module_patrimoine/web_service/ws/Element_bati_qualite.class.inc
new file mode 100644
index 00000000..af402c1a
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Element_bati_qualite.class.inc
@@ -0,0 +1,278 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Element_bati_qualite.class.inc
+ * \class Element_bati_qualite
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Element_bati_qualite php class
+ *
+ * This class defines operation for one Element_bati_qualite
+ *
+ */
+class Element_bati_qualite extends Patrimoine {
+
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+        $this->oFilesManager = new Files_manager($this->aProperties);
+    }
+
+    /**
+     * @SWG\Get(path="/controles/{id_element_bati_qualite}",
+     *   tags={"Element_bati_qualites"},
+     *   summary="Get Element_bati_qualite",
+     *   description="Request to get Element_bati_qualite by id",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="id_element_bati_qualite",
+     *     in="path",
+     *     description="id_element_bati_qualite",
+     *     required=true,
+     *     type="integer",
+     *   format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Element_bati_qualite Response",
+     *         @SWG\Schema(ref="#/definitions/controles")
+     *     )
+     *  )
+     */
+
+    /**
+     * get informations about mode
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "element_bati_qualite", "id_element_bati_qualite", 'patrimoine_saisie_patrimoine_element', 'patrimoine');
+		$this->getCommune();
+		$this->getEnqueteur();
+		$this->getTypologieTissus();
+		$this->getSousTypologieTissus();
+		$this->getMorphologieBatiment();
+		$this->getSousMorphologieBatiment();
+		$this->getValeurs();
+		$this->getProtectionsEtat();
+		$this->getThemes();
+		// proposition_classement
+		if ($this->aFields['proposition_classement']==true) $this->aFields['proposition_classement_label'] ="Oui";
+		if ($this->aFields['proposition_classement']==false) $this->aFields['proposition_classement_label'] ="Non";
+		// classement_au_pluh
+		if ($this->aFields['classement_au_pluh']==true) $this->aFields['classement_au_pluh_label'] ="Oui";
+		if ($this->aFields['classement_au_pluh']==false) $this->aFields['classement_au_pluh_label'] ="Non";
+		// Date de création
+		if(isset($this->aFields['date_creation_fiche']) and !is_null($this->aFields['date_creation_fiche'])){
+			$oDate_creation_fiche = new DateTime($this->aFields['date_creation_fiche']);
+			$this->aFields['date_creation_fiche'] = $oDate_creation_fiche->format('d/m/Y');
+		}
+		// Date de mise à jour
+		if(isset($this->aFields['date_maj']) and !is_null($this->aFields['date_maj'])){
+			$oDate_maj = new DateTime($this->aFields['date_maj']);
+			$this->aFields['date_maj'] = $oDate_maj->format('d/m/Y');
+		}
+    }
+
+    /**
+     *  get commune of perimeter
+     */
+    function getCommune() {
+        if(isset($this->aFields['code_insee']) and !is_null($this->aFields['code_insee'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['code_insee'] = array('value' => $this->aFields['code_insee'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getCommune'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['nom_commune'] = $aLigne["nom_commune"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get enqueteur of perimeter
+     */
+    function getEnqueteur() {
+        if(isset($this->aFields['id_enqueteur']) and !is_null($this->aFields['id_enqueteur'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_enqueteur'] = array('value' => $this->aFields['id_enqueteur'], 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getEnqueteur'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['nom_enqueteur'] = $aLigne["nom_enqueteur"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get typologie tissus of perimeter
+     */
+    function getTypologieTissus() {
+        if(isset($this->aFields['id_typologie_tissus']) and !is_null($this->aFields['id_typologie_tissus'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_typologie_tissus'] = array('value' => $this->aFields['id_typologie_tissus'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getTypologieTissus'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['typologie_tissus'] = $aLigne["typologie_tissus"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get sous-typologie tissus of perimeter
+     */
+    function getSousTypologieTissus() {
+        if(isset($this->aFields['id_sous_typologie_tissus']) and !is_null($this->aFields['id_sous_typologie_tissus'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_sous_typologie_tissus'] = array('value' => $this->aFields['id_sous_typologie_tissus'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getSousTypologieTissus'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['sous_typologie_tissus'] = $aLigne["sous_typologie_tissus"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get morphologie batiment of perimeter
+     */
+    function getMorphologieBatiment() {
+        if(isset($this->aFields['id_morphologie_batiment']) and !is_null($this->aFields['id_morphologie_batiment'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_morphologie_batiment'] = array('value' => $this->aFields['id_morphologie_batiment'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getMorphologieBatiment'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['morphologie_batiment'] = $aLigne["morphologie_batiment"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get sous-morphologie batiment tissus of perimeter
+     */
+    function getSousMorphologieBatiment() {
+        if(isset($this->aFields['id_sous_morphologie_batiment']) and !is_null($this->aFields['id_sous_morphologie_batiment'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_sous_morphologie_batiment'] = array('value' => $this->aFields['id_sous_morphologie_batiment'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getSousMorphologieBatiment'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['sous_morphologie_batiment'] = $aLigne["sous_morphologie_batiment"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+
+    /**
+     *  get valeurs of element
+     */
+    function getValeurs() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getElementValeurs'], $aParams);
+		$sListValeurId = "";
+		$aListValeur = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sListValeurId == "") {
+				$sListValeurId = $aLigne["id_valeur"];
+			} else {
+				$sListValeurId .= "|" . $aLigne["id_valeur"];
+			}
+			$aListValeur[] = $aLigne["valeur"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['valeurs'] = $sListValeurId;
+		$this->aFields['valeurs_label'] = implode(',', $aListValeur);
+    }
+
+    /**
+     *  get protections état of element
+     */
+    function getProtectionsEtat() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getElementProtectionsEtat'], $aParams);
+		$sProtectionEtatId = "";
+		$aListProtectionEtat = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sProtectionEtatId == "") {
+				$sProtectionEtatId = $aLigne["id_protection_etat"];
+			} else {
+				$sProtectionEtatId .= "|" . $aLigne["id_protection_etat"];
+			}
+			$aListProtectionEtat[] = $aLigne["protection_etat"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['protection_etats'] = $sProtectionEtatId;
+		$this->aFields['protection_etats_label'] = implode(',', $aListProtectionEtat);
+    }
+
+    /**
+     *  get thèmes of element
+     */
+    function getThemes() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getElementThemes'], $aParams);
+		$sThemeId = "";
+		$aListTheme = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sThemeId == "") {
+				$sThemeId = $aLigne["id_theme"];
+			} else {
+				$sThemeId .= "|" . $aLigne["id_theme"];
+			}
+			$aListTheme[] = $aLigne["theme"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['themes'] = $sThemeId;
+		$this->aFields['themes_label'] = implode(',', $aListTheme);
+    }
+
+    /**
+     * delete a Element_bati_qualite
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('patrimoine', 'element_bati_qualite', 'id_element_bati_qualite', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_element_bati_qualite"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
diff --git a/src/module_patrimoine/web_service/ws/Element_bati_qualites.class.inc b/src/module_patrimoine/web_service/ws/Element_bati_qualites.class.inc
new file mode 100644
index 00000000..7f6da1ed
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Element_bati_qualites.class.inc
@@ -0,0 +1,396 @@
+<?php
+
+/**
+ * \file Element_bati_qualites.class.inc
+ * \class Element_bati_qualites
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Element_bati_qualites php class
+ *
+ * This class defines Rest Api to Vitis Element_bati_qualites
+ *
+ */
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once 'Element_bati_qualite.class.inc';
+
+class Element_bati_qualites extends Patrimoine {
+    /**
+     * @SWG\Definition(
+     *   definition="/element_bati_qualites",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Element_bati_qualites",
+     *   description="Operations about Element_bati_qualites"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+        $this->oFilesManager = new Files_manager($this->aProperties);
+    }
+
+    /**
+     * @SWG\Get(path="/element_bati_qualites",
+     *   tags={"Element_bati_qualites"},
+     *   summary="Get Element_bati_qualites",
+     *   description="Request to get Element_bati_qualites",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="controle Response",
+     *         @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Element_bati_qualites
+     * @return  Element_bati_qualites
+     */
+    function GET() {
+        $aReturn = $this->genericGet('patrimoine', "element_bati_qualite", "id_element_bati_qualite");
+        $sMessage = $aReturn['sMessage'];
+		$aElements=json_decode($aReturn['sMessage'],true);
+		$aElements2=array();
+		foreach ($aElements['element_bati_qualites'] as $aElement){
+			// geom
+			unset($aElement['geom']);
+			// proposition_classement
+			if ($aElement['proposition_classement']==true) $aElement['proposition_classement_label'] ="Oui";
+			if ($aElement['proposition_classement']==false) $aElement['proposition_classement_label'] ="Non";
+			// classement_au_pluh
+			if ($aElement['classement_au_pluh']==true) $aElement['classement_au_pluh_label'] ="Oui";
+			if ($aElement['classement_au_pluh']==false) $aElement['classement_au_pluh_label'] ="Non";
+			// nom_commune
+			$aElement['nom_commune']= $this->getCommune($aElement['code_insee']);
+			// procedure_pluh
+			$aElement['procedure_pluh']= $this->getProcedurePluh($aElement['code_procedure_pluh']);
+			$aElements2[count($aElements2)]=$aElement;
+		}
+		$sPerimetres=json_encode(array("element_bati_qualites"=>$aElements2,"list_count"=>$aElements['list_count'],"total_row_number"=>$aElements['total_row_number'],"status"=>$aElements['status']));
+        return $sPerimetres;
+    }
+	
+    /**
+     *  get commune of element
+     */
+    function getCommune($iCodeInsee) {
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['code_insee'] = array('value' => $iCodeInsee, 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getCommune'], $aParams);
+		$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		return $aLigne["nom_commune"];
+    }
+	
+    /**
+     *  get procedure_pluh of element
+     */
+    function getProcedurePluh($iProcedurePluh) {
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['code_procedure_pluh'] = array('value' => $iProcedurePluh, 'type' => 'string');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getProcedurePluh'], $aParams);
+		$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		return $aLigne["procedure_pluh"];
+    }
+
+    /**
+     * @SWG\Post(path="/element_bati_qualites",
+     *   tags={"Element_bati_qualites"},
+     *   summary="Add controle",
+     *   description="Request to add Element_bati_qualites",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="controle Response",
+     *         @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert controle
+     * @return id of the controle created
+     */
+    function POST() {
+		// get value sequence from patrimoine database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'patrimoine\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query('SELECT nextval(\'patrimoine.element_bati_qualite_id_element_bati_qualite_seq\')');
+		$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+		$this->aValues['id_element_bati_qualite'] = $aResult['nextval'];
+		if ($this->aValues['id_enqueteur']==null) unset($this->aValues['id_enqueteur']);
+		if ($this->aValues['id_typologie_tissus']==null) unset($this->aValues['id_typologie_tissus']);
+		if ($this->aValues['id_sous_typologie_tissus']==null) unset($this->aValues['id_sous_typologie_tissus']);
+		if ($this->aValues['id_morphologie_batiment']==null) unset($this->aValues['id_morphologie_batiment']);
+		if ($this->aValues['id_sous_morphologie_batiment']==null) unset($this->aValues['id_sous_morphologie_batiment']);
+		if ($this->aValues['code_procedure_pluh']==null)  unset($this->aValues['code_procedure_pluh']);
+		$this->aValues['id_bati'] =$this->aValues['code_insee'].'_'.$this->aValues['num_batiment'];
+		$this->aValues['date_creation_fiche'] = date("Y-m-d");
+		// error_log(print_r($this->aValues,true));
+		// Fichiers à uploader
+        $aUploadFiles = array('photos' => []);
+        $aReturn = $this->genericPost('patrimoine', 'element_bati_qualite', null, 'id_element_bati_qualite', $aUploadFiles, 'patrimoine_saisie_patrimoine_element', 'patrimoine');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/element_bati_qualites/{id_element_bati_qualite}",
+     *   tags={"Element_bati_qualites"},
+     *   summary="update Element_bati_qualites",
+     *   description="Request to update Element_bati_qualites",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Controle token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_element_bati_qualite",
+     *     in="path",
+     *     description="id of the Element_bati_qualites",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * update element_bati_qualites
+     * @return id of element_bati_qualites updated or error object if a element_bati_qualites is not updated
+     */
+    function PUT() {
+		if ($this->aValues['id_enqueteur']==null)  unset($this->aValues['id_enqueteur']);
+		if ($this->aValues['id_typologie_tissus']==null)  unset($this->aValues['id_typologie_tissus']);
+		if ($this->aValues['id_sous_typologie_tissus']==null)  unset($this->aValues['id_sous_typologie_tissus']);
+		if ($this->aValues['id_morphologie_batiment']==null) unset($this->aValues['id_morphologie_batiment']);
+		if ($this->aValues['id_sous_morphologie_batiment']==null) unset($this->aValues['id_sous_morphologie_batiment']);
+		if ($this->aValues['code_procedure_pluh']==null)  unset($this->aValues['code_procedure_pluh']);
+		unset($this->aValues['id_bati']);
+		unset($this->aValues['date_creation_fiche']);
+		$this->aValues['date_maj'] = date("Y-m-d");
+		// Fichiers à uploader
+        $aUploadFiles = array('photos' => []);
+        // Mise à jour
+        $aReturn = $this->genericPut('patrimoine', 'element_bati_qualite', 'id_element_bati_qualite', $aUploadFiles, 'patrimoine_saisie_patrimoine_element', 'patrimoine');
+		if ($aReturn['sStatus'] == 1) {
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            //***** valeurs *****//
+            // Le paramètre "valeurs" est passé dans la requête ?
+            if ($this->aValues['valeurs'] !== NULL) {
+				$this->oConnection->oBd->delete('patrimoine', 'ebq_valeur', 'id_ebq', $this->aValues["my_vitis_id"]);
+                // Valeur(s) à rattacher au groupe ?
+                if (!empty($this->aValues['valeurs'])){
+                    require $this->sRessourcesFile;
+                    $aValeurs = explode('|', $this->aValues['valeurs']);
+                    foreach ($aValeurs as $iValeurId){
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+                        $aParams['id_valeur'] = array('value' => $iValeurId, 'type' => 'number');
+                        $aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertElementValeurs'], $aParams);
+                    }
+                }
+            }
+            //***** protections état *****//
+            // Le paramètre "protection_etats" est passé dans la requête ?
+            if ($this->aValues['protection_etats'] !== NULL) {
+				$this->oConnection->oBd->delete('patrimoine', 'ebq_protection_etat', 'id_ebq', $this->aValues["my_vitis_id"]);
+                if (!empty($this->aValues['protection_etats'])){
+                    require $this->sRessourcesFile;
+                    $aProtectionEtats = explode('|', $this->aValues['protection_etats']);
+                    foreach ($aProtectionEtats as $iProtectionEtatId){
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+                        $aParams['id_protection_etat'] = array('value' => $iProtectionEtatId, 'type' => 'number');
+                        $aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertElementProtectionsEtat'], $aParams);
+                    }
+                }
+            }
+            //***** thèmes *****//
+            // Le paramètre "themes" est passé dans la requête ?
+            if ($this->aValues['themes'] !== NULL) {
+				$this->oConnection->oBd->delete('patrimoine', 'ebq_theme', 'id_ebq', $this->aValues["my_vitis_id"]);
+                if (!empty($this->aValues['themes'])){
+                    require $this->sRessourcesFile;
+                    $aThemes = explode('|', $this->aValues['themes']);
+                    foreach ($aThemes as $iThemeId){
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+                        $aParams['id_theme'] = array('value' => $iThemeId, 'type' => 'number');
+                        $aParams['id_ebq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertElementThemes'], $aParams);
+                    }
+                }
+            }
+        } else {
+            $sMessage = $aReturn['sMessage'];
+        }
+        return $sMessage;
+    }
+
+    /**
+     * @SWG\Delete(path="/element_bati_qualites",
+     *   tags={"Element_bati_qualites"},
+     *   summary="delete Element_bati_qualites",
+     *   description="Request to delete Element_bati_qualites",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the element",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Element Response",
+     *         @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/element_bati_qualites/{id_element_bati_qualite}",
+     *   tags={"Element_bati_qualites"},
+     *   summary="delete Element_bati_qualites",
+     *   description="Request to delete Element_bati_qualites",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Element token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_element_bati_qualite",
+     *     in="path",
+     *     description="id of the Element_bati_qualites",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/element_bati_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete element_bati_qualites
+     * @return id of element_bati_qualites deleted or error object if a element_bati_qualites is not deleted
+     */
+    function DELETE() {
+        require $this->sRessourcesFile;
+        // Dépendances supprimées en cascade
+        $aReturn = $this->genericDelete('patrimoine', 'element_bati_qualite', 'id_element_bati_qualite');
+        return $aReturn['sMessage'];
+    }
+
+}
+
+?>
diff --git a/src/module_patrimoine/web_service/ws/Patrimoine.class.inc b/src/module_patrimoine/web_service/ws/Patrimoine.class.inc
new file mode 100644
index 00000000..81b01c8e
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Patrimoine.class.inc
@@ -0,0 +1,42 @@
+<?php
+
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/class/vitis_lib/DbClass.class.inc";
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/ws/vitis/Vitis.class.inc';
+require_once 'vmlib/logUtil.inc';
+
+class Patrimoine extends Vitis {
+
+    //Chemin du fichier de ressources contenant les requêtes SQL
+    var $sRessourcesFile = 'ws/patrimoine/Patrimoine.class.sql.inc';
+
+    /**
+     * DEPRECATED
+     * Upload un document dans le ws_data du module Patrimoine.
+     * @param type $sIndex
+     * @param type $sFolder
+     */
+    function uploadDocument($sIndex, $sFolder) {
+        // Crée le répertoire si inexistant.
+        $sDirPath = $this->aProperties['ws_data_dir'] . '/patrimoine/' . $sFolder . '/documents/' . $this->aValues["my_vitis_id"] . '/' . $sIndex . '/';
+        if (!is_dir($sDirPath))
+            mkdir($sDirPath, 0777, true);
+        // Ecrit le fichier.
+        if (!empty($_FILES[$sIndex])) {
+            $sErrorMessage = uploadFile($sIndex, "", $sDirPath . $_FILES[$sIndex]["name"], $_FILES[$sIndex]['size'] + 1);
+            if ($sErrorMessage != "")
+                writeToErrorLog($sErrorMessage);
+        }
+        else {
+            $sfileContentIndex = $sIndex . '_file';
+            $sfileNameIndex = $sIndex . '_name';
+            if (!empty($this->aValues[$sfileContentIndex])) {
+
+                $this->aValues[$sIndex] = $this->aValues[$sfileNameIndex];
+                $fp = fopen($sDirPath . $this->aValues[$sfileNameIndex], "w");
+                fwrite($fp, $this->aValues[$sfileContentIndex]);
+                fclose($fp);
+            }
+        }
+    }
+}
+?>
diff --git a/src/module_patrimoine/web_service/ws/Patrimoine.class.sql.inc b/src/module_patrimoine/web_service/ws/Patrimoine.class.sql.inc
new file mode 100644
index 00000000..0c657326
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Patrimoine.class.sql.inc
@@ -0,0 +1,36 @@
+<?php
+//Définition des requêtes de l'api Vitis
+$aSql['checkIP'] = "SELECT user_id, ip_constraint FROM [sSchemaFramework].user WHERE login ='[sLogin]'";
+$aSql['getGroups'] = "SELECT group_id FROM [sSchemaFramework].user_group WHERE user_id = [user_id]";
+$aSql['loginUnique'] = 'SELECT UPPER("login") FROM [sSchemaFramework]."user" WHERE UPPER("login")=UPPER(\'sLoginUser\')';
+$aSql['getLoginbyId'] = 'SELECT "login" FROM [sSchemaFramework]."user" WHERE user_id=[user_id]';
+$aSql['getTableColumn'] = 'SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = \'[sSchemaFramework]\' and table_name= \'[sTable]\'';
+$aSql['getUserPrivileges'] = 'SELECT groname FROM pg_user s LEFT OUTER JOIN pg_group g on (s.usesysid = any(g.grolist) )inner join [sSchemaFramework].user on "user".login = usename WHERE user_id = [user_id]';
+$aSql['listDomain'] = 'SELECT distinct domain, alias FROM [sSchemaFramework].domain WHERE "type" = \'AD\'';
+$aSql['createRolname'] = 'CREATE ROLE "vitis_[sDomain]" NOSUPERUSER INHERIT NOCREATEDB CREATEROLE;';
+$aSql['getInfoRolname'] = 'SELECT * FROM pg_catalog.pg_roles WHERE rolname = \'vitis_[sDomain]\'';
+// Patrimoine
+$aSql['getCommune'] = "SELECT code_insee, nom_commune FROM [sSchemaFramework].commune WHERE code_insee =[code_insee] LIMIT 1";
+$aSql['getProcedurePluh'] = "SELECT code_procedure_pluh, procedure_pluh FROM [sSchemaFramework].procedure_pluh WHERE code_procedure_pluh =[code_procedure_pluh] LIMIT 1";
+$aSql['getEnqueteur'] = "SELECT id_enqueteur, nom_enqueteur FROM [sSchemaFramework].enqueteur WHERE id_enqueteur =[id_enqueteur] LIMIT 1";
+$aSql['getClassificationTypeQualite'] = "SELECT id_classification_qualite, classification_qualite FROM [sSchemaFramework].classification_type_qualite WHERE id_classification_qualite =[id_classification_qualite] LIMIT 1";
+$aSql['getTypologieTissus'] = "SELECT id_typologie_tissus, typologie_tissus FROM [sSchemaFramework].typologie_tissus WHERE id_typologie_tissus =[id_typologie_tissus] LIMIT 1";
+$aSql['getSousTypologieTissus'] = "SELECT id_sous_typologie_tissus, sous_typologie_tissus FROM [sSchemaFramework].sous_typologie_tissus WHERE id_sous_typologie_tissus =[id_sous_typologie_tissus] LIMIT 1";
+$aSql['getMorphologieBatiment'] = "SELECT id_morphologie_batiment, morphologie_batiment FROM [sSchemaFramework].morphologie_batiment WHERE id_morphologie_batiment =[id_morphologie_batiment] LIMIT 1";
+$aSql['getSousMorphologieBatiment'] = "SELECT id_sous_morphologie_batiment, sous_morphologie_batiment FROM [sSchemaFramework].sous_morphologie_batiment WHERE id_sous_morphologie_batiment =[id_sous_morphologie_batiment] LIMIT 1";
+// 		EPQ Valeurs
+$aSql['getPerimetreValeurs'] = "SELECT epq_valeur.id_valeur, \"valeur\".valeur FROM [sSchemaFramework].epq_valeur LEFT JOIN [sSchemaFramework].valeur ON epq_valeur.id_valeur = \"valeur\".id_valeur WHERE epq_valeur.id_epq = [id_epq]";
+$aSql['insertPerimetreValeurs'] = "INSERT INTO [sSchemaFramework].epq_valeur(id_valeur, id_epq) VALUES([id_valeur], [id_epq])";
+// 		EPQ Protections Etat
+$aSql['getPerimetreProtectionsEtat'] = "SELECT epq_protection_etat.id_protection_etat, \"protection_etat\".protection_etat FROM [sSchemaFramework].epq_protection_etat LEFT JOIN [sSchemaFramework].protection_etat ON epq_protection_etat.id_protection_etat = \"protection_etat\".id_protection_etat WHERE epq_protection_etat.id_epq = [id_epq]";
+$aSql['insertPerimetreProtectionsEtat'] = "INSERT INTO [sSchemaFramework].epq_protection_etat(id_protection_etat, id_epq) VALUES([id_protection_etat], [id_epq])";
+// 		EBQ Valeurs
+$aSql['getElementValeurs'] = "SELECT ebq_valeur.id_valeur, \"valeur\".valeur FROM [sSchemaFramework].ebq_valeur LEFT JOIN [sSchemaFramework].valeur ON ebq_valeur.id_valeur = \"valeur\".id_valeur WHERE ebq_valeur.id_ebq = [id_ebq]";
+$aSql['insertElementValeurs'] = "INSERT INTO [sSchemaFramework].ebq_valeur(id_valeur, id_ebq) VALUES([id_valeur], [id_ebq])";
+// 		EBQ Protections Etat
+$aSql['getElementProtectionsEtat'] = "SELECT ebq_protection_etat.id_protection_etat, \"protection_etat\".protection_etat FROM [sSchemaFramework].ebq_protection_etat LEFT JOIN [sSchemaFramework].protection_etat ON ebq_protection_etat.id_protection_etat = \"protection_etat\".id_protection_etat WHERE ebq_protection_etat.id_ebq = [id_ebq]";
+$aSql['insertElementProtectionsEtat'] = "INSERT INTO [sSchemaFramework].ebq_protection_etat(id_protection_etat, id_ebq) VALUES([id_protection_etat], [id_ebq])";
+// 		EBQ Themes
+$aSql['getElementThemes'] = "SELECT ebq_theme.id_theme, \"theme\".theme FROM [sSchemaFramework].ebq_theme LEFT JOIN [sSchemaFramework].theme ON ebq_theme.id_theme = \"theme\".id_theme WHERE ebq_theme.id_ebq = [id_ebq]";
+$aSql['insertElementThemes'] = "INSERT INTO [sSchemaFramework].ebq_theme(id_theme, id_ebq) VALUES([id_theme], [id_ebq])";
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualite.class.inc b/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualite.class.inc
new file mode 100644
index 00000000..f41f8e90
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualite.class.inc
@@ -0,0 +1,238 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Perimetre_porteur_qualite.class.inc
+ * \class Perimetre_porteur_qualite
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Perimetre_porteur_qualite php class
+ *
+ * This class defines operation for one Perimetre_porteur_qualite
+ *
+ */
+class Perimetre_porteur_qualite extends Patrimoine {
+
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+        $this->oFilesManager = new Files_manager($this->aProperties);
+    }
+
+    /**
+     * @SWG\Get(path="/controles/{id_perimetre_porteur_qualite}",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="Get Perimetre_porteur_qualite",
+     *   description="Request to get Perimetre_porteur_qualite by id",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="id_perimetre_porteur_qualite",
+     *     in="path",
+     *     description="id_perimetre_porteur_qualite",
+     *     required=true,
+     *     type="integer",
+     *   format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Perimetre_porteur_qualite Response",
+     *         @SWG\Schema(ref="#/definitions/controles")
+     *     )
+     *  )
+     */
+
+    /**
+     * get informations about mode
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "perimetre_porteur_qualite", "id_perimetre_porteur_qualite", 'patrimoine_saisie_patrimoine_perimetre', 'patrimoine');
+		$this->getCommune();
+		$this->getEnqueteur();
+		$this->getClassificationTypeQualite();
+		$this->getTypologieTissus();
+		$this->getSousTypologieTissus();
+		$this->getValeurs();
+		$this->getProtectionsEtat();
+		// proposition_classement
+		if ($this->aFields['proposition_classement']==true) $this->aFields['proposition_classement_label'] ="Oui";
+		if ($this->aFields['proposition_classement']==false) $this->aFields['proposition_classement_label'] ="Non";
+		// classement_au_pluh
+		if ($this->aFields['classement_au_pluh']==true) $this->aFields['classement_au_pluh_label'] ="Oui";
+		if ($this->aFields['classement_au_pluh']==false) $this->aFields['classement_au_pluh_label'] ="Non";
+		// Date de création
+		if(isset($this->aFields['date_creation_fiche']) and !is_null($this->aFields['date_creation_fiche'])){
+			$oDate_creation_fiche = new DateTime($this->aFields['date_creation_fiche']);
+			$this->aFields['date_creation_fiche'] = $oDate_creation_fiche->format('d/m/Y');
+		}
+		// Date de mise à jour
+		if(isset($this->aFields['date_maj']) and !is_null($this->aFields['date_maj'])){
+			$oDate_maj = new DateTime($this->aFields['date_maj']);
+			$this->aFields['date_maj'] = $oDate_maj->format('d/m/Y');
+		}
+    }
+
+    /**
+     *  get commune of perimeter
+     */
+    function getCommune() {
+        if(isset($this->aFields['code_insee']) and !is_null($this->aFields['code_insee'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['code_insee'] = array('value' => $this->aFields['code_insee'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getCommune'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['nom_commune'] = $aLigne["nom_commune"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get enqueteur of perimeter
+     */
+    function getEnqueteur() {
+        if(isset($this->aFields['id_enqueteur']) and !is_null($this->aFields['id_enqueteur'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_enqueteur'] = array('value' => $this->aFields['id_enqueteur'], 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getEnqueteur'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['nom_enqueteur'] = $aLigne["nom_enqueteur"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get classification type qualite of perimeter
+     */
+    function getClassificationTypeQualite() {
+        if(isset($this->aFields['id_classification_qualite']) and !is_null($this->aFields['id_classification_qualite'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_classification_qualite'] = array('value' => $this->aFields['id_classification_qualite'], 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getClassificationTypeQualite'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['classification_qualite'] = $aLigne["classification_qualite"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get typologie tissus of perimeter
+     */
+    function getTypologieTissus() {
+        if(isset($this->aFields['id_typologie_tissus']) and !is_null($this->aFields['id_typologie_tissus'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_typologie_tissus'] = array('value' => $this->aFields['id_typologie_tissus'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getTypologieTissus'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['typologie_tissus'] = $aLigne["typologie_tissus"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+	
+    /**
+     *  get sous-typologie tissus of perimeter
+     */
+    function getSousTypologieTissus() {
+        if(isset($this->aFields['id_sous_typologie_tissus']) and !is_null($this->aFields['id_sous_typologie_tissus'])){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+			$aParams['id_sous_typologie_tissus'] = array('value' => $this->aFields['id_sous_typologie_tissus'], 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getSousTypologieTissus'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['sous_typologie_tissus'] = $aLigne["sous_typologie_tissus"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+    }
+
+    /**
+     *  get valeurs of perimetre
+     */
+    function getValeurs() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['id_epq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getPerimetreValeurs'], $aParams);
+		$sListValeurId = "";
+		$aListValeur = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sListValeurId == "") {
+				$sListValeurId = $aLigne["id_valeur"];
+			} else {
+				$sListValeurId .= "|" . $aLigne["id_valeur"];
+			}
+			$aListValeur[] = $aLigne["valeur"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['valeurs'] = $sListValeurId;
+		$this->aFields['valeurs_label'] = implode(',', $aListValeur);
+    }
+
+    /**
+     *  get protections état of perimetre
+     */
+    function getProtectionsEtat() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['id_epq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getPerimetreProtectionsEtat'], $aParams);
+		$sProtectionEtatId = "";
+		$aListProtectionEtat = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sProtectionEtatId == "") {
+				$sProtectionEtatId = $aLigne["id_protection_etat"];
+			} else {
+				$sProtectionEtatId .= "|" . $aLigne["id_protection_etat"];
+			}
+			$aListProtectionEtat[] = $aLigne["protection_etat"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['protection_etats'] = $sProtectionEtatId;
+		$this->aFields['protection_etats_label'] = implode(',', $aListProtectionEtat);
+    }
+
+    /**
+     * delete a Perimetre_porteur_qualite
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('patrimoine', 'perimetre_porteur_qualite', 'id_perimetre_porteur_qualite', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_perimetre_porteur_qualite"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
diff --git a/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualites.class.inc b/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualites.class.inc
new file mode 100644
index 00000000..ebef68ba
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Perimetre_porteur_qualites.class.inc
@@ -0,0 +1,379 @@
+<?php
+
+/**
+ * \file Perimetre_porteur_qualites.class.inc
+ * \class Perimetre_porteur_qualites
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Perimetre_porteur_qualites php class
+ *
+ * This class defines Rest Api to Vitis Perimetre_porteur_qualites
+ *
+ */
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once 'Perimetre_porteur_qualite.class.inc';
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/cryptUtil.inc';
+
+class Perimetre_porteur_qualites extends Patrimoine {
+    /**
+     * @SWG\Definition(
+     *   definition="/perimetre_porteur_qualites",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Perimetre_porteur_qualites",
+     *   description="Operations about Perimetre_porteur_qualites"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+        $this->oFilesManager = new Files_manager($this->aProperties);
+    }
+
+    /**
+     * @SWG\Get(path="/perimetre_porteur_qualites",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="Get Perimetre_porteur_qualites",
+     *   description="Request to get Perimetre_porteur_qualites",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="controle Response",
+     *         @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Perimetre_porteur_qualites
+     * @return  Perimetre_porteur_qualites
+     */
+    function GET() {
+        $aReturn = $this->genericGet('patrimoine', "perimetre_porteur_qualite", "id_perimetre_porteur_qualite");
+        $sMessage = $aReturn['sMessage'];
+		$aPerimetres=json_decode($aReturn['sMessage'],true);
+		$aPerimetres2=array();
+		foreach ($aPerimetres['perimetre_porteur_qualites'] as $aPerimetre){
+			// geom
+			unset($aPerimetre['geom']);
+			// proposition_classement
+			if ($aPerimetre['proposition_classement']==true) $aPerimetre['proposition_classement_label'] ="Oui";
+			if ($aPerimetre['proposition_classement']==false) $aPerimetre['proposition_classement_label'] ="Non";
+			// classement_au_pluh
+			if ($aPerimetre['classement_au_pluh']==true) $aPerimetre['classement_au_pluh_label'] ="Oui";
+			if ($aPerimetre['classement_au_pluh']==false) $aPerimetre['classement_au_pluh_label'] ="Non";
+			// nom_commune
+			$aPerimetre['nom_commune']= $this->getCommune($aPerimetre['code_insee']);
+			// procedure_pluh
+			$aPerimetre['procedure_pluh']= $this->getProcedurePluh($aPerimetre['code_procedure_pluh']);
+			$aPerimetres2[count($aPerimetres2)]=$aPerimetre;
+		}
+		$sPerimetres=json_encode(array("perimetre_porteur_qualites"=>$aPerimetres2,"list_count"=>$aPerimetres['list_count'],"total_row_number"=>$aPerimetres['total_row_number'],"status"=>$aPerimetres['status']));
+        return $sPerimetres;
+    }
+	
+    /**
+     *  get commune of perimeter
+     */
+    function getCommune($iCodeInsee) {
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['code_insee'] = array('value' => $iCodeInsee, 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getCommune'], $aParams);
+		$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		return $aLigne["nom_commune"];
+    }
+	
+    /**
+     *  get procedure_pluh of perimeter
+     */
+    function getProcedurePluh($iProcedurePluh) {
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+		$aParams['code_procedure_pluh'] = array('value' => $iProcedurePluh, 'type' => 'string');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getProcedurePluh'], $aParams);
+		$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		return $aLigne["procedure_pluh"];
+    }
+
+    /**
+     * @SWG\Post(path="/perimetre_porteur_qualites",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="Add perimetre",
+     *   description="Request to add Perimetre_porteur_qualites",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="perimetre Response",
+     *         @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert perimetre
+     * @return id of the perimetre created
+     */
+    function POST() {
+		// get value sequence from patrimoine database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'patrimoine\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query('SELECT nextval(\'patrimoine.perimetre_porteur_qualite_id_perimetre_porteur_qualite_seq\')');
+		$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+		$this->aValues['id_perimetre_porteur_qualite'] = $aResult['nextval'];
+		if ($this->aValues['id_classification_qualite']==null)  unset($this->aValues['id_classification_qualite']);
+		if ($this->aValues['id_enqueteur']==null)  unset($this->aValues['id_enqueteur']);
+		if ($this->aValues['id_typologie_tissus']==null)  unset($this->aValues['id_typologie_tissus']);
+		if ($this->aValues['id_sous_typologie_tissus']==null)  unset($this->aValues['id_sous_typologie_tissus']);
+		if ($this->aValues['code_procedure_pluh']==null)  unset($this->aValues['code_procedure_pluh']);
+		$this->aValues['id_ensemble'] =$this->aValues['code_insee'].'_'.$this->aValues['id_classification_qualite'].$this->aValues['num_ensemble'];
+		$this->aValues['date_creation_fiche'] = date("Y-m-d");
+		// error_log(print_r($this->aValues,true));
+		// Fichiers à uploader
+        $aUploadFiles = array('photos' => []);
+        $aReturn = $this->genericPost('patrimoine', 'perimetre_porteur_qualite', null, 'id_perimetre_porteur_qualite', $aUploadFiles, 'patrimoine_saisie_patrimoine_perimetre', 'patrimoine');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/perimetre_porteur_qualites/{id_perimetre_porteur_qualite}",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="update Perimetre_porteur_qualites",
+     *   description="Request to update Perimetre_porteur_qualites",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Controle token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_perimetre_porteur_qualite",
+     *     in="path",
+     *     description="id of the Perimetre_porteur_qualites",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * update perimetre_porteur_qualites
+     * @return id of perimetre_porteur_qualites updated or error object if a perimetre_porteur_qualites is not updated
+     */
+    function PUT() {
+		if ($this->aValues['id_classification_qualite']==null)  unset($this->aValues['id_classification_qualite']);
+		if ($this->aValues['id_enqueteur']==null)  unset($this->aValues['id_enqueteur']);
+		if ($this->aValues['id_typologie_tissus']==null)  unset($this->aValues['id_typologie_tissus']);
+		if ($this->aValues['id_sous_typologie_tissus']==null)  unset($this->aValues['id_sous_typologie_tissus']);
+		if ($this->aValues['code_procedure_pluh']==null)  unset($this->aValues['code_procedure_pluh']);
+		unset($this->aValues['id_ensemble']);
+		unset($this->aValues['date_creation_fiche']);
+		$this->aValues['date_maj'] = date("Y-m-d");
+		// Fichiers à uploader
+        $aUploadFiles = array('photos' => []);
+        // Mise à jour
+        $aReturn = $this->genericPut('patrimoine', 'perimetre_porteur_qualite', 'id_perimetre_porteur_qualite', $aUploadFiles, 'patrimoine_saisie_patrimoine_perimetre', 'patrimoine');
+		if ($aReturn['sStatus'] == 1) {
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            //***** valeurs *****//
+            // Le paramètre "valeurs" est passé dans la requête ?
+            if ($this->aValues['valeurs'] !== NULL) {
+				$this->oConnection->oBd->delete('patrimoine', 'epq_valeur', 'id_epq', $this->aValues["my_vitis_id"]);
+                // Valeur(s) à rattacher au groupe ?
+                if (!empty($this->aValues['valeurs'])) {
+                    require $this->sRessourcesFile;
+                    $aValeurs = explode('|', $this->aValues['valeurs']);
+                    foreach ($aValeurs as $iValeurId) {
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+                        $aParams['id_valeur'] = array('value' => $iValeurId, 'type' => 'number');
+                        $aParams['id_epq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertPerimetreValeurs'], $aParams);
+                    }
+                }
+            }
+            //***** protections état *****//
+            // Le paramètre "protection_etats" est passé dans la requête ?
+            if ($this->aValues['protection_etats'] !== NULL) {
+				$this->oConnection->oBd->delete('patrimoine', 'epq_protection_etat', 'id_epq', $this->aValues["my_vitis_id"]);
+                if (!empty($this->aValues['protection_etats'])) {
+                    require $this->sRessourcesFile;
+                    $aProtectionEtats = explode('|', $this->aValues['protection_etats']);
+                    foreach ($aProtectionEtats as $iProtectionEtatId) {
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'patrimoine', 'type' => 'schema_name');
+                        $aParams['id_protection_etat'] = array('value' => $iProtectionEtatId, 'type' => 'number');
+                        $aParams['id_epq'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertPerimetreProtectionsEtat'], $aParams);
+                    }
+                }
+            }
+        } else {
+            $sMessage = $aReturn['sMessage'];
+        }
+        return $sMessage;
+    }
+
+    /**
+     * @SWG\Delete(path="/perimetre_porteur_qualites",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="delete Perimetre_porteur_qualites",
+     *   description="Request to delete Perimetre_porteur_qualites",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the controle",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="controle Response",
+     *         @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/perimetre_porteur_qualites/{id_perimetre_porteur_qualite}",
+     *   tags={"Perimetre_porteur_qualites"},
+     *   summary="delete Perimetre_porteur_qualites",
+     *   description="Request to delete Perimetre_porteur_qualites",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Controle token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_perimetre_porteur_qualite",
+     *     in="path",
+     *     description="id of the Perimetre_porteur_qualites",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/perimetre_porteur_qualites")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete perimetre_porteur_qualites
+     * @return id of perimetre_porteur_qualites deleted or error object if a perimetre_porteur_qualites is not deleted
+     */
+    function DELETE() {
+        require $this->sRessourcesFile;
+        // Dépendances supprimées en cascade
+        $aReturn = $this->genericDelete('patrimoine', 'perimetre_porteur_qualite', 'id_perimetre_porteur_qualite');
+        return $aReturn['sMessage'];
+    }
+
+}
+
+?>
diff --git a/src/module_patrimoine/web_service/ws/Protection_etat.class.inc b/src/module_patrimoine/web_service/ws/Protection_etat.class.inc
new file mode 100644
index 00000000..c1a67514
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Protection_etat.class.inc
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Patrimoine.class.inc
+ * \class Patrimoine
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Patrimoine php class
+ *
+ * This class defines protection_etat for one Patrimoine
+ * 
+ */
+
+class Protection_etat extends Patrimoine {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about protection_etat
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "protection_etat", "id_protection_etat");
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Protection_etats.class.inc b/src/module_patrimoine/web_service/ws/Protection_etats.class.inc
new file mode 100644
index 00000000..13cdca33
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Protection_etats.class.inc
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * \file Protection_etats.class.inc
+ * \class Protection_etats
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Protection_etats php class
+ *
+ * This class defines Rest Api to Vitis Protection_etats
+ * 
+ */
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once 'Protection_etat.class.inc';
+
+
+class Protection_etats extends Patrimoine {
+    /**
+     * @SWG\Definition(
+     *   definition="/protection_etats",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/protection_etats")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Protection_etats",
+     *   description="Protection_etats about Protection_etats"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/protection_etats",
+     *   tags={"Protection_etats"},
+     *   summary="Get Protection_etats",
+     *   description="Request to get Protection_etats",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="protection_etat Response",
+     *         @SWG\Schema(ref="#/definitions/protection_etats")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Protection_etats
+     * @return  Protection_etats
+     */
+    function GET() {
+        $aReturn = $this->genericGet('patrimoine', "protection_etat", "id_protection_etat");
+        $sMessage = $aReturn['sMessage'];
+        return $sMessage;
+    }
+
+    
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Theme.class.inc b/src/module_patrimoine/web_service/ws/Theme.class.inc
new file mode 100644
index 00000000..3e85cff2
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Theme.class.inc
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Patrimoine.class.inc
+ * \class Patrimoine
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Patrimoine php class
+ *
+ * This class defines theme for one Patrimoine
+ * 
+ */
+
+class Theme extends Patrimoine {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about theme
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "theme", "id_theme");
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Themes.class.inc b/src/module_patrimoine/web_service/ws/Themes.class.inc
new file mode 100644
index 00000000..28cda191
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Themes.class.inc
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * \file Themes.class.inc
+ * \class Themes
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Themes php class
+ *
+ * This class defines Rest Api to Vitis Themes
+ * 
+ */
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once 'Theme.class.inc';
+
+
+class Themes extends Patrimoine {
+    /**
+     * @SWG\Definition(
+     *   definition="/themes",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/themes")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Themes",
+     *   description="Themes about Themes"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/themes",
+     *   tags={"Themes"},
+     *   summary="Get Themes",
+     *   description="Request to get Themes",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="theme Response",
+     *         @SWG\Schema(ref="#/definitions/themes")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Themes
+     * @return  Themes
+     */
+    function GET() {
+        $aReturn = $this->genericGet('patrimoine', "theme", "id_theme");
+        $sMessage = $aReturn['sMessage'];
+        return $sMessage;
+    }
+
+    
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Valeur.class.inc b/src/module_patrimoine/web_service/ws/Valeur.class.inc
new file mode 100644
index 00000000..5495bd64
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Valeur.class.inc
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Patrimoine.class.inc
+ * \class Patrimoine
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Patrimoine php class
+ *
+ * This class defines valeur for one Patrimoine
+ * 
+ */
+
+class Valeur extends Patrimoine {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about valeur
+     */
+    function GET() {
+        $this->aFields = $this->getFields('patrimoine', "valeur", "id_valeur");
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_patrimoine/web_service/ws/Valeurs.class.inc b/src/module_patrimoine/web_service/ws/Valeurs.class.inc
new file mode 100644
index 00000000..766b1816
--- /dev/null
+++ b/src/module_patrimoine/web_service/ws/Valeurs.class.inc
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * \file Valeurs.class.inc
+ * \class Valeurs
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Valeurs php class
+ *
+ * This class defines Rest Api to Vitis Valeurs
+ * 
+ */
+require_once __DIR__ . '/Patrimoine.class.inc';
+require_once 'Valeur.class.inc';
+
+
+class Valeurs extends Patrimoine {
+    /**
+     * @SWG\Definition(
+     *   definition="/valeurs",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/valeurs")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Valeurs",
+     *   description="Valeurs about Valeurs"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/valeurs",
+     *   tags={"Valeurs"},
+     *   summary="Get Valeurs",
+     *   description="Request to get Valeurs",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="valeur Response",
+     *         @SWG\Schema(ref="#/definitions/valeurs")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Valeurs
+     * @return  Valeurs
+     */
+    function GET() {
+        $aReturn = $this->genericGet('patrimoine', "valeur", "id_valeur");
+        $sMessage = $aReturn['sMessage'];
+        return $sMessage;
+    }
+
+    
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation.json
index 22a8de54..746bf3d0 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation.json
@@ -39,10 +39,10 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"nom_perimetre",
-                        "label":"Périmètre projet urbain",
+                        "name":"perimetres_label",
+                        "label":"Périmètre(s) projet(s) urbain(s)",
                         "nb_cols":12,
-                        "id":"nom_perimetre"
+                        "id":"perimetres_label"
                     }
                 ]
             },
@@ -69,62 +69,16 @@
                 ]
             },
 			{
-				"fields": [
-				  {
-					"type": "map_osm",
-					"name": "geom",
-					"label": "Périmètre",
-					"required": false,
-					"nb_cols": 12,
-					"id": "pop90_3_1",
-					"style": {
-					  "height": "250px"
-					},
-					"map_options": {
-					  "proj": "EPSG:2154",
-					  "type": "OSM",
-					  "output_format": "ewkt",
-					  "center": {
-						"extent": [
-						  828118.6537970116,
-						  6512133.97777543,
-						  862347.0524710228,
-						  6524271.707801675
-						],
-						"coord": [
-						  845232.8531340172,
-						  6518202.842788553
-						],
-						"scale": 183342
-					  },
-					  "controls": {
-						"MP": false,
-						"ZO": true,
-						"SL": true,
-						"CP": false
-					  },
-					  "layers": [],
-					  "interactions": {
-						"multi_geometry": false,
-						"full_screen": false,
-						"RA": false,
-						"RO": false,
-						"ED": false,
-						"DP": false,
-						"DL": false,
-						"DPol": false,
-						"SE": true
-					  },
-					  "draw_color": "rgba(54,184,255,0.6)",
-					  "contour_color": "rgba(0,0,0,0.4)",
-					  "contour_size": 2,
-					  "circle_radius": 6,
-					  "features": [],
-					  "coord_accuracy": 8
-					}
-				  }
-				]
-			},
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"contexte_urbain",
+                        "label":"Contexte urbain de l'opération",
+                        "nb_cols":5,
+                        "id":"contexte_urbain"
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -178,11 +132,12 @@
 						"alinea",
                         "nom_operation",
 						"communes_label",
-						"nom_perimetre",
+						"perimetres_label",
 						"ctms_label",
                         "surface",
 						"geom",
 						"date_mise_a_jour",
+						"contexte_urbain",
 						"Element_1",
 						"commentaire_operation"
                     ]
@@ -299,21 +254,21 @@
                     },
                     {
                         "type":"select",
-                        "name":"nom_amenageur",
+                        "name":"concessionnaire_amenagement",
                         "label":"Nom de l'aménageur ou du partenaire",
                         "required":false,
                         "nb_cols":3,
-                        "id":"nom_amenageur",
+                        "id":"concessionnaire_amenagement",
                         "datasource":{
-                            "datasource_id":"datasource_nom_amenageur",
+                            "datasource_id":"datasource_concessionnaire_amenagement",
                             "sort_order":"ASC",
                             "distinct":"true",
-                            "label_key":"nom_amenageur",
-                            "order_by":"nom_amenageur",
-                            "id_key":"nom_amenageur",
-                            "attributs":"nom_amenageur|nom_amenageur"
+                            "label_key":"concessionnaire_amenagement",
+                            "order_by":"concessionnaire_amenagement",
+                            "id_key":"concessionnaire_amenagement",
+                            "attributs":"concessionnaire_amenagement|concessionnaire_amenagement"
                         },
-                        "id_from":"nom_amenageur_from"
+                        "id_from":"concessionnaire_amenagement_from"
                     }
                 ]
             },
@@ -362,7 +317,7 @@
                     {
                         "type":"select",
                         "name":"code_suivi",
-                        "label":"Suivi",
+                        "label":"Mode opératoire",
                         "required":false,
                         "nb_cols":3,
                         "id":"code_suivi",
@@ -457,10 +412,9 @@
                         "id_operation",
                         "nom_operation",
                         "cdp_mo",
-                        "nom_amenageur",
+                        "concessionnaire_amenagement",
                         "nom_moe",
                         "architecte_moe",
-                        "nom_amenageur",
                         "annee_init",
                         "annee_achevement",
                         "code_avancement",
@@ -544,28 +498,46 @@
             },
             {
 				"fields": [
-				  {
-					"type": "double_select",
-					"name": "communes",
-					"label": "Communes de l'opération",
-					"required": false,
-					"nb_cols": 4,
-					"id": "Element_0_4_1",
-					"name_to": "communes",
-					"name_from": "communes_from",
-					"size": 6,
-					"label_from": "communes non associées",
-					"label_to": "communes associées à l'opération",
-					"web_service": {
-						"ressource_id": "suivi_prod_immo/communes",
-						"id_key": "id_commune",
-						"label_key": "nom_commune",
-						"parameters": {
-							"order_by": "nom_commune"
+					{
+						"type": "double_select",
+						"name": "communes",
+						"label": "Communes de l'opération",
+						"required": false,
+						"nb_cols": 6,
+						"id": "Element_0_4_1",
+						"name_to": "communes",
+						"name_from": "communes_from",
+						"size": 6,
+						"label_from": "communes non associées",
+						"label_to": "communes associées à l'opération",
+						"web_service": {
+							"ressource_id": "suivi_prod_immo/communes",
+							"id_key": "id_commune",
+							"label_key": "nom_commune",
+							"parameters": {
+								"order_by": "nom_commune"
+							}
 						}
-					}
-				  }
-				]
+					},
+                    {
+                        "type":"select",
+                        "name":"id_commune",
+                        "label":"Commune principale",
+                        "required":false,
+                        "nb_cols":3,
+                        "id":"id_commune",
+                        "id_from":"id_commune",
+                        "datasource":{
+                            "datasource_id":"datasource_commune",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_commune",
+                            "order_by":"nom_commune",
+                            "id_key":"id_commune",
+                            "attributs":"id_commune|nom_commune"
+                        }
+                    }
+                ]
             },
             {
 				"fields": [
@@ -574,7 +546,7 @@
 					"name": "ctms",
 					"label": "Conférences territoriales des maires de l'opération (CTM)",
 					"required": false,
-					"nb_cols": 4,
+					"nb_cols": 6,
 					"id": "Element_0_4_1",
 					"name_to": "ctms",
 					"name_from": "ctms_from",
@@ -592,24 +564,49 @@
 				  }
 				]
             },
+            {
+				"fields": [
+				  {
+					"type": "double_select",
+					"name": "perimetres",
+					"label": "Périmètre(s) projet(s) urbain(s)",
+					"required": false,
+					"nb_cols": 8,
+					"id": "Element_0_4_1",
+					"name_to": "perimetres",
+					"name_from": "perimetres_from",
+					"size": 6,
+					"label_from": "périmètres non associés",
+					"label_to": "périmètres associés à l'opération",
+					"web_service": {
+						"ressource_id": "suivi_prod_immo/perimetres",
+						"id_key": "id_perimetre",
+						"label_key": "nom_perimetre",
+						"parameters": {
+							"order_by": "nom_perimetre"
+						}
+					}
+				  }
+				]
+            },
             {
                 "fields":[
                     {
                         "type":"select",
-                        "name":"id_perimetre",
-                        "label":"Périmètre projets urbains",
+                        "name":"code_contexte_urbain",
+                        "label":"Contexte urbain de l'opération",
                         "required":false,
-                        "nb_cols":4,
-                        "id":"id_perimetre",
-                        "id_from":"id_perimetre_from",
+                        "nb_cols":6,
+                        "id":"code_contexte_urbain",
+                        "id_from":"code_contexte_urbain_from",
                         "datasource":{
-                            "datasource_id":"datasource_perimetre",
+                            "datasource_id":"datasource_code_contexte_urbain",
                             "sort_order":"ASC",
                             "distinct":"true",
-                            "label_key":"nom_perimetre",
-                            "order_by":"nom_perimetre",
-                            "id_key":"id_perimetre",
-                            "attributs":"id_perimetre|nom_perimetre"
+                            "label_key":"contexte_urbain",
+                            "order_by":"contexte_urbain",
+                            "id_key":"code_contexte_urbain",
+                            "attributs":"code_contexte_urbain|contexte_urbain"
                         }
                     }
                 ]
@@ -682,8 +679,10 @@
 						"surface",
 						"date_mise_a_jour",
 						"communes",
+						"id_commune",
 						"ctms",
-						"id_perimetre",
+						"perimetres",
+						"code_contexte_urbain",
 						"commentaire_operation"
                     ]
                 }
@@ -703,6 +702,18 @@
             "ressource_id":"vitis/genericquerys",
             "id":"datasource_perimetre"
         },
+        "datasource_commune":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"commune",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"commune"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_commune"
+        },
         "datasource_code_avancement":{
             "type":"web_service",
             "dataType":"tableValue",
@@ -763,17 +774,17 @@
             "ressource_id":"vitis/genericquerys",
             "id":"datasource_code_vocation"
         },
-        "datasource_nom_amenageur":{
+        "datasource_concessionnaire_amenagement":{
             "type":"web_service",
             "dataType":"tableValue",
-            "name":"nom_amenageur",
+            "name":"concessionnaire_amenagement",
             "description":"",
             "parameters":{
                 "schema":"prod_immo",
                 "table":"operation"
             },
             "ressource_id":"vitis/genericquerys",
-            "id":"datasource_nom_amenageur"
+            "id":"datasource_concessionnaire_amenagement"
         },
         "datasource_cdp_mo":{
             "type":"web_service",
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_acteur.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_acteur.json
index 066115a2..df01d34c 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_acteur.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_acteur.json
@@ -22,14 +22,14 @@
                     {
                         "type":"label",
                         "name":"cdp_mo",
-                        "label":"Nom / Contact du chef de projet",
+                        "label":"Nom / Contact du chef de projet MdL",
                         "nb_cols":6,
                         "id":"cdp_mo"
                     },
 					{
                         "type":"label",
                         "name":"direction_mo",
-                        "label":"Direction maîtrise d'ouvrage",
+                        "label":"Direction maître d'ouvrage à la MDL",
                         "nb_cols":6,
                         "id":"direction_mo"
                     }
@@ -39,14 +39,25 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"nom_amenageur",
-                        "label":"Nom de la structure de l'aménageur public ou privé, si gestion déléguée du suivi et de la réalisation de l'opération",
+                        "name":"concessionnaire_amenagement",
+                        "label":"Nom de la structure signataire du traité de concession d'aménagement",
                         "nb_cols":6,
-                        "id":"nom_amenageur"
+                        "id":"concessionnaire_amenagement"
                     }
                 ]
             },
-           {
+			{
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"partenaire_pup",
+                        "label":"Partenaires PUP, co-signataires (nom de la société de promotion et / ou du bailleur social)",
+                        "nb_cols":10,
+                        "id":"partenaire_pup"
+                    }
+                ]
+            },
+			{
                 "fields":[
                     {
                         "type":"label",
@@ -57,18 +68,18 @@
                     }
                 ]
             },
-           {
+			{
                 "fields":[
                     {
                         "type":"label",
                         "name":"nom_moe",
-                        "label":"Nom du maître d'oeuvre mandataire (cabinet archi-urba ou groupement)",
+                        "label":"Nom du BET maître d'œuvre (si groupement nom du mandataire)",
                         "nb_cols":6,
                         "id":"nom_moe"
                     }
                 ]
             },
-           {
+			{
                 "fields":[
                     {
                         "type":"label",
@@ -78,6 +89,17 @@
                         "id":"architecte_moe"
                     }
                 ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"hqe_amenagement",
+                        "label":"Nom du bureau d'étude HQE aménagement",
+                        "nb_cols":6,
+                        "id":"hqe_amenagement"
+                    }
+                ]
             },
             {
                 "fields":[
@@ -111,10 +133,12 @@
                         "nom_mo",
 						"cdp_mo",
 						"direction_mo",
-						"nom_amenageur",
+						"concessionnaire_amenagement",
 						"cdp_amenageur",
+						"partenaire_pup",
 						"nom_moe",
-						"architecte_moe"
+						"architecte_moe",
+						"hqe_amenagement"
                     ]
                 }
             ]
@@ -192,7 +216,7 @@
                     {
                         "type":"text",
                         "name":"cdp_mo",
-                        "label":"Nom / Contact du chef de projet",
+                        "label":"Nom / Contact du chef de projet MdL",
                         "required":false,
                         "pattern":"",
                         "nb_cols":6,
@@ -203,7 +227,7 @@
 					{
                         "type":"text",
                         "name":"direction_mo",
-                        "label":"Direction maîtrise d'ouvrage",
+                        "label":"Direction maître d'ouvrage à la MDL",
                         "required":false,
                         "pattern":"",
                         "nb_cols":6,
@@ -213,22 +237,22 @@
                     }
                 ]
             },
-           {
+			{
                 "fields":[
                     {
                         "type":"text",
-                        "name":"nom_amenageur",
-                        "label":"Nom de la structure de l'aménageur public ou privé, si gestion déléguée du suivi et de la réalisation de l'opération",
+                        "name":"concessionnaire_amenagement",
+                        "label":"Nom de la structure signataire du traité de concession d'aménagement",
                         "required":false,
                         "pattern":"",
                         "nb_cols":6,
-                        "id":"nom_amenageur",
+                        "id":"concessionnaire_amenagement",
                         "dynamic_event_type": "focus",
-                        "dynamic_event_function": "getOperationTooltipLastUpdate('nom_amenageur')"
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('concessionnaire_amenagement')"
                     }
                 ]
             },
-           {
+			{
                 "fields":[
                     {
                         "type":"text",
@@ -243,12 +267,27 @@
                     }
                 ]
             },
-           {
+			{
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"partenaire_pup",
+                        "label":"Partenaires PUP, co-signataires (nom de la société de promotion et / ou du bailleur social)",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":10,
+                        "id":"partenaire_pup",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('partenaire_pup')"
+                    }
+                ]
+            },
+			{
                 "fields":[
                     {
                         "type":"text",
                         "name":"nom_moe",
-                        "label":"Nom du maître d'oeuvre mandataire (cabinet archi-urba ou groupement)",
+                        "label":"Nom du BET maître d'œuvre (si groupement nom du mandataire)",
                         "required":false,
                         "pattern":"",
                         "nb_cols":6,
@@ -272,6 +311,21 @@
                         "dynamic_event_function": "getOperationTooltipLastUpdate('architecte_moe')"
                     }
                 ]
+            },
+			{
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"hqe_amenagement",
+                        "label":"Nom du bureau d'étude HQE aménagement",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":6,
+                        "id":"hqe_amenagement",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('hqe_amenagement')"
+                    }
+                ]
             },
             {
                 "fields":[
@@ -312,10 +366,12 @@
 						"nom_mo",
 						"cdp_mo",
 						"direction_mo",
-						"nom_amenageur",
+						"concessionnaire_amenagement",
 						"cdp_amenageur",
+						"partenaire_pup",
 						"nom_moe",
-						"architecte_moe"
+						"architecte_moe",
+						"hqe_amenagement"
                     ]
                 }
             ]
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_financier.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_financier.json
index d2b3bb91..413fefda 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_financier.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_financier.json
@@ -37,7 +37,7 @@
                         "type":"label",
                         "name":"label_depense_cout_foncier",
                         "label":"Dont coût affecté au Foncier (procédures et acquisitions)",
-                        "nb_cols":2,
+                        "nb_cols":4,
 						"id":"Element_0_2_3"
                     },
                     {
@@ -72,6 +72,13 @@
                         "nb_cols":4,
 						"id":"Element_0_2_5"
                     },
+                    {
+                        "type":"label",
+                        "name":"pourc_depense_mise_etat_sol",
+                        "label":"% par rapport au montant global",
+                        "nb_cols":2,
+                        "id":"pourc_depense_mise_etat_sol"
+                    },
                     {
                         "type":"label",
                         "name":"depense_mise_etat_sol",
@@ -81,6 +88,38 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"alinea",
+                        "label":"",
+                        "nb_cols":1,
+						"id":"Element_0_2_4"
+                    },
+                    {
+                        "type":"label",
+                        "name":"label_depense_remuneration_concess",
+                        "label":"Dont rémunération concessionnaire",
+                        "nb_cols":4,
+						"id":"Element_0_2_5"
+                    },
+                    {
+                        "type":"label",
+                        "name":"pourc_depense_remuneration_concess",
+                        "label":"% par rapport au montant global",
+                        "nb_cols":2,
+                        "id":"pourc_depense_mise_etat_sol"
+                    },
+                    {
+                        "type":"label",
+                        "name":"depense_remuneration_concess",
+                        "label":"M€ HT",
+                        "nb_cols":2,
+                        "id":"depense_remuneration_concess"
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -111,8 +150,8 @@
                     {
                         "type":"label",
                         "name":"label_recette_cession",
-                        "label":"Dont cessions de droits à construire sur des lots-foncier maitrisés par le public",
-                        "nb_cols":2,
+                        "label":"Dont participations au financement du PEP, versées par les opé immobiliers, pour lots non maîtrisés par l'aménageur",
+                        "nb_cols":4,
 						"id":"Element_0_2_8"
                     },
                     {
@@ -125,6 +164,7 @@
                     {
                         "type":"label",
                         "name":"recette_cession",
+                        "label":"M€ HT",
                         "pattern":"",
                         "nb_cols":2,
                         "id":"recette_cession"
@@ -144,7 +184,7 @@
                         "type":"label",
                         "name":"label_recette_part_privee",
                         "label":"Dont participations privées des constructeurs sur les lots maîtrisés par des privés",
-                        "nb_cols":2,
+                        "nb_cols":4,
 						"id":"Element_0_2_10"
                     },
                     {
@@ -175,8 +215,8 @@
                     {
                         "type":"label",
                         "name":"label_recette_part_publique",
-                        "label":"Dont participations publiques des collectivités (Métropoles-Villes, ANRU, État, ...)",
-                        "nb_cols":2,
+                        "label":"Dont participations publiques des partenaires publics (Métropoles-Villes, ANRU, État, ...)",
+                        "nb_cols":4,
 						"id":"Element_0_2_12"
                     },
                     {
@@ -218,6 +258,13 @@
                         "nb_cols":2,
 						"id":"Element_0_2_14"
                     },
+                    {
+                        "type":"label",
+                        "name":"pourc_recette_part_publique_mdl",
+                        "label":"% par rapport au montant global des recettes",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_mdl"
+                    },
                     {
                         "type":"label",
                         "name":"recette_part_publique_mdl",
@@ -250,6 +297,13 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"label",
+                        "name":"pourc_recette_part_publique_ville",
+                        "label":"% par rapport au montant global des recettes",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_ville"
+                    },
                     {
                         "type":"label",
                         "name":"recette_part_publique_ville",
@@ -282,6 +336,13 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"label",
+                        "name":"pourc_recette_part_publique_anru",
+                        "label":"% par rapport au montant global des recettes",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_anru"
+                    },
                     {
                         "type":"label",
                         "name":"recette_part_publique_anru",
@@ -314,6 +375,13 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"label",
+                        "name":"pourc_recette_part_publique_autre",
+                        "label":"% par rapport au montant global des recettes",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_autre"
+                    },
                     {
                         "type":"label",
                         "name":"recette_part_publique_autre",
@@ -332,7 +400,7 @@
                         "type":"label",
                         "name":"recette_part_publique_autre_commentaire",
                         "label":"Commentaires",
-                        "nb_cols":4,
+                        "nb_cols":3,
                         "id":"recette_part_publique_autre_commentaire"
                     }
                 ]
@@ -371,8 +439,12 @@
 						"pourc_depense_cout_foncier",
 						"depense_cout_foncier",
 						"label_depense_cout_foncier",
+						"pourc_depense_mise_etat_sol",
 						"depense_mise_etat_sol",
 						"label_depense_mise_etat_sol",
+						"pourc_depense_remuneration_concess",
+						"depense_remuneration_concess",
+						"label_depense_remuneration_concess",
 						"recette_globale",
 						"label_recette_globale",
 						"pourc_recette_cession",
@@ -381,19 +453,22 @@
 						"pourc_recette_part_privee",
 						"recette_part_privee",
 						"label_recette_part_privee",
-						"pourc_recette_part_publique",
-						"recette_part_publique",
 						"recette_part_publique_ttc_label",
+						"recette_part_publique",
 						"label_recette_part_publique",
+						"pourc_recette_part_publique",
 						"recette_part_publique_mdl",
 						"label_recette_part_publique_mdl",
-						"label_recette_part_publique_ville",
+						"pourc_recette_part_publique_mdl",
 						"recette_part_publique_ville",
 						"label_recette_part_publique_ville",
+						"pourc_recette_part_publique_ville",
 						"recette_part_publique_anru",
 						"label_recette_part_publique_anru",
+						"pourc_recette_part_publique_anru",
 						"recette_part_publique_autre",
 						"label_recette_part_publique_autre",
+						"pourc_recette_part_publique_autre",
 						"recette_part_publique_autre_commentaire"
                     ]
                 }
@@ -486,7 +561,7 @@
                         "type":"label",
                         "name":"label_depense_cout_foncier",
                         "label":"Dont coût affecté au Foncier (procédures et acquisitions)",
-                        "nb_cols":2,
+                        "nb_cols":4,
 						"id":"Element_0_2_3"
                     },
                     {
@@ -529,6 +604,17 @@
                         "nb_cols":4,
 						"id":"Element_0_2_5"
                     },
+                    {
+                        "type":"text",
+                        "name":"pourc_depense_mise_etat_sol",
+                        "label":"% par rapport au montant global",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_depense_mise_etat_sol",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_depense_mise_etat_sol')"
+                    },
                     {
                         "type":"text",
                         "name":"depense_mise_etat_sol",
@@ -542,6 +628,46 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"alinea",
+                        "label":"",
+                        "nb_cols":1,
+						"id":"Element_0_2_4"
+                    },
+                    {
+                        "type":"label",
+                        "name":"label_depense_remuneration_concess",
+                        "label":"Dont rémunération concessionnaire",
+                        "nb_cols":4,
+						"id":"Element_0_2_5"
+                    },
+                    {
+                        "type":"text",
+                        "name":"pourc_depense_remuneration_concess",
+                        "label":"% par rapport au montant global",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_depense_remuneration_concess",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_depense_remuneration_concess')"
+                    },
+                    {
+                        "type":"text",
+                        "name":"depense_remuneration_concess",
+                        "label":"M€ HT",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"depense_remuneration_concess",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('depense_remuneration_concess')"
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -577,7 +703,7 @@
                         "type":"label",
                         "name":"label_recette_cession",
                         "label":"Dont cessions de droits à construire sur des lots-foncier maitrisés par le public",
-                        "nb_cols":2,
+                        "nb_cols":4,
 						"id":"Element_0_2_8"
                     },
                     {
@@ -616,8 +742,8 @@
                     {
                         "type":"label",
                         "name":"label_recette_part_privee",
-                        "label":"Dont participations privées des constructeurs sur les lots maîtrisés par des privés",
-                        "nb_cols":2,
+                        "label":"Dont participations au financement du PEP, versées par les opé immobiliers, pour lots non maîtrisés par l'aménageur",
+                        "nb_cols":4,
 						"id":"Element_0_2_10"
                     },
                     {
@@ -656,8 +782,8 @@
                     {
                         "type":"label",
                         "name":"label_recette_part_publique",
-                        "label":"Dont participations publiques des collectivités (Métropoles-Villes, ANRU, État, ...)",
-                        "nb_cols":2,
+                        "label":"Dont participations publiques des partenaires publics (Métropoles-Villes, ANRU, État, ...)",
+                        "nb_cols":4,
 						"id":"Element_0_2_12"
                     },
                     {
@@ -720,6 +846,17 @@
                         "nb_cols":2,
 						"id":"Element_0_2_14"
                     },
+                    {
+                        "type":"text",
+                        "name":"pourc_recette_part_publique_mdl",
+                        "label":"% par rapport au montant global des recettes",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_mdl",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_recette_part_publique_mdl')"
+                    },
                     {
                         "type":"text",
                         "name":"recette_part_publique_mdl",
@@ -749,6 +886,17 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"text",
+                        "name":"pourc_recette_part_publique_ville",
+                        "label":"% par rapport au montant global des recettes",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_ville",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_recette_part_publique_ville')"
+                    },
                     {
                         "type":"text",
                         "name":"recette_part_publique_ville",
@@ -778,6 +926,17 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"text",
+                        "name":"pourc_recette_part_publique_anru",
+                        "label":"% par rapport au montant global des recettes",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_anru",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_recette_part_publique_anru')"
+                    },
                     {
                         "type":"text",
                         "name":"recette_part_publique_anru",
@@ -807,6 +966,17 @@
                         "nb_cols":2,
 						"id":"Element_0_2_16"
                     },
+                    {
+                        "type":"text",
+                        "name":"pourc_recette_part_publique_autre",
+                        "label":"% par rapport au montant global des recettes",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"pourc_recette_part_publique_autre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('pourc_recette_part_publique_autre')"
+                    },
                     {
                         "type":"text",
                         "name":"recette_part_publique_autre",
@@ -824,7 +994,7 @@
                         "label":"Commentaires",
                         "required":false,
                         "pattern":"",
-                        "nb_cols":4,
+                        "nb_cols":3,
                         "dynamic_event_type": "focus",
                         "dynamic_event_function": "getOperationTooltipLastUpdate('recette_part_publique_autre_commentaire')",
                         "id":"recette_part_publique_autre_commentaire",
@@ -875,28 +1045,36 @@
 						"pourc_depense_cout_foncier",
 						"depense_cout_foncier",
 						"label_depense_cout_foncier",
-						"label_depense_mise_etat_sol",
 						"depense_mise_etat_sol",
+						"label_depense_mise_etat_sol",
+						"pourc_depense_mise_etat_sol",
+						"depense_remuneration_concess",
+						"label_depense_remuneration_concess",
+						"pourc_depense_remuneration_concess",
 						"recette_globale",
 						"label_recette_globale",
+						"recette_cession",
 						"label_recette_cession",
 						"pourc_recette_cession",
-						"recette_cession",
+						"recette_part_privee",
 						"label_recette_part_privee",
 						"pourc_recette_part_privee",
-						"recette_part_privee",
+						"recette_part_publique",
 						"label_recette_part_publique",
 						"pourc_recette_part_publique",
-						"recette_part_publique",
 						"recette_part_publique_ttc",
-						"label_recette_part_publique_mdl",
 						"recette_part_publique_mdl",
-						"label_recette_part_publique_ville",
+						"label_recette_part_publique_mdl",
+						"pourc_recette_part_publique_mdl",
 						"recette_part_publique_ville",
-						"label_recette_part_publique_anru",
+						"label_recette_part_publique_ville",
+						"pourc_recette_part_publique_ville",
 						"recette_part_publique_anru",
-						"label_recette_part_publique_autre",
+						"label_recette_part_publique_anru",
+						"pourc_recette_part_publique_anru",
 						"recette_part_publique_autre",
+						"label_recette_part_publique_autre",
+						"pourc_recette_part_publique_autre",
 						"recette_part_publique_autre_commentaire"
                     ]
                 }
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_mode_operatoire.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_mode_operatoire.json
index a660fc74..05aa5dda 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_mode_operatoire.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_mode_operatoire.json
@@ -6,18 +6,7 @@
         "nb_cols":12,
         "javascript":false,
         "rows":[
-           {
-                "fields":[
-                    {
-                        "type":"label",
-                        "name":"contexte_urbain",
-                        "label":"Contexte urbain de l'opération",
-                        "nb_cols":5,
-                        "id":"contexte_urbain"
-                    }
-                ]
-            },
-           {
+			{
                 "fields":[
                     {
                         "type":"label",
@@ -43,6 +32,13 @@
                         "label":"Procédure d'aménagement",
                         "nb_cols":5,
                         "id":"procedure_amenagement"
+                    },
+                    {
+                        "type":"label",
+                        "name":"procedure_amenagement_date_creation",
+                        "label":"Date de création / date d'obtention",
+                        "nb_cols":2,
+                        "id":"procedure_amenagement_date_creation"
                     }
                 ]
             },
@@ -86,10 +82,10 @@
                     "label":"Tab 0",
                     "elements":[
                         "display_button",
-						"contexte_urbain",
 						"suivi",
 						"commentaire_operation_mixte",
 						"procedure_amenagement",
+						"procedure_amenagement_date_creation",
 						"mode_financements_label"
                     ]
                 }
@@ -147,28 +143,6 @@
         "nb_cols":12,
         "javascript":false,
         "rows":[
-            {
-                "fields":[
-                    {
-                        "type":"select",
-                        "name":"code_contexte_urbain",
-                        "label":"Contexte urbain de l'opération",
-                        "required":false,
-                        "nb_cols":4,
-                        "id":"code_contexte_urbain",
-                        "id_from":"code_contexte_urbain_from",
-                        "datasource":{
-                            "datasource_id":"datasource_code_contexte_urbain",
-                            "sort_order":"ASC",
-                            "distinct":"true",
-                            "label_key":"contexte_urbain",
-                            "order_by":"contexte_urbain",
-                            "id_key":"code_contexte_urbain",
-                            "attributs":"code_contexte_urbain|contexte_urbain"
-                        }
-                    }
-                ]
-            },
             {
                 "fields":[
                     {
@@ -209,8 +183,8 @@
                         "name":"code_procedure_amenagement",
                         "label":"Procédure de l'aménagement",
                         "required":false,
-                        "nb_cols":3,
-                        "id":"code_contexte_urbain",
+                        "nb_cols":4,
+                        "id":"code_procedure_amenagement",
                         "id_from":"code_procedure_amenagement_from",
                         "datasource":{
                             "datasource_id":"datasource_code_procedure_amenagement",
@@ -221,6 +195,15 @@
                             "id_key":"code_procedure_amenagement",
                             "attributs":"code_procedure_amenagement|procedure_amenagement"
                         }
+                    },
+                    {
+                        "type":"text",
+                        "name":"procedure_amenagement_date_creation",
+                        "label":"Date de création / date d'obtention",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":3,
+                        "id":"procedure_amenagement_date_creation"
                     }
                 ]
             },
@@ -231,11 +214,11 @@
 					"name": "mode_financements",
 					"label": "Modes de financement des équipements publics",
 					"required": false,
-					"nb_cols": 8,
+					"nb_cols": 10,
 					"id": "Element_0_4_2",
 					"name_to": "mode_financements",
 					"name_from": "mode_financements_from",
-					"size": 4,
+					"size": 5,
 					"label_from": "modes de financement non associées",
 					"label_to": "modes de financement associées à l'opération",
 					"web_service": {
@@ -249,6 +232,28 @@
 				  }
 				]
             },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"code_financement_equ_public",
+                        "label":"Mode principal de financement des équipements publics",
+                        "required":false,
+                        "nb_cols":6,
+                        "id":"code_financement_equ_public",
+                        "id_from":"financement_equ_public_from",
+                        "datasource":{
+                            "datasource_id":"datasource_code_financement_equ_public",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"financement_equ_public",
+                            "order_by":"financement_equ_public",
+                            "id_key":"code_financement_equ_public",
+                            "attributs":"code_financement_equ_public|financement_equ_public"
+                        }
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -286,11 +291,12 @@
                         "update_button",
                         "alinea",
                         "title",
-						"code_contexte_urbain",
 						"code_suivi",
 						"commentaire_operation_mixte",
 						"code_procedure_amenagement",
-						"mode_financements"
+						"procedure_amenagement_date_creation",
+						"mode_financements",
+                        "code_financement_equ_public"
                     ]
                 }
             ]
@@ -344,6 +350,18 @@
             },
             "ressource_id":"vitis/genericquerys",
             "id":"datasource_code_vocation"
+        },
+        "datasource_code_financement_equ_public":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"code_financement_equ_public",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"tr_financement_equ_public"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_code_financement_equ_public"
         }
     }
 }
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_programmation.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_programmation.json
index f35a5ca0..ffad6054 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_programmation.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_operation_operation_programmation.json
@@ -206,17 +206,24 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"label_logement",
-                        "label":"Logements",
+                        "name":"alinea",
+                        "label":"Logements familiaux",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"label",
-                        "name":"sdp_logement",
-                        "label":"SDP globale programmée en logements en m²",
+                        "name":"sdp_lgt_fam",
+                        "label":"SDP programmée en m²",
                         "nb_cols":2,
-                        "id":"sdp_logement"
+                        "id":"sdp_lgt_fam"
+                    },
+                    {
+                        "type":"label",
+                        "name":"nb_lgt_fam",
+                        "label":"Nombre prévisionnel",
+                        "nb_cols":2,
+                        "id":"nb_lgt_fam"
                     }
                 ]
             },
@@ -225,37 +232,76 @@
                     {
                         "type":"label",
                         "name":"alinea",
-                        "label":"",
+                        "label":"Logements spécifiques",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"label",
-                        "name":"nb_logement",
-                        "label":"Nombre prévisionnel total de logements",
+                        "name":"sdp_lgt_spe",
+                        "label":"SDP programmée en m²",
                         "nb_cols":2,
-                        "id":"nb_logement"
+                        "id":"sdp_lgt_spe"
                     },
                     {
                         "type":"label",
-                        "name":"alinea",
-                        "label":"",
+                        "name":"nb_lgt_spe",
+                        "label":"Nombre prévisionnel",
+                        "nb_cols":2,
+                        "id":"nb_lgt_spe"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "repartition",
+						"label": "Répartition envisagée par types de logements",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_38_1",
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "operation_repartition_logement",
+						"bo_filter_attr": "id_operation",
+						"form_filter_value": "id_operation"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"label_logement",
+                        "label":"Total logements",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"label",
-                        "name":"nb_lgt_fam",
-                        "label":"Total nombre de logements familiaux",
+                        "name":"sdp_logement",
+                        "label":"SDP globale programmée en m²",
                         "nb_cols":2,
-                        "id":"nb_lgt_fam"
+                        "id":"sdp_logement"
                     },
                     {
                         "type":"label",
-                        "name":"nb_lgt_spe",
-                        "label":"Total nombre de logements spécifiques",
+                        "name":"nb_logement",
+                        "label":"Nombre prévisionnel",
                         "nb_cols":2,
-                        "id":"nb_lgt_spe"
+                        "id":"nb_logement"
                     }
                 ]
             },
@@ -340,9 +386,11 @@
 						"label_logement",
 						"sdp_logement",
 						"nb_logement",
+						"sdp_lgt_fam",
 						"nb_lgt_fam",
+						"sdp_lgt_spe",
 						"nb_lgt_spe",
-						"repartition_type_logement",
+						"repartition",
 						"nb_lgt_hectare",
 						"coef_emprise_sol_moyen",
 						"densite_batie"
@@ -403,6 +451,45 @@
         "nb_cols":12,
         "javascript":false,
         "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_operation",
+						"nb_cols": 12,
+						"id": "id_operation_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "repartition_type_logement",
+						"label": "Répartition des logements",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "repartition_type_logement",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 473,
+						"form_filter_value": "id_operation",
+						"section_filter_attr": "id_operation"
+					}
+				]
+			},
             {
                 "fields":[
                     {
@@ -654,21 +741,32 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"label_logement",
-                        "label":"Logements",
+                        "name":"alinea",
+                        "label":"Logements familiaux",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"text",
-                        "name":"sdp_logement",
-                        "label":"SDP globale programmée en logements en m²",
+                        "name":"sdp_lgt_fam",
+                        "label":"SDP programmée en m²",
                         "required":false,
                         "pattern":"",
                         "nb_cols":2,
-                        "id":"sdp_logement",
+                        "id":"sdp_lgt_fam",
                         "dynamic_event_type": "focus",
-                        "dynamic_event_function": "getOperationTooltipLastUpdate('sdp_logement')"
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('sdp_lgt_fam')"
+                    },
+                    {
+                        "type":"text",
+                        "name":"nb_lgt_fam",
+                        "label":"Nombre prévisionnel",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"nb_lgt_fam",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_lgt_fam')"
                     }
                 ]
             },
@@ -677,52 +775,95 @@
                     {
                         "type":"label",
                         "name":"alinea",
-                        "label":"",
+                        "label":"Logements spécifiques",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"text",
-                        "name":"nb_logement",
-                        "label":"Nombre prévisionnel total de logements",
+                        "name":"sdp_lgt_spe",
+                        "label":"SDP programmée en m²",
                         "required":false,
                         "pattern":"",
                         "nb_cols":2,
-                        "id":"nb_logement",
+                        "id":"sdp_lgt_spe",
                         "dynamic_event_type": "focus",
-                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_logement')"
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('sdp_lgt_spe')"
                     },
+                    {
+                        "type":"text",
+                        "name":"nb_lgt_spe",
+                        "label":"Nombre prévisionnel",
+                        "required":false,
+                        "pattern":"",
+                        "nb_cols":2,
+                        "id":"nb_lgt_spe",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_lgt_spe')"
+                    }
+                ]
+            },
+            {
+                "fields":[
                     {
                         "type":"label",
-                        "name":"alinea",
-                        "label":"",
+                        "name":"label_logement",
+                        "label":"Total logements",
                         "nb_cols":2,
 						"id":"Element_5_2_5"
                     },
                     {
                         "type":"text",
-                        "name":"nb_lgt_fam",
-                        "label":"Total nombre de logements familiaux",
+                        "name":"sdp_logement",
+                        "label":"SDP globale programmée en m²",
                         "required":false,
                         "pattern":"",
                         "nb_cols":2,
-                        "id":"nb_lgt_fam",
+                        "id":"sdp_logement",
                         "dynamic_event_type": "focus",
-                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_lgt_fam')"
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('sdp_logement')"
                     },
                     {
                         "type":"text",
-                        "name":"nb_lgt_spe",
-                        "label":"Total nombre de logements spécifiques",
+                        "name":"nb_logement",
+                        "label":"Nombre prévisionnel",
                         "required":false,
                         "pattern":"",
                         "nb_cols":2,
-                        "id":"nb_lgt_spe",
+                        "id":"nb_logement",
                         "dynamic_event_type": "focus",
-                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_lgt_spe')"
+                        "dynamic_event_function": "getOperationTooltipLastUpdate('nb_logement')"
                     }
                 ]
             },
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "repartition",
+						"label": "Répartition envisagée par types de logements",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_38_1",
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "operation_repartition_logement",
+						"bo_filter_attr": "id_operation",
+						"form_filter_value": "id_operation"
+					}
+				]
+			},
             {
                 "fields":[
                     {
@@ -758,6 +899,7 @@
                     "label":"Tab 0",
                     "elements":[
                         "update_button",
+						"id_operation",
                         "alinea",
                         "title",
 						"code_vocation",
@@ -779,8 +921,11 @@
 						"label_logement",
 						"sdp_logement",
 						"nb_logement",
+						"sdp_lgt_fam",
 						"nb_lgt_fam",
-						"nb_lgt_spe"
+						"sdp_lgt_spe",
+						"nb_lgt_spe",
+						"repartition_type_logement"
                     ]
                 }
             ]
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_acteur.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_acteur.json
index b19a898f..8cf57e49 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_acteur.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_acteur.json
@@ -33,7 +33,7 @@
                     {
                         "type":"label",
                         "name":"nom_moe",
-                        "label":"Nom du Maître d'OEuvre (cabinet architecte, ...)",
+                        "label":"Nom du Maître d'OEuvre (nom du cabinet architecte, ...)",
                         "nb_cols":10,
                         "id":"nom_moe"
                     }
@@ -242,7 +242,7 @@
                     {
                         "type":"text",
                         "name":"nom_moe",
-                        "label":"Nom du Maître d'OEuvre (cabinet architecte, ...)",
+                        "label":"Nom du Maître d'OEuvre (nom du cabinet architecte, ...)",
                         "required":false,
                         "pattern":"",
                         "nb_cols":5,
@@ -264,11 +264,7 @@
                         "id":"annee_debut",
                         "dynamic_event_type": "focus",
                         "dynamic_event_function": "getProgrammeTooltipLastUpdate('annee_debut')"
-                    }
-                ]
-            },
-	        {
-                "fields":[
+                    },
                     {
                         "type":"number",
                         "name":"annee_fin",
@@ -279,11 +275,7 @@
                         "id":"annee_fin",
                         "dynamic_event_type": "focus",
                         "dynamic_event_function": "getProgrammeTooltipLastUpdate('annee_fin')"
-                    }
-                ]
-            },
-	        {
-                "fields":[
+                    },
                     {
                         "type":"number",
                         "name":"annee_achat_terrain_operateur",
@@ -309,11 +301,7 @@
                         "id":"date_debut_commercialisation",
                         "dynamic_event_type": "focus",
                         "dynamic_event_function": "getProgrammeTooltipLastUpdate('date_debut_commercialisation')"
-                    }
-                ]
-            },
-	        {
-                "fields":[
+                    },
                     {
                         "type":"number",
                         "name":"date_fin_commercialisation",
@@ -324,11 +312,7 @@
                         "id":"date_fin_commercialisation",
                         "dynamic_event_type": "focus",
                         "dynamic_event_function": "getProgrammeTooltipLastUpdate('date_fin_commercialisation')"
-                    }
-                ]
-            },
-	        {
-                "fields":[
+                    },
                     {
                         "type":"number",
                         "name":"tx_ecoulement_commercialisation",
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_detail.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_detail.json
new file mode 100644
index 00000000..76186b6b
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_detail.json
@@ -0,0 +1,806 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_details-form",
+        "title":"SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "profil_acheteur_accession_libre",
+						"label": "Profil des acheteurs - logements en Accession Libre",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578496052660",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "profil_acheteur_accession_libre",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "logement_familliaux_accession",
+						"label": "Logements familiaux en accession",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578673563602",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_log_fam_accession",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "logement_familliaux_location",
+						"label": "Logements familiaux en Location (hors habitat spécifique)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578925427668",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_log_fam_location",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "label",
+						"name": "logement_familliaux_location_nom_bailleur",
+						"label": "Logements familieux en location - Nom du bailleur",
+						"nb_cols": 12,
+						"id": "logement_familliaux_location_nom_bailleur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "label",
+						"name": "logement_familliaux_location_nom_investisseur",
+						"label": "Logements familieux en location - Nom de l'investisseur",
+						"nb_cols": 12,
+						"id": "logement_familliaux_location_nom_investisseur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "habitat_specifique",
+						"label": "Habitat spécifique",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_1_1578925494748",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_habitat_specifique",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "label",
+						"name": "habitat_specifique_nom_bailleur",
+						"label": "Habitat spécifique - Nom du bailleur",
+						"nb_cols": 12,
+						"id": "habitat_specifique_nom_bailleur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "label",
+						"name": "habitat_specifique_nom_gestionnaire",
+						"label": "Habitat spécifique - Nom du gestionnaire",
+						"nb_cols": 12,
+						"id": "habitat_specifique_nom_gestionnaire"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "activite_industrie",
+						"label": "Activités /industrie",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578650516432",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_activite_industrie",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "bureau",
+						"label": "Bureaux",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 6,
+						"id": "Element_0_1578650693264",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_bureau",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "equipement_structure",
+						"label": "Équipements de superstructures",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 8,
+						"id": "Element_0_1578669108546",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_equipement_structure",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "hotel_commerce_service",
+						"label": "Hôtellerie / Commerces / Services",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578567712800",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_hotel_commerce_service",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "stationnement",
+						"label": "Places de stationnement du programme (hors parkings en ouvrages - superstructures)",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "Element_0_1578562071288",
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_stationnement",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+						"logement_familliaux_accession",
+						"profil_acheteur_accession_libre",
+						"logement_familliaux_location_nom_bailleur",
+						"logement_familliaux_location_nom_investisseur",
+						"logement_familliaux_location",
+						"habitat_specifique_nom_bailleur",
+						"habitat_specifique_nom_gestionnaire",
+						"habitat_specifique",
+						"activite_industrie",
+						"bureau",
+						"equipement_structure",
+						"hotel_commerce_service",
+						"stationnement"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_details-form",
+        "title":"SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_details-form",
+        "title":"SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+
+        ],
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                       
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_details-form",
+        "title":"SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "logement_familliaux_accession",
+						"label": "Logements familliaux en accession",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "logement_familliaux_accession",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 511,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "profil_acheteur_accession_libre",
+						"label": "Profil des acheteurs-logements en accession libre",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "profil_acheteur_accession_libre",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 499,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_location"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "composition_logement_familliaux_location_cp",
+						"label": "Logements familliaux en location",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "composition_logement_familliaux_location_cp",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 580,
+						"form_filter_value": "id_logement_familliaux_location",
+						"section_filter_attr": "id_logement_familliaux_location"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "logement_familliaux_location_nom_bailleur",
+						"label": "Logements familieux en location - Nom du bailleur",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 12,
+						"id": "logement_familliaux_location_nom_bailleur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "logement_familliaux_location_nom_investisseur",
+						"label": "Logements familieux en location - Nom de l'investisseur",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 12,
+						"id": "logement_familliaux_location_nom_investisseur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_habitat_specifique"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "composition_habitat_specifique_cp",
+						"label": "Habitat spécifique",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "composition_habitat_specifique_cp",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 570,
+						"form_filter_value": "id_habitat_specifique",
+						"section_filter_attr": "id_habitat_specifique"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "habitat_specifique_nom_bailleur",
+						"label": "Habitat spécifique - Nom du bailleur",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 12,
+						"id": "habitat_specifique_nom_bailleur"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "habitat_specifique_nom_gestionnaire",
+						"label": "Habitat spécifique - Nom du gestionnaire",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 12,
+						"id": "habitat_specifique_nom_gestionnaire"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "activite_industrie",
+						"label": "Activités / Industrie",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "activite_industrie",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 556,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "bureau",
+						"label": "Bureaux",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "bureau",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 546,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "equipement_structure",
+						"label": "Equipements de superstructures",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "equipement_structure",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 539,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "hotel_commerce_service",
+						"label": "Hotellerie / Commerces /servicesment",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "hotel_commerce_service",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 531,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "stationnement",
+						"label": "Places de stationnement",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "stationnement",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 520,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"logement_familliaux_accession",
+						"profil_acheteur_accession_libre",
+						"composition_logement_familliaux_location_cp",
+						"id_logement_familliaux_location",
+						"logement_familliaux_location_nom_bailleur",
+						"logement_familliaux_location_nom_investisseur",
+						"logement_familliaux_location",
+						"composition_habitat_specifique_cp",
+						"id_habitat_specifique",
+						"habitat_specifique_nom_bailleur",
+						"habitat_specifique_nom_gestionnaire",
+						"activite_industrie",
+						"bureau",
+						"equipement_structure",
+						"hotel_commerce_service",
+						"stationnement"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+        "datasource_cahier_prescription_archi_urb_paysagere":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"cahier_prescription_archi_urb_paysagere",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"param_liste",
+                "filter": {"id_nom_table": "programme_immobilier", "nom_liste": "cahier_prescription_archi_urb_paysagere"}
+            },
+            "ressource_id":"vitis/genericquerys"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_encadrement.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_encadrement.json
index f9934343..ba35643f 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_encadrement.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_encadrement.json
@@ -22,7 +22,7 @@
                     {
                         "type":"label",
                         "name":"cahier_prescription_archi_urb_paysagere_label",
-                        "label":"Programme encadré par un Cahier de Prescriptions architecturales, urbaines et paysagères",
+                        "label":"Programme encadré par un Cahier de Prescriptions architecturales, urbaines, paysagères et environnementales",
                         "nb_cols":10,
                         "id":"cahier_prescription_archi_urb_paysagere_label"
                     }
@@ -33,7 +33,7 @@
                     {
                         "type":"label",
                         "name":"encadrement_plu",
-                        "label":"Encadrement via le PLU :",
+                        "label":"Encadrement via le PLUH :",
                         "nb_cols":12,
                         "id":"encadrement_plu"
                     }
@@ -44,7 +44,7 @@
                     {
                         "type":"label",
                         "name":"charge_fonciere_imposee_fixee_label",
-                        "label":"(CFi) Charge foncière 'imposée-fixée' (Vente de CF-encadrement via CCCT)",
+                        "label":"(CFi) Charge foncière 'imposée-fixée' (Vente de CF)",
                         "nb_cols":10,
                         "id":"charge_fonciere_imposee_fixee_label"
                     }
@@ -61,6 +61,102 @@
                     }
                 ]
             },
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_accession_abordable",
+                        "label":"accession abordable",
+                        "nb_cols":2,
+						"id":"label_accession_abordable"
+                    },
+					{
+						"type": "label",
+						"name": "sdp_encadree_access_abordable",
+						"label": "SDP encadrée en nombre de m²",
+						"nb_cols": 3,
+						"id": "sdp_encadree_access_abordable"
+					},
+					{
+						"type": "label",
+						"name": "cf_plafonnee_access_abordable",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_access_abordable"
+					},
+					{
+						"type": "label",
+						"name": "prix_vente_plafonnee_access_abordable",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_access_abordable"
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_accession_libre",
+                        "label":"accession libre",
+                        "nb_cols":2,
+						"id":"label_accession_libre"
+                    },
+					{
+						"type": "label",
+						"name": "sdp_encadree_access_libre",
+						"label": "SDP encadrée en nombre de m²",
+						"nb_cols": 3,
+						"id": "sdp_encadree_access_libre"
+					},
+					{
+						"type": "label",
+						"name": "cf_plafonnee_access_libre",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_access_libre"
+					},
+					{
+						"type": "label",
+						"name": "prix_vente_plafonnee_access_libre",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_access_libre"
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_location_libre",
+                        "label":"location libre",
+                        "nb_cols":2,
+						"id":"label_location_libre"
+                    },
+					{
+						"type": "label",
+						"name": "sdp_encadree_loc_libre",
+						"label": "SDP encadrée en nombre de m²",
+						"nb_cols": 3,
+						"id": "sdp_encadree_loc_libre"
+					},
+					{
+						"type": "label",
+						"name": "cf_plafonnee_loc_libre",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_loc_libre"
+					},
+					{
+						"type": "label",
+						"name": "prix_vente_plafonnee_loc_libre",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_loc_libre"
+					}
+				]
+			},
             {
                 "fields":[
                     {
@@ -95,7 +191,19 @@
 						"cahier_prescription_archi_urb_paysagere_label",
 						"encadrement_plu",
 						"charge_fonciere_imposee_fixee_label",
-						"prix_sortie_encadree_label"
+						"prix_sortie_encadree_label",
+						"label_accession_abordable",
+						"label_accession_libre",
+						"label_location_libre",
+						"sdp_encadree_access_abordable",
+						"sdp_encadree_access_libre",
+						"sdp_encadree_loc_libre",
+						"cf_plafonnee_access_abordable",
+						"cf_plafonnee_access_libre",
+						"cf_plafonnee_loc_libre",
+						"prix_vente_plafonnee_access_abordable",
+						"prix_vente_plafonnee_access_libre",
+						"prix_vente_plafonnee_loc_libre"
                     ]
                 }
             ]
@@ -179,7 +287,7 @@
                     {
                         "type":"select",
                         "name":"cahier_prescription_archi_urb_paysagere",
-                        "label":"Programme encadré par un Cahier de Prescriptions architecturales, urbaines et paysagères",
+                        "label":"Programme encadré par un Cahier de Prescriptions architecturales, urbaines, paysagères et environnementales",
                         "required":false,
                         "nb_cols":4,
                         "id":"Element_8_22_3",
@@ -201,7 +309,7 @@
                     {
                         "type":"label",
                         "name":"encadrement_plu",
-                        "label":"Encadrement via le PLU :",
+                        "label":"Encadrement via le PLUH :",
                         "nb_cols":12,
                         "id":"encadrement_plu"
                     }
@@ -212,7 +320,7 @@
                     {
                         "type":"select",
                         "name":"charge_fonciere_imposee_fixee",
-                        "label":"(CFi) Charge foncière 'imposée-fixée' (Vente de CF-encadrement via CCCT)",
+                        "label":"(CFi) Charge foncière 'imposée-fixée'  (Vente de CF)",
                         "required":false,
                         "nb_cols":4,
                         "id":"Element_8_22_3",
@@ -251,6 +359,138 @@
                     }
                 ]
             },
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_accession_abordable",
+                        "label":"accession abordable",
+                        "nb_cols":2,
+						"id":"label_accession_abordable"
+                    },
+					{
+						"type": "number",
+						"name": "sdp_encadree_access_abordable",
+						"label": "SDP encadrée en nombre de m²",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "sdp_encadree_access_abordable",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('sdp_encadree_access_abordable')"
+					},
+					{
+						"type": "number",
+						"name": "cf_plafonnee_access_abordable",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_access_abordable",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('cf_plafonnee_access_abordable')"
+					},
+					{
+						"type": "number",
+						"name": "prix_vente_plafonnee_access_abordable",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_access_abordable",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('prix_vente_plafonnee_access_abordable')"
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_accession_libre",
+                        "label":"accession libre",
+                        "nb_cols":2,
+						"id":"label_accession_libre"
+                    },
+					{
+						"type": "number",
+						"name": "sdp_encadree_access_libre",
+						"label": "SDP encadrée en nombre de m²",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "sdp_encadree_access_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('sdp_encadree_access_libre')"
+					},
+					{
+						"type": "number",
+						"name": "cf_plafonnee_access_libre",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_access_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('cf_plafonnee_access_libre')"
+					},
+					{
+						"type": "number",
+						"name": "prix_vente_plafonnee_access_libre",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_access_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('prix_vente_plafonnee_access_libre')"
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"label_location_libre",
+                        "label":"location libre",
+                        "nb_cols":2,
+						"id":"label_location_libre"
+                    },
+					{
+						"type": "number",
+						"name": "sdp_encadree_loc_libre",
+						"label": "SDP encadrée en nombre de m²",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "sdp_encadree_loc_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('sdp_encadree_loc_libre')"
+					},
+					{
+						"type": "number",
+						"name": "cf_plafonnee_loc_libre",
+						"label": "montant HT/m² SDP de la CF plafonnée",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "cf_plafonnee_loc_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('cf_plafonnee_loc_libre')"
+					},
+					{
+						"type": "number",
+						"name": "prix_vente_plafonnee_loc_libre",
+						"label": "montant TTC/m² SH de prix vente plafonné",
+                        "required":false,
+                        "pattern":"",
+						"nb_cols": 3,
+						"id": "prix_vente_plafonnee_loc_libre",
+                        "dynamic_event_type": "focus",
+                        "dynamic_event_function": "getProgrammeTooltipLastUpdate('prix_vente_plafonnee_loc_libre')"
+					}
+				]
+			},
             {
                 "fields":[
                     {
@@ -291,7 +531,19 @@
 						"cahier_prescription_archi_urb_paysagere",
 						"encadrement_plu",
 						"charge_fonciere_imposee_fixee",
-						"prix_sortie_encadree"
+						"prix_sortie_encadree",
+						"label_accession_abordable",
+						"label_accession_libre",
+						"label_location_libre",
+						"sdp_encadree_access_abordable",
+						"sdp_encadree_access_libre",
+						"sdp_encadree_loc_libre",
+						"cf_plafonnee_access_abordable",
+						"cf_plafonnee_access_libre",
+						"cf_plafonnee_loc_libre",
+						"prix_vente_plafonnee_access_abordable",
+						"prix_vente_plafonnee_access_libre",
+						"prix_vente_plafonnee_loc_libre"
                     ]
                 }
             ]
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_synthese.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_synthese.json
index 371392a6..8fab6ee8 100644
--- a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_synthese.json
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie/suivi_prod_immo_saisie_suivi_prod_immo_programme_programme_synthese.json
@@ -6,6 +6,44 @@
         "nb_cols":12,
         "javascript":false,
         "rows":[
+			{
+				"fields": [
+					{
+						"type": "bo_grid",
+						"name": "synthese",
+						"label": "Synthèse du programme immobilier",
+						"nb_cols": 12,
+						"id": "Element_0_1578489308285",
+						"cm_options": {
+							"mode": "javascript",
+							"readOnly": true,
+							"styleActiveLine": true,
+							"lineNumbers": false,
+							"lineSeparator": "\r\n",
+							"indentWithTabs": true,
+							"tabSize": 2,
+							"viewportMargin": 50,
+							"theme": "Veremes"
+						},
+						"ui": true,
+						"options": {
+							"enableRowSelection": false,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": false,
+							"appHeaderTitleBar": false,
+							"columnDefs": [],
+							"data": []
+						},
+						"bo_id": "programme_granulometrie",
+						"bo_filter_attr": "id_programme",
+						"form_filter_value": "id_programme"
+					}
+				]
+			},
 	        {
                 "fields":[
                     {
@@ -79,6 +117,7 @@
                     "label":"Tab 0",
                     "elements":[
                         "display_button",
+						"synthese",
 						"alinea",
 						"surface_moy_logement",
 						"cout_construction_moyen",
@@ -138,6 +177,35 @@
         "nb_cols":12,
         "javascript":false,
         "rows":[
+			{
+				"fields": [
+					{
+						"type": "section_grid",
+						"name": "granulometrie",
+						"label": "Synthèse du programme immobilier",
+						"required": false,
+						"pattern": "",
+						"nb_cols": 12,
+						"id": "granulometrie",
+						"selected": false,
+						"options": {
+							"enableRowSelection": true,
+							"enableSelectAll": true,
+							"enablePagination": false,
+							"enablePaginationControls": false,
+							"enableColumnMenus": true,
+							"enableColumnResizing": true,
+							"appHeader": true,
+							"appHeaderTitleBar": true,
+							"columnDefs": [],
+							"data": []
+						},
+						"section_id": 491,
+						"form_filter_value": "id_programme",
+						"section_filter_attr": "id_programme"
+					}
+				]
+			},
 	        {
                 "fields":[
                     {
@@ -234,6 +302,7 @@
                     "elements":[
                         "update_button",
 						"alinea",
+						"granulometrie",
 						"surface_moy_logement",
 						"cout_construction_moyen",
 						"charge_fonciere_moy",
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie_activite_industrie.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie_activite_industrie.json
new file mode 100644
index 00000000..e0b874b7
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie_activite_industrie.json
@@ -0,0 +1,489 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie-form",
+        "title":"SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_activite_industrie",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_activite_industrie"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+						"type": "label",
+						"name": "production_industrie",
+						"label": "Production industrie",
+						"nb_cols": 3,
+						"id": "production_industrie"
+					},
+					{
+						"type": "label",
+						"name": "logistique",
+						"label": "Logistique",
+						"nb_cols": 3,
+						"id": "logistique"
+					},
+                    {
+                        "type":"label",
+                        "name":"autre",
+                        "label":"Autres activités",
+                        "nb_cols":3,
+                        "id":"autre"
+                    },
+					{
+						"type": "label",
+						"name": "total",
+						"label": "Total",
+						"nb_cols": 3,
+						"id": "total"
+					}
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+                        "indicateur_activite_industrie",
+						"production_industrie",
+						"logistique",
+						"autre",
+						"total"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie-form",
+        "title":"SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_activite_industrie",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_activite_industrie_3_1",
+						"id_from": "id_indicateur_activite_industrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_activite_industrie",
+							"label_key": "indicateur_activite_industrie",
+							"attributs": "id_indicateur_activite_industrie|indicateur_activite_industrie",
+							"order_by": "indicateur_activite_industrie"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_activite_industrie",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie-form",
+        "title":"SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_activite_industrie",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_activite_industrie_3_1",
+						"id_from": "id_indicateur_activite_industrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_activite_industrie",
+							"label_key": "indicateur_activite_industrie",
+							"attributs": "id_indicateur_activite_industrie|indicateur_activite_industrie",
+							"order_by": "indicateur_activite_industrie"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "production_industrie",
+						"label": "Production industrie",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "production_industrie"
+					},
+					{
+						"type": "text",
+						"name": "logistique",
+						"label": "Logistique",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "logistique"
+					},
+                    {
+                        "type":"text",
+                        "name":"autre",
+                        "label":"Autres activités",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"autre"
+                    },
+					{
+						"type": "text",
+						"name": "total",
+						"label": "Total",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "total"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_activite_industrie",
+						"production_industrie",
+						"logistique",
+						"autre",
+						"total"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_activite_industrie-form",
+        "title":"SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_activite_industrie",
+						"nb_cols": 12,
+						"id": "id_activite_industrie_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_activite_industrie",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_activite_industrie_3_1",
+						"id_from": "id_indicateur_activite_industrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_activite_industrie",
+							"label_key": "indicateur_activite_industrie",
+							"attributs": "id_indicateur_activite_industrie|indicateur_activite_industrie",
+							"order_by": "indicateur_activite_industrie"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "production_industrie",
+						"label": "Production industrie",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "production_industrie"
+					},
+					{
+						"type": "text",
+						"name": "logistique",
+						"label": "Logistique",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "logistique"
+					},
+                    {
+                        "type":"text",
+                        "name":"autre",
+                        "label":"Autres activités",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"autre"
+                    },
+					{
+						"type": "text",
+						"name": "total",
+						"label": "Total",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "total"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_activite_industrie",
+						"id_programme",
+						"id_indicateur_activite_industrie",
+						"production_industrie",
+						"logistique",
+						"autre",
+						"total"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_activite_industrie",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_activite_industrie"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau_bureau.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau_bureau.json
new file mode 100644
index 00000000..08a37cbe
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau_bureau.json
@@ -0,0 +1,405 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau-form",
+        "title":"SUIVI_PROD_IMMO_BUREAU_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_bureau",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_bureau"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"total",
+                        "label":"Total",
+                        "nb_cols":2,
+                        "id":"total"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+                        "indicateur_bureau",
+                        "total"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau-form",
+        "title":"SUIVI_PROD_IMMO_BUREAU_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_bureau",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_bureau_3_1",
+						"id_from": "id_indicateur_bureau_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_bureau",
+							"label_key": "indicateur_bureau",
+							"attributs": "id_indicateur_bureau|indicateur_bureau",
+							"order_by": "indicateur_bureau"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_bureau",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau-form",
+        "title":"SUIVI_PROD_IMMO_BUREAU_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_bureau",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_bureau_3_1",
+						"id_from": "id_indicateur_bureau_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_bureau",
+							"label_key": "indicateur_bureau",
+							"attributs": "id_indicateur_bureau|indicateur_bureau",
+							"order_by": "indicateur_bureau"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "total",
+						"label": "Total",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "total"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_bureau",
+						"total"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_bureau-form",
+        "title":"SUIVI_PROD_IMMO_BUREAU_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_bureau",
+						"nb_cols": 12,
+						"id": "id_bureau_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_bureau",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_bureau_3_1",
+						"id_from": "id_indicateur_bureau_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_bureau",
+							"label_key": "indicateur_bureau",
+							"attributs": "id_indicateur_bureau|indicateur_bureau",
+							"order_by": "indicateur_bureau"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "total",
+						"label": "Total",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "nb_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_bureau",
+						"id_programme",
+						"id_indicateur_bureau",
+						"total"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_bureau",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_bureau"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp_composition_habitat_specifique_cp.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp_composition_habitat_specifique_cp.json
new file mode 100644
index 00000000..f78b1d61
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp_composition_habitat_specifique_cp.json
@@ -0,0 +1,613 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_habitat_specifique_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_habitat_specifique",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_habitat_specifique"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"residence_etudiant",
+                        "label":"Résidence étudiante",
+                        "nb_cols":3,
+                        "id":"residence_etudiant"
+                    },
+                    {
+                        "type":"label",
+                        "name":"residence_personne_agee",
+                        "label":"Résidence personnes agées",
+                        "nb_cols":3,
+                        "id":"residence_personne_agee"
+                    },
+                    {
+                        "type":"label",
+                        "name":"residence_personne_handi",
+                        "label":"Résidence personnes handicapées",
+                        "nb_cols":3,
+                        "id":"residence_personne_handi"
+                    }
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"label",
+                        "name":"residence_intergenerationnelle",
+                        "label":"Résidence intergénérationnelle",
+                        "nb_cols":3,
+                        "id":"residence_intergenerationnelle"
+                    },
+                    {
+                        "type":"label",
+                        "name":"residence_sociale",
+                        "label":"Résidence sociale",
+                        "nb_cols":3,
+                        "id":"residence_sociale"
+                    },
+                    {
+                        "type":"label",
+                        "name":"pension_famille",
+                        "label":"Pension de famille",
+                        "nb_cols":3,
+                        "id":"pension_famille"
+                    },
+                    {
+                        "type":"label",
+                        "name":"autre",
+                        "label":"Autres (foyers, ...)",
+                        "nb_cols":3,
+                        "id":"autre"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commentaire",
+                        "label":"Commentaire",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+						"id_habitat_specifique",
+						"id_indicateur_habitat_specifique",
+						"residence_etudiant",
+						"residence_personne_agee",
+						"residence_personne_handi",
+						"residence_intergenerationnelle",
+						"residence_sociale",
+						"pension_famille",
+						"autre",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_habitat_specifique_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_habitat_specifique",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_habitat_specifique_3_1",
+						"id_from": "id_indicateur_habitat_specifique_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_habitat_specifique",
+							"label_key": "indicateur_habitat_specifique",
+							"attributs": "id_indicateur_habitat_specifique|indicateur_habitat_specifique",
+							"order_by": "indicateur_habitat_specifique"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_habitat_specifique",
+						"id_habitat_specifique"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_habitat_specifique_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_habitat_specifique",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_habitat_specifique_3_1",
+						"id_from": "id_indicateur_habitat_specifique_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_habitat_specifique",
+							"label_key": "indicateur_habitat_specifique",
+							"attributs": "id_indicateur_habitat_specifique|indicateur_habitat_specifique",
+							"order_by": "indicateur_habitat_specifique"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"residence_etudiant",
+                        "label":"Résidence étudiante",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_etudiant"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_personne_agee",
+                        "label":"Résidence personnes agées",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_personne_agee"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_personne_handi",
+                        "label":"Résidence personnes handicapées",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_personne_handi"
+                    }
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"residence_intergenerationnelle",
+                        "label":"Résidence intergénérationnelle",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_intergenerationnelle"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_sociale",
+                        "label":"Résidence sociale",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_sociale"
+                    },
+                    {
+                        "type":"text",
+                        "name":"pension_famille",
+                        "label":"Pension de famille",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"pension_famille"
+                    },
+                    {
+                        "type":"text",
+                        "name":"autre",
+                        "label":"Autres (foyers, ...)",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"autre"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_habitat_specifique",
+						"id_indicateur_habitat_specifique",
+						"residence_etudiant",
+						"residence_personne_agee",
+						"residence_personne_handi",
+						"residence_intergenerationnelle",
+						"residence_sociale",
+						"pension_famille",
+						"autre",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_habitat_specifique_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_composition_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_composition_habitat_specifique_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_habitat_specifique",
+						"nb_cols": 12,
+						"id": "id_habitat_specifique_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_habitat_specifique",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_habitat_specifique_3_1",
+						"id_from": "id_indicateur_habitat_specifique_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_habitat_specifique",
+							"label_key": "indicateur_habitat_specifique",
+							"attributs": "id_indicateur_habitat_specifique|indicateur_habitat_specifique",
+							"order_by": "indicateur_habitat_specifique"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"residence_etudiant",
+                        "label":"Résidence étudiante",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_etudiant"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_personne_agee",
+                        "label":"Résidence personnes agées",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_personne_agee"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_personne_handi",
+                        "label":"Résidence personnes handicapées",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_personne_handi"
+                    }
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"residence_intergenerationnelle",
+                        "label":"Résidence intergénérationnelle",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_intergenerationnelle"
+                    },
+                    {
+                        "type":"text",
+                        "name":"residence_sociale",
+                        "label":"Résidence sociale",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"residence_sociale"
+                    },
+                    {
+                        "type":"text",
+                        "name":"pension_famille",
+                        "label":"Pension de famille",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"pension_famille"
+                    },
+                    {
+                        "type":"text",
+                        "name":"autre",
+                        "label":"Autres (foyers, ...)",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"autre"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_composition_habitat_specifique",
+						"id_habitat_specifique",
+						"id_indicateur_habitat_specifique",
+						"residence_etudiant",
+						"residence_personne_agee",
+						"residence_personne_handi",
+						"residence_intergenerationnelle",
+						"residence_sociale",
+						"pension_famille",
+						"autre",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_habitat_specifique",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_habitat_specifique"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp_composition_logement_familliaux_location_cp.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp_composition_logement_familliaux_location_cp.json
new file mode 100644
index 00000000..09700da9
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp_composition_logement_familliaux_location_cp.json
@@ -0,0 +1,561 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_location_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_logement_familliaux_location",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_logement_familliaux_location"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lls",
+                        "label":"Social (LLS)",
+                        "nb_cols":12,
+                        "id":"title_lls"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+						"type": "label",
+						"name": "social_pls",
+						"label": "PLS",
+						"nb_cols": 2,
+						"id": "social_pls"
+					},
+					{
+						"type": "label",
+						"name": "social_plus_plai",
+						"label": "PLUS PLAI",
+						"nb_cols": 3,
+						"id": "social_plus_plai"
+					}
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lli",
+                        "label":"Intémerdiaire (LLI)",
+                        "nb_cols":12,
+                        "id":"title_lli"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+						"type": "label",
+						"name": "intermediaire_pli",
+						"label": "Locatif intémédiaire PLI",
+						"nb_cols": 4,
+						"id": "intermediaire_pli"
+					},
+                    {
+                        "type":"label",
+                        "name":"intermediaire_afl",
+                        "label":"AFL",
+                        "nb_cols":2,
+                        "id":"intermediaire_afl"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_logement_familliaux_location",
+                        "indicateur_logement_familliaux_location",
+						"title_lls",
+                        "social_pls",
+						"social_plus_plai",
+						"title_lli",
+						"intermediaire_pli",
+						"intermediaire_afl"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_location_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_location",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_location_3_1",
+						"id_from": "id_indicateur_logement_familliaux_location_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_location",
+							"label_key": "indicateur_logement_familliaux_location",
+							"attributs": "id_indicateur_logement_familliaux_location|indicateur_logement_familliaux_location",
+							"order_by": "indicateur_logement_familliaux_location"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_logement_familliaux_location",
+						"id_logement_familliaux_location"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_location_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_location",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_location_3_1",
+						"id_from": "id_indicateur_logement_familliaux_location_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_location",
+							"label_key": "indicateur_logement_familliaux_location",
+							"attributs": "id_indicateur_logement_familliaux_location|indicateur_logement_familliaux_location",
+							"order_by": "indicateur_logement_familliaux_location"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lls",
+                        "label":"Social (LLS)",
+                        "nb_cols":12,
+                        "id":"title_lls"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "social_pls",
+						"label": "PLS",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "social_pls"
+					},
+					{
+						"type": "text",
+						"name": "social_plus_plai",
+						"label": "PLUS PLAI",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "social_plus_plai"
+					}
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lli",
+                        "label":"Intémerdiaire (LLI)",
+                        "nb_cols":12,
+                        "id":"title_lli"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+						"type": "text",
+						"name": "intermediaire_pli",
+						"label": "Locatif intémédiaire PLI",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 4,
+						"id": "intermediaire_pli"
+					},
+                    {
+                        "type":"text",
+                        "name":"intermediaire_afl",
+                        "label":"AFL",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":2,
+                        "id":"intermediaire_afl"
+                    }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_logement_familliaux_location",
+						"id_indicateur_logement_familliaux_location",
+						"title_lls",
+                        "social_pls",
+						"social_plus_plai",
+						"title_lli",
+						"intermediaire_pli",
+						"intermediaire_afl"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_composition_logement_familliaux_location_cp-form",
+        "title":"SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_composition_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_composition_logement_familliaux_location_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_location",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_location_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_location",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_location_3_1",
+						"id_from": "id_indicateur_logement_familliaux_location_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_location",
+							"label_key": "indicateur_logement_familliaux_location",
+							"attributs": "id_indicateur_logement_familliaux_location|indicateur_logement_familliaux_location",
+							"order_by": "indicateur_logement_familliaux_location"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lls",
+                        "label":"Social (LLS)",
+                        "nb_cols":12,
+                        "id":"title_lls"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "social_pls",
+						"label": "PLS",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "social_pls"
+					},
+					{
+						"type": "text",
+						"name": "social_plus_plai",
+						"label": "PLUS PLAI",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "social_plus_plai"
+					}
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"title_lli",
+                        "label":"Intémerdiaire (LLI)",
+                        "nb_cols":12,
+                        "id":"title_lli"
+                    }
+                ]
+            },
+            {
+                "fields":[
+					{
+						"type": "text",
+						"name": "intermediaire_pli",
+						"label": "Locatif intémédiaire PLI",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 4,
+						"id": "intermediaire_pli"
+					},
+                    {
+                        "type":"text",
+                        "name":"intermediaire_afl",
+                        "label":"AFL",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":2,
+                        "id":"intermediaire_afl"
+                    }
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_composition_logement_familliaux_location",
+						"id_logement_familliaux_location",
+						"id_indicateur_logement_familliaux_location",
+						"title_lls",
+                        "social_pls",
+						"social_plus_plai",
+						"title_lli",
+						"intermediaire_pli",
+						"intermediaire_afl"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_logement_familliaux_location",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_logement_familliaux_location"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure_equipement_structure.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure_equipement_structure.json
new file mode 100644
index 00000000..6b02be48
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure_equipement_structure.json
@@ -0,0 +1,445 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_equipement_structure",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_equipement_structure"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"sdp",
+                        "label":"SdP (m²)",
+                        "nb_cols":2,
+                        "id":"sdp"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commentaire",
+                        "label":"Commentaire",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+                        "indicateur_equipement_structure",
+                        "sdp",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_equipement_structure",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_equipement_structure_3_1",
+						"id_from": "id_indicateur_equipement_structure_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_equipement_structure",
+							"label_key": "indicateur_equipement_structure",
+							"attributs": "id_indicateur_equipement_structure|indicateur_equipement_structure",
+							"order_by": "indicateur_equipement_structure"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_equipement_structure",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_equipement_structure",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_equipement_structure_3_1",
+						"id_from": "id_indicateur_equipement_structure_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_equipement_structure",
+							"label_key": "indicateur_equipement_structure",
+							"attributs": "id_indicateur_equipement_structure|indicateur_equipement_structure",
+							"order_by": "indicateur_equipement_structure"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "sdp",
+						"label": "SdP (m²)",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "sdp"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_equipement_structure",
+						"sdp",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_equipement_structure-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_equipement_structure",
+						"nb_cols": 12,
+						"id": "id_equipement_structure_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_equipement_structure",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_equipement_structure_3_1",
+						"id_from": "id_indicateur_equipement_structure_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_equipement_structure",
+							"label_key": "indicateur_equipement_structure",
+							"attributs": "id_indicateur_equipement_structure|indicateur_equipement_structure",
+							"order_by": "indicateur_equipement_structure"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "sdp",
+						"label": "SdP (m²)",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "sdp"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_equipement_structure",
+						"id_programme",
+						"id_indicateur_equipement_structure",
+						"sdp",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_equipement_structure",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_equipement_structure"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie_granulometrie.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie_granulometrie.json
new file mode 100644
index 00000000..c62cd6e8
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie_granulometrie.json
@@ -0,0 +1,503 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie-form",
+        "title":"SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"composition_programme",
+                        "label":"Composition",
+                        "nb_cols":12,
+                        "id":"composition_programme"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"valeur",
+                        "label":"Valeur",
+                        "nb_cols":6,
+                        "id":"valeur"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"type_granulometrie",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"type_granulometrie"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+                        "composition_programme",
+                        "valeur",
+						"type_granulometrie"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie-form",
+        "title":"SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_composition_programme",
+						"label": "Composition",
+						"required": false,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_composition_programme",
+							"label_key": "composition_programme",
+							"attributs": "code_composition_programme|composition_programme",
+							"order_by": "composition_programme"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_granulometrie",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "code_type_granulometrie_3_1",
+						"id_from": "code_type_granulometrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_granulometrie",
+							"label_key": "type_granulometrie",
+							"attributs": "code_type_granulometrie|type_granulometrie",
+							"order_by": "type_granulometrie"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "code_composition_programme",
+                        "code_type_granulometrie",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie-form",
+        "title":"SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_composition_programme",
+						"label": "Composition",
+						"required": true,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_composition_programme",
+							"label_key": "composition_programme",
+							"attributs": "code_composition_programme|composition_programme",
+							"order_by": "composition_programme"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "valeur",
+						"label": "Valeur",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "valeur_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_granulometrie",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "code_type_granulometrie_3_1",
+						"id_from": "code_type_granulometrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_granulometrie",
+							"label_key": "type_granulometrie",
+							"attributs": "code_type_granulometrie|type_granulometrie",
+							"order_by": "type_granulometrie"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"code_type_granulometrie",
+						"valeur",
+						"code_composition_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_granulometrie-form",
+        "title":"SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_granulometrie",
+						"nb_cols": 12,
+						"id": "id_granulometrie_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_composition_programme",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_composition_programme",
+							"label_key": "composition_programme",
+							"attributs": "code_composition_programme|composition_programme",
+							"order_by": "composition_programme"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "valeur",
+						"label": "Valeur",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "valeur_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_granulometrie",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "code_type_granulometrie_3_1",
+						"id_from": "code_type_granulometrie_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_granulometrie",
+							"label_key": "type_granulometrie",
+							"attributs": "code_type_granulometrie|type_granulometrie",
+							"order_by": "type_granulometrie"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_granulometrie",
+						"id_programme",
+						"code_type_granulometrie",
+						"valeur",
+						"code_composition_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_1": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_composition_programme",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "composition_programme"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_1"
+		},
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_type_granulometrie",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "type_granulometrie"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service_hotel_commerce_service.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service_hotel_commerce_service.json
new file mode 100644
index 00000000..42a4b70b
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service_hotel_commerce_service.json
@@ -0,0 +1,529 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service-form",
+        "title":"SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_hotel_commerce_service",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_hotel_commerce_service"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commerce",
+                        "label":"Commerces",
+                        "nb_cols":3,
+                        "id":"commerce"
+                    },
+                    {
+                        "type":"label",
+                        "name":"loisir_marchand",
+                        "label":"Loisirs (marchands)",
+                        "nb_cols":3,
+                        "id":"loisir_marchand"
+                    },
+                    {
+                        "type":"label",
+                        "name":"service_act_artisanale",
+                        "label":"Services / Act. artisanale",
+                        "nb_cols":3,
+                        "id":"service_act_artisanale"
+                    },
+                    {
+                        "type":"label",
+                        "name":"hotel",
+                        "label":"Hotels",
+                        "nb_cols":3,
+                        "id":"hotel"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commentaire",
+                        "label":"Commentaire",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+						"indicateur_hotel_commerce_service",
+						"commerce",
+						"loisir_marchand",
+						"service_act_artisanale",
+						"hotel",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service-form",
+        "title":"SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_hotel_commerce_service",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_hotel_commerce_service_3_1",
+						"id_from": "id_indicateur_hotel_commerce_service_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_hotel_commerce_service",
+							"label_key": "indicateur_hotel_commerce_service",
+							"attributs": "id_indicateur_hotel_commerce_service|indicateur_hotel_commerce_service",
+							"order_by": "indicateur_hotel_commerce_service"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_hotel_commerce_service",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service-form",
+        "title":"SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_hotel_commerce_service",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_hotel_commerce_service_3_1",
+						"id_from": "id_indicateur_hotel_commerce_service_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_hotel_commerce_service",
+							"label_key": "indicateur_hotel_commerce_service",
+							"attributs": "id_indicateur_hotel_commerce_service|indicateur_hotel_commerce_service",
+							"order_by": "indicateur_hotel_commerce_service"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"commerce",
+                        "label":"Commerces",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"commerce"
+                    },
+                    {
+                        "type":"text",
+                        "name":"loisir_marchand",
+                        "label":"Loisirs (marchands)",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"loisir_marchand"
+                    },
+                    {
+                        "type":"text",
+                        "name":"service_act_artisanale",
+                        "label":"Services / Act. artisanale",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"service_act_artisanale"
+                    },
+                    {
+                        "type":"text",
+                        "name":"hotel",
+                        "label":"Hotels",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"hotel"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_hotel_commerce_service",
+						"commerce",
+						"loisir_marchand",
+						"service_act_artisanale",
+						"hotel",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_hotel_commerce_service-form",
+        "title":"SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_hotel_commerce_service",
+						"nb_cols": 12,
+						"id": "id_hotel_commerce_service_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_hotel_commerce_service",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_hotel_commerce_service_3_1",
+						"id_from": "id_indicateur_hotel_commerce_service_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_hotel_commerce_service",
+							"label_key": "indicateur_hotel_commerce_service",
+							"attributs": "id_indicateur_hotel_commerce_service|indicateur_hotel_commerce_service",
+							"order_by": "indicateur_hotel_commerce_service"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+                    {
+                        "type":"text",
+                        "name":"commerce",
+                        "label":"Commerces",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"commerce"
+                    },
+                    {
+                        "type":"text",
+                        "name":"loisir_marchand",
+                        "label":"Loisirs (marchands)",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"loisir_marchand"
+                    },
+                    {
+                        "type":"text",
+                        "name":"service_act_artisanale",
+                        "label":"Services / Act. artisanale",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"service_act_artisanale"
+                    },
+                    {
+                        "type":"text",
+                        "name":"hotel",
+                        "label":"Hotels",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"hotel"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_hotel_commerce_service",
+						"id_programme",
+						"id_indicateur_hotel_commerce_service",
+						"commerce",
+						"loisir_marchand",
+						"service_act_artisanale",
+						"hotel",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_hotel_commerce_service",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_hotel_commerce_service"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession_logement_familliaux_accession.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession_logement_familliaux_accession.json
new file mode 100644
index 00000000..782a142e
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession_logement_familliaux_accession.json
@@ -0,0 +1,518 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession-form",
+        "title":"SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_logement_familliaux_accession",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_logement_familliaux_accession"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"accession_libre",
+                        "label":"Accession libre",
+                        "nb_cols":2,
+                        "id":"accession_libre"
+                    },
+					{
+						"type":"label",
+						"name": "accession_abordable",
+						"label": "Accession abordable",
+						"nb_cols": 2,
+						"id": "accession_abordable_5_1"
+					},
+					{
+						"type":"label",
+						"name": "accession_sociale_securise",
+						"label": "Accession sociale (sécurisée)",
+						"nb_cols": 3,
+						"id": "accession_sociale_securise_5_1"
+					},
+					{
+						"type":"label",
+						"name": "psla",
+						"label": "PSLA",
+						"nb_cols": 2,
+						"id": "psla_5_1"
+					},
+					{
+						"type":"label",
+						"name": "brs",
+						"label": "Bail Réel Solidaire",
+						"nb_cols": 2,
+						"id": "brs_5_1"
+					}
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+						"accession_libre",
+						"accession_abordable",
+						"accession_sociale_securise",
+						"psla",
+						"brs",
+						"indicateur_logement_familliaux_accession"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession-form",
+        "title":"SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_accession",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_accession_3_1",
+						"id_from": "id_indicateur_logement_familliaux_accession_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_accession",
+							"label_key": "indicateur_logement_familliaux_accession",
+							"attributs": "id_indicateur_logement_familliaux_accession|indicateur_logement_familliaux_accession",
+							"order_by": "indicateur_logement_familliaux_accession"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "code_composition_programme",
+                        "id_indicateur_logement_familliaux_accession",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession-form",
+        "title":"SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_accession",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_accession_3_1",
+						"id_from": "id_indicateur_logement_familliaux_accession_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_accession",
+							"label_key": "indicateur_logement_familliaux_accession",
+							"attributs": "id_indicateur_logement_familliaux_accession|indicateur_logement_familliaux_accession",
+							"order_by": "indicateur_logement_familliaux_accession"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "accession_libre",
+						"label": "Accession libre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "accession_libre_5_1"
+					},
+					{
+						"type": "text",
+						"name": "accession_abordable",
+						"label": "Accession abordable",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "accession_abordable_5_1"
+					},
+					{
+						"type": "text",
+						"name": "accession_sociale_securise",
+						"label": "Accession sociale (sécurisée)",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "accession_sociale_securise_5_1"
+					},
+					{
+						"type": "text",
+						"name": "psla",
+						"label": "PSLA",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "psla_5_1"
+					},
+					{
+						"type": "text",
+						"name": "brs",
+						"label": "Bail Réel Solidaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "brs_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_logement_familliaux_accession",
+						"accession_libre",
+						"accession_abordable",
+						"accession_sociale_securise",
+						"psla",
+						"brs"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_logement_familliaux_accession-form",
+        "title":"SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_logement_familliaux_accession",
+						"nb_cols": 12,
+						"id": "id_logement_familliaux_accession_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_logement_familliaux_accession",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_logement_familliaux_accession_3_1",
+						"id_from": "id_indicateur_logement_familliaux_accession_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_logement_familliaux_accession",
+							"label_key": "indicateur_logement_familliaux_accession",
+							"attributs": "id_indicateur_logement_familliaux_accession|indicateur_logement_familliaux_accession",
+							"order_by": "indicateur_logement_familliaux_accession"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "accession_libre",
+						"label": "Accession libre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "accession_libre_5_1"
+					},
+					{
+						"type": "text",
+						"name": "accession_abordable",
+						"label": "Accession abordable",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "accession_abordable_5_1"
+					},
+					{
+						"type": "text",
+						"name": "accession_sociale_securise",
+						"label": "Accession sociale (sécurisée)",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 3,
+						"id": "accession_sociale_securise_5_1"
+					},
+					{
+						"type": "text",
+						"name": "psla",
+						"label": "PSLA",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "psla_5_1"
+					},
+					{
+						"type": "text",
+						"name": "brs",
+						"label": "Bail Réel Solidaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "brs_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_logement_familliaux_accession",
+						"id_programme",
+						"id_indicateur_logement_familliaux_accession",
+						"accession_libre",
+						"accession_abordable",
+						"accession_sociale_securise",
+						"psla",
+						"brs"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_logement_familliaux_accession",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_logement_familliaux_accession"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre_profil_acheteur_accession_libre.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre_profil_acheteur_accession_libre.json
new file mode 100644
index 00000000..6653bd35
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre_profil_acheteur_accession_libre.json
@@ -0,0 +1,473 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre-form",
+        "title":"SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"type_acheteur_accession_libre",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"type_acheteur_accession_libre"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"nb",
+                        "label":"Nombre",
+                        "nb_cols":2,
+                        "id":"nb"
+                    },
+                    {
+                        "type":"label",
+                        "name":"pourc",
+                        "label":"Pourcentage",
+                        "nb_cols":2,
+                        "id":"pourc"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commentaire",
+                        "label":"Commentaire",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+						"pourc",
+						"commentaire",
+                        "nb",
+						"type_acheteur_accession_libre"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre-form",
+        "title":"SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_type_acheteur_accession_libre",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_type_acheteur_accession_libre_3_1",
+						"id_from": "id_type_acheteur_accession_libre_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_type_acheteur_accession_libre",
+							"label_key": "type_acheteur_accession_libre",
+							"attributs": "id_type_acheteur_accession_libre|type_acheteur_accession_libre",
+							"order_by": "type_acheteur_accession_libre"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_type_acheteur_accession_libre",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre-form",
+        "title":"SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_type_acheteur_accession_libre",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_type_acheteur_accession_libre_3_1",
+						"id_from": "id_type_acheteur_accession_libre_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_type_acheteur_accession_libre",
+							"label_key": "type_acheteur_accession_libre",
+							"attributs": "id_type_acheteur_accession_libre|type_acheteur_accession_libre",
+							"order_by": "type_acheteur_accession_libre"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "nb",
+						"label": "Nombre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "nb_5_1"
+					},
+					{
+						"type": "text",
+						"name": "pourc",
+						"label": "Pourcentage",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "pourc_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_type_acheteur_accession_libre",
+						"nb",
+						"pourc",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_profil_acheteur_accession_libre-form",
+        "title":"SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_profil_acheteur_accession_libre",
+						"nb_cols": 12,
+						"id": "id_profil_acheteur_accession_libre_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_type_acheteur_accession_libre",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_type_acheteur_accession_libre_3_1",
+						"id_from": "id_type_acheteur_accession_libre_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_type_acheteur_accession_libre",
+							"label_key": "type_acheteur_accession_libre",
+							"attributs": "id_type_acheteur_accession_libre|type_acheteur_accession_libre",
+							"order_by": "type_acheteur_accession_libre"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "nb",
+						"label": "Nombre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "nb_5_1"
+					},
+					{
+						"type": "text",
+						"name": "pourc",
+						"label": "Pourcentage",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "pourc_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_profil_acheteur_accession_libre",
+						"id_programme",
+						"id_type_acheteur_accession_libre",
+						"nb",
+						"pourc",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_type_acheteur_accession_libre",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "type_acheteur_accession_libre"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_repartition_type_logement.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_repartition_type_logement.json
new file mode 100644
index 00000000..18f6c1ba
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_repartition_type_logement.json
@@ -0,0 +1,503 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_repartition_type_logement-form",
+        "title":"SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_operation",
+						"nb_cols": 12,
+						"id": "id_operation_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"repartition",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"repartition"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"valeur",
+                        "label":"Valeur",
+                        "nb_cols":6,
+                        "id":"valeur"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"type_logement",
+                        "label":"Type de logement",
+                        "nb_cols":12,
+                        "id":"type_logement"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_operation",
+                        "repartition",
+                        "valeur",
+						"type_logement"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_repartition_type_logement-form",
+        "title":"SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_operation",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_operation",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_operation",
+                            "order_by":"nom_operation",
+                            "id_key":"id_operation",
+                            "attributs":"id_operation|nom_operation"
+                        },
+                        "id_from":"id_operation_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_repartition",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_repartition",
+							"label_key": "repartition",
+							"attributs": "code_repartition|repartition",
+							"order_by": "repartition"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_logement",
+						"label": "Type de logement",
+						"required": false,
+						"nb_cols": 7,
+						"id": "code_type_logement_3_1",
+						"id_from": "code_type_logement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_logement",
+							"label_key": "type_logement",
+							"attributs": "code_type_logement|type_logement",
+							"order_by": "type_logement"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "code_repartition",
+                        "code_type_logement",
+						"id_operation"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_repartition_type_logement-form",
+        "title":"SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_operation",
+						"nb_cols": 12,
+						"id": "id_operation_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_repartition",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_repartition",
+							"label_key": "repartition",
+							"attributs": "code_repartition|repartition",
+							"order_by": "repartition"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "valeur",
+						"label": "Valeur",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "valeur_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_logement",
+						"label": "Type de logement",
+						"required": true,
+						"nb_cols": 7,
+						"id": "code_type_logement_3_1",
+						"id_from": "code_type_logement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_logement",
+							"label_key": "type_logement",
+							"attributs": "code_type_logement|type_logement",
+							"order_by": "type_logement"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_operation",
+						"code_type_logement",
+						"valeur",
+						"code_repartition"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_suivi_prod_immo_repartition_type_logement-form",
+        "title":"SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_repartition_type_logement",
+						"nb_cols": 12,
+						"id": "id_repartition_type_logement_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_operation",
+						"nb_cols": 12,
+						"id": "id_operation_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_repartition",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "Element_0_1586248310338",
+						"id_from": "Element_0_1586248310338_from",
+						"datasource": {
+							"datasource_id": "datasource_1",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_repartition",
+							"label_key": "repartition",
+							"attributs": "code_repartition|repartition",
+							"order_by": "repartition"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "valeur",
+						"label": "Valeur",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "valeur_5_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "code_type_logement",
+						"label": "Type de logement",
+						"required": true,
+						"nb_cols": 7,
+						"id": "code_type_logement_3_1",
+						"id_from": "code_type_logement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "code_type_logement",
+							"label_key": "type_logement",
+							"attributs": "code_type_logement|type_logement",
+							"order_by": "type_logement"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_repartition_type_logement",
+						"id_operation",
+						"code_type_logement",
+						"valeur",
+						"code_repartition"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_1": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_repartition",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "repartition"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_1"
+		},
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_type_logement",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "type_logement"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"operation",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"operation"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement_stationnement.json b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement_stationnement.json
new file mode 100644
index 00000000..737e9b98
--- /dev/null
+++ b/src/module_suivi_prod_immo/module/forms/suivi_prod_immo_saisie_dep/suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement_stationnement.json
@@ -0,0 +1,473 @@
+{
+    "display":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_DISPLAY",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"indicateur_stationnement",
+                        "label":"Type",
+                        "nb_cols":12,
+                        "id":"indicateur_stationnement"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"nb",
+                        "label":"Nombre",
+                        "nb_cols":2,
+                        "id":"nb"
+                    },
+                    {
+                        "type":"label",
+                        "name":"prix_moyen_ttc",
+                        "label":"Prix moyen en € TTC",
+                        "nb_cols":4,
+                        "id":"prix_moyen_ttc"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"commentaire",
+                        "label":"Commentaire",
+                        "nb_cols":12,
+                        "id":"commentaire"
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"display_button",
+                        "id":"display_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "display_button",
+                        "id_programme",
+                        "indicateur_stationnement",
+                        "nb",
+						"prix_moyen_ttc",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "search":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_SEARCH",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"id_programme",
+                        "label":"Opération",
+                        "required":true,
+                        "nb_cols":3,
+                        "id":"id_programme",
+                        "datasource":{
+                            "datasource_id":"datasource_38",
+                            "sort_order":"ASC",
+                            "distinct":"true",
+                            "label_key":"nom_programme",
+                            "order_by":"nom_programme",
+                            "id_key":"id_programme",
+                            "attributs":"id_programme|nom_programme"
+                        },
+                        "id_from":"id_programme_from"
+                    }
+                ]
+            },
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_stationnement",
+						"label": "Type",
+						"required": false,
+						"nb_cols": 7,
+						"id": "id_indicateur_stationnement_3_1",
+						"id_from": "id_indicateur_stationnement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_stationnement",
+							"label_key": "indicateur_stationnement",
+							"attributs": "id_indicateur_stationnement|indicateur_stationnement",
+							"order_by": "indicateur_stationnement"
+						}
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-xs",
+                        "nb_cols":12,
+                        "name":"search_button",
+                        "id":"search_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"search",
+                                "label":"FORM_SEARCH_BUTTON",
+                                "class":"btn-primary",
+                                "event":"setGridFilter()"
+                            },
+                            {
+                                "type":"reset",
+                                "name":"reset",
+                                "label":"FORM_RESET_BUTTON",
+                                "class":"btn-primary",
+                                "event":"resetGridFilter()"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "search_button",
+                        "id_indicateur_stationnement",
+						"id_programme"
+                    ]
+                }
+            ]
+        }
+    },
+    "insert":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_INSERT",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_stationnement",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_stationnement_3_1",
+						"id_from": "id_indicateur_stationnement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_stationnement",
+							"label_key": "indicateur_stationnement",
+							"attributs": "id_indicateur_stationnement|indicateur_stationnement",
+							"order_by": "indicateur_stationnement"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "nb",
+						"label": "Nombre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "nb_5_1"
+					},
+                    {
+                        "type":"text",
+                        "name":"prix_moyen_ttc",
+                        "label":"Prix moyen en € TTC",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"prix_moyen_ttc"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"insert_button",
+                        "id":"insert_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_CREATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "afterEvent":"editSectionForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "insert_button",
+						"id_programme",
+						"id_indicateur_stationnement",
+						"nb",
+						"prix_moyen_ttc",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "update":{
+        "name":"suivi_prod_immo_saisie_dep_suivi_prod_immo_stationnement-form",
+        "title":"SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_UPDATE",
+        "input_size":"xxs",
+        "nb_cols":12,
+        "javascript":false,
+        "rows":[
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_stationnement",
+						"nb_cols": 12,
+						"id": "id_stationnement_1_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "hidden",
+						"name": "id_programme",
+						"nb_cols": 12,
+						"id": "id_programme_2_1"
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "select",
+						"name": "id_indicateur_stationnement",
+						"label": "Type",
+						"required": true,
+						"nb_cols": 7,
+						"id": "id_indicateur_stationnement_3_1",
+						"id_from": "id_indicateur_stationnement_3_1_from",
+						"datasource": {
+							"datasource_id": "datasource_2",
+							"sort_order": "ASC",
+							"distinct": "true",
+							"id_key": "id_indicateur_stationnement",
+							"label_key": "indicateur_stationnement",
+							"attributs": "id_indicateur_stationnement|indicateur_stationnement",
+							"order_by": "indicateur_stationnement"
+						}
+					}
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "text",
+						"name": "nb",
+						"label": "Nombre",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 2,
+						"id": "nb_5_1"
+					},
+                    {
+                        "type":"text",
+                        "name":"prix_moyen_ttc",
+                        "label":"Prix moyen en € TTC",
+						"disabled": false,
+						"required": false,
+                        "nb_cols":3,
+                        "id":"prix_moyen_ttc"
+                    }
+				]
+			},
+			{
+				"fields": [
+					{
+						"type": "textarea",
+						"name": "commentaire",
+						"label": "Commentaire",
+						"disabled": false,
+						"required": false,
+						"nb_cols": 12,
+						"id": "commentaire_5_1"
+					}
+				]
+			},
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
+                        "id":"update_button",
+                        "buttons":[
+                            {
+                                "type":"submit",
+                                "name":"form_submit",
+                                "label":"FORM_UPDATE",
+                                "class":"btn-primary"
+                            },
+                            {
+                                "type":"button",
+                                "name":"return_list",
+                                "label":"FORM_RETURN_LIST",
+                                "class":"btn-primary",
+                                "event":"setMode(\"search\")"
+                            }
+                        ]
+                    }
+                ]
+            }
+        ],
+        "initEvent": "",
+        "event":"sendSimpleForm()",
+        "tabs":{
+            "position":"top",
+            "list":[
+                {
+                    "label":"Tab 0",
+                    "elements":[
+                        "update_button",
+						"id_stationnement",
+						"id_programme",
+						"id_indicateur_stationnement",
+						"nb",
+						"prix_moyen_ttc",
+						"commentaire"
+                    ]
+                }
+            ]
+        }
+    },
+    "datasources":{
+		"datasource_2": {
+			"type": "web_service",
+			"dataType": "tableValue",
+			"name": "datasource_indicateur_stationnement",
+			"description": "",
+			"parameters": {
+				"filter": {
+					"relation": "AND",
+					"operators": []
+				},
+				"database": "suivi_prod_immo",
+				"schema": "prod_immo",
+				"table": "indicateur_stationnement"
+			},
+			"ressource_id": "vitis/genericquerys",
+			"id": "datasource_2"
+		},
+        "datasource_38":{
+            "type":"web_service",
+            "dataType":"tableValue",
+            "name":"programme_immobilier",
+            "description":"",
+            "parameters":{
+                "schema":"prod_immo",
+                "table":"programme_immobilier"
+            },
+            "ressource_id":"vitis/genericquerys",
+            "id":"datasource_38"
+        }
+    }
+}
diff --git a/src/module_suivi_prod_immo/module/lang/lang-fr.json b/src/module_suivi_prod_immo/module/lang/lang-fr.json
index a00c0741..e2394bbc 100644
--- a/src/module_suivi_prod_immo/module/lang/lang-fr.json
+++ b/src/module_suivi_prod_immo/module/lang/lang-fr.json
@@ -25,8 +25,53 @@
     "SUIVI_PROD_IMMO_OPERATION_OPERATION_PROGRAMMATION_TITLE_UPDATE" : "Programmation prévisionnelle - densités",
     "SUIVI_PROD_IMMO_OPERATION_OPERATION_FINANCIER_TITLE_UPDATE" : "Aspects financier - coûts",
     "SECTION_UPDATE_TITLE_SUIVI_PROD_IMMO_SAISIE_SUIVI_PROD_IMMO_OPERATION" : "Opération",
+    "SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_INSERT" : "Répartition des logements",
+    "SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_SEARCH" : "Répartition des logements",
+    "SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_UPDATE" : "Répartition des logements",
+    "SUIVI_PROD_IMMO_REPARTITION_TYPE_LOGEMENT_TITLE_DISPLAY" : "Répartition des logements",
+    "SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_INSERT" : "Synthèse du programme",
+    "SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_SEARCH" : "Synthèse du programme",
+    "SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_UPDATE" : "Synthèse du programme",
+    "SUIVI_PROD_IMMO_GRANULOMETRIE_TITLE_DISPLAY" : "Synthèse du programme",
+    "SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_INSERT" : "Logements familliaux en accession",
+    "SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_SEARCH" : "Logements familliaux en accession",
+    "SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_UPDATE" : "Logements familliaux en accession",
+    "SUIVI_PROD_IMMO_LOGEMENT_FAMILLIAUX_ACCESSION_TITLE_DISPLAY" : "Logements familliaux en accession",
+    "SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_INSERT" : "Profil des acheteurs-logements en accession libre",
+    "SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_SEARCH" : "Profil des acheteurs-logements en accession libre",
+    "SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_UPDATE" : "Profil des acheteurs-logements en accession libre",
+    "SUIVI_PROD_IMMO_PROFIL_ACHETEUR_ACCESSION_LIBRE_TITLE_DISPLAY" : "Profil des acheteurs-logements en accession libre",
+	"SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_INSERT" : "Logements familliaux en location",
+    "SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_SEARCH" : "Logements familliaux en location",
+    "SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_UPDATE" : "Logements familliaux en location",
+    "SUIVI_PROD_IMMO_COMPOSITION_LOGEMENT_FAMILLIAUX_LOCATION_CP_TITLE_DISPLAY" : "Logements familliaux en location",
+    "SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_INSERT" : "Habitat spécifique",
+    "SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_SEARCH" : "Habitat spécifique",
+    "SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_UPDATE" : "Habitat spécifique",
+    "SUIVI_PROD_IMMO_COMPOSITION_HABITAT_SPECIFIQUE_CP_TITLE_DISPLAY" : "Habitat spécifique",
+    "SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_INSERT" : "Activités / Industrie",
+    "SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_SEARCH" : "Activités / Industrie",
+    "SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_UPDATE" : "Activités / Industrie",
+    "SUIVI_PROD_IMMO_ACTIVITE_INDUSTRIE_TITLE_DISPLAY" : "Activités / Industrie",
+    "SUIVI_PROD_IMMO_BUREAU_TITLE_INSERT" : "Bureaux",
+    "SUIVI_PROD_IMMO_BUREAU_TITLE_SEARCH" : "Bureaux",
+    "SUIVI_PROD_IMMO_BUREAU_TITLE_UPDATE" : "Bureaux",
+    "SUIVI_PROD_IMMO_BUREAU_TITLE_DISPLAY" : "Bureaux",
+    "SUIVI_PROD_IMMO_EQUIPEMENT_STRUCTURE_TITLE_INSERT" : "Equipements de superstructures",
+    "SUIVI_PROD_IMMO_EQUIPEMENT_STRUCTURE_TITLE_SEARCH" : "Equipements de superstructures",
+    "SUIVI_PROD_IMMO_EQUIPEMENT_STRUCTURE_TITLE_UPDATE" : "Equipements de superstructures",
+    "SUIVI_PROD_IMMO_EQUIPEMENT_STRUCTURE_TITLE_DISPLAY" : "Equipements de superstructures",
+    "SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_INSERT" : "Hotellerie / Commerces / Services",
+    "SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_SEARCH" : "Hotellerie / Commerces / Services",
+    "SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_UPDATE" : "Hotellerie / Commerces / Services",
+    "SUIVI_PROD_IMMO_HOTEL_COMMERCE_SERVICE_TITLE_DISPLAY" : "Hotellerie / Commerces / Services",
+    "SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_INSERT" : "Places de stationnement",
+    "SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_SEARCH" : "Places de stationnement",
+    "SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_UPDATE" : "Places de stationnement",
+    "SUIVI_PROD_IMMO_STATIONNEMENT_TITLE_DISPLAY" : "Places de stationnement",
 
     "SUIVI_PROD_IMMO_ILOT_TITLE_INSERT" : "Îlot",
+    "SUIVI_PROD_IMMO_ILOT_TITLE_SEARCH" : "Îlot",
     "SUIVI_PROD_IMMO_ILOT_TITLE_UPDATE" : "Îlot n°{{id_ilot}}",
     "SUIVI_PROD_IMMO_ILOT_TITLE_DISPLAY" : "Îlot n°{{id_ilot}}",
     
@@ -35,6 +80,7 @@
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_ENCADREMENT_TITLE_DISPLAY" : "Encadrement du programme immobilier",
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_COUT_TITLE_DISPLAY" : "Coûts (indicateurs au programme immobilier)",
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_SYNTHESE_TITLE_DISPLAY" : "Synthèse - éléments principaux du programme immobilier (surfaces, charges foncières, prix de sortie, ...)",
+    "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_DISPLAY" : "Détails du programme immobilier - (surfaces, coûts, charges foncières, prix de sorties, ...)",
     "SECTION_DISPLAY_TITLE_SUIVI_PROD_IMMO_SAISIE_SUIVI_PROD_IMMO_PROGRAMME" : "Programme",
     "SUIVI_PROD_IMMO_PROGRAMME_TITLE_INSERT" : "Programme",
     "SUIVI_PROD_IMMO_PROGRAMME_TITLE_UPDATE" : "Programme n°{{id_programme}}",
@@ -42,5 +88,6 @@
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_ENCADREMENT_TITLE_UPDATE" : "Encadrement du programme immobilier",
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_COUT_TITLE_UPDATE" : "Coûts (indicateurs au programme immobilier)",
     "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_SYNTHESE_TITLE_UPDATE" : "Synthèse - éléments principaux du programme immobilier (surfaces, charges foncières, prix de sortie, ...)",
+    "SUIVI_PROD_IMMO_PROGRAMME_PROGRAMME_DETAILS_TITLE_UPDATE" : "Détails du programme immobilier - (surfaces, coûts, charges foncières, prix de sorties, ...)",
     "SECTION_UPDATE_TITLE_SUIVI_PROD_IMMO_SAISIE_SUIVI_PROD_IMMO_PROGRAMME" : "Programme"
 }
diff --git a/src/module_suivi_prod_immo/web_service/ws/Activite_industrie.class.inc b/src/module_suivi_prod_immo/web_service/ws/Activite_industrie.class.inc
new file mode 100644
index 00000000..ef6444fe
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Activite_industrie.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines activite_industrie for one Suivi_prod_immo
+ * 
+ */
+
+class Activite_industrie extends Suivi_prod_immo {
+
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about activite_industrie
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "activite_industrie", "id_activite_industrie");
+    }
+	
+    /**
+     * delete a activite_industrie
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'activite_industrie', 'id_activite_industrie', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_activite_industrie"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Activite_industries.class.inc b/src/module_suivi_prod_immo/web_service/ws/Activite_industries.class.inc
new file mode 100644
index 00000000..d18c3f71
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Activite_industries.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Activite_industries.class.inc
+ * \class Activite_industries
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Activite_industries php class
+ *
+ * This class defines Rest Api to Vitis Activite_industries
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Activite_industrie.class.inc';
+
+
+class Activite_industries extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/activite_industries",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/activite_industries")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Activite_industries",
+     *   description="Activite_industries about Activite_industries"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/activite_industries",
+     *   tags={"Activite_industries"},
+     *   summary="Get Activite_industries",
+     *   description="Request to get Activite_industries",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/activite_industries")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Activite_industries
+     * @return  Activite_industries
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "activite_industrie", "id_activite_industrie");
+		$aActivite_industries=json_decode($aReturn['sMessage'],true);
+		if(isset($aActivite_industries['activite_industries'])){
+			$aActivite_industriesData=$aActivite_industries['activite_industries'];
+			$sDataArrayName="activite_industries";
+		}elseif (isset($aActivite_industries['data'])){
+			$aActivite_industriesData=$aActivite_industries['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aActivite_industriesData)){
+			// error_log(print_r($aActivite_industries,true));
+			$aActivite_industries2=array();
+			foreach ($aActivite_industriesData as $aActivite_industrie){
+				$aActivite_industrie['indicateur_activite_industrie']= $this->getIndicateur_activite_industrie($aActivite_industrie['id_indicateur_activite_industrie']);
+				$aActivite_industries2[count($aActivite_industries2)]=$aActivite_industrie;
+			}
+			$sActivite_industries=json_encode(array($sDataArrayName=>$aActivite_industries2,"list_count"=>$aActivite_industries['list_count'],"total_row_number"=>$aActivite_industries['total_row_number'],"status"=>$aActivite_industries['status']));
+			//error_log($sActivite_industries);
+			return $sActivite_industries;
+		}
+    }
+
+    /**
+     *  get indicateur_activite_industrie of activite_industrie
+     */
+    function getIndicateur_activite_industrie($iIndicateurActivite_industrie) {
+        if(isset($iIndicateurActivite_industrie) and !is_null($iIndicateurActivite_industrie)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_activite_industrie'] = array('value' => $iIndicateurActivite_industrie, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_activite_industrie'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_activite_industrie"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/activite_industries",
+     *   tags={"activite_industrie"},
+     *   summary="Add activite_industrie",
+     *   description="Request to add activite_industrie",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="activite_industrie Response",
+     *         @SWG\Schema(ref="#/definitions/activite_industries")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert activite_industrie
+     * @return id of the activite_industrie created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceActivite_industrie']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_activite_industrie'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'activite_industrie', null, 'id_activite_industrie');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/activite_industries/{id_activite_industrie}",
+     *   tags={"activite_industrie"},
+     *   summary="update activite_industrie",
+     *   description="Request to update activite_industrie",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_activite_industrie",
+     *     in="path",
+     *     description="id of the activite_industrie",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/activite_industries")
+     *     )
+     *  )
+     */
+
+    /**
+     * update activite_industries
+     * @return id of activite_industries updated or error object if a activite_industries is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'activite_industrie', 'id_activite_industrie');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/activite_industries",
+     *   tags={"activite_industrie"},
+     *   summary="delete activite_industrie",
+     *   description="Request to delete activite_industrie",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the activite_industrie",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="activite_industrie Response",
+     *         @SWG\Schema(ref="#/definitions/activite_industries")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/activite_industries/{id_activite_industrie}",
+     *   tags={"activite_industrie"},
+     *   summary="delete activite_industrie",
+     *   description="Request to delete activite_industrie",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_activite_industrie",
+     *     in="path",
+     *     description="id of the activite_industrie",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/activite_industries")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete activite_industries
+     * @return id of activite_industries deleted or error object if a activite_industries is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'activite_industrie', 'id_activite_industrie');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Bureau.class.inc b/src/module_suivi_prod_immo/web_service/ws/Bureau.class.inc
new file mode 100644
index 00000000..d9692550
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Bureau.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines bureau for one Suivi_prod_immo
+ * 
+ */
+
+class Bureau extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about bureau
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "bureau", "id_bureau");
+    }
+	
+    /**
+     * delete a bureau
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'bureau', 'id_bureau', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_bureau"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Bureaus.class.inc b/src/module_suivi_prod_immo/web_service/ws/Bureaus.class.inc
new file mode 100644
index 00000000..97814dad
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Bureaus.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Bureaus.class.inc
+ * \class Bureaus
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Bureaus php class
+ *
+ * This class defines Rest Api to Vitis Bureaus
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Bureau.class.inc';
+
+
+class Bureaus extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/bureaus",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/bureaus")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Bureaus",
+     *   description="Bureaus about Bureaus"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/bureaus",
+     *   tags={"Bureaus"},
+     *   summary="Get Bureaus",
+     *   description="Request to get Bureaus",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/bureaus")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Bureaus
+     * @return  Bureaus
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "bureau", "id_bureau");
+		$aBureaus=json_decode($aReturn['sMessage'],true);
+		if(isset($aBureaus['bureaus'])){
+			$aBureausData=$aBureaus['bureaus'];
+			$sDataArrayName="bureaus";
+		}elseif (isset($aBureaus['data'])){
+			$aBureausData=$aBureaus['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aBureausData)){
+			// error_log(print_r($aBureaus,true));
+			$aBureaus2=array();
+			foreach ($aBureausData as $aBureau){
+				$aBureau['indicateur_bureau']= $this->getIndicateur_bureau($aBureau['id_indicateur_bureau']);
+				$aBureaus2[count($aBureaus2)]=$aBureau;
+			}
+			$sBureaus=json_encode(array($sDataArrayName=>$aBureaus2,"list_count"=>$aBureaus['list_count'],"total_row_number"=>$aBureaus['total_row_number'],"status"=>$aBureaus['status']));
+			//error_log($sBureaus);
+			return $sBureaus;
+		}
+    }
+
+    /**
+     *  get indicateur_bureau of bureau
+     */
+    function getIndicateur_bureau($iIndicateurBureau) {
+        if(isset($iIndicateurBureau) and !is_null($iIndicateurBureau)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_bureau'] = array('value' => $iIndicateurBureau, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_bureau'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_bureau"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/bureaus",
+     *   tags={"bureau"},
+     *   summary="Add bureau",
+     *   description="Request to add bureau",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="bureau Response",
+     *         @SWG\Schema(ref="#/definitions/bureaus")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert bureau
+     * @return id of the bureau created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceBureau']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_bureau'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'bureau', null, 'id_bureau');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/bureaus/{id_bureau}",
+     *   tags={"bureau"},
+     *   summary="update bureau",
+     *   description="Request to update bureau",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_bureau",
+     *     in="path",
+     *     description="id of the bureau",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/bureaus")
+     *     )
+     *  )
+     */
+
+    /**
+     * update bureaus
+     * @return id of bureaus updated or error object if a bureaus is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'bureau', 'id_bureau');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/bureaus",
+     *   tags={"bureau"},
+     *   summary="delete bureau",
+     *   description="Request to delete bureau",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the bureau",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="bureau Response",
+     *         @SWG\Schema(ref="#/definitions/bureaus")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/bureaus/{id_bureau}",
+     *   tags={"bureau"},
+     *   summary="delete bureau",
+     *   description="Request to delete bureau",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_bureau",
+     *     in="path",
+     *     description="id of the bureau",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/bureaus")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete bureaus
+     * @return id of bureaus deleted or error object if a bureaus is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'bureau', 'id_bureau');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cp.class.inc b/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cp.class.inc
new file mode 100644
index 00000000..857cb65f
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cp.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines composition_habitat_specifique_cp for one Suivi_prod_immo
+ * 
+ */
+
+class Composition_habitat_specifique_cp extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about composition_habitat_specifique_cp
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "composition_habitat_specifique_cp", "id_composition_habitat_specifique");
+    }
+	
+    /**
+     * delete a composition_habitat_specifique_cp
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'composition_habitat_specifique_cp', 'id_composition_habitat_specifique', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_composition_habitat_specifique"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cps.class.inc b/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cps.class.inc
new file mode 100644
index 00000000..0ab8c346
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Composition_habitat_specifique_cps.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Composition_habitat_specifique_cps.class.inc
+ * \class Composition_habitat_specifique_cps
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Composition_habitat_specifique_cps php class
+ *
+ * This class defines Rest Api to Vitis Composition_habitat_specifique_cps
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Composition_habitat_specifique_cp.class.inc';
+
+
+class Composition_habitat_specifique_cps extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/composition_habitat_specifique_cps",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Composition_habitat_specifique_cps",
+     *   description="Composition_habitat_specifique_cps about Composition_habitat_specifique_cps"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/composition_habitat_specifique_cps",
+     *   tags={"Composition_habitat_specifique_cps"},
+     *   summary="Get Composition_habitat_specifique_cps",
+     *   description="Request to get Composition_habitat_specifique_cps",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Composition_habitat_specifique_cps
+     * @return  Composition_habitat_specifique_cps
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "composition_habitat_specifique_cp", "id_composition_habitat_specifique");
+		$aComposition_habitat_specifique_cps=json_decode($aReturn['sMessage'],true);
+		if(isset($aComposition_habitat_specifique_cps['composition_habitat_specifique_cps'])){
+			$aComposition_habitat_specifique_cpsData=$aComposition_habitat_specifique_cps['composition_habitat_specifique_cps'];
+			$sDataArrayName="composition_habitat_specifique_cps";
+		}elseif (isset($aComposition_habitat_specifique_cps['data'])){
+			$aComposition_habitat_specifique_cpsData=$aComposition_habitat_specifique_cps['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aComposition_habitat_specifique_cpsData)){
+			// error_log(print_r($aComposition_habitat_specifique_cps,true));
+			$aComposition_habitat_specifique_cps2=array();
+			foreach ($aComposition_habitat_specifique_cpsData as $aComposition_habitat_specifique_cp){
+				$aComposition_habitat_specifique_cp['indicateur_habitat_specifique']= $this->getIndicateur_habitat_specifique($aComposition_habitat_specifique_cp['id_indicateur_habitat_specifique']);
+				$aComposition_habitat_specifique_cps2[count($aComposition_habitat_specifique_cps2)]=$aComposition_habitat_specifique_cp;
+			}
+			$sComposition_habitat_specifique_cps=json_encode(array($sDataArrayName=>$aComposition_habitat_specifique_cps2,"list_count"=>$aComposition_habitat_specifique_cps['list_count'],"total_row_number"=>$aComposition_habitat_specifique_cps['total_row_number'],"status"=>$aComposition_habitat_specifique_cps['status']));
+			//error_log($sComposition_habitat_specifique_cps);
+			return $sComposition_habitat_specifique_cps;
+		}
+    }
+
+    /**
+     *  get indicateur_habitat_specifique of composition_habitat_specifique_cp
+     */
+    function getIndicateur_habitat_specifique($iIndicateurHabitatSpecifique) {
+        if(isset($iIndicateurHabitatSpecifique) and !is_null($iIndicateurHabitatSpecifique)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_habitat_specifique'] = array('value' => $iIndicateurHabitatSpecifique, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_habitat_specifique'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_habitat_specifique"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/composition_habitat_specifique_cps",
+     *   tags={"composition_habitat_specifique_cp"},
+     *   summary="Add composition_habitat_specifique_cp",
+     *   description="Request to add composition_habitat_specifique_cp",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="composition_habitat_specifique_cp Response",
+     *         @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert composition_habitat_specifique_cp
+     * @return id of the composition_habitat_specifique_cp created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceComposition_habitat_specifique_cp']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_composition_habitat_specifique'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'composition_habitat_specifique_cp', null, 'id_composition_habitat_specifique');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/composition_habitat_specifique_cps/{id_composition_habitat_specifique}",
+     *   tags={"composition_habitat_specifique_cp"},
+     *   summary="update composition_habitat_specifique_cp",
+     *   description="Request to update composition_habitat_specifique_cp",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_composition_habitat_specifique",
+     *     in="path",
+     *     description="id of the composition_habitat_specifique_cp",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * update composition_habitat_specifique_cps
+     * @return id of composition_habitat_specifique_cps updated or error object if a composition_habitat_specifique_cps is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'composition_habitat_specifique_cp', 'id_composition_habitat_specifique');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/composition_habitat_specifique_cps",
+     *   tags={"composition_habitat_specifique_cp"},
+     *   summary="delete composition_habitat_specifique_cp",
+     *   description="Request to delete composition_habitat_specifique_cp",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the composition_habitat_specifique_cp",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="composition_habitat_specifique_cp Response",
+     *         @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/composition_habitat_specifique_cps/{id_composition_habitat_specifique}",
+     *   tags={"composition_habitat_specifique_cp"},
+     *   summary="delete composition_habitat_specifique_cp",
+     *   description="Request to delete composition_habitat_specifique_cp",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_composition_habitat_specifique",
+     *     in="path",
+     *     description="id of the composition_habitat_specifique_cp",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/composition_habitat_specifique_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete composition_habitat_specifique_cps
+     * @return id of composition_habitat_specifique_cps deleted or error object if a composition_habitat_specifique_cps is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'composition_habitat_specifique_cp', 'id_composition_habitat_specifique');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cp.class.inc b/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cp.class.inc
new file mode 100644
index 00000000..e6ec02ee
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cp.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines composition_logement_familliaux_location_cp for one Suivi_prod_immo
+ * 
+ */
+
+class Composition_logement_familliaux_location_cp extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about composition_logement_familliaux_location_cp
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "composition_logement_familliaux_location_cp", "id_composition_logement_familliaux_location");
+    }
+	
+    /**
+     * delete a composition_logement_familliaux_location_cp
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'composition_logement_familliaux_location_cp', 'id_composition_logement_familliaux_location', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_composition_logement_familliaux_location"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cps.class.inc b/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cps.class.inc
new file mode 100644
index 00000000..207c9501
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Composition_logement_familliaux_location_cps.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Composition_logement_familliaux_location_cps.class.inc
+ * \class Composition_logement_familliaux_location_cps
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Composition_logement_familliaux_location_cps php class
+ *
+ * This class defines Rest Api to Vitis Composition_logement_familliaux_location_cps
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Composition_logement_familliaux_location_cp.class.inc';
+
+
+class Composition_logement_familliaux_location_cps extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/composition_logement_familliaux_location_cps",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Composition_logement_familliaux_location_cps",
+     *   description="Composition_logement_familliaux_location_cps about Composition_logement_familliaux_location_cps"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/composition_logement_familliaux_location_cps",
+     *   tags={"Composition_logement_familliaux_location_cps"},
+     *   summary="Get Composition_logement_familliaux_location_cps",
+     *   description="Request to get Composition_logement_familliaux_location_cps",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Composition_logement_familliaux_location_cps
+     * @return  Composition_logement_familliaux_location_cps
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "composition_logement_familliaux_location_cp", "id_composition_logement_familliaux_location");
+		$aComposition_logement_familliaux_location_cps=json_decode($aReturn['sMessage'],true);
+		if(isset($aComposition_logement_familliaux_location_cps['composition_logement_familliaux_location_cps'])){
+			$aComposition_logement_familliaux_location_cpsData=$aComposition_logement_familliaux_location_cps['composition_logement_familliaux_location_cps'];
+			$sDataArrayName="composition_logement_familliaux_location_cps";
+		}elseif (isset($aComposition_logement_familliaux_location_cps['data'])){
+			$aComposition_logement_familliaux_location_cpsData=$aComposition_logement_familliaux_location_cps['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aComposition_logement_familliaux_location_cpsData)){
+			// error_log(print_r($aComposition_logement_familliaux_location_cps,true));
+			$aComposition_logement_familliaux_location_cps2=array();
+			foreach ($aComposition_logement_familliaux_location_cpsData as $aComposition_logement_familliaux_location_cp){
+				$aComposition_logement_familliaux_location_cp['indicateur_logement_familliaux_location']= $this->getIndicateur_logement_familliaux_location($aComposition_logement_familliaux_location_cp['id_indicateur_logement_familliaux_location']);
+				$aComposition_logement_familliaux_location_cps2[count($aComposition_logement_familliaux_location_cps2)]=$aComposition_logement_familliaux_location_cp;
+			}
+			$sComposition_logement_familliaux_location_cps=json_encode(array($sDataArrayName=>$aComposition_logement_familliaux_location_cps2,"list_count"=>$aComposition_logement_familliaux_location_cps['list_count'],"total_row_number"=>$aComposition_logement_familliaux_location_cps['total_row_number'],"status"=>$aComposition_logement_familliaux_location_cps['status']));
+			//error_log($sComposition_logement_familliaux_location_cps);
+			return $sComposition_logement_familliaux_location_cps;
+		}
+    }
+
+    /**
+     *  get indicateur_logement_familliaux_location of composition_logement_familliaux_location_cp
+     */
+    function getIndicateur_logement_familliaux_location($iIndicateurLogementFamilliauxLocation) {
+        if(isset($iIndicateurLogementFamilliauxLocation) and !is_null($iIndicateurLogementFamilliauxLocation)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_logement_familliaux_location'] = array('value' => $iIndicateurLogementFamilliauxLocation, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_logement_familliaux_location'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_logement_familliaux_location"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/composition_logement_familliaux_location_cps",
+     *   tags={"composition_logement_familliaux_location_cp"},
+     *   summary="Add composition_logement_familliaux_location_cp",
+     *   description="Request to add composition_logement_familliaux_location_cp",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="composition_logement_familliaux_location_cp Response",
+     *         @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert composition_logement_familliaux_location_cp
+     * @return id of the composition_logement_familliaux_location_cp created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceComposition_logement_familliaux_location_cp']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_composition_logement_familliaux_location'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'composition_logement_familliaux_location_cp', null, 'id_composition_logement_familliaux_location');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/composition_logement_familliaux_location_cps/{id_composition_logement_familliaux_location}",
+     *   tags={"composition_logement_familliaux_location_cp"},
+     *   summary="update composition_logement_familliaux_location_cp",
+     *   description="Request to update composition_logement_familliaux_location_cp",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_composition_logement_familliaux_location",
+     *     in="path",
+     *     description="id of the composition_logement_familliaux_location_cp",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * update composition_logement_familliaux_location_cps
+     * @return id of composition_logement_familliaux_location_cps updated or error object if a composition_logement_familliaux_location_cps is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'composition_logement_familliaux_location_cp', 'id_composition_logement_familliaux_location');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/composition_logement_familliaux_location_cps",
+     *   tags={"composition_logement_familliaux_location_cp"},
+     *   summary="delete composition_logement_familliaux_location_cp",
+     *   description="Request to delete composition_logement_familliaux_location_cp",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the composition_logement_familliaux_location_cp",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="composition_logement_familliaux_location_cp Response",
+     *         @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/composition_logement_familliaux_location_cps/{id_composition_logement_familliaux_location}",
+     *   tags={"composition_logement_familliaux_location_cp"},
+     *   summary="delete composition_logement_familliaux_location_cp",
+     *   description="Request to delete composition_logement_familliaux_location_cp",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_composition_logement_familliaux_location",
+     *     in="path",
+     *     description="id of the composition_logement_familliaux_location_cp",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/composition_logement_familliaux_location_cps")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete composition_logement_familliaux_location_cps
+     * @return id of composition_logement_familliaux_location_cps deleted or error object if a composition_logement_familliaux_location_cps is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'composition_logement_familliaux_location_cp', 'id_composition_logement_familliaux_location');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Equipement_structure.class.inc b/src/module_suivi_prod_immo/web_service/ws/Equipement_structure.class.inc
new file mode 100644
index 00000000..821ec11f
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Equipement_structure.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines equipement_structure for one Suivi_prod_immo
+ * 
+ */
+
+class Equipement_structure extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about equipement_structure
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "equipement_structure", "id_equipement_structure");
+    }
+	
+    /**
+     * delete a equipement_structure
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'equipement_structure', 'id_equipement_structure', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        }else{
+            $this->aFields["id_equipement_structure"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Equipement_structures.class.inc b/src/module_suivi_prod_immo/web_service/ws/Equipement_structures.class.inc
new file mode 100644
index 00000000..3935b739
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Equipement_structures.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Equipement_structures.class.inc
+ * \class Equipement_structures
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Equipement_structures php class
+ *
+ * This class defines Rest Api to Vitis Equipement_structures
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Equipement_structure.class.inc';
+
+
+class Equipement_structures extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/equipement_structures",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/equipement_structures")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Equipement_structures",
+     *   description="Equipement_structures about Equipement_structures"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/equipement_structures",
+     *   tags={"Equipement_structures"},
+     *   summary="Get Equipement_structures",
+     *   description="Request to get Equipement_structures",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/equipement_structures")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Equipement_structures
+     * @return  Equipement_structures
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "equipement_structure", "id_equipement_structure");
+		$aEquipement_structures=json_decode($aReturn['sMessage'],true);
+		if(isset($aEquipement_structures['equipement_structures'])){
+			$aEquipement_structuresData=$aEquipement_structures['equipement_structures'];
+			$sDataArrayName="equipement_structures";
+		}elseif (isset($aEquipement_structures['data'])){
+			$aEquipement_structuresData=$aEquipement_structures['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aEquipement_structuresData)){
+			// error_log(print_r($aEquipement_structures,true));
+			$aEquipement_structures2=array();
+			foreach ($aEquipement_structuresData as $aEquipement_structure){
+				$aEquipement_structure['indicateur_equipement_structure']= $this->getIndicateur_equipement_structure($aEquipement_structure['id_indicateur_equipement_structure']);
+				$aEquipement_structures2[count($aEquipement_structures2)]=$aEquipement_structure;
+			}
+			$sEquipement_structures=json_encode(array($sDataArrayName=>$aEquipement_structures2,"list_count"=>$aEquipement_structures['list_count'],"total_row_number"=>$aEquipement_structures['total_row_number'],"status"=>$aEquipement_structures['status']));
+			//error_log($sEquipement_structures);
+			return $sEquipement_structures;
+		}
+    }
+
+    /**
+     *  get indicateur_equipement_structure of equipement_structure
+     */
+    function getIndicateur_equipement_structure($iIndicateurEquipement_structure) {
+        if(isset($iIndicateurEquipement_structure) and !is_null($iIndicateurEquipement_structure)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_equipement_structure'] = array('value' => $iIndicateurEquipement_structure, 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_equipement_structure'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_equipement_structure"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/equipement_structures",
+     *   tags={"equipement_structure"},
+     *   summary="Add equipement_structure",
+     *   description="Request to add equipement_structure",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="equipement_structure Response",
+     *         @SWG\Schema(ref="#/definitions/equipement_structures")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert equipement_structure
+     * @return id of the equipement_structure created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceEquipement_structure']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_equipement_structure'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'equipement_structure', null, 'id_equipement_structure');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/equipement_structures/{id_equipement_structure}",
+     *   tags={"equipement_structure"},
+     *   summary="update equipement_structure",
+     *   description="Request to update equipement_structure",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_equipement_structure",
+     *     in="path",
+     *     description="id of the equipement_structure",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/equipement_structures")
+     *     )
+     *  )
+     */
+
+    /**
+     * update equipement_structures
+     * @return id of equipement_structures updated or error object if a equipement_structures is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'equipement_structure', 'id_equipement_structure');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/equipement_structures",
+     *   tags={"equipement_structure"},
+     *   summary="delete equipement_structure",
+     *   description="Request to delete equipement_structure",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the equipement_structure",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="equipement_structure Response",
+     *         @SWG\Schema(ref="#/definitions/equipement_structures")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/equipement_structures/{id_equipement_structure}",
+     *   tags={"equipement_structure"},
+     *   summary="delete equipement_structure",
+     *   description="Request to delete equipement_structure",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_equipement_structure",
+     *     in="path",
+     *     description="id of the equipement_structure",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/equipement_structures")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete equipement_structures
+     * @return id of equipement_structures deleted or error object if a equipement_structures is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'equipement_structure', 'id_equipement_structure');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Granulometrie.class.inc b/src/module_suivi_prod_immo/web_service/ws/Granulometrie.class.inc
new file mode 100644
index 00000000..661e7847
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Granulometrie.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines granulometrie for one Suivi_prod_immo
+ * 
+ */
+
+class Granulometrie extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about granulometrie
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "granulometrie", "id_granulometrie");
+    }
+	
+    /**
+     * delete a granulometrie
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'granulometrie', 'id_granulometrie', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_granulometrie"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Granulometries.class.inc b/src/module_suivi_prod_immo/web_service/ws/Granulometries.class.inc
new file mode 100644
index 00000000..d08af232
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Granulometries.class.inc
@@ -0,0 +1,331 @@
+<?php
+
+/**
+ * \file Granulometries.class.inc
+ * \class Granulometries
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Granulometries php class
+ *
+ * This class defines Rest Api to Vitis Granulometries
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Granulometrie.class.inc';
+
+
+class Granulometries extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/granulometries",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/granulometries")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Granulometries",
+     *   description="Granulometries about Granulometries"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/granulometries",
+     *   tags={"Granulometries"},
+     *   summary="Get Granulometries",
+     *   description="Request to get Granulometries",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/granulometries")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Granulometries
+     * @return  Granulometries
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "granulometrie", "id_granulometrie");
+		$aGranulometries=json_decode($aReturn['sMessage'],true);
+		if(isset($aGranulometries['granulometries'])){
+			$aGranulometriesData=$aGranulometries['granulometries'];
+			$sDataArrayName="granulometries";
+		}elseif (isset($aGranulometries['data'])){
+			$aGranulometriesData=$aGranulometries['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aGranulometriesData)){
+			// error_log(print_r($aGranulometries,true));
+			$aGranulometries2=array();
+			foreach ($aGranulometriesData as $aGranulometrie){
+				$aGranulometrie['composition_programme']= $this->getCompositionProgramme($aGranulometrie['code_composition_programme']);
+				$aGranulometrie['type_granulometrie']= $this->getTypeGranulometrie($aGranulometrie['code_type_granulometrie']);
+				$aGranulometries2[count($aGranulometries2)]=$aGranulometrie;
+			}
+			$sGranulometries=json_encode(array($sDataArrayName=>$aGranulometries2,"list_count"=>$aGranulometries['list_count'],"total_row_number"=>$aGranulometries['total_row_number'],"status"=>$aGranulometries['status']));
+			//error_log($sGranulometries);
+			return $sGranulometries;
+		}
+    }
+
+    /**
+     *  get composition_programme of granulometrie
+     */
+    function getCompositionProgramme($sCodeCompositionProgramme) {
+        if(isset($sCodeCompositionProgramme) and !is_null($sCodeCompositionProgramme)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['code_composition_programme'] = array('value' => $sCodeCompositionProgramme, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getCompositionProgramme'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["composition_programme"];
+		}else{
+			return null;
+		}
+    }
+
+    /**
+     *  get type_granulometrie of granulometrie
+     */
+    function getTypeGranulometrie($sCodeTypeGranulometrie) {
+        if(isset($sCodeTypeGranulometrie) and !is_null($sCodeTypeGranulometrie)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['code_type_granulometrie'] = array('value' => $sCodeTypeGranulometrie, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getTypeGranulometrie'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["type_granulometrie"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/granulometries",
+     *   tags={"granulométrie"},
+     *   summary="Add granulometrie",
+     *   description="Request to add granulométrie",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="granulometrie Response",
+     *         @SWG\Schema(ref="#/definitions/granulometries")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert granulometrie
+     * @return id of the granulometrie created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceGranulometrie']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_granulometrie'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'granulometrie', null, 'id_granulometrie');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/granulometries/{id_granulometrie}",
+     *   tags={"granulométrie"},
+     *   summary="update granulométrie",
+     *   description="Request to update granulométrie",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_granulometrie",
+     *     in="path",
+     *     description="id of the granulométrie",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/granulometries")
+     *     )
+     *  )
+     */
+
+    /**
+     * update granulometries
+     * @return id of granulometries updated or error object if a granulometries is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'granulometrie', 'id_granulometrie');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/granulometries",
+     *   tags={"granulométrie"},
+     *   summary="delete granulométrie",
+     *   description="Request to delete granulométrie",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the granulométrie",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="granulométrie Response",
+     *         @SWG\Schema(ref="#/definitions/granulometries")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/granulometries/{id_granulometrie}",
+     *   tags={"granulométrie"},
+     *   summary="delete granulométrie",
+     *   description="Request to delete granulométrie",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_granulometrie",
+     *     in="path",
+     *     description="id of the granulométrie",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/granulometries")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete granulometries
+     * @return id of granulometries deleted or error object if a granulometries is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'granulometrie', 'id_granulometrie');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_service.class.inc b/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_service.class.inc
new file mode 100644
index 00000000..f0c94b3e
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_service.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines hotel_commerce_service for one Suivi_prod_immo
+ * 
+ */
+
+class Hotel_commerce_service extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about hotel_commerce_service
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "hotel_commerce_service", "id_hotel_commerce_service");
+    }
+	
+    /**
+     * delete a hotel_commerce_service
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'hotel_commerce_service', 'id_hotel_commerce_service', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_hotel_commerce_service"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_services.class.inc b/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_services.class.inc
new file mode 100644
index 00000000..eab05ae7
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Hotel_commerce_services.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Hotel_commerce_services.class.inc
+ * \class Hotel_commerce_services
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Hotel_commerce_services php class
+ *
+ * This class defines Rest Api to Vitis Hotel_commerce_services
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Hotel_commerce_service.class.inc';
+
+
+class Hotel_commerce_services extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/hotel_commerce_services",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Hotel_commerce_services",
+     *   description="Hotel_commerce_services about Hotel_commerce_services"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/hotel_commerce_services",
+     *   tags={"Hotel_commerce_services"},
+     *   summary="Get Hotel_commerce_services",
+     *   description="Request to get Hotel_commerce_services",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Hotel_commerce_services
+     * @return  Hotel_commerce_services
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "hotel_commerce_service", "id_hotel_commerce_service");
+		$aHotel_commerce_services=json_decode($aReturn['sMessage'],true);
+		if(isset($aHotel_commerce_services['hotel_commerce_services'])){
+			$aHotel_commerce_servicesData=$aHotel_commerce_services['hotel_commerce_services'];
+			$sDataArrayName="hotel_commerce_services";
+		}elseif (isset($aHotel_commerce_services['data'])){
+			$aHotel_commerce_servicesData=$aHotel_commerce_services['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aHotel_commerce_servicesData)){
+			// error_log(print_r($aHotel_commerce_services,true));
+			$aHotel_commerce_services2=array();
+			foreach ($aHotel_commerce_servicesData as $aHotel_commerce_service){
+				$aHotel_commerce_service['indicateur_hotel_commerce_service']= $this->getIndicateur_hotel_commerce_service($aHotel_commerce_service['id_indicateur_hotel_commerce_service']);
+				$aHotel_commerce_services2[count($aHotel_commerce_services2)]=$aHotel_commerce_service;
+			}
+			$sHotel_commerce_services=json_encode(array($sDataArrayName=>$aHotel_commerce_services2,"list_count"=>$aHotel_commerce_services['list_count'],"total_row_number"=>$aHotel_commerce_services['total_row_number'],"status"=>$aHotel_commerce_services['status']));
+			//error_log($sHotel_commerce_services);
+			return $sHotel_commerce_services;
+		}
+    }
+
+    /**
+     *  get indicateur_hotel_commerce_service of hotel_commerce_service
+     */
+    function getIndicateur_hotel_commerce_service($iIndicateurHotel_commerce_service) {
+        if(isset($iIndicateurHotel_commerce_service) and !is_null($iIndicateurHotel_commerce_service)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_hotel_commerce_service'] = array('value' => $iIndicateurHotel_commerce_service, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_hotel_commerce_service'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_hotel_commerce_service"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/hotel_commerce_services",
+     *   tags={"hotel_commerce_service"},
+     *   summary="Add hotel_commerce_service",
+     *   description="Request to add hotel_commerce_service",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="hotel_commerce_service Response",
+     *         @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert hotel_commerce_service
+     * @return id of the hotel_commerce_service created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceHotel_commerce_service']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_hotel_commerce_service'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'hotel_commerce_service', null, 'id_hotel_commerce_service');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/hotel_commerce_services/{id_hotel_commerce_service}",
+     *   tags={"hotel_commerce_service"},
+     *   summary="update hotel_commerce_service",
+     *   description="Request to update hotel_commerce_service",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_hotel_commerce_service",
+     *     in="path",
+     *     description="id of the hotel_commerce_service",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *     )
+     *  )
+     */
+
+    /**
+     * update hotel_commerce_services
+     * @return id of hotel_commerce_services updated or error object if a hotel_commerce_services is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'hotel_commerce_service', 'id_hotel_commerce_service');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/hotel_commerce_services",
+     *   tags={"hotel_commerce_service"},
+     *   summary="delete hotel_commerce_service",
+     *   description="Request to delete hotel_commerce_service",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the hotel_commerce_service",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="hotel_commerce_service Response",
+     *         @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/hotel_commerce_services/{id_hotel_commerce_service}",
+     *   tags={"hotel_commerce_service"},
+     *   summary="delete hotel_commerce_service",
+     *   description="Request to delete hotel_commerce_service",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_hotel_commerce_service",
+     *     in="path",
+     *     description="id of the hotel_commerce_service",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/hotel_commerce_services")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete hotel_commerce_services
+     * @return id of hotel_commerce_services deleted or error object if a hotel_commerce_services is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'hotel_commerce_service', 'id_hotel_commerce_service');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Ilots.class.inc b/src/module_suivi_prod_immo/web_service/ws/Ilots.class.inc
index 113033e1..11e4c973 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Ilots.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Ilots.class.inc
@@ -119,12 +119,60 @@ class Ilots extends Suivi_prod_immo {
      * get Ilots
      * @return  Ilots
      */
-    function GET() {
-        $aReturn = $this->genericGet('prod_immo', "ilot", "id_ilot");
-        $sMessage = $aReturn['sMessage'];
-        return $sMessage;
+    function GET(){
+		if($this->setRestriction()){
+			$aReturn = $this->genericGet('prod_immo', "ilot", "id_ilot");
+			$sMessage = $aReturn['sMessage'];
+			return $sMessage;
+		}else{
+			// si pas d'autorisation, on retourne une liste vide
+			return json_encode(array("list_count"=>0,"total_row_number"=>0,"status"=>1));
+		}
     }
 
+
+    /**
+     *  set filter restriction for user connected
+     */
+	function setRestriction(){
+        require $this->sRessourcesFile;
+		$aParams = array();
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdate'], $aParams);
+		if($oPDOresult->rowCount()==1){
+			// le user existe dans la table de restriction
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			$oPDOresult2 = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdateIdOperation'], $aParams);
+			if($oPDOresult2->rowCount()>0){
+				// il y a un ou plusieurs ID pour le user, on filtre
+				$aID=array();
+				while ($aIdOperation = $this->oConnection->oBd->ligneSuivante($oPDOresult2)){
+					$aID[] = $aIdOperation["id_operation"];
+				}
+				$oPDOresult2 = $this->oConnection->oBd->fermeResultat();
+				// injection du filtre
+				if (isset($this->aValues['filter'])){
+					// il existe déjà un filtre
+					$aFilter=json_decode($this->aValues['filter'],true);
+					$aOperators=$aFilter['operators'];
+					$aOperators[]=array("column"=>"id_operation","compare_operator"=>"IN","value"=>$aID);
+					$aFilter['operators']=$aOperators;
+					$this->aValues['filter']=json_encode($aFilter);
+				}else{
+					// il n'y a pas de filtre, on le crée
+					$this->aValues['filter']=json_encode(array('relation'=>'AND','operators'=>array(array("column"=>"id_operation","compare_operator"=>"IN","value"=>$aID))));
+				}
+				return true;
+			}else{
+				return false;
+			}
+		}else{
+			// le user n'existe pas dans la table de restriction, on affiche rien
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			error_log("Aucunes opérations autorisées en saisie, ajouter l'utilisateur dans la table prod_immo.user_restriction .");
+			return false;
+		}
+	}
     /**
      * @SWG\Post(path="/ilots",
      *   tags={"Ilots"},
diff --git a/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accession.class.inc b/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accession.class.inc
new file mode 100644
index 00000000..0ac51c26
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accession.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines logement_familliaux_accession for one Suivi_prod_immo
+ * 
+ */
+
+class Logement_familliaux_accession extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about logement_familliaux_accession
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "logement_familliaux_accession", "id_logement_familliaux_accession");
+    }
+	
+    /**
+     * delete a logement_familliaux_accession
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'logement_familliaux_accession', 'id_logement_familliaux_accession', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_logement_familliaux_accession"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accessions.class.inc b/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accessions.class.inc
new file mode 100644
index 00000000..10b4b6d2
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Logement_familliaux_accessions.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Logement_familliaux_accessions.class.inc
+ * \class Logement_familliaux_accessions
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Logement_familliaux_accessions php class
+ *
+ * This class defines Rest Api to Vitis Logement_familliaux_accessions
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Logement_familliaux_accession.class.inc';
+
+
+class Logement_familliaux_accessions extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/logement_familliaux_accessions",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Logement_familliaux_accessions",
+     *   description="Logement_familliaux_accessions about Logement_familliaux_accessions"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/logement_familliaux_accessions",
+     *   tags={"Logement_familliaux_accessions"},
+     *   summary="Get Logement_familliaux_accessions",
+     *   description="Request to get Logement_familliaux_accessions",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Logement_familliaux_accessions
+     * @return  Logement_familliaux_accessions
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "logement_familliaux_accession", "id_logement_familliaux_accession");
+		$aLogement_familliaux_accessions=json_decode($aReturn['sMessage'],true);
+		if(isset($aLogement_familliaux_accessions['logement_familliaux_accessions'])){
+			$aLogement_familliaux_accessionsData=$aLogement_familliaux_accessions['logement_familliaux_accessions'];
+			$sDataArrayName="logement_familliaux_accessions";
+		}elseif (isset($aLogement_familliaux_accessions['data'])){
+			$aLogement_familliaux_accessionsData=$aLogement_familliaux_accessions['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aLogement_familliaux_accessionsData)){
+			// error_log(print_r($aLogement_familliaux_accessions,true));
+			$aLogement_familliaux_accessions2=array();
+			foreach ($aLogement_familliaux_accessionsData as $aLogement_familliaux_accession){
+				$aLogement_familliaux_accession['indicateur_logement_familliaux_accession']= $this->getIndicateur_logement_familliaux_accession($aLogement_familliaux_accession['id_indicateur_logement_familliaux_accession']);
+				$aLogement_familliaux_accessions2[count($aLogement_familliaux_accessions2)]=$aLogement_familliaux_accession;
+			}
+			$sLogement_familliaux_accessions=json_encode(array($sDataArrayName=>$aLogement_familliaux_accessions2,"list_count"=>$aLogement_familliaux_accessions['list_count'],"total_row_number"=>$aLogement_familliaux_accessions['total_row_number'],"status"=>$aLogement_familliaux_accessions['status']));
+			//error_log($sLogement_familliaux_accessions);
+			return $sLogement_familliaux_accessions;
+		}
+    }
+
+    /**
+     *  get indicateur_logement_familliaux_accession of logement_familliaux_accession
+     */
+    function getIndicateur_logement_familliaux_accession($sCodeTypeGranulometrie) {
+        if(isset($sCodeTypeGranulometrie) and !is_null($sCodeTypeGranulometrie)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_logement_familliaux_accession'] = array('value' => $sCodeTypeGranulometrie, 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_logement_familliaux_accession'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_logement_familliaux_accession"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/logement_familliaux_accessions",
+     *   tags={"logement familliaux en accession"},
+     *   summary="Add logement_familliaux_accession",
+     *   description="Request to add logement familliaux en accession",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="logement_familliaux_accession Response",
+     *         @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert logement_familliaux_accession
+     * @return id of the logement_familliaux_accession created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceLogement_familliaux_accession']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_logement_familliaux_accession'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'logement_familliaux_accession', null, 'id_logement_familliaux_accession');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/logement_familliaux_accessions/{id_logement_familliaux_accession}",
+     *   tags={"logement familliaux en accession"},
+     *   summary="update logement familliaux en accession",
+     *   description="Request to update logement familliaux en accession",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_logement_familliaux_accession",
+     *     in="path",
+     *     description="id of the logement familliaux en accession",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *     )
+     *  )
+     */
+
+    /**
+     * update logement_familliaux_accessions
+     * @return id of logement_familliaux_accessions updated or error object if a logement_familliaux_accessions is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'logement_familliaux_accession', 'id_logement_familliaux_accession');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/logement_familliaux_accessions",
+     *   tags={"logement familliaux en accession"},
+     *   summary="delete logement familliaux en accession",
+     *   description="Request to delete logement familliaux en accession",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the logement familliaux en accession",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="logement familliaux en accession Response",
+     *         @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/logement_familliaux_accessions/{id_logement_familliaux_accession}",
+     *   tags={"logement familliaux en accession"},
+     *   summary="delete logement familliaux en accession",
+     *   description="Request to delete logement familliaux en accession",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_logement_familliaux_accession",
+     *     in="path",
+     *     description="id of the logement familliaux en accession",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/logement_familliaux_accessions")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete logement_familliaux_accessions
+     * @return id of logement_familliaux_accessions deleted or error object if a logement_familliaux_accessions is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'logement_familliaux_accession', 'id_logement_familliaux_accession');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Operation.class.inc b/src/module_suivi_prod_immo/web_service/ws/Operation.class.inc
index 6a5cd28f..bfdd2d49 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Operation.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Operation.class.inc
@@ -39,8 +39,8 @@ class Operation extends Suivi_prod_immo {
     function GET() {
         $this->aFields = $this->getFields('prod_immo', "operation", "id_operation");
 		$this->getCommunes();
-		$this->getPerimetre();
 		$this->getCTM();
+		$this->getPerimetres();
 		$this->getModeFinancement();
 		$this->getAvancement();
 		$this->getContexteUrbain();
@@ -100,6 +100,30 @@ class Operation extends Suivi_prod_immo {
 		$this->aFields['ctms'] = $sListCTMId;
 		$this->aFields['ctms_label'] = implode(',', $aListCTMNom);
     }
+	
+    /**
+     *  get perimetres of operation
+     */
+    function getPerimetres() {
+        require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$aParams['id_operation'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getOperationPerimetre'], $aParams);
+		$sListPerimetreId = "";
+		$aListPerimetreNom = array();
+		while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+			if ($sListPerimetreId == "") {
+				$sListPerimetreId = $aLigne["id_perimetre"];
+			} else {
+				$sListPerimetreId .= "|" . $aLigne["id_perimetre"];
+			}
+			$aListPerimetreNom[] = $aLigne["nom_perimetre"];
+		}
+		$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		$this->aFields['perimetres'] = $sListPerimetreId;
+		$this->aFields['perimetres_label'] = implode(',', $aListPerimetreNom);
+		
+    }
 
     /**
 	 *  get Modes financement of operation
@@ -127,7 +151,7 @@ class Operation extends Suivi_prod_immo {
     /**
      *  get perimetre projet urbain of programme
      */
-    function getPerimetre() {
+    /*function getPerimetre() {
         if(isset($this->aFields['id_perimetre']) and !is_null($this->aFields['id_perimetre'])){
 			require $this->sRessourcesFile;
 			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
@@ -137,7 +161,7 @@ class Operation extends Suivi_prod_immo {
 			$this->aFields['nom_perimetre'] = $aLigne["nom_perimetre"]." (".$aLigne["type_perimetre"].")";
 			$oPDOresult = $this->oConnection->oBd->fermeResultat();
 		}
-    }
+    }*/
 
     /**
      *  get avancement of programme
diff --git a/src/module_suivi_prod_immo/web_service/ws/OperationLastUpdate.class.inc b/src/module_suivi_prod_immo/web_service/ws/OperationLastUpdate.class.inc
index bc87f2e1..4e81b74d 100644
--- a/src/module_suivi_prod_immo/web_service/ws/OperationLastUpdate.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/OperationLastUpdate.class.inc
@@ -46,8 +46,8 @@ class OperationLastUpdate extends Suivi_prod_immo {
     /**
      * @SWG\Get(path="/operationlastupdate/{iIdOperation}/{sAttributeName}",
      *   tags={"Parcelle"},
-     *   summary="Get the tooltip "last update" content",
-     *   description="Request to get tooltip "last update" content",
+     *   summary="Get the tooltip 'last update' content",
+     *   description="Request to get tooltip 'last update' content",
      *   operationId="GET",
      *   produces={"application/json"},
      * @SWG\Parameter(
@@ -69,7 +69,7 @@ class OperationLastUpdate extends Suivi_prod_immo {
      *     in="path",
      *     description="sAttributeName",
      *     required=true,
-     *     type="sting"
+     *     type="string"
      *   ),
      *   @SWG\Response(
      *         response=200,
diff --git a/src/module_suivi_prod_immo/web_service/ws/Operations.class.inc b/src/module_suivi_prod_immo/web_service/ws/Operations.class.inc
index 2a6a16d3..75252785 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Operations.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Operations.class.inc
@@ -122,17 +122,25 @@ class Operations extends Suivi_prod_immo {
      * @return  Operations
      */
     function GET() {
-        $aReturn = $this->genericGet('prod_immo', "v_operation", "id_operation");
-        $sMessage = $aReturn['sMessage'];
-		$aOperations=json_decode($aReturn['sMessage'],true);
-		$aOperations2=array();
-		foreach ($aOperations['operations'] as $aOperation){
-			unset($aOperation['geom']);
-			$aOperation['nom_commune']= $this->getCommunes($aOperation['id_operation']);
-			$aOperations2[count($aOperations2)]=$aOperation;
+		if($this->setRestriction()){
+			$aReturn = $this->genericGet('prod_immo', "v_operation", "id_operation");
+			$aOperations=json_decode($aReturn['sMessage'],true);
+			if(isset($aOperations['operations'])){
+				$aOperations2=array();
+				foreach ($aOperations['operations'] as $aOperation){
+					unset($aOperation['geom']);
+					$aOperation['nom_commune']= $this->getCommunes($aOperation['id_operation']);
+					$aOperations2[count($aOperations2)]=$aOperation;
+				}
+				$sOperations=json_encode(array("operations"=>$aOperations2,"list_count"=>$aOperations['list_count'],"total_row_number"=>$aOperations['total_row_number'],"status"=>$aOperations['status']));
+			}else{
+				$sOperations=$aReturn['sMessage'];
+			}
+			return $sOperations;
+		}else{
+			// si pas d'autorisation, on retourne une liste vide
+			return json_encode(array("list_count"=>0,"total_row_number"=>0,"status"=>1));
 		}
-		$sOperations=json_encode(array("operations"=>$aOperations2,"list_count"=>$aOperations['list_count'],"total_row_number"=>$aOperations['total_row_number'],"status"=>$aOperations['status']));
-        return $sOperations;
     }
 	
     /**
@@ -149,9 +157,51 @@ class Operations extends Suivi_prod_immo {
 		}
 		$oPDOresult = $this->oConnection->oBd->fermeResultat();
 		return implode(',', $aListCommuneNom);
-		
     }
 
+    /**
+     *  set filter restriction for user connected
+     */
+	function setRestriction(){
+        require $this->sRessourcesFile;
+		$aParams = array();
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdate'], $aParams);
+		if($oPDOresult->rowCount()==1){
+			// le user existe dans la table de restriction
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			$oPDOresult2 = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdateIdOperation'], $aParams);
+			if($oPDOresult2->rowCount()>0){
+				// il y a un ou plusieurs ID pour le user, on filtre
+				$aID=array();
+				while ($aIdOperation = $this->oConnection->oBd->ligneSuivante($oPDOresult2)){
+					$aID[] = $aIdOperation["id_operation"];
+				}
+				$oPDOresult2 = $this->oConnection->oBd->fermeResultat();
+				// injection du filtre
+				if (isset($this->aValues['filter'])){
+					// il existe déjà un filtre
+					$aFilter=json_decode($this->aValues['filter'],true);
+					$aOperators=$aFilter['operators'];
+					$aOperators[]=array("column"=>"id_operation","compare_operator"=>"IN","value"=>$aID);
+					$aFilter['operators']=$aOperators;
+					$this->aValues['filter']=json_encode($aFilter);
+				}else{
+					// il n'y a pas de filtre, on le crée
+					$this->aValues['filter']=json_encode(array('relation'=>'AND','operators'=>array(array("column"=>"id_operation","compare_operator"=>"IN","value"=>$aID))));
+				}
+				return true;
+			}else{
+				return false;
+			}
+		}else{
+			// le user n'existe pas dans la table de restriction, on affiche rien
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			error_log("Aucunes opérations autorisées en saisie, ajouter l'utilisateur dans la table prod_immo.user_restriction .");
+			return false;
+		}
+	}
+
     /**
      * @SWG\Post(path="/operations",
      *   tags={"Operations"},
@@ -229,7 +279,8 @@ class Operations extends Suivi_prod_immo {
 		if ($aReturn['sStatus'] == 1) {
             $aXmlRacineAttribute['status'] = 1;
             $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
-            $oOperation = new Operation($this->aPath, $this->aValues, $this->aProperties, $this->oConnection);
+            // ces deux lignes ne servent à rien - tester sans !
+			$oOperation = new Operation($this->aPath, $this->aValues, $this->aProperties, $this->oConnection);
             $oOperation->GET();
             //***** communes *****//
             // Le paramètre "communes" est passé dans la requête ?
@@ -264,6 +315,22 @@ class Operations extends Suivi_prod_immo {
                     }
                 }
             }
+            //***** Périmètres *****//
+            // Le paramètre "perimetres" est passé dans la requête ?
+            if ($this->aValues['perimetres'] !== NULL) {
+				$this->oConnection->oBd->delete('prod_immo', 'operation_perimetre', 'id_operation', $this->aValues["my_vitis_id"]);
+                if (!empty($this->aValues['perimetres'])) {
+                    require $this->sRessourcesFile;
+                    $aPerimetres = explode('|', $this->aValues['perimetres']);
+                    foreach ($aPerimetres as $iPerimetreId) {
+                        $aParams = array();
+                        $aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+                        $aParams['id_perimetre'] = array('value' => $iPerimetreId, 'type' => 'number');
+                        $aParams['id_operation'] = array('value' => $this->aValues["my_vitis_id"], 'type' => 'number');
+                        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertOperationPerimetre'], $aParams);
+                    }
+                }
+            }
             //***** Modes financement *****//
             // Le paramètre "mode_financements" est passé dans la requête ?
 			//error_log($this->aValues['mode_financements']);
@@ -286,7 +353,7 @@ class Operations extends Suivi_prod_immo {
         }
         return $sMessage;
 		
-        return $aReturn['sMessage'];
+        // return $aReturn['sMessage'];
     }
 
     /**
diff --git a/src/module_suivi_prod_immo/web_service/ws/Perimetre.class.inc b/src/module_suivi_prod_immo/web_service/ws/Perimetre.class.inc
new file mode 100644
index 00000000..d843f093
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Perimetre.class.inc
@@ -0,0 +1,45 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines perimetre for one Suivi_prod_immo
+ * 
+ */
+
+class Perimetre extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about perimetre
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "perimetre", "id_perimetre");
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Perimetres.class.inc b/src/module_suivi_prod_immo/web_service/ws/Perimetres.class.inc
new file mode 100644
index 00000000..1912b200
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Perimetres.class.inc
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * \file Perimetres.class.inc
+ * \class Perimetres
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Perimetres php class
+ *
+ * This class defines Rest Api to Vitis Perimetres
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Perimetre.class.inc';
+
+
+class Perimetres extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/perimetres",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/perimetres")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Perimetres",
+     *   description="Perimetres about Perimetres"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/perimetres",
+     *   tags={"Perimetres"},
+     *   summary="Get Perimetres",
+     *   description="Request to get Perimetres",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/perimetres")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Perimetres
+     * @return  Perimetres
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "perimetre", "id_perimetre");
+        $sMessage = $aReturn['sMessage'];
+        return $sMessage;
+    }
+
+    
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libre.class.inc b/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libre.class.inc
new file mode 100644
index 00000000..6a2ff113
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libre.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines profil_acheteur_accession_libre for one Suivi_prod_immo
+ * 
+ */
+
+class Profil_acheteur_accession_libre extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about profil_acheteur_accession_libre
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "profil_acheteur_accession_libre", "id_profil_acheteur_accession_libre");
+    }
+	
+    /**
+     * delete a profil_acheteur_accession_libre
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'profil_acheteur_accession_libre', 'id_profil_acheteur_accession_libre', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_profil_acheteur_accession_libre"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libres.class.inc b/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libres.class.inc
new file mode 100644
index 00000000..08327f6d
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Profil_acheteur_accession_libres.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Profil_acheteur_accession_libres.class.inc
+ * \class Profil_acheteur_accession_libres
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Profil_acheteur_accession_libres php class
+ *
+ * This class defines Rest Api to Vitis Profil_acheteur_accession_libres
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Profil_acheteur_accession_libre.class.inc';
+
+
+class Profil_acheteur_accession_libres extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/profil_acheteur_accession_libres",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Profil_acheteur_accession_libres",
+     *   description="Profil_acheteur_accession_libres about Profil_acheteur_accession_libres"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/profil_acheteur_accession_libres",
+     *   tags={"Profil_acheteur_accession_libres"},
+     *   summary="Get Profil_acheteur_accession_libres",
+     *   description="Request to get Profil_acheteur_accession_libres",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Profil_acheteur_accession_libres
+     * @return  Profil_acheteur_accession_libres
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "profil_acheteur_accession_libre", "id_profil_acheteur_accession_libre");
+		$aProfil_acheteur_accession_libres=json_decode($aReturn['sMessage'],true);
+		if(isset($aProfil_acheteur_accession_libres['profil_acheteur_accession_libres'])){
+			$aProfil_acheteur_accession_libresData=$aProfil_acheteur_accession_libres['profil_acheteur_accession_libres'];
+			$sDataArrayName="profil_acheteur_accession_libres";
+		}elseif (isset($aProfil_acheteur_accession_libres['data'])){
+			$aProfil_acheteur_accession_libresData=$aProfil_acheteur_accession_libres['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aProfil_acheteur_accession_libresData)){
+			// error_log(print_r($aProfil_acheteur_accession_libres,true));
+			$aProfil_acheteur_accession_libres2=array();
+			foreach ($aProfil_acheteur_accession_libresData as $aProfil_acheteur_accession_libre){
+				$aProfil_acheteur_accession_libre['type_acheteur_accession_libre']= $this->getType_acheteur_accession_libre($aProfil_acheteur_accession_libre['id_type_acheteur_accession_libre']);
+				$aProfil_acheteur_accession_libres2[count($aProfil_acheteur_accession_libres2)]=$aProfil_acheteur_accession_libre;
+			}
+			$sProfil_acheteur_accession_libres=json_encode(array($sDataArrayName=>$aProfil_acheteur_accession_libres2,"list_count"=>$aProfil_acheteur_accession_libres['list_count'],"total_row_number"=>$aProfil_acheteur_accession_libres['total_row_number'],"status"=>$aProfil_acheteur_accession_libres['status']));
+			//error_log($sProfil_acheteur_accession_libres);
+			return $sProfil_acheteur_accession_libres;
+		}
+    }
+
+    /**
+     *  get type_acheteur_accession_libre of profil_acheteur_accession_libre
+     */
+    function getType_acheteur_accession_libre($sCodeTypeProfil_acheteur_accession_libre) {
+        if(isset($sCodeTypeProfil_acheteur_accession_libre) and !is_null($sCodeTypeProfil_acheteur_accession_libre)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_type_acheteur_accession_libre'] = array('value' => $sCodeTypeProfil_acheteur_accession_libre, 'type' => 'number');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getType_acheteur_accession_libre'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["type_acheteur_accession_libre"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/profil_acheteur_accession_libres",
+     *   tags={"profil acheteur accession libre"},
+     *   summary="Add profil_acheteur_accession_libre",
+     *   description="Request to add profil acheteur accession libre",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="profil_acheteur_accession_libre Response",
+     *         @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert profil_acheteur_accession_libre
+     * @return id of the profil_acheteur_accession_libre created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceProfil_acheteur_accession_libre']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_profil_acheteur_accession_libre'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'profil_acheteur_accession_libre', null, 'id_profil_acheteur_accession_libre');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/profil_acheteur_accession_libres/{id_profil_acheteur_accession_libre}",
+     *   tags={"profil acheteur accession libre"},
+     *   summary="update profil acheteur accession libre",
+     *   description="Request to update profil acheteur accession libre",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_profil_acheteur_accession_libre",
+     *     in="path",
+     *     description="id of the profil acheteur accession libre",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *     )
+     *  )
+     */
+
+    /**
+     * update profil_acheteur_accession_libres
+     * @return id of profil_acheteur_accession_libres updated or error object if a profil_acheteur_accession_libres is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'profil_acheteur_accession_libre', 'id_profil_acheteur_accession_libre');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/profil_acheteur_accession_libres",
+     *   tags={"profil acheteur accession libre"},
+     *   summary="delete profil acheteur accession libre",
+     *   description="Request to delete profil acheteur accession libre",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the profil acheteur accession libre",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="profil acheteur accession libre Response",
+     *         @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/profil_acheteur_accession_libres/{id_profil_acheteur_accession_libre}",
+     *   tags={"profil acheteur accession libre"},
+     *   summary="delete profil acheteur accession libre",
+     *   description="Request to delete profil acheteur accession libre",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_profil_acheteur_accession_libre",
+     *     in="path",
+     *     description="id of the profil acheteur accession libre",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/profil_acheteur_accession_libres")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete profil_acheteur_accession_libres
+     * @return id of profil_acheteur_accession_libres deleted or error object if a profil_acheteur_accession_libres is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'profil_acheteur_accession_libre', 'id_profil_acheteur_accession_libre');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Programme.class.inc b/src/module_suivi_prod_immo/web_service/ws/Programme.class.inc
index 67f3d6ba..5fd111e4 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Programme.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Programme.class.inc
@@ -16,7 +16,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  */
 
 class Programme extends Suivi_prod_immo {
-	
+
     public $oError;
 
     /**
@@ -42,6 +42,8 @@ class Programme extends Suivi_prod_immo {
 		$this->getCommune();
 		$this->getTypeOperateur();
 		$this->getModeConsultation();
+		$this->getLogementFamLocation();
+		$this->getHabitatSpecifique();
 		// Date de mise à jour
 		$date_mise_a_jour = new DateTime($this->aFields['date_mise_a_jour']);
 		$this->aFields['date_mise_a_jour'] = $date_mise_a_jour->format('d/m/Y');
@@ -115,6 +117,40 @@ class Programme extends Suivi_prod_immo {
 			$oPDOresult = $this->oConnection->oBd->fermeResultat();
 		}
     }
+
+    /**
+     *  get logement fammilliaux location of programme
+     */
+	function getLogementFamLocation(){
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$aParams['id_programme'] = array('value' => $this->aFields['id_programme'], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getLogementFamLocation'], $aParams);
+		if($oPDOresult!=false){
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['logement_familliaux_location_nom_bailleur'] = $aLigne["nom_bailleur"];
+			$this->aFields['logement_familliaux_location_nom_investisseur'] = $aLigne["nom_investisseur"];
+			$this->aFields['id_logement_familliaux_location'] = $aLigne["id_logement_familliaux_location"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+	}
+
+    /**
+     *  get habitat spécifique of programme
+     */
+	function getHabitatSpecifique(){
+		require $this->sRessourcesFile;
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$aParams['id_programme'] = array('value' => $this->aFields['id_programme'], 'type' => 'number');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getHabitatSpecifique'], $aParams);
+		if($oPDOresult!=false){
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$this->aFields['habitat_specifique_nom_bailleur'] = $aLigne["nom_bailleur"];
+			$this->aFields['habitat_specifique_nom_gestionnaire'] = $aLigne["nom_gestionnaire"];
+			$this->aFields['id_habitat_specifique'] = $aLigne["id_habitat_specifique"];
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+		}
+	}
 	
 	function replaceOuiNonLes2($sValue){
 		switch ($sValue) {
diff --git a/src/module_suivi_prod_immo/web_service/ws/ProgrammeLastUpdate.class.inc b/src/module_suivi_prod_immo/web_service/ws/ProgrammeLastUpdate.class.inc
index 59c0640f..17dcde91 100644
--- a/src/module_suivi_prod_immo/web_service/ws/ProgrammeLastUpdate.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/ProgrammeLastUpdate.class.inc
@@ -45,10 +45,9 @@ class ProgrammeLastUpdate extends Suivi_prod_immo {
 
     /**
      * @SWG\Get(path="/programmelastupdate/{iIdProgramme}/{sAttributeName}",
-     *   tags={"Parcelle"},
-     *   summary="Get the tooltip "last update" content",
-     *   description="Request to get tooltip "last update" content",
-     *   programmeId="GET",
+     *   tags={"Programme"},
+     *   summary="Get the tooltip 'last update' content",
+     *   description="Request to get tooltip 'last update' content",
      *   produces={"application/json"},
      * @SWG\Parameter(
      *     name="token",
@@ -69,7 +68,7 @@ class ProgrammeLastUpdate extends Suivi_prod_immo {
      *     in="path",
      *     description="sAttributeName",
      *     required=true,
-     *     type="sting"
+     *     type="string"
      *   ),
      *   @SWG\Response(
      *         response=200,
diff --git a/src/module_suivi_prod_immo/web_service/ws/Programmes.class.inc b/src/module_suivi_prod_immo/web_service/ws/Programmes.class.inc
index 1a70c95d..886f3561 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Programmes.class.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Programmes.class.inc
@@ -120,20 +120,23 @@ class Programmes extends Suivi_prod_immo {
      * @return  Programmes
      */
     function GET() {
-        $aReturn = $this->genericGet('prod_immo', "programme_immobilier", "id_programme");
-        $sMessage = $aReturn['sMessage'];
-		$aProgrammes=json_decode($aReturn['sMessage'],true);
-		$aProgrammes2=array();
-		foreach ($aProgrammes['programmes'] as $aProgramme){
-			unset($aProgramme['geom']);
-			$aProgramme['nom_commune']= $this->getCommune($aProgramme['id_commune']);
-			$aProgramme['nom_ilot']= $this->getIlot($aProgramme['id_ilot']);
-			$aProgramme['nom_operation']= $this->getOperation($aProgramme['id_ilot']);
-			$aProgrammes2[count($aProgrammes2)]=$aProgramme;
+		if($this->setRestriction()){
+			$aReturn = $this->genericGet('prod_immo', "programme_immobilier", "id_programme");
+			$aProgrammes=json_decode($aReturn['sMessage'],true);
+			$aProgrammes2=array();
+			foreach ($aProgrammes['programmes'] as $aProgramme){
+				unset($aProgramme['geom']);
+				$aProgramme['nom_commune']= $this->getCommune($aProgramme['id_commune']);
+				$aProgramme['nom_ilot']= $this->getIlot($aProgramme['id_ilot']);
+				$aProgramme['nom_operation']= $this->getOperation($aProgramme['id_ilot']);
+				$aProgrammes2[count($aProgrammes2)]=$aProgramme;
+			}
+			$sProgrammes=json_encode(array("programmes"=>$aProgrammes2,"list_count"=>$aProgrammes['list_count'],"total_row_number"=>$aProgrammes['total_row_number'],"status"=>$aProgrammes['status']));
+			return $sProgrammes;
+		}else{
+			// si pas d'autorisation, on retourne une liste vide
+			return json_encode(array("list_count"=>0,"total_row_number"=>0,"status"=>1));
 		}
-		$sProgrammes=json_encode(array("programmes"=>$aProgrammes2,"list_count"=>$aProgrammes['list_count'],"total_row_number"=>$aProgrammes['total_row_number'],"status"=>$aProgrammes['status']));
-		//error_log($sProgrammes);
-        return $sProgrammes;
     }
 	
     /**
@@ -187,10 +190,53 @@ class Programmes extends Suivi_prod_immo {
 		}
     }
 
+    /**
+     *  set filter restriction for user connected
+     */
+	function setRestriction(){
+        require $this->sRessourcesFile;
+		$aParams = array();
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdate'], $aParams);
+		if($oPDOresult->rowCount()==1){
+			// le user existe dans la table de restriction
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			$oPDOresult2 = $this->oConnection->oBd->executeWithParams($aSql['getRestrictionUpdateIdIlot'], $aParams);
+			if($oPDOresult2->rowCount()>0){
+				// il y a un ou plusieurs ID pour le user, on filtre
+				$aID=array();
+				while ($aIdIlot=$this->oConnection->oBd->ligneSuivante($oPDOresult2)){
+					$aID[]=$aIdIlot["id_ilot"];
+				}
+				$oPDOresult2=$this->oConnection->oBd->fermeResultat();
+				// injection du filtre
+				if (isset($this->aValues['filter'])){
+					// il existe déjà un filtre
+					$aFilter=json_decode($this->aValues['filter'],true);
+					$aOperators=$aFilter['operators'];
+					$aOperators[]=array("column"=>"id_ilot","compare_operator"=>"IN","value"=>$aID);
+					$aFilter['operators']=$aOperators;
+					$this->aValues['filter']=json_encode($aFilter);
+				}else{
+					// il n'y a pas de filtre, on le crée
+					$this->aValues['filter']=json_encode(array('relation'=>'AND','operators'=>array(array("column"=>"id_ilot","compare_operator"=>"IN","value"=>$aID))));
+				}
+				return true;
+			}else{
+				return false;
+			}
+		}else{
+			// le user n'existe pas dans la table de restriction, on affiche rien
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			error_log("Aucunes opérations autorisées en saisie, ajouter l'utilisateur dans la table prod_immo.user_restriction .");
+			return false;
+		}
+	}
+
     /**
      * @SWG\Post(path="/programmes",
      *   tags={"Programmes"},
-     *   summary="Add traitement",
+     *   summary="Add programme",
      *   description="Request to add Programmes",
      *   operationId="POST",
      *   produces={"application/xml", "application/json"},
@@ -203,15 +249,15 @@ class Programmes extends Suivi_prod_immo {
      *   ),
      *   @SWG\Response(
      *         response=200,
-     *         description="traitement Response",
+     *         description= Response",
      *         @SWG\Schema(ref="#/definitions/programmes")
      *     )
      *  )
      */
 
     /**
-     * insert traitement
-     * @return id of the traitement created
+     * insert programme
+     * @return id of the programme created
      */
     function POST() {
         //$this->aValues['create'] = $_SESSION["ses_Login"];
@@ -255,10 +301,53 @@ class Programmes extends Suivi_prod_immo {
      * @return id of programmes updated or error object if a programmes is not updated
      */
     function PUT() {
-        /*if (empty($this->aValues['maj']))
-            $this->aValues['maj'] = $_SESSION["ses_Login"];
-        if (empty($this->aValues['maj_date']))
-            $this->aValues['maj_date'] = date('Y-m-d');*/
+		require $this->sRessourcesFile;
+		$oConnection=$this->oConnection->oBd;
+		$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+		$aParams['id_programme'] = array('value' => $this->aValues['my_vitis_id'], 'type' => 'number');
+		if(isset($this->aValues['logement_familliaux_location_nom_bailleur'])){
+			$aParams['nom_bailleur'] = array('value' => $this->aValues['logement_familliaux_location_nom_bailleur'], 'type' => 'string');
+			$oPDOresult = $oConnection->executeWithParams($aSql['setLogementFamilliauxLocationNomBailleur'], $aParams);
+			if (!$oPDOresult){
+				$aError=$oConnection->errorInfo();
+				error_log($aError[2]);
+			}
+			$oPDOresult = $oConnection->fermeResultat();
+			unset($this->aValues['logement_familliaux_location_nom_bailleur']);
+			unset($aParams['nom_bailleur']);
+		}
+		if(isset($this->aValues['logement_familliaux_location_nom_investisseur'])){
+			$aParams['nom_investisseur'] = array('value' => $this->aValues['logement_familliaux_location_nom_investisseur'], 'type' => 'string');
+			$oPDOresult = $oConnection->executeWithParams($aSql['setLogementFamilliauxLocationNomInvestisseur'], $aParams);
+			if (!$oPDOresult){
+				$aError=$oConnection->errorInfo();
+				error_log($aError[2]);
+			}
+			$oPDOresult = $oConnection->fermeResultat();
+			unset($this->aValues['logement_familliaux_location_nom_investisseur']);
+			unset($aParams['nom_investisseur']);
+		}
+		if(isset($this->aValues['habitat_specifique_nom_bailleur'])){
+			$aParams['nom_bailleur'] = array('value' => $this->aValues['habitat_specifique_nom_bailleur'], 'type' => 'string');
+			$oPDOresult = $oConnection->executeWithParams($aSql['setHabitatSpecifiqueNomBailleur'], $aParams);
+			if (!$oPDOresult){
+				$aError=$oConnection->errorInfo();
+				error_log($aError[2]);
+			}
+			$oPDOresult = $oConnection->fermeResultat();
+			unset($this->aValues['habitat_specifique_nom_bailleur']);
+			unset($aParams['nom_bailleur']);
+		}
+		if(isset($this->aValues['habitat_specifique_nom_gestionnaire'])){
+			$aParams['nom_gestionnaire'] = array('value' => $this->aValues['habitat_specifique_nom_gestionnaire'], 'type' => 'string');
+			$oPDOresult = $oConnection->executeWithParams($aSql['setHabitatSpecifiqueNomGestionnaire'], $aParams);
+			if (!$oPDOresult){
+				$aError=$oConnection->errorInfo();
+				error_log($aError[2]);
+			}
+			$oPDOresult = $oConnection->fermeResultat();
+			unset($this->aValues['habitat_specifique_nom_gestionnaire']);
+		}
         $aReturn = $this->genericPut('prod_immo', 'programme_immobilier', 'id_programme');
         return $aReturn['sMessage'];
     }
@@ -280,13 +369,13 @@ class Programmes extends Suivi_prod_immo {
      * * @SWG\Parameter(
      *     name="idList",
      *     in="query",
-     *     description="id of the traitement",
+     *     description="id of the programme",
      *     required=true,
      *     type="string"
      *   ),
      * @SWG\Response(
      *         response=200,
-     *         description="traitement Response",
+     *         description="Response",
      *         @SWG\Schema(ref="#/definitions/programmes")
      *     )
      *  )
@@ -301,7 +390,7 @@ class Programmes extends Suivi_prod_immo {
      *   @SWG\Parameter(
      *     name="token",
      *     in="query",
-     *     description="Traitement token",
+     *     description="token",
      *     required=true,
      *     type="string"
      *   ),
diff --git a/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logement.class.inc b/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logement.class.inc
new file mode 100644
index 00000000..c6ea5739
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logement.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines repartition_type_logement for one Suivi_prod_immo
+ * 
+ */
+
+class Repartition_type_logement extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about repartition_type_logement
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "repartition_type_logement", "id_repartition_type_logement");
+    }
+	
+    /**
+     * delete a repartition_type_logement
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'repartition_type_logement', 'id_repartition_type_logement', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_repartition_type_logement"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logements.class.inc b/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logements.class.inc
new file mode 100644
index 00000000..4e3af863
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Repartition_type_logements.class.inc
@@ -0,0 +1,328 @@
+<?php
+
+/**
+ * \file Repartition_type_logements.class.inc
+ * \class Repartition_type_logements
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Repartition_type_logements php class
+ *
+ * This class defines Rest Api to Vitis Repartition_type_logements
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Repartition_type_logement.class.inc';
+
+
+class Repartition_type_logements extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/repartition_type_logements",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Repartition_type_logements",
+     *   description="Repartition_type_logements about Repartition_type_logements"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/repartition_type_logements",
+     *   tags={"Repartition_type_logements"},
+     *   summary="Get Repartition_type_logements",
+     *   description="Request to get Repartition_type_logements",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Repartition_type_logements
+     * @return  Repartition_type_logements
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "repartition_type_logement", "id_repartition_type_logement");
+        // $sMessage = $aReturn['sMessage'];
+		$aRepartitionTypeLogements=json_decode($aReturn['sMessage'],true);
+		if(isset($aRepartitionTypeLogements['repartition_type_logements'])){
+			$aRepartitionTypeLogementsData=$aRepartitionTypeLogements['repartition_type_logements'];
+			$sDataArrayName="repartition_type_logements";
+		}else{
+			$aRepartitionTypeLogementsData=$aRepartitionTypeLogements['data'];
+			$sDataArrayName="data";
+		}
+		// error_log(print_r($aRepartitionTypeLogements,true));
+		$aRepartitionTypeLogements2=array();
+		foreach ($aRepartitionTypeLogementsData as $aRepartitionTypeLogement){
+			$aRepartitionTypeLogement['repartition']= $this->getRepartition($aRepartitionTypeLogement['code_repartition']);
+			$aRepartitionTypeLogement['type_logement']= $this->getTypeLogement($aRepartitionTypeLogement['code_type_logement']);
+			$aRepartitionTypeLogements2[count($aRepartitionTypeLogements2)]=$aRepartitionTypeLogement;
+		}
+		$sRepartitionTypeLogements=json_encode(array($sDataArrayName=>$aRepartitionTypeLogements2,"list_count"=>$aRepartitionTypeLogements['list_count'],"total_row_number"=>$aRepartitionTypeLogements['total_row_number'],"status"=>$aRepartitionTypeLogements['status']));
+		//error_log($sRepartitionTypeLogements);
+        return $sRepartitionTypeLogements;
+    }
+
+    /**
+     *  get repartition of repartition_type_logement
+     */
+    function getRepartition($sCodeRepartition) {
+        if(isset($sCodeRepartition) and !is_null($sCodeRepartition)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['code_repartition'] = array('value' => $sCodeRepartition, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRepartition'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["repartition"];
+		}else{
+			return null;
+		}
+    }
+
+    /**
+     *  get type_logement of repartition_type_logement
+     */
+    function getTypeLogement($sCodeTypeLogement) {
+        if(isset($sCodeTypeLogement) and !is_null($sCodeTypeLogement)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['code_type_logement'] = array('value' => $sCodeTypeLogement, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getTypeLogement'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["type_logement"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/repartition_type_logements",
+     *   tags={"Repartition type logements"},
+     *   summary="Add repartition_type_logement",
+     *   description="Request to add Repartition type logements",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="repartition_type_logement Response",
+     *         @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert repartition_type_logement
+     * @return id of the repartition_type_logement created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceRepartition_type_logement']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_repartition_type_logement'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'repartition_type_logement', null, 'id_repartition_type_logement');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/repartition_type_logements/{id_repartition_type_logement}",
+     *   tags={"Répartitions"},
+     *   summary="update Répartitions",
+     *   description="Request to update Répartitions",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_repartition_type_logement",
+     *     in="path",
+     *     description="id of the Répartitions",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *     )
+     *  )
+     */
+
+    /**
+     * update repartition_type_logements
+     * @return id of repartition_type_logements updated or error object if a repartition_type_logements is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'repartition_type_logement', 'id_repartition_type_logement');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/repartition_type_logements",
+     *   tags={"Répartitions"},
+     *   summary="delete Répartitions",
+     *   description="Request to delete Répartitions",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the traitement",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/repartition_type_logements/{id_repartition_type_logement}",
+     *   tags={"Répartitions"},
+     *   summary="delete Répartitions",
+     *   description="Request to delete Répartitions",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_repartition_type_logement",
+     *     in="path",
+     *     description="id of the Répartitions",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/repartition_type_logements")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete repartition_type_logements
+     * @return id of repartition_type_logements deleted or error object if a repartition_type_logements is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'repartition_type_logement', 'id_repartition_type_logement');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Stationnement.class.inc b/src/module_suivi_prod_immo/web_service/ws/Stationnement.class.inc
new file mode 100644
index 00000000..e19fc6ef
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Stationnement.class.inc
@@ -0,0 +1,57 @@
+<?php
+
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once __DIR__ . '/../../../vitis/vas/rest/class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file Suivi_prod_immo.class.inc
+ * \class Suivi_prod_immo
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Suivi_prod_immo php class
+ *
+ * This class defines stationnement for one Suivi_prod_immo
+ * 
+ */
+
+class Stationnement extends Suivi_prod_immo {
+	
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $this->aProperties);
+    }
+
+    /**
+     * get informations about stationnement
+     */
+    function GET() {
+        $this->aFields = $this->getFields('prod_immo', "stationnement", "id_stationnement");
+    }
+	
+    /**
+     * delete a stationnement
+     */
+    function DELETE() {
+        $this->oConnection->oBd->delete('prod_immo', 'stationnement', 'id_stationnement', $this->aValues["my_vitis_id"], 'integer');
+        if ($this->oConnection->oBd->enErreur()) {
+            $this->oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+        } else {
+            $this->aFields["id_stationnement"] = $this->aValues["my_vitis_id"];
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Stationnements.class.inc b/src/module_suivi_prod_immo/web_service/ws/Stationnements.class.inc
new file mode 100644
index 00000000..20aa38ca
--- /dev/null
+++ b/src/module_suivi_prod_immo/web_service/ws/Stationnements.class.inc
@@ -0,0 +1,313 @@
+<?php
+
+/**
+ * \file Stationnements.class.inc
+ * \class Stationnements
+ *
+ * \author Fabien Marty <f.marty@urbalyon.org>.
+ *
+ * 	\brief This file contains the Stationnements php class
+ *
+ * This class defines Rest Api to Vitis Stationnements
+ * 
+ */
+require_once __DIR__ . '/Suivi_prod_immo.class.inc';
+require_once 'Stationnement.class.inc';
+
+
+class Stationnements extends Suivi_prod_immo {
+    /**
+     * @SWG\Definition(
+     *   definition="/stationnements",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/stationnements")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Stationnements",
+     *   description="Stationnements about Stationnements"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     */
+    function __construct($aPath, $aValues, $properties) {
+        $this->aValues = $aValues;
+        $this->aPath = $aPath;
+        $this->aProperties = $properties;
+        $this->oConnection = new Connection($this->aValues, $properties);
+    }
+
+    /**
+     * @SWG\Get(path="/stationnements",
+     *   tags={"Stationnements"},
+     *   summary="Get Stationnements",
+     *   description="Request to get Stationnements",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="traitement Response",
+     *         @SWG\Schema(ref="#/definitions/stationnements")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Stationnements
+     * @return  Stationnements
+     */
+    function GET() {
+        $aReturn = $this->genericGet('prod_immo', "stationnement", "id_stationnement");
+		$aStationnements=json_decode($aReturn['sMessage'],true);
+		if(isset($aStationnements['stationnements'])){
+			$aStationnementsData=$aStationnements['stationnements'];
+			$sDataArrayName="stationnements";
+		}elseif (isset($aStationnements['data'])){
+			$aStationnementsData=$aStationnements['data'];
+			$sDataArrayName="data";
+		}else{
+			return $aReturn['sMessage'];
+		}
+		if(isset($aStationnementsData)){
+			// error_log(print_r($aStationnements,true));
+			$aStationnements2=array();
+			foreach ($aStationnementsData as $aStationnement){
+				$aStationnement['indicateur_stationnement']= $this->getIndicateur_stationnement($aStationnement['id_indicateur_stationnement']);
+				$aStationnements2[count($aStationnements2)]=$aStationnement;
+			}
+			$sStationnements=json_encode(array($sDataArrayName=>$aStationnements2,"list_count"=>$aStationnements['list_count'],"total_row_number"=>$aStationnements['total_row_number'],"status"=>$aStationnements['status']));
+			//error_log($sStationnements);
+			return $sStationnements;
+		}
+    }
+
+    /**
+     *  get indicateur_stationnement of stationnement
+     */
+    function getIndicateur_stationnement($iIndicateurStationnement) {
+        if(isset($iIndicateurStationnement) and !is_null($iIndicateurStationnement)){
+			require $this->sRessourcesFile;
+			$aParams['sSchemaFramework'] = array('value' => 'prod_immo', 'type' => 'schema_name');
+			$aParams['id_indicateur_stationnement'] = array('value' => $iIndicateurStationnement, 'type' => 'string');
+			$oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getIndicateur_stationnement'], $aParams);
+			$aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+			$oPDOresult = $this->oConnection->oBd->fermeResultat();
+			return $aLigne["indicateur_stationnement"];
+		}else{
+			return null;
+		}
+    }
+	
+    /**
+     * @SWG\Post(path="/stationnements",
+     *   tags={"stationnement"},
+     *   summary="Add stationnement",
+     *   description="Request to add stationnement",
+     *   operationId="POST",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="stationnement Response",
+     *         @SWG\Schema(ref="#/definitions/stationnements")
+     *     )
+     *  )
+     */
+
+    /**
+     * insert stationnement
+     * @return id of the stationnement created
+     */
+    function POST(){
+		require $this->sRessourcesFile;
+		// get value sequence from suivi_prod_immo database to set id
+		$oConnexion = new PDO('pgsql:host=\'srv-postgres\' port=5432 dbname=\'suivi_prod_immo\'', $_SESSION["ses_Login"], trim(des(rtrim(utf8_decode($_SESSION["ses_Login"])), hexToString(rtrim($_SESSION["ses_Password"])), 0, 0, null)));
+		$oPDOresult = $oConnexion->query($aSql['getSequenceStationnement']);
+		if (!$oPDOresult) {
+			$aError=$oConnexion->errorInfo();
+			error_log($aError[2]);
+		}else{
+			$aResult = $oPDOresult->fetch(PDO::FETCH_ASSOC);
+			$this->aValues['id_stationnement'] = $aResult['nextval'];
+		}
+        $aReturn = $this->genericPost('prod_immo', 'stationnement', null, 'id_stationnement');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Put(path="/stationnements/{id_stationnement}",
+     *   tags={"stationnement"},
+     *   summary="update stationnement",
+     *   description="Request to update stationnement",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_stationnement",
+     *     in="path",
+     *     description="id of the stationnement",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/stationnements")
+     *     )
+     *  )
+     */
+
+    /**
+     * update stationnements
+     * @return id of stationnements updated or error object if a stationnements is not updated
+     */
+    function PUT() {
+        $aReturn = $this->genericPut('prod_immo', 'stationnement', 'id_stationnement');
+        return $aReturn['sMessage'];
+    }
+
+    /**
+     * @SWG\Delete(path="/stationnements",
+     *   tags={"stationnement"},
+     *   summary="delete stationnement",
+     *   description="Request to delete stationnement",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the stationnement",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="stationnement Response",
+     *         @SWG\Schema(ref="#/definitions/stationnements")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/stationnements/{id_stationnement}",
+     *   tags={"stationnement"},
+     *   summary="delete stationnement",
+     *   description="Request to delete stationnement",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="Traitement token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_stationnement",
+     *     in="path",
+     *     description="id of the stationnement",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/stationnements")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete stationnements
+     * @return id of stationnements deleted or error object if a stationnements is not deleted
+     */
+    function DELETE() {
+        $aReturn = $this->genericDelete('prod_immo', 'stationnement', 'id_stationnement');
+        return $aReturn['sMessage'];
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/src/module_suivi_prod_immo/web_service/ws/Suivi_prod_immo.class.sql.inc b/src/module_suivi_prod_immo/web_service/ws/Suivi_prod_immo.class.sql.inc
index fa773e4a..1008084c 100644
--- a/src/module_suivi_prod_immo/web_service/ws/Suivi_prod_immo.class.sql.inc
+++ b/src/module_suivi_prod_immo/web_service/ws/Suivi_prod_immo.class.sql.inc
@@ -15,6 +15,9 @@ $aSql['insertOperationCommunes'] = "INSERT INTO [sSchemaFramework].operation_com
 // CTM
 $aSql['getOperationCTM'] = "SELECT operation_ctm.id_ctm, \"conference_territoriale_maire\".nom_ctm FROM [sSchemaFramework].operation_ctm LEFT JOIN [sSchemaFramework].conference_territoriale_maire ON operation_ctm.id_ctm = \"conference_territoriale_maire\".id_ctm WHERE operation_ctm.id_operation = [id_operation]";
 $aSql['insertOperationCTM'] = "INSERT INTO [sSchemaFramework].operation_ctm(id_ctm, id_operation) VALUES([id_ctm], [id_operation])";
+// Perimetres
+$aSql['getOperationPerimetre'] = "SELECT operation_perimetre.id_perimetre, \"perimetre\".nom_perimetre FROM [sSchemaFramework].operation_perimetre LEFT JOIN [sSchemaFramework].perimetre ON operation_perimetre.id_perimetre = \"perimetre\".id_perimetre WHERE operation_perimetre.id_operation = [id_operation]";
+$aSql['insertOperationPerimetre'] = "INSERT INTO [sSchemaFramework].operation_perimetre(id_perimetre, id_operation) VALUES([id_perimetre], [id_operation])";
 // Modes financement
 $aSql['getOperationModesFinancement'] = "SELECT operation_tr_financement_equ_public.code_financement_equ_public, \"tr_financement_equ_public\".financement_equ_public FROM [sSchemaFramework].operation_tr_financement_equ_public LEFT JOIN [sSchemaFramework].tr_financement_equ_public ON operation_tr_financement_equ_public.code_financement_equ_public = \"tr_financement_equ_public\".code_financement_equ_public WHERE operation_tr_financement_equ_public.id_operation = [id_operation]";
 $aSql['insertOperationModesFinancement'] = "INSERT INTO [sSchemaFramework].operation_tr_financement_equ_public(code_financement_equ_public, id_operation) VALUES([code_financement_equ_public], [id_operation])";
@@ -40,10 +43,54 @@ $aSql['getSuivi'] = "SELECT \"tr_suivi\".code_suivi, \"tr_suivi\".suivi FROM [sS
 $aSql['getProcedureAmenagement'] = "SELECT \"tr_procedure_amenagement\".code_procedure_amenagement, \"tr_procedure_amenagement\".procedure_amenagement FROM [sSchemaFramework].tr_procedure_amenagement WHERE code_procedure_amenagement = [code_procedure_amenagement]";
 // Vocation
 $aSql['getVocation'] = "SELECT \"tr_vocation\".code_vocation, \"tr_vocation\".vocation FROM [sSchemaFramework].tr_vocation WHERE code_vocation = [code_vocation]";
+//  Logement Familliaux Location
+$aSql['getLogementFamLocation'] = "SELECT nom_bailleur, nom_investisseur, id_logement_familliaux_location FROM [sSchemaFramework].logement_familliaux_location WHERE id_programme=[id_programme]";
+//  Logement Habitat spécifique
+$aSql['getHabitatSpecifique'] = "SELECT nom_bailleur, nom_gestionnaire, id_habitat_specifique FROM [sSchemaFramework].habitat_specifique WHERE id_programme =[id_programme]";
+//  Répartition logement
+$aSql['getRepartition'] = "SELECT repartition FROM prod_immo.repartition WHERE code_repartition =[code_repartition]";
+$aSql['getTypeLogement'] = "SELECT type_logement FROM prod_immo.type_logement WHERE code_type_logement =[code_type_logement]";
+$aSql['getSequenceRepartition_type_logement'] = "SELECT nextval('prod_immo.repartition_type_logement_id_repartition_type_logement_seq')";
+//  Granulométrie
+$aSql['getCompositionProgramme'] = "SELECT composition_programme FROM prod_immo.composition_programme WHERE code_composition_programme =[code_composition_programme]";
+$aSql['getTypeGranulometrie'] = "SELECT type_granulometrie FROM prod_immo.type_granulometrie WHERE code_type_granulometrie =[code_type_granulometrie]";
+$aSql['getSequenceGranulometrie'] = "SELECT nextval('prod_immo.granulometrie_id_granulometrie_seq')";
+// Logement familliaux en accession
+$aSql['getIndicateur_logement_familliaux_accession'] = "SELECT indicateur_logement_familliaux_accession FROM prod_immo.indicateur_logement_familliaux_accession WHERE id_indicateur_logement_familliaux_accession =[id_indicateur_logement_familliaux_accession]";
+$aSql['getSequenceLogement_familliaux_accession'] = "SELECT nextval('prod_immo.logement_familliaux_accession_id_logement_familliaux_access_seq')";
+// Profil acheteur accession libre
+$aSql['getType_acheteur_accession_libre'] = "SELECT type_acheteur_accession_libre FROM prod_immo.type_acheteur_accession_libre WHERE id_type_acheteur_accession_libre =[id_type_acheteur_accession_libre]";
+$aSql['getSequenceProfil_acheteur_accession_libre'] = "SELECT nextval('prod_immo.profil_acheteur_accession_lib_id_profil_acheteur_accession__seq')";
+// Logement familliaux en location
+$aSql['getIndicateur_logement_familliaux_location'] = "SELECT indicateur_logement_familliaux_location FROM prod_immo.indicateur_logement_familliaux_location WHERE id_indicateur_logement_familliaux_location =[id_indicateur_logement_familliaux_location]";
+$aSql['getSequenceComposition_logement_familliaux_location_cp'] = "SELECT nextval('prod_immo.composition_logement_famillia_id_composition_logement_famil_seq')";
+$aSql['setLogementFamilliauxLocationNomBailleur'] = "UPDATE [sSchemaFramework].logement_familliaux_location SET nom_bailleur=[nom_bailleur] WHERE id_programme=[id_programme]";
+$aSql['setLogementFamilliauxLocationNomInvestisseur'] = "UPDATE [sSchemaFramework].logement_familliaux_location SET nom_investisseur=[nom_investisseur] WHERE id_programme=[id_programme]";
+// Habitat spécifique
+$aSql['getIndicateur_habitat_specifique'] = "SELECT indicateur_habitat_specifique FROM prod_immo.indicateur_habitat_specifique WHERE id_indicateur_habitat_specifique =[id_indicateur_habitat_specifique]";
+$aSql['getSequenceComposition_habitat_specifique_cp'] = "SELECT nextval('prod_immo.composition_habitat_specifiqu_id_composition_habitat_specif_seq')";
+$aSql['setHabitatSpecifiqueNomBailleur'] = "UPDATE [sSchemaFramework].habitat_specifique SET nom_bailleur=[nom_bailleur] WHERE id_programme=[id_programme]";
+$aSql['setHabitatSpecifiqueNomGestionnaire'] = "UPDATE [sSchemaFramework].habitat_specifique SET nom_gestionnaire=[nom_gestionnaire] WHERE id_programme=[id_programme]";
+// Activité et industrie
+$aSql['getIndicateur_activite_industrie'] = "SELECT indicateur_activite_industrie FROM prod_immo.indicateur_activite_industrie WHERE id_indicateur_activite_industrie =[id_indicateur_activite_industrie]";
+$aSql['getSequenceActivite_industrie'] = "SELECT nextval('prod_immo.activite_industrie_id_activite_industrie_seq')";
+// Bureau
+$aSql['getIndicateur_bureau'] = "SELECT indicateur_bureau FROM prod_immo.indicateur_bureau WHERE id_indicateur_bureau =[id_indicateur_bureau]";
+$aSql['getSequenceBureau'] = "SELECT nextval('prod_immo.bureau_id_bureau_seq')";
+// Equipement de superstructure
+$aSql['getIndicateur_equipement_structure'] = "SELECT indicateur_equipement_structure FROM prod_immo.indicateur_equipement_structure WHERE id_indicateur_equipement_structure =[id_indicateur_equipement_structure]";
+$aSql['getSequenceEquipement_structure'] = "SELECT nextval('prod_immo.equipement_structure_id_equipement_structure_seq')";
+// Hotel commerce service
+$aSql['getIndicateur_hotel_commerce_service'] = "SELECT indicateur_hotel_commerce_service FROM prod_immo.indicateur_hotel_commerce_service WHERE id_indicateur_hotel_commerce_service =[id_indicateur_hotel_commerce_service]";
+$aSql['getSequenceHotel_commerce_service'] = "SELECT nextval('prod_immo.hotel_commerce_service_id_hotel_commerce_service_seq')";
+// Stationnement
+$aSql['getIndicateur_stationnement'] = "SELECT indicateur_stationnement FROM prod_immo.indicateur_stationnement WHERE id_indicateur_stationnement =[id_indicateur_stationnement]";
+$aSql['getSequenceStationnement'] = "SELECT nextval('prod_immo.stationnement_id_stationnement_seq')";
 // TooltipLastUpdate
-$aSql['getUpdateTrackingOperation'] = "SELECT \"user\" AS user_update, date AS date_update, old_value	FROM prod_immo.update_tracking_operation WHERE id_operation=[iIdOperation] AND field='[sField]' ORDER BY date_update DESC LIMIT 1";
-$aSql['getUpdateTrackingProgramme'] = "SELECT \"user\" AS user_update, date AS date_update, old_value	FROM prod_immo.update_tracking_programme WHERE id_programme=[iIdProgramme] AND field='[sField]' ORDER BY date_update DESC LIMIT 1";
-
-// Répartition type logement DEPRECATED
-// $aSql['getRepartitionTypeLogement'] = "SELECT type_logement, repartition FROM [sSchemaFramework].v_repartion_type_logement WHERE id_operation=[id_operation]";
+$aSql['getUpdateTrackingOperation'] = "SELECT \"user\" AS user_update, date AS date_update, old_value FROM prod_immo.update_tracking_operation WHERE id_operation=[iIdOperation] AND field='[sField]' ORDER BY date_update DESC LIMIT 1";
+$aSql['getUpdateTrackingProgramme'] = "SELECT \"user\" AS user_update, date AS date_update, old_value FROM prod_immo.update_tracking_programme WHERE id_programme=[iIdProgramme] AND field='[sField]' ORDER BY date_update DESC LIMIT 1";
+// Restriction
+$aSql['getRestrictionUpdate'] = 'SELECT restriction_update FROM [sSchemaFramework].user_restriction WHERE login::name = "current_user"()';
+$aSql['getRestrictionUpdateIdOperation'] = 'SELECT id_operation FROM [sSchemaFramework].operation WHERE id_operation::text ~ similar_escape(( SELECT restriction_update FROM [sSchemaFramework].user_restriction WHERE login::name = "current_user"()), NULL::text);';
+$aSql['getRestrictionUpdateIdIlot'] = 'SELECT id_ilot FROM [sSchemaFramework].ilot WHERE id_operation::text ~ similar_escape(( SELECT restriction_update FROM [sSchemaFramework].user_restriction WHERE login::name = "current_user"()), NULL::text);';
 ?>
\ No newline at end of file
diff --git a/src/module_vmap/web_service/ws/Querys.class.inc b/src/module_vmap/web_service/ws/Querys.class.inc
index 41656427..b62667d9 100755
--- a/src/module_vmap/web_service/ws/Querys.class.inc
+++ b/src/module_vmap/web_service/ws/Querys.class.inc
@@ -579,7 +579,7 @@ class Querys extends Vmap {
      * @return array
      */
     function queryBusinessObject($type, $bOnlyResult = false) {
-        require $this->sRessourcesFile;
+		require $this->sRessourcesFile;
 
         if (!empty($this->oConnection->oError)) {
             $aXmlRacineAttribute['status'] = 0;
@@ -732,7 +732,6 @@ class Querys extends Vmap {
 
         // Execute la requête
         $this->aValues['my_vitis_id'] = "";
-
         $oResult = $this->oConnection->oBd->executeWithParams($sSql, $aParams);
 
         if ($this->oConnection->oBd->enErreur()) {
@@ -742,9 +741,8 @@ class Querys extends Vmap {
         } else {
             if (!$this->oConnection->oBd->enErreur() && $this->oConnection->oBd->nombreLigne($oResult) > 0) {
                 while ($aLigne = $this->oConnection->oBd->ligneSuivante($oResult)) {
-
+					
                     if ($type !== 'table') {
-
                         // Image à la une
                         if ($get_image === true || $get_image === 'true') {
                             if (isset($aLigne['[bo_image]'])) {
@@ -782,7 +780,6 @@ class Querys extends Vmap {
                             $aLigne = $aResult;
                         } else {
 
-
                             // Récupère le forulaire JSON
                             if ($type === 'form') {
                                 $jsonContent = file_get_contents($this->aProperties['ws_data_dir'] . '/vmap/business_object/' . $bo_id . '/forms/published.json');
diff --git a/src/vitis/client/css/icons/style.css b/src/vitis/client/css/icons/style.css
index 354d19d6..3345c4aa 100755
--- a/src/vitis/client/css/icons/style.css
+++ b/src/vitis/client/css/icons/style.css
@@ -1062,6 +1062,9 @@
 .icon-suivi_prod_immo_saisie:before {
   content: "\e94e";
 }
+.icon-patrimoine_saisie:before {
+  content: "\f015";
+}
 .icon-suivi_prod_immo_bi:before {
   content: "\f043";
 }
\ No newline at end of file
diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
index 1f06b763..d1d861d5 100755
--- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
+++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js
@@ -3066,6 +3066,7 @@ formReader.appSubformGridDrtv = function ($timeout, $translate, propertiesSrvc,
                         }
                     }
                 }
+				var sFilter = formReaderService['parseFilter'](oSearchValues);
 
                 /**
                  * Fonction qui permet d'ajouter un enregistrement de l'objet métier en question
@@ -3110,7 +3111,7 @@ formReader.appSubformGridDrtv = function ($timeout, $translate, propertiesSrvc,
                             $('#' + sModalId).modal('hide');
                             // Rafraichit la grille
                             setTimeout(function () {
-                                formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id']).then(function (oNewResult) {
+                                formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id'], sFilter).then(function (oNewResult) {
                                     scope['gridOptions']['data'] = oNewResult;
                                 });
                             });
@@ -3151,7 +3152,7 @@ formReader.appSubformGridDrtv = function ($timeout, $translate, propertiesSrvc,
                                     formReaderService['deleteSectionElements'](scope['oSection']['ressource_id'], aIds).then(function (oResponse) {
                                         // Rafraichit la grille
                                         setTimeout(function () {
-                                            formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id']).then(function (oNewResult) {
+                                            formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id'], sFilter).then(function (oNewResult) {
                                                 scope['gridOptions']['data'] = oNewResult;
                                             });
                                         });
@@ -3245,7 +3246,7 @@ formReader.appSubformGridDrtv = function ($timeout, $translate, propertiesSrvc,
                     formReaderService['getSectionRessourceTab'](scope['oSection']['ressource_id']).then(function (oRessourceTab) {
                         scope['oRessourceTab'] = oRessourceTab;
 
-                        formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id']).then(function (aRessourceData) {
+                        formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id'],sFilter).then(function (aRessourceData) {
                             scope['aRessourceData'] = aRessourceData;
 
                             formReaderService['getSectionForm'](scope['oSection'], true).then(function (oSubformDefinition) {
@@ -3336,7 +3337,7 @@ formReader.appSubformGridDrtv = function ($timeout, $translate, propertiesSrvc,
                                                 $('#' + sModalId).modal('hide');
                                                 // Rafraichit la grille
                                                 setTimeout(function () {
-                                                    formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id']).then(function (oNewResult) {
+                                                    formReaderService['getSectionRessourceData'](scope['oSection']['ressource_id'], sFilter).then(function (oNewResult) {
                                                         scope['gridOptions']['data'] = oNewResult;
                                                     });
                                                 });
diff --git a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js
index 93574a2a..48653b93 100755
--- a/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js
+++ b/src/vitis/client/javascript/externs/formReader/formReaderSrvc.js
@@ -1881,15 +1881,15 @@ formReader.formReaderService = function ($translate, $rootScope, $q, $log, $time
                 },
                 "success": function (response) {
                     if (!goog.isDef(response['data'])) {
-                        $translate('NO_VALUES_RETURNED').then(function (sTranslation) {
+                        /*$translate('NO_VALUES_RETURNED').then(function (sTranslation) {
                             bootbox.alert(sTranslation);
-                        });
+                        });*/
                         return 0;
                     }
                     if (!goog.isDef(response['data']['data'])) {
-                        $translate('NO_VALUES_RETURNED').then(function (sTranslation) {
+                        /*$translate('NO_VALUES_RETURNED').then(function (sTranslation) {
                             bootbox.alert(sTranslation);
-                        });
+                        });*/
                         return 0;
                     }
                     if (!goog.isDef(response['data']['data'][0])) {
diff --git a/src/vitis/vas/doc/sport/club.php b/src/vitis/vas/doc/sport/club.php
new file mode 100644
index 00000000..846b16da
--- /dev/null
+++ b/src/vitis/vas/doc/sport/club.php
@@ -0,0 +1,140 @@
+<?php
+//https://geo.urbalyon.org/doc/sport/club.php?numequipement=E001I693870013
+//https://geo.urbalyon.org/doc/sport/club.php?numequipement=E001I693860017
+require_once("../../rest/conf/properties.inc");
+require_once("properties_sport.inc");
+require_once("lib_sport.inc");
+
+
+try{
+	$oConn = new PDO('pgsql:host=srv-postgres;port=5432;dbname='.$properties['db_sport'], $properties['db_user_sport'], $properties['db_pass_sport']);
+
+	if($oConn){
+		if (isset($_REQUEST["numequipement"])){
+			$numequipement = $_REQUEST["numequipement"];
+			// get data Equipement 
+			$oResult = $oConn->prepare("SELECT equipement.*, adresse, codepostal, commune FROM (".$properties['schema_res'].".equipement INNER JOIN ".$properties['schema_res'].".installation ON equipement.numinstallation=installation.numinstallation) INNER JOIN ".$properties['schema_sport'].".commune ON commune.codeinsee=installation.codeinsee WHERE numequipement='".$numequipement."'");
+			$oResult->execute();
+			
+			if ($oResult->rowCount()>0){
+				$aEquipements = $oResult->fetchAll();
+				$sEquipement = $aEquipements[0]["nomequipement"];
+				// get data Club
+				$oResultClub = $oConn->prepare("SELECT club.* FROM ".$properties['schema_sport'].".club WHERE numequipement_1='".$numequipement."' ORDER BY numequipement_1");
+				$oResultClub->execute();
+				$aClubs = $oResultClub->fetchAll();
+				include ('header_club.html');
+				echo '<div class="row"><div class="col-4 font-weight-bold">Club(s) associé(s) à l\'équipement :</div></div>';
+				echo '<div class="row"><div class="col-4" style="font-size: 12px"><ion-icon name="information-circle" style="font-size: 20px; color: blue;"></ion-icon> Cliquer sur un nom de club pour faire apparaitre les données sur les licenciés.</div></div>';
+				echo '<div class="row"><div class="col-4"><div class="list-group" id="list-tab" role="tablist">';
+				foreach ($aClubs as $aClub){
+					echo '<a class="list-group-item list-group-item-action list-group-item-success" id="list-'.$aClub["id_club"].'-list" data-toggle="list" href="#list-'.$aClub["id_club"].'" role="tab" aria-controls="'.$aClub["id_club"].'">'.$aClub["nom"].'</a>';
+				}
+				echo '</div></div>';
+				echo '<div class="col-8"><div class="tab-content" id="nav-tabContent">';
+
+				foreach ($aClubs as $aClub){
+					echo '<div class="tab-pane fade" id="list-'.$aClub["id_club"].'" role="tabpanel" aria-labelledby="list-'.$aClub["id_club"].'-list"><b>Licenciés du club "'.$aClub["nom"].'" :</b><br>';
+				    // echo '<div class="row"><div class="col-8" style="font-size: 12px"><ion-icon name="information-circle" style="font-size: 20px; color: blue;"></ion-icon> Cliquer sur le nom de l\'équipement pour afficher la fiche complète de l\'équipement.</div></div>';
+					echo '<div class="row"><div class="col-8" style="font-size: 12px">Nombre de licencié(s) : '.$aClub["nb_licencie"].'</div></div>';
+					echo '<div class="list-group">';
+					// get data Licencié
+					$oResultLicencie = $oConn->prepare("SELECT licencie.*,commune FROM ".$properties['schema_sport'].".licencie INNER JOIN ".$properties['schema_sport'].".commune ON licencie.codeinsee=commune.codeinsee WHERE id_club=".$aClub["id_club"]);
+					$oResultLicencie->execute();
+					$aLicencies = $oResultLicencie->fetchAll();
+					$iNbHomme=0;
+					$iNbFemme=0;
+					$aCommunes=array();
+					$aCommunesNom=array();
+					foreach ($aLicencies as $aLicencie){
+						if ($aLicencie['sexe']=='F') $iNbFemme+=1;
+						if ($aLicencie['sexe']=='M') $iNbHomme+=1;
+						if ($aLicencie['codeinsee']!=""){
+							$aCommunesNom[$aLicencie['codeinsee']]=str_replace("'", "",$aLicencie['commune']);
+							if ( isset($aCommunes[$aLicencie['codeinsee']]))
+								$aCommunes[$aLicencie['codeinsee']]+=1;
+							else
+								$aCommunes[$aLicencie['codeinsee']]=1;
+						}
+					}
+					arsort($aCommunes);
+					// echo '<div class="row"><div class="col-8" style="font-size: 12px">Nombre de licencié(s) associé(s) : '.$oResultLicencie->rowCount().'</div></div>';
+					// Pie chart sexe
+					echo '<div class="row"><div class="col-8" style="font-size: 12px"><b>Répartition des licenciés selon le sexe</b></div></div>';
+					echo '<canvas height="70px" id="oChart_sexe_'.$aClub["id_club"].'"></canvas>';
+					echo "<script type='text/javascript'>
+						var pie_ctx_".$aClub["id_club"]." = document.getElementById('oChart_sexe_".$aClub["id_club"]."').getContext('2d');
+						var pie_chart_".$aClub["id_club"]." = new Chart(pie_ctx_".$aClub["id_club"].", {
+							type: 'pie',
+							data: {
+								labels: ['Homme', 'Femme'],
+								datasets: [{
+									backgroundColor: [
+										'rgb(132, 195, 255)',
+										'rgb(255, 144, 203)',
+									],
+									label: 'Répartition des licenciés selon le sexe',
+									borderColor: 'rgb(107, 107, 107)',
+									data: [".$iNbHomme.", ".$iNbFemme."]
+								}]
+							},
+							options: {}
+						});
+					</script>";
+					// Bar chart commune
+					$sCommunes='';
+					$sValues='';
+					$sColor='';
+					foreach ($aCommunes as $iCodeInsee => $iNb){
+						if ($sCommunes=='')
+							$sCommunes=$aCommunesNom[$iCodeInsee];
+						else
+							$sCommunes=$sCommunes."','".$aCommunesNom[$iCodeInsee];
+						if ($sValues=='')
+							$sValues=$iNb;
+						else
+							$sValues=$sValues.",".$iNb;
+						if ($sColor=='')
+							$sColor='dynamicColors()';
+						else
+							$sColor=$sColor.',dynamicColors()';
+						
+					}
+					echo '<div class="row"><div class="col-8" style="font-size: 12px"><b>Nombre de licencié dans la commune</b></div></div>';
+					echo '<canvas height="150px" id="oChart_commune_'.$aClub["id_club"].'"></canvas>';
+					echo "<script type='text/javascript'>
+						var bar_ctx_".$aClub["id_club"]." = document.getElementById('oChart_commune_".$aClub["id_club"]."').getContext('2d');
+						var bar_chart_".$aClub["id_club"]." = new Chart(bar_ctx_".$aClub["id_club"].", {
+							type: 'bar',
+							data: {
+								labels: ['".$sCommunes."'],
+								datasets: [{
+									backgroundColor: [".$sColor."],
+									label: 'Répartition des licenciés selon la commune',
+									borderColor: 'rgb(107, 107, 107)',
+									data: [".$sValues."]
+								}]
+							},
+							options: {legend: {display: false}}
+						});
+					</script>";
+					echo '</div></div>';
+				}
+
+				echo '</div></div>';
+				echo '</div><br>';
+				
+				include ('footer_club.html');
+				
+			}else{
+				echo "Erreur : ".$oResult->rowCount()." équipement(s) trouvé(s) avec le numéro d'équipement : ".$numequipement;
+			}
+		}else{
+			echo "Erreur : pas de numéro d'équipement passé en paramètre !";
+		}
+	}
+}catch (PDOException $e){
+	echo "ERROR : ".$e->getMessage();
+}
+
+?>
\ No newline at end of file
diff --git a/src/vitis/vas/doc/sport/equipement.php b/src/vitis/vas/doc/sport/equipement.php
index 5111781b..79a2b7b2 100644
--- a/src/vitis/vas/doc/sport/equipement.php
+++ b/src/vitis/vas/doc/sport/equipement.php
@@ -12,7 +12,7 @@ try{
 		if (isset($_REQUEST["numequipement"])){
 			$numequipement = $_REQUEST["numequipement"];
 			// get data Equipement
-			$oResult = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_sport'].'.equipement INNER JOIN '.$properties['schema_sport'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numequipement=\''.$numequipement.'\'');
+			$oResult = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_res'].'.equipement INNER JOIN '.$properties['schema_res'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numequipement=\''.$numequipement.'\'');
 			$oResult->execute();
 			
 			if ($oResult->rowCount()==1){
@@ -26,12 +26,12 @@ try{
 					$aEquipement['type_erp_etablissement']='Aucun';
 				}
 				
-				$oResult2 = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_sport'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE numinstallation=\''.$aEquipement["numinstallation"].'\'');
+				$oResult2 = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_res'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE numinstallation=\''.$aEquipement["numinstallation"].'\'');
 				$oResult2->execute();
 				$aInstallation = $oResult2->fetchAll();
 				$aInstallation=$aInstallation[0];
 				
-				$oResult3 = $oConn->prepare('SELECT activite_equipement.*, activite FROM '.$properties['schema_sport'].'.activite_equipement INNER JOIN '.$properties['schema_sport'].'.activite ON activite_equipement.codeactivite=activite.codeactivite WHERE numequipement=\''.$numequipement.'\'');
+				$oResult3 = $oConn->prepare('SELECT activite_equipement.*, activite FROM '.$properties['schema_res'].'.activite_equipement INNER JOIN '.$properties['schema_res'].'.activite ON activite_equipement.codeactivite=activite.codeactivite WHERE numequipement=\''.$numequipement.'\'');
 				$oResult3->execute();
 				$aActivites = $oResult3->fetchAll();
 
diff --git a/src/vitis/vas/doc/sport/equipement_commune.php b/src/vitis/vas/doc/sport/equipement_commune.php
index 314cfa4d..bb2c5f70 100644
--- a/src/vitis/vas/doc/sport/equipement_commune.php
+++ b/src/vitis/vas/doc/sport/equipement_commune.php
@@ -11,7 +11,7 @@ try{
 		if (isset($_REQUEST["codeinsee"])){
 			$codeinsee = $_REQUEST["codeinsee"];
 			// get data Installation
-			$oResult = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_sport'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE installation.codeinsee='.$codeinsee.' ORDER BY installation.nominstallation');
+			$oResult = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_res'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE installation.codeinsee='.$codeinsee.' ORDER BY installation.nominstallation');
 			$oResult->execute();
 			
 			if ($oResult->rowCount()>0){
@@ -31,7 +31,7 @@ try{
 					echo '<div class="tab-pane fade" id="list-'.$aInstallation["numinstallation"].'" role="tabpanel" aria-labelledby="list-'.$aInstallation["numinstallation"].'-list"><b>Équipement(s) de l\'installation "'.$aInstallation["nominstallation"].'" :</b><br>';
 				    echo '<div class="row"><div class="col-8" style="font-size: 12px"><ion-icon name="information-circle" style="font-size: 20px; color: blue;"></ion-icon> Cliquer sur le nom de l\'équipement pour afficher la fiche complète de l\'équipement.</div></div>';
 					echo '<div class="list-group">';
-					$oResult2 = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_sport'].'.equipement INNER JOIN '.$properties['schema_sport'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numinstallation=\''.$aInstallation["numinstallation"].'\' ORDER BY nomequipement');
+					$oResult2 = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_res'].'.equipement INNER JOIN '.$properties['schema_res'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numinstallation=\''.$aInstallation["numinstallation"].'\' ORDER BY nomequipement');
 					$oResult2->execute();
 					$aEquipements = $oResult2->fetchAll();
 					foreach ($aEquipements as $aEquipement) {
diff --git a/src/vitis/vas/doc/sport/equipement_commune_complet.php b/src/vitis/vas/doc/sport/equipement_commune_complet.php
index 2e3bde6c..77b56ce1 100644
--- a/src/vitis/vas/doc/sport/equipement_commune_complet.php
+++ b/src/vitis/vas/doc/sport/equipement_commune_complet.php
@@ -12,7 +12,7 @@ try{
 		if (isset($_REQUEST["codeinsee"])){
 			$codeinsee = $_REQUEST["codeinsee"];
 			// get data Installation
-			$oResult = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_sport'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE installation.codeinsee='.$codeinsee);
+			$oResult = $oConn->prepare('SELECT installation.*, commune FROM '.$properties['schema_res'].'.installation INNER JOIN sport.commune ON installation.codeinsee=commune.codeinsee WHERE installation.codeinsee='.$codeinsee);
 			$oResult->execute();
 			
 			if ($oResult->rowCount()>0){
@@ -20,7 +20,7 @@ try{
 				$aInstallations = $oResult->fetchAll();
 				foreach ($aInstallations as $aInstallation) {
 					include ('installation.html');
-					$oResult2 = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_sport'].'.equipement INNER JOIN '.$properties['schema_sport'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numinstallation=\''.$aInstallation["numinstallation"].'\'');
+					$oResult2 = $oConn->prepare('SELECT equipement.*, typequipement FROM '.$properties['schema_res'].'.equipement INNER JOIN '.$properties['schema_res'].'.typequipement ON equipement.codetypequipement=typequipement.codetypequipement WHERE numinstallation=\''.$aInstallation["numinstallation"].'\'');
 					$oResult2->execute();
 					$aEquipements = $oResult2->fetchAll();
 					foreach ($aEquipements as $aEquipement) {
@@ -31,7 +31,7 @@ try{
 							$aEquipement['type_erp_etablissement']='Aucun';
 						}
 						
-						$oResult3 = $oConn->prepare('SELECT activite_equipement.*, activite FROM '.$properties['schema_sport'].'.activite_equipement INNER JOIN '.$properties['schema_sport'].'.activite ON activite_equipement.codeactivite=activite.codeactivite WHERE numequipement=\''.$aEquipement["numequipement"].'\'');
+						$oResult3 = $oConn->prepare('SELECT activite_equipement.*, activite FROM '.$properties['schema_res'].'.activite_equipement INNER JOIN '.$properties['schema_res'].'.activite ON activite_equipement.codeactivite=activite.codeactivite WHERE numequipement=\''.$aEquipement["numequipement"].'\'');
 						$oResult3->execute();
 						$aActivites = $oResult3->fetchAll();
 						
diff --git a/src/vitis/vas/doc/sport/footer_club.html b/src/vitis/vas/doc/sport/footer_club.html
new file mode 100644
index 00000000..051190aa
--- /dev/null
+++ b/src/vitis/vas/doc/sport/footer_club.html
@@ -0,0 +1,11 @@
+	
+
+	</div>
+    <!-- Optional JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+	<script src="https://unpkg.com/ionicons@4.5.10-0/dist/ionicons.js"></script>
+	</body>
+</html>
\ No newline at end of file
diff --git a/src/vitis/vas/doc/sport/header_club.html b/src/vitis/vas/doc/sport/header_club.html
new file mode 100644
index 00000000..07700dea
--- /dev/null
+++ b/src/vitis/vas/doc/sport/header_club.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+	<title>Équipement / Fiche Club</title>
+	<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
+	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+	<link rel="stylesheet" href="style.css">
+	<script type='text/javascript'>
+	var dynamicColors = function() {
+		var r = Math.floor(Math.random() * 255);
+		var g = Math.floor(Math.random() * 255);
+		var b = Math.floor(Math.random() * 255);
+		return "rgb(" + r + "," + g + "," + b + ")";
+	}
+	</script>
+</head>
+<body>
+	<div class="container">
+		<div class="row pt-2 header_fiche"><div class="col"><img src="images/grand_lyon.png" width="150px"></div></div>
+		<div class="row">
+			<div class="col-sm title_fiche"><h3>Équipement "<?php echo $sEquipement; ?>"</h3></div>
+		</div>
+		<div class="row">
+			<div class="col-sm title_fiche">"<?php echo $aEquipements[0]["famille"]; ?>"</div>
+		</div>
+		<div class="row">
+			<div class="col-sm title_fiche"><?php echo $aEquipements[0]["adresse"]." ".$aEquipements[0]["codepostal"]." ".$aEquipements[0]["commune"]; ?></div>
+		</div>
+		<br>
diff --git a/src/vitis/vas/doc/sport/properties_sport.inc b/src/vitis/vas/doc/sport/properties_sport.inc
index 9904f112..c1491cf9 100644
--- a/src/vitis/vas/doc/sport/properties_sport.inc
+++ b/src/vitis/vas/doc/sport/properties_sport.inc
@@ -3,7 +3,8 @@
 $properties['db_sport']='sport';
 $properties['db_user_sport']='sport';
 $properties['db_pass_sport']='Urbalyon35*';
-$properties['schema_sport']='res_2019';
+$properties['schema_res']='res_2019';
+$properties['schema_sport']='sport';
 
 
 ?>
\ No newline at end of file
diff --git a/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.html b/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.html
index d462fc18..20f71cad 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.html
+++ b/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.html
@@ -59,7 +59,7 @@
 							<select class="form-control" id="l_amenageur">
 								<option></option>
 								<?php foreach($aAmenageurs as $iKey=>$aValue): ?>
-								<option value="<?php echo urlencode($aValue['nom_amenageur']); ?>"><?php echo $aValue['nom_amenageur']."   (".$aValue['count'].")"; ?></option>
+								<option value="<?php echo urlencode($aValue['concessionnaire_amenagement']); ?>"><?php echo $aValue['concessionnaire_amenagement']."   (".$aValue['count'].")"; ?></option>
 								<?php endforeach; ?>
 							</select>
 							<small class="form-text text-muted"><span data-feather="info" style="color:blue"></span> Le nombre d'opération de l'opérateur est affiché entre parenthèse.</small>
diff --git a/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.php b/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.php
index f657e618..d4263ae5 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/form_3_porteur.php
@@ -15,7 +15,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 			
 			if($oConn){
 				// get data CTM
-				$oResult=$oConn->prepare('SELECT DISTINCT nom_amenageur, count(nom_amenageur) FROM '.$properties['schema_prod_immo'].'.operation WHERE nom_amenageur IS NOT NULL GROUP BY nom_amenageur ORDER BY count DESC, nom_amenageur');
+				$oResult=$oConn->prepare('SELECT DISTINCT concessionnaire_amenagement, count(concessionnaire_amenagement) FROM '.$properties['schema_prod_immo'].'.operation WHERE concessionnaire_amenagement IS NOT NULL GROUP BY concessionnaire_amenagement ORDER BY count DESC, concessionnaire_amenagement');
 				$oResult->execute();
 				if ($oResult->rowCount()>0){
 					$aAmenageurs = $oResult->fetchAll();
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.html b/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.html
index 310338a1..f736348e 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.html
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.html
@@ -26,7 +26,7 @@
 						<div class="container-fluid border">
 							<div class="row"><div class="col-sm subtitle">Acteurs et mode opératoire</div></div>
 							<div class="row mt-3"><div class="col-sm-4 line_table" style="text-align: right;">Type d'opération :</div><div class="col-sm-8 pl-0 line_table"><b><?php echo $aOperation['procedure_amenagement']; ?></b></div></div>
-							<div class="row"><div class="col-sm-4 line_table" style="text-align: right;">Opérateur :</div><div class="col-sm-8 pl-0 line_table"><b><?php echo $aOperation['nom_amenageur']; ?></b></div></div>
+							<div class="row"><div class="col-sm-4 line_table" style="text-align: right;">Opérateur :</div><div class="col-sm-8 pl-0 line_table"><b><?php echo $aOperation['concessionnaire_amenagement']; ?></b></div></div>
 							<div class="row"><div class="col-sm-5 line_table" style="text-align: right;">Dates (prévisionnelles) :</div><div class="col-sm-7 pl-0 line_table"><b><?php echo $aOperation['annee_init']."-".$aOperation['annee_achevement']; ?></b></div></div>
 							<div class="row"><div class="col-sm-5 line_table" style="text-align: right;">Chef de projet DMOU :</div><div class="col-sm-7 pl-0 line_table"><b><?php echo $aOperation['cdp_mo']; ?></b></div></div>
 						</div>
@@ -127,8 +127,9 @@
 						<div class="col-sm-2 text-center border-top border-bottom">
 							<div class="row"><div class="col-sm-12 text-center border-bottom"><b>Activités - Industrie</b></div></div>
 							<div class="row" style="height: 110px;">
-								<div class="col-sm-6 h-100 d-inline-block text-center border-right" style="writing-mode: vertical-rl;text-orientation: mixed;">Production<br>Industrie<br>Logistique</div>
-								<div class="col-sm-6 h-100 d-inline-block text-center" style="writing-mode: vertical-rl;text-orientation: mixed;">Autres<br>activités</div>
+								<div class="col-sm-4 h-100 d-inline-block text-center border-right" style="writing-mode: vertical-rl;text-orientation: mixed;">Production<br>Industrie</div>
+								<div class="col-sm-4 h-100 d-inline-block text-center border-right" style="writing-mode: vertical-rl;text-orientation: mixed;">Logistique</div>
+								<div class="col-sm-4 h-100 d-inline-block text-center" style="writing-mode: vertical-rl;text-orientation: mixed;">Autres<br>activités</div>
 							</div>
 						</div>
 						<div class="col-sm-1 text-center border-left border-top border-bottom"><b>Équipements publics de superstructure</b></div>
@@ -179,8 +180,9 @@
 						</div>
 						<div class="col-sm-2 text-center">
 							<div class="row">
-								<div class="col-sm-6 border-right"><?php if (isset($iSdpProd)) echo $iSdpProd.' m²'; ?></div>
-								<div class="col-sm-6 border-right"><?php if (isset($iSdpActAutre)) echo $iSdpActAutre.' m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iSdpProd)) echo $iSdpProd.' m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iSdpLogistique)) echo $iSdpLogistique.' m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iSdpActAutre)) echo $iSdpActAutre.' m²'; ?></div>
 							</div>
 						</div>
 						<div class="col-sm-1 text-center"><?php if (isset($iSdpEquipement)) echo $iSdpEquipement.' m²'; ?></div>
@@ -231,8 +233,9 @@
 						</div>
 						<div class="col-sm-2 border-right text-center">
 							<div class="row">
-								<div class="col-sm-6 border-right"><?php if (isset($iPrixVenteProd)) echo $iPrixVenteProd.' €/m²'; ?></div>
-								<div class="col-sm-6 border-right"><?php if (isset($iPrixVenteActAutre)) echo $iPrixVenteActAutre.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iPrixVenteProd)) echo $iPrixVenteProd.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iPrixVenteLogistique)) echo $iPrixVenteLogistique.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iPrixVenteActAutre)) echo $iPrixVenteActAutre.' €/m²'; ?></div>
 							</div>
 						</div>
 						<div class="col-sm-1 hachure"></div>
@@ -257,8 +260,9 @@
 						</div>
 						<div class="col-sm-2 border-right text-center">
 							<div class="row">
-								<div class="col-sm-6 border-right"><?php if (isset($iCFProd) && $iCFProd>0) echo $iCFProd.' €/m²'; ?></div>
-								<div class="col-sm-6 border-right"><?php if (isset($iCFActAutre) && $iCFActAutre>0) echo $iCFActAutre.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iCFProd) && $iCFProd>0) echo $iCFProd.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iCFLogistique) && $iCFLogistique>0) echo $iCFLogistique.' €/m²'; ?></div>
+								<div class="col-sm-4 border-right"><?php if (isset($iCFActAutre) && $iCFActAutre>0) echo $iCFActAutre.' €/m²'; ?></div>
 							</div>
 						</div>
 						<div class="col-sm-1 hachure"></div>
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.php b/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.php
index 80cd62e8..ae14f6b4 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_1_operation.php
@@ -69,7 +69,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 							
 
 							// get accession libre aidee
-							$sSql8="SELECT id_indicateur_logement_familliaux_accession, round(sum(accession_libre)::numeric) AS sum_accession_libre, round(coalesce(sum(accession_abordable),0)+coalesce(sum(accesion_sociale_securise),0)+coalesce(sum(psla),0)) AS sum_accession_aide, round(avg(accession_libre)::numeric) AS avg_accession_libre, round(avg(accession_abordable)) AS avg_accession_abordable, round(avg(accesion_sociale_securise)) AS avg_accesion_sociale_securise, round(avg(psla)) AS avg_psla FROM ".$sSchema.".logement_familliaux_accession".$sWhereIdProgramme." AND id_indicateur_logement_familliaux_accession IN (1,2,4,5,8,9) GROUP BY id_indicateur_logement_familliaux_accession";
+							$sSql8="SELECT id_indicateur_logement_familliaux_accession, round(sum(accession_libre::numeric)) AS sum_accession_libre, round(coalesce(sum(accession_abordable::numeric),0)+coalesce(sum(accession_sociale_securise ::numeric),0)+coalesce(sum(psla::numeric),0)) AS sum_accession_aide, round(avg(accession_libre::numeric)) AS avg_accession_libre, round(avg(accession_abordable::numeric)) AS avg_accession_abordable, round(avg(accession_sociale_securise ::numeric)) AS avg_accession_sociale_securise , round(avg(psla::numeric)) AS avg_psla FROM ".$sSchema.".logement_familliaux_accession".$sWhereIdProgramme." AND id_indicateur_logement_familliaux_accession IN (1,2,4,5,8,9) GROUP BY id_indicateur_logement_familliaux_accession";
 							foreach ($oConn->query($sSql8) as $aRow){
 								if ($aRow['id_indicateur_logement_familliaux_accession']==1){
 									isset($iNbLgtFam) ? $iNbLgtFam=$iNbLgtFam+$aRow['sum_accession_libre'] : $iNbLgtFam=$aRow['sum_accession_libre'];
@@ -84,7 +84,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 									if(!is_null($aRow['avg_accession_libre'])) array_push($aCFAccessionLibre,$aRow['avg_accession_libre']);
 									if(!isset($aCFAccessionAidee)) $aCFAccessionAidee=array();
 									if(!is_null($aRow['avg_accession_abordable'])) array_push($aCFAccessionAidee,$aRow['avg_accession_abordable']);
-									if(!is_null($aRow['avg_accesion_sociale_securise'])) array_push($aCFAccessionAidee,$aRow['avg_accesion_sociale_securise']);
+									if(!is_null($aRow['avg_accession_sociale_securise '])) array_push($aCFAccessionAidee,$aRow['avg_accession_sociale_securise ']);
 									if(!is_null($aRow['avg_psla'])) array_push($aCFAccessionAidee,$aRow['avg_psla']);
 								}
 								if ($aRow['id_indicateur_logement_familliaux_accession']==8 or $aRow['id_indicateur_logement_familliaux_accession']==9){
@@ -92,7 +92,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 									if(!is_null($aRow['avg_accession_libre'])) array_push($aPVAccessionLibre,$aRow['avg_accession_libre']);
 									if(!isset($aPVAccessionAidee)) $aPVAccessionAidee=array();
 									if(!is_null($aRow['avg_accession_abordable'])) array_push($aPVAccessionAidee,$aRow['avg_accession_abordable']);
-									if(!is_null($aRow['avg_accesion_sociale_securise'])) array_push($aPVAccessionAidee,$aRow['avg_accesion_sociale_securise']);
+									if(!is_null($aRow['avg_accession_sociale_securise '])) array_push($aPVAccessionAidee,$aRow['avg_accession_sociale_securise ']);
 									if(!is_null($aRow['avg_psla'])) array_push($aPVAccessionAidee,$aRow['avg_psla']);
 								}
 							}
@@ -175,22 +175,26 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 							if (isset($aCFCommerce)) $iCFCommerce = round(array_sum($aCFCommerce)/count($aCFCommerce));
 							if (isset($aCFHotel)) $iCFHotel = round(array_sum($aCFHotel)/count($aCFHotel));
 							//get prod/activite
-							$sSql7="SELECT id_indicateur_activite_industrie, round(sum(production_industrie_logistique)) AS sum_production_industrie_logistique, round(sum(autre)) AS sum_autre, round(avg(production_industrie_logistique)) AS avg_production_industrie_logistique, round(avg(autre)) AS avg_autre FROM ".$sSchema.".activite_industrie".$sWhereIdProgramme." AND id_indicateur_activite_industrie IN (2,3,4,7) GROUP BY id_indicateur_activite_industrie";
+							$sSql7="SELECT id_indicateur_activite_industrie, round(sum(production_industrie)) AS sum_production_industrie, round(sum(logistique)) AS sum_logistique, round(sum(autre)) AS sum_autre, round(avg(production_industrie)) AS avg_production_industrie, round(avg(logistique)) AS avg_logistique, round(avg(autre)) AS avg_autre FROM ".$sSchema.".activite_industrie".$sWhereIdProgramme." AND id_indicateur_activite_industrie IN (2,3,4,7) GROUP BY id_indicateur_activite_industrie";
 							foreach ($oConn->query($sSql7) as $aRow){
 								if ($aRow['id_indicateur_activite_industrie']==2){
-									$iSdpProd=$aRow['sum_production_industrie_logistique'];
+									$iSdpProd=$aRow['sum_production_industrie'];
+									$iSdpLogistique=$aRow['sum_logistique'];
 									$iSdpActAutre=$aRow['avg_autre'];
 								}
 								if ($aRow['id_indicateur_activite_industrie']==3 or $aRow['id_indicateur_activite_industrie']==4){
-									isset($iCFProd) ? array_push($iCFProd,$aRow['avg_production_industrie_logistique']) : $iCFProd=array($aRow['avg_production_industrie_logistique']);
+									isset($iCFProd) ? array_push($iCFProd,$aRow['avg_production_industrie']) : $iCFProd=array($aRow['avg_production_industrie']);
+									isset($iCFLogistique) ? array_push($iCFProd,$aRow['avg_logistique']) : $iCFProd=array($aRow['avg_logistique']);
 									isset($iCFActAutre) ? array_push($iCFActAutre,$aRow['avg_autre']) : $iCFActAutre=array($aRow['avg_autre']);
 								}
 								if ($aRow['id_indicateur_activite_industrie']==7){
-									$iPrixVenteProd = $aRow['avg_production_industrie_logistique'];
+									$iPrixVenteProd = $aRow['avg_production_industrie'];
+									$iPrixVenteLogistique = $aRow['avg_logistique'];
 									$iPrixVenteActAutre = $aRow['avg_autre'];
 								}
 							}
 							if (isset($iCFProd)) $iCFProd = round(array_sum($iCFProd)/count($iCFProd));
+							if (isset($iCFLogistique)) $iCFLogistique = round(array_sum($iCFLogistique)/count($iCFLogistique));
 							if (isset($iCFActAutre)) $iCFActAutre = round(array_sum($iCFActAutre)/count($iCFActAutre));
 							// get equipement
 							$oResult5 = $oConn->prepare("SELECT round(sum(sdp)::numeric) AS sdp FROM ".$sSchema.".equipement_structure".$sWhereIdProgramme);
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_2_type.php b/src/vitis/vas/doc/suivi_prod_immo/get_2_type.php
index 188fd230..7584b67d 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_2_type.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_2_type.php
@@ -74,13 +74,13 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 							// echo $sCommand;
 							$output = shell_exec($sCommand);/**/
 							$sUrlMapImage=$properties['web_server_name']."/ws_data/vm4ms/map/tmp/".$sNameMapImage;
-							$sSql="SELECT code_financement_equ_public, count(DISTINCT id_programme), array_to_string(array_agg(id_programme), ',') AS id_programme, round(avg(charge_fonciere_moy)) AS charge_fonciere_moy FROM (SELECT id_programme, CASE WHEN operation_tr_financement_equ_public.code_financement_equ_public='PUP' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='FINZAC' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='TA' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='TAM' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='AUT' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='PEPE' THEN operation_tr_financement_equ_public.code_financement_equ_public ELSE 'ND' END AS code_financement_equ_public, charge_fonciere_moy FROM (((".$sSchema.".operation LEFT JOIN ".$sSchema.".operation_tr_financement_equ_public ON operation.id_operation=operation_tr_financement_equ_public.id_operation) INNER JOIN ".$sSchema.".ilot ON ilot.id_operation=operation.id_operation) INNER JOIN ".$sSchema.".programme_immobilier ON programme_immobilier.id_ilot=ilot.id_ilot) INNER JOIN ".$sSchema.".operation_ctm ON operation_ctm.id_operation=operation.id_operation ".$sWhereClause2.") AS t GROUP BY code_financement_equ_public";
+							$sSql="SELECT code_financement_equ_public, count(DISTINCT id_programme), array_to_string(array_agg(id_programme), ',') AS id_programme, round(avg(charge_fonciere_moy::numeric)) AS charge_fonciere_moy FROM (SELECT id_programme, CASE WHEN operation_tr_financement_equ_public.code_financement_equ_public='PUP' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='FINZAC' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='TA' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='TAM' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='AUT' THEN operation_tr_financement_equ_public.code_financement_equ_public WHEN operation_tr_financement_equ_public.code_financement_equ_public='PEPE' THEN operation_tr_financement_equ_public.code_financement_equ_public ELSE 'ND' END AS code_financement_equ_public, charge_fonciere_moy FROM (((".$sSchema.".operation LEFT JOIN ".$sSchema.".operation_tr_financement_equ_public ON operation.id_operation=operation_tr_financement_equ_public.id_operation) INNER JOIN ".$sSchema.".ilot ON ilot.id_operation=operation.id_operation) INNER JOIN ".$sSchema.".programme_immobilier ON programme_immobilier.id_ilot=ilot.id_ilot) INNER JOIN ".$sSchema.".operation_ctm ON operation_ctm.id_operation=operation.id_operation ".$sWhereClause2.") AS t GROUP BY code_financement_equ_public";
 							// echo $sSql;
 							$aPourcCFPV=$aPV=$aCF=$aNb=array();
 							foreach ($oConn->query($sSql) as $aRow){
 								if(!is_null($aRow['count'])) $aNb[$aRow['code_financement_equ_public']]=$aRow['count'];
 								if(!is_null($aRow['charge_fonciere_moy'])) $aCF[$aRow['code_financement_equ_public']]=$aRow['charge_fonciere_moy'];
-								$oResult3 = $oConn->prepare("SELECT round((COALESCE(avg1, 0) + COALESCE(avg2, 0) + COALESCE(avg3, 0) + COALESCE(avg4)) / ( CASE WHEN avg1 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg2 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg3 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg4 IS NULL THEN 0 ELSE 1 END)) AS pv_moy FROM (SELECT  round(avg(accession_libre)) AS avg1, round(avg(accession_abordable)) AS avg2, round(avg(accesion_sociale_securise)) AS avg3, round(avg(psla)) AS avg4	FROM ".$sSchema.".logement_familliaux_accession	WHERE id_programme IN (".$aRow['id_programme'].") AND id_indicateur_logement_familliaux_accession IN (8,9)) AS t");
+								$oResult3 = $oConn->prepare("SELECT round((COALESCE(avg1, 0) + COALESCE(avg2, 0) + COALESCE(avg3, 0) + COALESCE(avg4)) / ( CASE WHEN avg1 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg2 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg3 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg4 IS NULL THEN 0 ELSE 1 END)) AS pv_moy FROM (SELECT  round(avg(accession_libre::numeric)) AS avg1, round(avg(accession_abordable::numeric)) AS avg2, round(avg(accession_sociale_securise::numeric)) AS avg3, round(avg(psla::numeric)) AS avg4	FROM ".$sSchema.".logement_familliaux_accession	WHERE id_programme IN (".$aRow['id_programme'].") AND id_indicateur_logement_familliaux_accession IN (8,9)) AS t");
 								$oResult3->execute();
 								$aPrixVenteMoy = $oResult3->fetchAll();
 								if (isset($aPrixVenteMoy[0])) $aPV[$aRow['code_financement_equ_public']]=$aPrixVenteMoy[0]['pv_moy'];
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.html b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.html
index 5bc3833e..a5369873 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.html
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.html
@@ -14,7 +14,7 @@
 			<div class="col-sm-8 "></div>
 		</div>
 		<div class="row mt-4">
-			<div class="col-sm-4 date_maj" style="color:black"><?php echo $sTitle; ?> : <b><?php echo $_REQUEST['nom_amenageur']; ?></b></div>
+			<div class="col-sm-4 date_maj" style="color:black"><?php echo $sTitle; ?> : <b><?php echo $_REQUEST['concessionnaire_amenagement']; ?></b></div>
 			<div class="col-sm-8 "></div>
 		</div>
 		<div class="row"><div class="col-sm-12 ">nombre d'opération : <?php echo $iNbOperation; ?></div></div>
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.php b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.php
index eaa4aa37..1a86a244 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur.php
@@ -1,12 +1,12 @@
 <?php
-// https://geo.urbalyon.org/doc/suivi_prod_immo/get_1_operation.php?id_operation=1041
+// https://geo.urbalyon.org/doc/suivi_prod_immo/get_3_porteur.php?concessionnaire_amenagement=1041
 session_start();
 if (isset($_REQUEST['login'])) $_SESSION['login_bd_prod_immo']=$_REQUEST['login'];
 
 if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 	if($_REQUEST['token']==$_SESSION['token_bd_prod_immo']){
 
-		if (isset($_REQUEST['nom_amenageur']) && !is_null($_REQUEST['nom_amenageur'])){
+		if (isset($_REQUEST['concessionnaire_amenagement']) && !is_null($_REQUEST['concessionnaire_amenagement'])){
 			require_once("../../rest/conf/properties.inc");
 			require_once("properties_suivi_prod_immo.inc");
 			$sSchema=$properties['schema_prod_immo'];
@@ -18,7 +18,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 				
 				if($oConn){
 					// get data Opérations
-					$sWhereAmenageur=" WHERE nom_amenageur='".$_REQUEST['nom_amenageur']."'";
+					$sWhereAmenageur=" WHERE concessionnaire_amenagement='".$_REQUEST['concessionnaire_amenagement']."'";
 					$oResult = $oConn->prepare("SELECT * FROM ".$sSchema.".v_operation_layer".$sWhereAmenageur);
 					$oResult->execute();
 
@@ -30,7 +30,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						$aIdOperation=array();
 						foreach ($aOperations as $aOperation)
 							array_push($aIdOperation, $aOperation["id_operation"]);
-						$sNameMapImage=strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['nom_amenageur'])))."_porteur.png";
+						$sNameMapImage=strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['concessionnaire_amenagement'])))."_porteur.png";
 						$oResult2 = $oConn->prepare("SELECT round(st_xmin(st_buffer(st_envelope(st_union(geom)),150))) AS xmin, round(st_ymin(st_buffer(st_envelope(st_union(geom)),150))) AS ymin, round(st_ymax(st_buffer(st_envelope(st_union(geom)),150))) AS ymax, round(st_xmax(st_buffer(st_envelope(st_union(geom)),150))) AS xmax FROM ".$sSchema.".operation".$sWhereAmenageur);
 						$oResult2->execute();
 						$aOperations2 = $oResult2->fetchAll();
@@ -46,7 +46,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						foreach ($oConn->query($sSql) as $aRow){
 							if(!is_null($aRow['count'])) $aNb[$aRow['code_financement_equ_public']]=$aRow['count'];
 							if(!is_null($aRow['charge_fonciere_moy'])) $aCF[$aRow['code_financement_equ_public']]=$aRow['charge_fonciere_moy'];
-							$oResult3 = $oConn->prepare("SELECT round((COALESCE(avg1, 0) + COALESCE(avg2, 0) + COALESCE(avg3, 0) + COALESCE(avg4)) / ( CASE WHEN avg1 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg2 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg3 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg4 IS NULL THEN 0 ELSE 1 END)) AS pv_moy FROM (SELECT  round(avg(accession_libre)) AS avg1, round(avg(accession_abordable)) AS avg2, round(avg(accesion_sociale_securise)) AS avg3, round(avg(psla)) AS avg4	FROM ".$sSchema.".logement_familliaux_accession	WHERE id_programme IN (".$aRow['id_programme'].") AND id_indicateur_logement_familliaux_accession IN (8,9)) AS t");
+							$oResult3 = $oConn->prepare("SELECT round((COALESCE(avg1, 0) + COALESCE(avg2, 0) + COALESCE(avg3, 0) + COALESCE(avg4)) / ( CASE WHEN avg1 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg2 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg3 IS NULL THEN 0 ELSE 1 END + CASE WHEN avg4 IS NULL THEN 0 ELSE 1 END)) AS pv_moy FROM (SELECT  round(avg(accession_libre::numeric)) AS avg1, round(avg(accession_abordable::numeric)) AS avg2, round(avg(accession_sociale_securise::numeric)) AS avg3, round(avg(psla::numeric)) AS avg4	FROM ".$sSchema.".logement_familliaux_accession	WHERE id_programme IN (".$aRow['id_programme'].") AND id_indicateur_logement_familliaux_accession IN (8,9)) AS t");
 							$oResult3->execute();
 							$aPrixVenteMoy = $oResult3->fetchAll();
 							if (isset($aPrixVenteMoy[0])) $aPV[$aRow['code_financement_equ_public']]=$aPrixVenteMoy[0]['pv_moy'];
@@ -76,15 +76,15 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						$aPromoteurs=array("Cogedim", "Vinci Immobilier");
 						$aAmenageurs=array("SERL", "LMH");
 						$aRegies=array("Métropole de Lyon");
-						if (in_array($_REQUEST['nom_amenageur'], $aPromoteurs)) $sTitle="Promoteur immobilier";
-						if (in_array($_REQUEST['nom_amenageur'], $aAmenageurs)) $sTitle="Aménageur";
-						if (in_array($_REQUEST['nom_amenageur'], $aRegies)) $sTitle="Opération(s) suivi en régie";
+						if (in_array($_REQUEST['concessionnaire_amenagement'], $aPromoteurs)) $sTitle="Promoteur immobilier";
+						if (in_array($_REQUEST['concessionnaire_amenagement'], $aAmenageurs)) $sTitle="Aménageur";
+						if (in_array($_REQUEST['concessionnaire_amenagement'], $aRegies)) $sTitle="Opération(s) suivi en régie";
 
 
 						
 						include ('get_3_porteur.html');
 					}else{
-						$sError="Erreur : ".$oResult->rowCount()." opération(s) trouvée(s) pour l'aménageur ".$_REQUEST['nom_amenageur'].".";
+						$sError="Erreur : ".$oResult->rowCount()." opération(s) trouvée(s) pour l'aménageur ".$_REQUEST['concessionnaire_amenagement'].".";
 						$oResult->closeCursor();
 						include ('get_error.html');
 					}
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur_excel.php b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur_excel.php
index 40c99666..493b862f 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur_excel.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_3_porteur_excel.php
@@ -6,7 +6,7 @@ if (isset($_REQUEST['login'])) $_SESSION['login_bd_prod_immo']=$_REQUEST['login'
 if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 	if($_REQUEST['token']==$_SESSION['token_bd_prod_immo']){
 
-		if (isset($_REQUEST['nom_amenageur']) && !is_null($_REQUEST['nom_amenageur'])){
+		if (isset($_REQUEST['concessionnaire_amenagement']) && !is_null($_REQUEST['concessionnaire_amenagement'])){
 			require_once("../../rest/conf/properties.inc");
 			require_once("properties_suivi_prod_immo.inc");
 			$sSchema=$properties['schema_prod_immo'];
@@ -18,7 +18,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 				
 				if($oConn){
 					// get data Opérations
-					$sWhereAmenageur=" WHERE nom_amenageur='".$_REQUEST['nom_amenageur']."'";
+					$sWhereAmenageur=" WHERE concessionnaire_amenagement='".$_REQUEST['concessionnaire_amenagement']."'";
 					$oResult = $oConn->prepare("SELECT * FROM ".$sSchema.".v_operation_layer".$sWhereAmenageur);
 					$oResult->execute();
 
@@ -30,7 +30,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						$aIdOperation=array();
 						foreach ($aOperations as $aOperation)
 							array_push($aIdOperation, $aOperation["id_operation"]);
-						$sNameMapImage=strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['nom_amenageur'])))."_porteur.png";
+						$sNameMapImage=strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['concessionnaire_amenagement'])))."_porteur.png";
 						$oResult2 = $oConn->prepare("SELECT round(st_xmin(st_buffer(st_envelope(st_union(geom)),150))) AS xmin, round(st_ymin(st_buffer(st_envelope(st_union(geom)),150))) AS ymin, round(st_ymax(st_buffer(st_envelope(st_union(geom)),150))) AS ymax, round(st_xmax(st_buffer(st_envelope(st_union(geom)),150))) AS xmax FROM ".$sSchema.".operation".$sWhereAmenageur);
 						$oResult2->execute();
 						$aOperations2 = $oResult2->fetchAll();
@@ -69,13 +69,13 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						if (count($aPourcCFPV)>0) $aPourcCFPV['MOY']=round($iCFPVTotal/$aNb['TOTAL'],3);
 
 						// Python
-						$data = array('nom_amenageur'=>$_REQUEST['nom_amenageur'], 
-										'nom_amenageur_file'=>strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['nom_amenageur']))),
+						$data = array('concessionnaire_amenagement'=>$_REQUEST['concessionnaire_amenagement'], 
+										'nom_amenageur_file'=>strtolower(preg_replace("#[^a-zA-Z]#", "", str_replace(' ', '_', $_REQUEST['concessionnaire_amenagement']))),
 										'map'=>array('xmin'=>$aOperations2['xmin'], 'ymin'=>$aOperations2['ymin'], 'xmax'=>$aOperations2['xmax'], 'ymax'=>$aOperations2['ymax'], 'filter'=>implode(",", $aIdOperation)),
 										'NB'=>$aNb, 'CF'=>$aCF, 'PV'=>$aPV, 'PourcCFPV'=>$aPourcCFPV,
 										'nb_operation'=>$iNbOperation);
 						// var_dump(json_encode($data));
-						// echo mb_detect_encoding($_REQUEST['nom_amenageur']);
+						// echo mb_detect_encoding($_REQUEST['concessionnaire_amenagement']);
 						echo 'python get_excel_3_porteur.py '.escapeshellarg(json_encode($data));
 						$sResult = shell_exec('python get_excel_3_porteur.py '.escapeshellarg(json_encode($data)));
 						$aResultData = json_decode($sResult, true);
@@ -104,7 +104,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						}
 
 					}else{
-						$sError="Erreur : ".$oResult->rowCount()." opération(s) trouvée(s) pour l'aménageur ".$_REQUEST['nom_amenageur'].".";
+						$sError="Erreur : ".$oResult->rowCount()." opération(s) trouvée(s) pour l'aménageur ".$_REQUEST['concessionnaire_amenagement'].".";
 						$oResult->closeCursor();
 						include ('get_error.html');
 					}
diff --git a/src/vitis/vas/doc/suivi_prod_immo/get_4_logement.php b/src/vitis/vas/doc/suivi_prod_immo/get_4_logement.php
index 7b39e3a0..647b0ecc 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/get_4_logement.php
+++ b/src/vitis/vas/doc/suivi_prod_immo/get_4_logement.php
@@ -161,7 +161,7 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 						
 						$oResult4->closeCursor();
 						// logement accession
-						$oResult5=$oConn->prepare("SELECT id_programme, id_indicateur_logement_familliaux_accession, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accession_libre,0)) ELSE avg(COALESCE(accession_libre,0)) END AS accession_libre, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accession_abordable,0)) ELSE avg(COALESCE(accession_abordable,0)) END AS accession_abordable, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accesion_sociale_securise,0)) ELSE avg(COALESCE(accesion_sociale_securise,0)) END AS accesion_sociale_securise, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(psla,0)) ELSE avg(COALESCE(psla,0)) END AS psla FROM ".$sSchema.".logement_familliaux_accession WHERE id_programme=".$iIdProgramme." AND id_indicateur_logement_familliaux_accession IN (1,4,5,8,9) GROUP BY id_programme, id_indicateur_logement_familliaux_accession");
+						$oResult5=$oConn->prepare("SELECT id_programme, id_indicateur_logement_familliaux_accession, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accession_libre::numeric,0)) ELSE avg(COALESCE(accession_libre::numeric,0)) END AS accession_libre, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accession_abordable::numeric,0)) ELSE avg(COALESCE(accession_abordable::numeric,0)) END AS accession_abordable, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(accession_sociale_securise::numeric,0)) ELSE avg(COALESCE(accession_sociale_securise::numeric,0)) END AS accession_sociale_securise, CASE WHEN id_indicateur_logement_familliaux_accession=1 THEN sum(COALESCE(psla::numeric,0)) ELSE avg(COALESCE(psla::numeric,0)) END AS psla FROM ".$sSchema.".logement_familliaux_accession WHERE id_programme=".$iIdProgramme." AND id_indicateur_logement_familliaux_accession IN (1,4,5,8,9) GROUP BY id_programme, id_indicateur_logement_familliaux_accession");
 						$oResult5->execute();
 						if($oResult5->rowCount()>0){
 							$aLogAccessions=$oResult5->fetchAll();
@@ -180,10 +180,10 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 											$aProgramme2['nb_accession_abordable']=$aLogAccession['accession_abordable'];
 											$aTotaux['nb_accession_abordable']=$aTotaux['nb_accession_abordable']+$aLogAccession['accession_abordable'];
 										}
-										if($aLogAccession['accesion_sociale_securise']>0){
+										if($aLogAccession['accession_sociale_securise']>0){
 											$bSetAccessionSecurisee=true;
-											$aProgramme2['nb_accession_sociale_securise']=$aLogAccession['accesion_sociale_securise'];
-											$aTotaux['nb_accession_sociale_securise']=$aTotaux['nb_accession_sociale_securise']+$aLogAccession['accesion_sociale_securise'];
+											$aProgramme2['nb_accession_sociale_securise']=$aLogAccession['accession_sociale_securise'];
+											$aTotaux['nb_accession_sociale_securise']=$aTotaux['nb_accession_sociale_securise']+$aLogAccession['accession_sociale_securise'];
 										}
 										if($aLogAccession['psla']>0) $aProgramme2['nb_psla']=$aLogAccession['psla'];
 										break;
@@ -199,10 +199,10 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 											$aCFIAccessionAbordable[count($aCFIAccessionAbordable)]=$aLogAccession['accession_abordable'];
 											$aTotaux['cfi_accession_abordable'][count($aTotaux['cfi_accession_abordable'])]=$aLogAccession['accession_abordable'];
 										}
-										if(!is_null($aLogAccession['accesion_sociale_securise']) and $aLogAccession['accesion_sociale_securise']>0){
+										if(!is_null($aLogAccession['accession_sociale_securise']) and $aLogAccession['accession_sociale_securise']>0){
 											$bSetAccessionSecurisee=true;
-											$aCFIAccessionSocialeSecurise[count($aCFIAccessionSocialeSecurise)]=$aLogAccession['accesion_sociale_securise'];
-											$aTotaux['cfi_accession_sociale_securise'][count($aTotaux['cfi_accession_sociale_securise'])]=$aLogAccession['accesion_sociale_securise'];
+											$aCFIAccessionSocialeSecurise[count($aCFIAccessionSocialeSecurise)]=$aLogAccession['accession_sociale_securise'];
+											$aTotaux['cfi_accession_sociale_securise'][count($aTotaux['cfi_accession_sociale_securise'])]=$aLogAccession['accession_sociale_securise'];
 										}
 										break;
 									case 8:
@@ -217,10 +217,10 @@ if(isset($_REQUEST['token']) && isset($_SESSION['token_bd_prod_immo'])){
 											$aPVAccessionAbordable[count($aPVAccessionAbordable)]=$aLogAccession['accession_abordable'];
 											$aTotaux['pv_accession_abordable'][count($aTotaux['pv_accession_abordable'])]=$aLogAccession['accession_abordable'];
 										}
-										if(!is_null($aLogAccession['accesion_sociale_securise']) and $aLogAccession['accesion_sociale_securise']>0){
+										if(!is_null($aLogAccession['accession_sociale_securise']) and $aLogAccession['accession_sociale_securise']>0){
 											$bSetAccessionSecurisee=true;
-											$aPVAccessionSocialeSecurise[count($aPVAccessionSocialeSecurise)]=$aLogAccession['accesion_sociale_securise'];
-											$aTotaux['pv_accession_sociale_securise'][count($aTotaux['pv_accession_sociale_securise'])]=$aLogAccession['accesion_sociale_securise'];
+											$aPVAccessionSocialeSecurise[count($aPVAccessionSocialeSecurise)]=$aLogAccession['accession_sociale_securise'];
+											$aTotaux['pv_accession_sociale_securise'][count($aTotaux['pv_accession_sociale_securise'])]=$aLogAccession['accession_sociale_securise'];
 										}
 										break;
 								}
diff --git a/src/vitis/vas/doc/suivi_prod_immo/js/form.js b/src/vitis/vas/doc/suivi_prod_immo/js/form.js
index b9f2cc94..9ca4a21d 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/js/form.js
+++ b/src/vitis/vas/doc/suivi_prod_immo/js/form.js
@@ -37,11 +37,11 @@ $(document).ready(function(){
 		}
 	});
 	$("#get_porteur").on('click', function(event) {
-		var sNomAmenageur = $("#l_amenageur").val();
-		if(sNomAmenageur==''){
+		var sConcessionnaireAmenagement = $("#l_amenageur").val();
+		if(sConcessionnaireAmenagement==''){
 			alert('Veuillez sélectioner un aménageur dans la liste.');
 		}else{
-			window.open('https://geo.urbalyon.org/doc/suivi_prod_immo/get_3_porteur.php?token='+sToken+'&nom_amenageur='+sNomAmenageur);
+			window.open('https://geo.urbalyon.org/doc/suivi_prod_immo/get_3_porteur.php?token='+sToken+'&concessionnaire_amenagement='+sConcessionnaireAmenagement);
 		}
 	});
 	$("#get_logement").on('click', function(event) {
@@ -68,11 +68,11 @@ $(document).ready(function(){
 		}
 	});
 	$("#get_porteur_excel").on('click', function(event) {
-		var sNomAmenageur = $("#l_amenageur").val();
-		if(sNomAmenageur==''){
+		var sConcessionnaireAmenagement = $("#l_amenageur").val();
+		if(sConcessionnaireAmenagement==''){
 			alert('Veuillez sélectioner un aménageur dans la liste.');
 		}else{
-			window.open('https://geo.urbalyon.org/doc/suivi_prod_immo/get_3_porteur_excel.php?token='+sToken+'&nom_amenageur='+sNomAmenageur);
+			window.open('https://geo.urbalyon.org/doc/suivi_prod_immo/get_3_porteur_excel.php?token='+sToken+'&concessionnaire_amenagement='+sConcessionnaireAmenagement);
 		}
 	});
 
diff --git a/src/vitis/vas/doc/suivi_prod_immo/properties_suivi_prod_immo.inc b/src/vitis/vas/doc/suivi_prod_immo/properties_suivi_prod_immo.inc
index 6f248733..8e27ade3 100644
--- a/src/vitis/vas/doc/suivi_prod_immo/properties_suivi_prod_immo.inc
+++ b/src/vitis/vas/doc/suivi_prod_immo/properties_suivi_prod_immo.inc
@@ -8,7 +8,7 @@ $properties['schema_prod_immo']='prod_immo';
 // page d'acceuil
 $properties['access_page']='form_1_operation.php';
 
-$properties['server'] = 'srv-postgres';
+$properties['server'] = '192.168.2.114';
 $properties['port'] = 5432;
 
 ?>
\ No newline at end of file
diff --git a/src/vitis/vas/rest/class/vitis_lib/Connection.class.inc b/src/vitis/vas/rest/class/vitis_lib/Connection.class.inc
index fa801dc5..bb3bc4f6 100755
--- a/src/vitis/vas/rest/class/vitis_lib/Connection.class.inc
+++ b/src/vitis/vas/rest/class/vitis_lib/Connection.class.inc
@@ -235,6 +235,7 @@ class Connection {
             'sSchema' => array('value' => $sSchema, 'type' => 'column_name'),
             'sTable' => array('value' => $sTable, 'type' => 'column_name')
         );
+
         $sSql = "SELECT
     	has_table_privilege('\"[sSchema]\".\"[sTable]\"','insert') AS \"INSERT\",
     	has_table_privilege('\"[sSchema]\".\"[sTable]\"','select') AS \"SELECT\",
-- 
GitLab