-- MàJ de la version en BDD
UPDATE om_version SET om_version = '4.14.0' WHERE exists(SELECT 1 FROM om_version) = true;
INSERT INTO om_version
SELECT ('4.14.0') WHERE exists(SELECT 1 FROM om_version) = false;

--
-- BEGIN / #1099 — [#9403] Ajout d'un champ "Commune" en tant qu'attribut d'un dossier
--

-- nouvelle table 'commune'
CREATE TABLE commune (
    commune integer NOT NULL,
    typecom character varying(4) NULL,
    com character varying(5) NOT NULL,
    reg character varying(2) NOT NULL,
    dep character varying(3) NOT NULL,
    arr character varying(4) NULL,
    tncc character varying(1) NULL,
    ncc character varying(200) NULL,
    nccenr character varying(200) NULL,
    libelle character varying(45) NULL,
    can character varying(5) NULL,
    comparent character varying(5) NULL,
    om_validite_debut date,
    om_validite_fin date
);

ALTER TABLE ONLY commune
    ADD CONSTRAINT commune_pkey PRIMARY KEY (commune);

CREATE SEQUENCE commune_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

COMMENT ON COLUMN commune.commune IS 'Identifiant technique de la commune';
COMMENT ON COLUMN commune.typecom IS 'Type de commune';
COMMENT ON COLUMN commune.com IS 'Code INSEE de la commune';
COMMENT ON COLUMN commune.reg IS 'Code INSEE de la région';
COMMENT ON COLUMN commune.dep IS 'Code INSEE du département';
COMMENT ON COLUMN commune.arr IS 'Code d’arrondissement sur 3 caractères (métropole) ou 4';
COMMENT ON COLUMN commune.tncc IS 'Type de nom en clair';
COMMENT ON COLUMN commune.ncc IS 'Nom en clair (majuscules)';
COMMENT ON COLUMN commune.nccenr IS 'Nom en typographie riche';
COMMENT ON COLUMN commune.libelle IS 'Nom en typographie riche avec article';
COMMENT ON COLUMN commune.can IS 'Code canton. Pour les communes « multi-cantonales » code décliné de 99 à 90 (pseudo-canton) ou de 89 à 80 (communes nouvelles)';
COMMENT ON COLUMN commune.comparent IS 'Code de la commune parente pour les arrondissements municipaux et les communes associées ou déléguées.';
COMMENT ON COLUMN commune.om_validite_debut IS 'Date de validité (début)';
COMMENT ON COLUMN commune.om_validite_fin IS 'Date de validité (fin)';

ALTER TABLE dossier_autorisation ADD commune integer NULL;
ALTER TABLE ONLY dossier_autorisation
    ADD CONSTRAINT dossier_autorisation_commune FOREIGN KEY (commune) REFERENCES commune(commune);

COMMENT ON COLUMN dossier_autorisation.commune IS 'Commune associée au dossier';

ALTER TABLE dossier ADD commune integer NULL;
ALTER TABLE ONLY dossier
    ADD CONSTRAINT dossier_commune FOREIGN KEY (commune) REFERENCES commune(commune);

COMMENT ON COLUMN dossier.commune IS 'Commune associée au dossier';

ALTER TABLE demande ADD commune integer NULL;
ALTER TABLE ONLY demande
    ADD CONSTRAINT demande_commune FOREIGN KEY (commune) REFERENCES commune(commune);


COMMENT ON COLUMN demande.commune IS 'Commune associée à la demande';


-- nouvelle table 'region'
CREATE TABLE region (
    region integer NOT NULL,
    reg character varying(2) NOT NULL,
    cheflieu character varying(5) NOT NULL,
    tncc character varying(1) NULL,
    ncc character varying(200) NULL,
    nccenr character varying(200) NULL,
    libelle character varying(45) NULL,
    om_validite_debut date NOT NULL,
    om_validite_fin date
);

ALTER TABLE ONLY region
    ADD CONSTRAINT region_pkey PRIMARY KEY (region);

CREATE SEQUENCE region_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

COMMENT ON COLUMN region.region IS 'Identifiant technique de la region';
COMMENT ON COLUMN region.reg IS 'Code INSEE de la région';
COMMENT ON COLUMN region.cheflieu IS 'Code INSEE du chef lieu';
COMMENT ON COLUMN region.tncc IS 'Type de nom en clair';
COMMENT ON COLUMN region.ncc IS 'Nom en clair (majuscules)';
COMMENT ON COLUMN region.nccenr IS 'Nom en typographie riche';
COMMENT ON COLUMN region.libelle IS 'Nom en typographie riche avec article';
COMMENT ON COLUMN region.om_validite_debut IS 'Date de validité (début)';
COMMENT ON COLUMN region.om_validite_fin IS 'Date de validité (fin)';


-- nouvelle table 'departement'
CREATE TABLE departement (
    departement integer NOT NULL,
    dep character varying(3) NOT NULL,
    reg character varying(2) NOT NULL,
    cheflieu character varying(5) NOT NULL,
    tncc character varying(1) NULL,
    ncc character varying(200) NULL,
    nccenr character varying(200) NULL,
    libelle character varying(45) NULL,
    om_validite_debut date NOT NULL,
    om_validite_fin date
);

ALTER TABLE ONLY departement
    ADD CONSTRAINT departement_pkey PRIMARY KEY (departement);

CREATE SEQUENCE departement_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

COMMENT ON COLUMN departement.departement IS 'Identifiant technique de la departement';
COMMENT ON COLUMN departement.dep IS 'Code INSEE du département';
COMMENT ON COLUMN departement.reg IS 'Code INSEE de la région';
COMMENT ON COLUMN departement.cheflieu IS 'Code INSEE du chef lieu';
COMMENT ON COLUMN departement.tncc IS 'Type de nom en clair';
COMMENT ON COLUMN departement.ncc IS 'Nom en clair (majuscules)';
COMMENT ON COLUMN departement.nccenr IS 'Nom en typographie riche';
COMMENT ON COLUMN departement.libelle IS 'Nom en typographie riche avec article';
COMMENT ON COLUMN departement.om_validite_debut IS 'Date de validité (début)';
COMMENT ON COLUMN departement.om_validite_fin IS 'Date de validité (fin)';

ALTER TABLE affectation_automatique ADD communes character varying(2000) NULL;
COMMENT ON COLUMN affectation_automatique.communes IS 'Communes associées';

CREATE INDEX affectation_automatique_communes_idx ON affectation_automatique USING btree (communes);
CREATE INDEX affectation_automatique_communes_collectivite_idx ON affectation_automatique USING btree (communes, om_collectivite);

-- Ajout de la permission de manipuler les communes pour les profils
-- ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL et ADMINISTRATEUR GENERAL
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'commune', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'commune' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'commune', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'commune' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);

-- Ajout de la permission de manipuler les départements pour les profils
-- ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL et ADMINISTRATEUR GENERAL
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'departement', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'departement' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'departement', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'departement' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);

-- Ajout de la permission de manipuler les régions pour les profils
-- ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL et ADMINISTRATEUR GENERAL
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'region', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'region' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'region', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'region' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);

-- Mise à jour de la requête instruction
UPDATE
    om_requete
SET
    requete = REPLACE(REPLACE(requete,'-- Données contentieux du dossier d''instruction','
    -- Localisation du dossier

    commune.com as commune_code,
    commune.libelle as commune_libelle,
    commune.dep as departement_code,
    departement.libelle as departement_libelle,
    commune.reg as region_code,
    region.libelle as region_libelle,

    -- Données contentieux du dossier d''instruction'
    ), 'WHERE instruction.instruction = &idx', '
LEFT JOIN
    &DB_PREFIXEcommune
    ON
        dossier.commune = commune.commune
LEFT JOIN LATERAL (
        SELECT
            dep, libelle
        FROM
            &DB_PREFIXEdepartement
        WHERE
            dep = commune.dep
            AND (
                om_validite_debut IS NULL
                OR om_validite_debut <= CURRENT_DATE
            )
        ORDER BY
            om_validite_fin DESC NULLS FIRST,
            om_validite_debut DESC NULLS FIRST
        LIMIT 1
    ) AS departement
    ON departement.dep = commune.dep
LEFT JOIN LATERAL (
        SELECT
            reg, libelle
        FROM
            &DB_PREFIXEregion
        WHERE
            reg = commune.reg
            AND (
                om_validite_debut IS NULL
                OR om_validite_debut <= CURRENT_DATE
            )
        ORDER BY
            om_validite_fin DESC NULLS FIRST,
            om_validite_debut DESC NULLS FIRST
        LIMIT 1
    ) AS region
    ON region.reg = region.reg

WHERE instruction.instruction = &idx'),

    merge_fields = REPLACE(merge_fields, '-- Données contentieux du dossier d''instruction',
'-- Localisation du dossier
[commune_code]
[commune_libelle]
[departement_code]
[departement_libelle]
[region_code]
[region_libelle]

-- Données contentieux du dossier d''instruction')

WHERE
    code = 'instruction'
    AND libelle = 'Récapitulatif du dossier d''instruction / instruction';

--
-- END / #1099 — [#9403] Ajout d'un champ "Commune" en tant qu'attribut d'un dossier
--

--
-- BEGIN / Dématérialisation
--

--
CREATE TABLE task (
    task integer NOT NULL,
    type character varying(30) NOT NULL,
    timestamp_log text NOT NULL DEFAULT '{}',
    state character varying(20) NOT NULL DEFAULT 'draft',
    object_id character varying(30) NOT NULL
);
--
COMMENT ON TABLE task IS 'Liste des tâches à traiter pour la dématérialisation';
COMMENT ON COLUMN task.task IS 'Identifiant numérique unique de la tâche';
COMMENT ON COLUMN task.type IS 'Type de la tâche (XXX)';
COMMENT ON COLUMN task.timestamp_log IS 'Journal d''horodatage ';
COMMENT ON COLUMN task.state IS 'Statut (draft new pending done archived error debug)';
COMMENT ON COLUMN task.object_id IS 'Identifiant de l''objet métier';
--
CREATE SEQUENCE task_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER SEQUENCE task_seq OWNED BY task.task;
--
ALTER TABLE ONLY task
    ADD CONSTRAINT task_pkey PRIMARY KEY (task);

--
CREATE TABLE lien_id_interne_uid_externe (
    lien_id_interne_uid_externe integer NOT NULL,
    object character varying(30) NOT NULL,
    object_id character varying(30) NOT NULL,
    external_uid character varying(255) NOT NULL
);
--
COMMENT ON TABLE lien_id_interne_uid_externe IS 'Table de liaison entre un objet interne et un objet externe à l''aplication';
COMMENT ON COLUMN lien_id_interne_uid_externe.lien_id_interne_uid_externe IS 'Identifiant numérique unique de la liaison';
COMMENT ON COLUMN lien_id_interne_uid_externe.object IS 'Objet interne visé par la liaison';
COMMENT ON COLUMN lien_id_interne_uid_externe.object_id IS 'Identifiant unique de l''objet métier interne';
COMMENT ON COLUMN lien_id_interne_uid_externe.external_uid IS 'Identifiant unique de l''objet externe';
--
CREATE SEQUENCE lien_id_interne_uid_externe_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER SEQUENCE lien_id_interne_uid_externe_seq
  OWNED BY lien_id_interne_uid_externe.lien_id_interne_uid_externe;
--
ALTER TABLE ONLY lien_id_interne_uid_externe
    ADD CONSTRAINT lien_id_interne_uid_externe_pkey PRIMARY KEY (lien_id_interne_uid_externe);
--
ALTER TABLE ONLY lien_id_interne_uid_externe
    ADD CONSTRAINT lien_id_interne_uid_externe_object_id_key UNIQUE (external_uid, object, object_id);

--
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'task', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'task' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);
--
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'lien_id_interne_uid_externe', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'lien_id_interne_uid_externe' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);

-- Type document numérisé

--
ALTER TABLE document_numerise_type ALTER COLUMN code TYPE character varying(10);
--
ALTER TABLE document_numerise_type ADD COLUMN description text NULL;
ALTER TABLE document_numerise_type ADD COLUMN om_validite_debut date NULL;
ALTER TABLE document_numerise_type ADD COLUMN om_validite_fin date NULL;
COMMENT ON COLUMN document_numerise_type.description IS 'Description';
COMMENT ON COLUMN document_numerise_type.om_validite_debut IS 'Date de début de validité';
COMMENT ON COLUMN document_numerise_type.om_validite_fin IS 'Date de fin de validité';
--
ALTER TABLE ONLY document_numerise_type_categorie
    ADD CONSTRAINT document_numerise_type_categorie_libelle_key UNIQUE (libelle);

-- Ajout des champs pour l'architecte

ALTER TABLE architecte ADD COLUMN lieu_dit character varying(39) NULL;
ALTER TABLE architecte ADD COLUMN boite_postale character varying(5) NULL;
ALTER TABLE architecte ADD COLUMN cedex character varying(5) NULL;
COMMENT ON COLUMN architecte.lieu_dit IS 'Lieu-dit de l''adresse';
COMMENT ON COLUMN architecte.boite_postale IS 'Boîte postale de l''adresse';
COMMENT ON COLUMN architecte.cedex IS 'Cedex de l''adresse';

-- Ajout des champs pour l'architecte dans la table demandeur

ALTER TABLE demandeur ADD COLUMN num_inscription character varying(20) NULL;
ALTER TABLE demandeur ADD COLUMN nom_cabinet character varying(100) NULL;
ALTER TABLE demandeur ADD COLUMN conseil_regional character varying(100) NULL;
COMMENT ON COLUMN demandeur.num_inscription IS 'Numéro d''inscription au conseil national de l''ordre des architectes';
COMMENT ON COLUMN demandeur.nom_cabinet IS 'Nom du cabinet dans lequel travail l''architecte';
COMMENT ON COLUMN demandeur.conseil_regional IS 'Conseil régional de l''architecte';

INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'architecte_lc', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'architecte_lc' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);

INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'paysagiste', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'paysagiste' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);

-- Nature document numérisé

--
CREATE TABLE document_numerise_nature (
    document_numerise_nature integer NOT NULL,
    code character varying(10) NOT NULL,
    libelle character varying(255) NOT NULL,
    description text NULL,
    om_validite_debut date NULL,
    om_validite_fin date NULL
);
--
COMMENT ON TABLE document_numerise_nature IS 'Nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.document_numerise_nature IS 'Identifiant numérique unique de la nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.code IS 'Code aplhanumérique unique de la nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.libelle IS 'Libellé de la nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.description IS 'Description de la nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.om_validite_debut IS 'Date de début de validité de la nature de document numérisé';
COMMENT ON COLUMN document_numerise_nature.om_validite_fin IS 'Date de fin de validité de la nature de document numérisé';
--
CREATE SEQUENCE document_numerise_nature_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER SEQUENCE document_numerise_nature_seq
  OWNED BY document_numerise_nature.document_numerise_nature;
--
ALTER TABLE ONLY document_numerise_nature
    ADD CONSTRAINT document_numerise_nature_pkey PRIMARY KEY (document_numerise_nature);
--
ALTER TABLE ONLY document_numerise_nature
    ADD CONSTRAINT document_numerise_nature_code_key UNIQUE (code);
--
--
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'document_numerise_nature', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'document_numerise_nature' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
);

--
ALTER TABLE document_numerise ADD COLUMN document_numerise_nature integer NULL;
ALTER TABLE ONLY document_numerise
    ADD CONSTRAINT document_numerise_document_numerise_nature_fkey FOREIGN KEY (document_numerise_nature) REFERENCES document_numerise_nature(document_numerise_nature);

--
ALTER TABLE document_numerise_nature ADD COLUMN default_value boolean DEFAULT false;
COMMENT ON COLUMN document_numerise_nature.default_value IS 'Valeur à sélectionner par défaut lors de la présentation de la table en liste à choix';
-- Rendre unique le champ default_value seulement pour la valeur 't'
-- CREATE UNIQUE INDEX document_numerise_nature_default_value_t_unique_index ON document_numerise_nature ((default_value IS TRUE)) WHERE default_value IS TRUE;

--
-- END / Dématérialisation
--

--
-- BEGIN / #1085 — Mise à jour des CERFA
--

-- Ajout du champ co_piscine manquant dans les données techniques et CERFA

--
ALTER TABLE donnees_techniques ADD COLUMN co_piscine boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.co_piscine IS 'Piscine';
--
ALTER TABLE cerfa ADD COLUMN co_piscine boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_piscine IS 'Piscine';

-- Modification du champ am_exist_date dans les données techniques

--
ALTER TABLE donnees_techniques ALTER COLUMN am_exist_date TYPE character varying(100);

-- Ajout des champs dans cerfa/données techniques pour le mode de financement du projet

--
ALTER TABLE donnees_techniques ADD COLUMN co_fin_lls boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN co_fin_aa boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN co_fin_ptz boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN co_fin_autr text NULL;
COMMENT ON COLUMN donnees_techniques.co_fin_lls IS 'Mode de financement du projet : Logement Locatif Social';
COMMENT ON COLUMN donnees_techniques.co_fin_aa IS 'Mode de financement du projet : Accession Sociale (hors prêt à taux zéro)';
COMMENT ON COLUMN donnees_techniques.co_fin_ptz IS 'Mode de financement du projet : Prêt à taux zéro';
COMMENT ON COLUMN donnees_techniques.co_fin_autr IS 'Mode de financement du projet : Autres financements';
--
ALTER TABLE cerfa ADD COLUMN co_fin_lls boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_fin_aa boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_fin_ptz boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_fin_autr boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_fin_lls IS 'Mode de financement du projet : Logement Locatif Social';
COMMENT ON COLUMN cerfa.co_fin_aa IS 'Mode de financement du projet : Accession Sociale (hors prêt à taux zéro)';
COMMENT ON COLUMN cerfa.co_fin_ptz IS 'Mode de financement du projet : Prêt à taux zéro';
COMMENT ON COLUMN cerfa.co_fin_autr IS 'Mode de financement du projet : Autres financements';

--

--
ALTER TABLE donnees_techniques ADD COLUMN dia_ss_date date NULL;
ALTER TABLE donnees_techniques ADD COLUMN dia_ss_lieu character varying(255) NULL;
COMMENT ON COLUMN donnees_techniques.dia_ss_date IS 'Document signé le';
COMMENT ON COLUMN donnees_techniques.dia_ss_lieu IS 'Document signé à';
--
ALTER TABLE cerfa ADD COLUMN dia_ss_date boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN dia_ss_lieu boolean DEFAULT false;
COMMENT ON COLUMN cerfa.dia_ss_date IS 'Document signé le';
COMMENT ON COLUMN cerfa.dia_ss_lieu IS 'Document signé à';

--

--
ALTER TABLE donnees_techniques ADD COLUMN enga_decla_lieu character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN enga_decla_date date NULL;
COMMENT ON COLUMN donnees_techniques.enga_decla_lieu IS 'Engagement du déclarant : lieu de signature';
COMMENT ON COLUMN donnees_techniques.enga_decla_date IS 'Engagement du déclarant : date de signature';
--
ALTER TABLE cerfa ADD COLUMN enga_decla_lieu boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN enga_decla_date boolean DEFAULT false;
COMMENT ON COLUMN cerfa.enga_decla_lieu IS 'Engagement du déclarant : lieu de signature';
COMMENT ON COLUMN cerfa.enga_decla_date IS 'Engagement du déclarant : date de signature';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_archi_attest_honneur boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.co_archi_attest_honneur IS 'Je déclare sur l''honneur que mon projet entre dans l''une des situations pour lesquelles le recours à l''architecte n''est pas obligatoire';
--
ALTER TABLE cerfa ADD COLUMN co_archi_attest_honneur boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_archi_attest_honneur IS 'Je déclare sur l''honneur que mon projet entre dans l''une des situations pour lesquelles le recours à l''architecte n''est pas obligatoire';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_bat_niv_dessous_nb integer NULL;
COMMENT ON COLUMN donnees_techniques.co_bat_niv_dessous_nb IS 'Le nombre de niveaux du bâtiment le plus élevé : au-dessous du sol';
--
ALTER TABLE cerfa ADD COLUMN co_bat_niv_dessous_nb boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_bat_niv_dessous_nb IS 'Le nombre de niveaux du bâtiment le plus élevé : au-dessous du sol';
--
COMMENT ON COLUMN cerfa.co_bat_niv_nb IS 'Le nombre de niveaux du bâtiment le plus élevé : au-dessus du sol';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_install_classe boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN co_derog_innov boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN co_avis_abf boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.co_install_classe IS 'porte sur une installation classée soumise à enregistrement en application de l''article L. 512-7 du code de l''environnement';
COMMENT ON COLUMN donnees_techniques.co_derog_innov IS 'déroge à certaines règles de construction et met en œuvre une solution d''effet équivalent au titre de l''ordonnance n° 2018-937 du 30 octobre 2018 visant à faciliter la réalisation de projets de construction et à favoriser l''innovation';
COMMENT ON COLUMN donnees_techniques.co_avis_abf IS 'relève de l''article L.632-2-1 du code du patrimoine (avis simple de l''architecte des Bâtiments de France pour les antennes-relais et les opérations liées au traitement de l''habitat indigne)';
--
ALTER TABLE cerfa ADD COLUMN co_install_classe boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_derog_innov boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_avis_abf boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_install_classe IS 'porte sur une installation classée soumise à enregistrement en application de l''article L. 512-7 du code de l''environnement';
COMMENT ON COLUMN cerfa.co_derog_innov IS 'déroge à certaines règles de construction et met en œuvre une solution d''effet équivalent au titre de l''ordonnance n° 2018-937 du 30 octobre 2018 visant à faciliter la réalisation de projets de construction et à favoriser l''innovation';
COMMENT ON COLUMN cerfa.co_avis_abf IS 'relève de l''article L.632-2-1 du code du patrimoine (avis simple de l''architecte des Bâtiments de France pour les antennes-relais et les opérations liées au traitement de l''habitat indigne)';

--

--
ALTER TABLE donnees_techniques ADD COLUMN tax_surf_tot_demo numeric NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_surf_tax_demo numeric NULL;
COMMENT ON COLUMN donnees_techniques.tax_surf_tot_demo IS 'Surface taxable démolie de la (ou des) construction(s)';
COMMENT ON COLUMN donnees_techniques.tax_surf_tax_demo IS 'Quelle est la surface taxable démolie ?';
--
ALTER TABLE cerfa ADD COLUMN tax_surf_tot_demo boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_surf_tax_demo boolean DEFAULT false;
COMMENT ON COLUMN cerfa.tax_surf_tot_demo IS 'Surface taxable démolie de la (ou des) construction(s)';
COMMENT ON COLUMN cerfa.tax_surf_tax_demo IS 'Quelle est la surface taxable démolie ?';

--

--
ALTER TABLE donnees_techniques ADD COLUMN tax_su_non_habit_surf8 numeric NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_su_non_habit_surf_stat8 numeric NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_su_non_habit_surf9 numeric NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_su_non_habit_surf_stat9  numeric NULL;
COMMENT ON COLUMN donnees_techniques.tax_su_non_habit_surf8 IS 'Tableau "Création ou extension de locaux non destinés à l''habitation" Ligne "Locaux industriels et artisanaux ainsi que leurs annexes" Colonne "Surfaces créées (1) hormis les surfaces de stationnement closes et couvertes"';
COMMENT ON COLUMN donnees_techniques.tax_su_non_habit_surf_stat8 IS 'Tableau "Création ou extension de locaux non destinés à l''habitation" Ligne "Locaux industriels et artisanaux ainsi que leurs annexes" Colonne "Surfaces créées pour le stationnement clos et couvert"';
COMMENT ON COLUMN donnees_techniques.tax_su_non_habit_surf9 IS 'Tableau "Création ou extension de locaux non destinés à l''habitation" Ligne "Maisons de santé mentionnées à l''article L. 6323-3 du code de la santé publique" Colonne "Surfaces créées (1) hormis les surfaces de stationnement closes et couvertes"';
COMMENT ON COLUMN donnees_techniques.tax_su_non_habit_surf_stat9 IS 'Tableau "Création ou extension de locaux non destinés à l''habitation" Ligne "Maisons de santé mentionnées à l''article L. 6323-3 du code de la santé publique" Colonne "Surfaces créées pour le stationnement clos et couvert"';

--

--
ALTER TABLE donnees_techniques ADD COLUMN tax_terrassement_arch boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.tax_terrassement_arch IS 'Votre projet fait-il l''objet d''un (ou de) terrassement(s) ?';
--
ALTER TABLE cerfa ADD COLUMN tax_terrassement_arch boolean DEFAULT false;
COMMENT ON COLUMN cerfa.tax_terrassement_arch IS 'Votre projet fait-il l''objet d''un (ou de) terrassement(s) ?';

--

--
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_numero character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_voie character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_lieudit character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_localite character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_cp character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_bp character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_cedex character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_pays character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN tax_adresse_future_division character varying(255) NULL;
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_numero IS 'Adresse à échéance des taxes : Numéro';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_voie IS 'Adresse à échéance des taxes : Voie';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_lieudit IS 'Adresse à échéance des taxes : Lieu-dit';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_localite IS 'Adresse à échéance des taxes : Localité';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_cp IS 'Adresse à échéance des taxes : Code postal';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_bp IS 'Adresse à échéance des taxes : BP';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_cedex IS 'Adresse à échéance des taxes : Cedex';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_pays IS 'Adresse à échéance des taxes : Pays';
COMMENT ON COLUMN donnees_techniques.tax_adresse_future_division IS 'Adresse à échéance des taxes : Division territoriale';
--
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_numero boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_voie boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_lieudit boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_localite boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_cp boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_bp boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_cedex boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_pays boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN tax_adresse_future_division boolean DEFAULT false;
COMMENT ON COLUMN cerfa.tax_adresse_future_numero IS 'Adresse à échéance des taxes : Numéro';
COMMENT ON COLUMN cerfa.tax_adresse_future_voie IS 'Adresse à échéance des taxes : Voie';
COMMENT ON COLUMN cerfa.tax_adresse_future_lieudit IS 'Adresse à échéance des taxes : Lieu-dit';
COMMENT ON COLUMN cerfa.tax_adresse_future_localite IS 'Adresse à échéance des taxes : Localité';
COMMENT ON COLUMN cerfa.tax_adresse_future_cp IS 'Adresse à échéance des taxes : Code postal';
COMMENT ON COLUMN cerfa.tax_adresse_future_bp IS 'Adresse à échéance des taxes : BP';
COMMENT ON COLUMN cerfa.tax_adresse_future_cedex IS 'Adresse à échéance des taxes : Cedex';
COMMENT ON COLUMN cerfa.tax_adresse_future_pays IS 'Adresse à échéance des taxes : Pays';
COMMENT ON COLUMN cerfa.tax_adresse_future_division IS 'Adresse à échéance des taxes : Division territoriale';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_bat_projete text NULL;
ALTER TABLE donnees_techniques ADD COLUMN co_bat_existant text NULL;
ALTER TABLE donnees_techniques ADD COLUMN co_bat_nature text NULL;
COMMENT ON COLUMN donnees_techniques.co_bat_projete IS 'Indiquez la destination, la sous-destination et la localisation approximative des bâtiments projetés dans l''unité foncière';
COMMENT ON COLUMN donnees_techniques.co_bat_existant IS 'Indiquez la destination et la sous-destination des bâtiments à conserver ou à démolir';
COMMENT ON COLUMN donnees_techniques.co_bat_nature IS 'Vous pouvez compléter cette note par des feuilles supplémentaires, des plans, des croquis, des photos. Dans ce cas, précisez ci-dessous la nature et le nombre des pièces fournies';
--
ALTER TABLE cerfa ADD COLUMN co_bat_projete boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_bat_existant boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_bat_nature boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_bat_projete IS 'Indiquez la destination, la sous-destination et la localisation approximative des bâtiments projetés dans l''unité foncière';
COMMENT ON COLUMN cerfa.co_bat_existant IS 'Indiquez la destination et la sous-destination des bâtiments à conserver ou à démolir';
COMMENT ON COLUMN cerfa.co_bat_nature IS 'Vous pouvez compléter cette note par des feuilles supplémentaires, des plans, des croquis, des photos. Dans ce cas, précisez ci-dessous la nature et le nombre des pièces fournies';

--

--
ALTER TABLE donnees_techniques ADD COLUMN terr_juri_titul_date date NULL;
COMMENT ON COLUMN donnees_techniques.terr_juri_titul_date IS 'Si oui, à quelle date a t-il été délivré ?';
--
ALTER TABLE cerfa ADD COLUMN terr_juri_titul_date boolean DEFAULT false;
COMMENT ON COLUMN cerfa.terr_juri_titul_date IS 'Si oui, à quelle date a t-il été délivré ?';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_autre_desc text NULL;
ALTER TABLE donnees_techniques ADD COLUMN co_trx_autre text NULL;
ALTER TABLE donnees_techniques ADD COLUMN co_autre boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.co_autre_desc IS 'Autres travaux envisagés (précisez)';
COMMENT ON COLUMN donnees_techniques.co_trx_autre IS 'Travaux comprennent notamment : Autre (précisez)';
COMMENT ON COLUMN donnees_techniques.co_autre IS 'Autres travaux envisagés';
--
ALTER TABLE cerfa ADD COLUMN co_autre_desc boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_trx_autre boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_autre boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_autre_desc IS 'Autres travaux envisagés (précisez)';
COMMENT ON COLUMN cerfa.co_trx_autre IS 'Travaux comprennent notamment : Autre (précisez)';
COMMENT ON COLUMN cerfa.co_autre IS 'Autres travaux envisagés';

--

--
ALTER TABLE donnees_techniques ADD COLUMN erp_modif_facades boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN erp_trvx_adap boolean DEFAULT false;
ALTER TABLE donnees_techniques ADD COLUMN erp_trvx_adap_numero character varying(255) NULL;
ALTER TABLE donnees_techniques ADD COLUMN erp_trvx_adap_valid date NULL;
ALTER TABLE donnees_techniques ADD COLUMN erp_prod_dangereux boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.erp_modif_facades IS 'Modification des accès en façades';
COMMENT ON COLUMN donnees_techniques.erp_trvx_adap IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement';
COMMENT ON COLUMN donnees_techniques.erp_trvx_adap_numero IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement : Ad''AP n°';
COMMENT ON COLUMN donnees_techniques.erp_trvx_adap_valid IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement : validé le';
COMMENT ON COLUMN donnees_techniques.erp_prod_dangereux IS 'Cette demande fait l''objet d''une déclaration ou autorisation au titre du code de l''environnement (produits dangereux stockés ou utilisés)';
--
ALTER TABLE cerfa ADD COLUMN erp_modif_facades boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN erp_trvx_adap boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN erp_trvx_adap_numero boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN erp_trvx_adap_valid boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN erp_prod_dangereux boolean DEFAULT false;
COMMENT ON COLUMN cerfa.erp_modif_facades IS 'Modification des accès en façades';
COMMENT ON COLUMN cerfa.erp_trvx_adap IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement';
COMMENT ON COLUMN cerfa.erp_trvx_adap_numero IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement : Ad''AP n°';
COMMENT ON COLUMN cerfa.erp_trvx_adap_valid IS 'travaux mettent en œuvre des engagements d''un Ad''AP déposé antérieurement : validé le';
COMMENT ON COLUMN cerfa.erp_prod_dangereux IS 'Cette demande fait l''objet d''une déclaration ou autorisation au titre du code de l''environnement (produits dangereux stockés ou utilisés)';

--

--
ALTER TABLE donnees_techniques ADD COLUMN co_trav_supp_dessus numeric NULL;
ALTER TABLE donnees_techniques ADD COLUMN co_trav_supp_dessous numeric NULL;
COMMENT ON COLUMN donnees_techniques.co_trav_supp_dessus IS 'Création de niveaux supplémentaires : au-dessus du sol';
COMMENT ON COLUMN donnees_techniques.co_trav_supp_dessous IS 'Création de niveaux supplémentaires : au-dessous du sol';
--
ALTER TABLE cerfa ADD COLUMN co_trav_supp_dessus boolean DEFAULT false;
ALTER TABLE cerfa ADD COLUMN co_trav_supp_dessous boolean DEFAULT false;
COMMENT ON COLUMN cerfa.co_trav_supp_dessus IS 'Création de niveaux supplémentaires : au-dessus du sol';
COMMENT ON COLUMN cerfa.co_trav_supp_dessous IS 'Création de niveaux supplémentaires : au-dessous du sol';

--

--
ALTER TABLE donnees_techniques ADD COLUMN tax_su_habit_abr_jard_pig_colom numeric NULL;
COMMENT ON COLUMN donnees_techniques.tax_su_habit_abr_jard_pig_colom IS 'Création de locaux destinés à l''habitation : Parmi les surfaces déclarées ci-dessus, quelle est la surface affectée à la catégorie des abris de jardin, pigeonniers et colombiers (en m²) ?';
--
ALTER TABLE cerfa ADD COLUMN tax_su_habit_abr_jard_pig_colom boolean DEFAULT false;
COMMENT ON COLUMN cerfa.tax_su_habit_abr_jard_pig_colom IS 'Création de locaux destinés à l''habitation : Parmi les surfaces déclarées ci-dessus, quelle est la surface affectée à la catégorie des abris de jardin, pigeonniers et colombiers (en m²) ?';

--

--
ALTER TABLE donnees_techniques ADD COLUMN enga_decla_donnees_nomi_comm boolean DEFAULT false;
COMMENT ON COLUMN donnees_techniques.enga_decla_donnees_nomi_comm IS 'Pour permettre l''utilisation des informations nominatives comprises dans ce formulaire à des fins commerciales, cochez la case ci-contre';
--
ALTER TABLE cerfa ADD COLUMN enga_decla_donnees_nomi_comm boolean DEFAULT false;
COMMENT ON COLUMN cerfa.enga_decla_donnees_nomi_comm IS 'Pour permettre l''utilisation des informations nominatives comprises dans ce formulaire à des fins commerciales, cochez la case ci-contre';


--
-- END / #1085 — Mise à jour des CERFA
--

--
-- BEGIN / [#9398] Création d’une adresse normalisée
--

-- table dossier
ALTER TABLE dossier ADD COLUMN adresse_normalisee text;
ALTER TABLE dossier ADD COLUMN adresse_normalisee_json text DEFAULT '{}';
COMMENT ON COLUMN dossier.adresse_normalisee IS 'Adresse normalisée du terrain';
COMMENT ON COLUMN dossier.adresse_normalisee_json IS 'JSON transmis par l''api adresse lors de la récupération de l''adresse normalisée';

-- table dossier_autorisation
ALTER TABLE dossier_autorisation ADD COLUMN adresse_normalisee text;
ALTER TABLE dossier_autorisation ADD COLUMN adresse_normalisee_json text DEFAULT '{}';
COMMENT ON COLUMN dossier_autorisation.adresse_normalisee IS 'Adresse normalisée du terrain';
COMMENT ON COLUMN dossier_autorisation.adresse_normalisee_json IS 'JSON transmis par l''api adresse lors de la récupération de l''adresse normalisée';

-- ADMINISTRATEUR GENERAL
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
);

-- INSTRUCTEUR POLYVALENT
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
);

-- INSTRUCTEUR POLYVALENT COMMUNE
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_mes_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_mes_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_encours_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_encours_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
);
INSERT INTO om_droit (om_droit, libelle, om_profil)
SELECT nextval('om_droit_seq'), 'dossier_instruction_tous_clotures_normalize_address', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
WHERE NOT EXISTS (
    SELECT om_droit FROM om_droit WHERE libelle = 'dossier_instruction_tous_clotures_normalize_address' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT COMMUNE')
);

--
-- END / [#9398] Création d’une adresse normalisée
--

--
-- BEGIN / [#9397] Amélioration de l'affectation automatique
--
ALTER TABLE affectation_automatique ADD affectation_manuelle VARCHAR(100) NULL;
ALTER TABLE affectation_automatique ADD dossier_instruction_type INTEGER NULL;

ALTER TABLE affectation_automatique ADD FOREIGN KEY (dossier_instruction_type) REFERENCES dossier_instruction_type (dossier_instruction_type);

COMMENT ON COLUMN affectation_automatique.affectation_manuelle IS 'Affectation manuelle';
COMMENT ON COLUMN affectation_automatique.dossier_instruction_type IS 'Type de dossier d''instruction affecté à l''instructeur';

CREATE INDEX affectation_automatique_om_collectivite_idx ON affectation_automatique USING btree (om_collectivite);

--
-- END / [#9397] Amélioration de l'affectation automatique
--

--
-- BEGIN / [#9410] Ajout du champ "Date de dépôt en mairie"
--

ALTER TABLE dossier ADD date_depot_mairie DATE NULL;
COMMENT ON COLUMN dossier.date_depot_mairie IS 'Date de dépôt en mairie';

ALTER TABLE instruction ADD date_depot_mairie DATE NULL;
COMMENT ON COLUMN instruction.date_depot_mairie IS 'Date de dépôt en mairie du dossier d''instruction';

-- mise à jour des champs de fusions (om_requete)
UPDATE om_requete AS omr SET requete = (
   SELECT regexp_replace(r.requete, '(-- *Dates importantes du dossier d''instruction)', E'\\1\rto_char(dossier.date_depot_mairie, ''DD/MM/YYYY'') as date_depot_mairie,')
   FROM om_requete AS r
   WHERE r.om_requete = omr.om_requete
)
WHERE position('dossier.date_depot_mairie' IN omr.requete) = 0
  AND substring(omr.requete FROM '-- *Dates importantes du dossier d''instruction') IS NOT NULL;

UPDATE om_requete AS omr SET merge_fields = (
   SELECT regexp_replace(r.merge_fields, '(-- *Dates importantes du dossier d''instruction)', E'\\1\r[date_depot_mairie]')
   FROM om_requete AS r
   WHERE r.om_requete = omr.om_requete
)
WHERE position('[date_depot_mairie]' IN omr.merge_fields) = 0
  AND substring(omr.merge_fields FROM '-- *Dates importantes du dossier d''instruction') IS NOT NULL;

--
-- END / [#9410] Ajout du champ "Date de dépôt en mairie"
--
