Open pierre56 opened 10 months ago
https://inpn.mnhn.fr/telechargement/referentiels/organismes
tel_organisme -> passage de 14 a 20 en varchar fax_organisme ->passage de 14 a 20 en varchar adresse_organisme -> passage en varchar
ALTER TABLE utilisateurs.bib_organismes ALTER COLUMN adresse_organisme TYPE varchar USING adresse_organisme::varchar;
Le référentiel n'est pas forcément bien rempli et contient des adresse très longues ou des num de tel avec des +
Pour le moment, toutes les informations complémentaires finissent dans additional_data. Script d'insert et d'upsert
/***************************************************
* Ajout des organismes *
***************************************************/
CREATE TABLE utilisateurs.ref_organismes_export (
id int4 null,
libelle_court text null,
libelle_long text null,
siret text null,
siret_siege text null,
date_adhesion text null,
adresse text null,
cp text null,
ville text null,
pays text null,
description text null,
syno text null,
domaines text null,
zones text null,
date_creation text null,
date_modification text null,
code uuid null,
niveau_adhesion text null,
id_agrement int4 null,
libelle_org_agrement text null,
id_parent int4 null,
org_parent text null,
perimetre text null,
statut_organisme text null,
type_organisme text null,
mail text null,
telephone text null,
url text null,
zone_detaillees text null
);
-------
DROP materialized view utilisateurs.mv_ref_organismes_bzh;
create materialized view utilisateurs.mv_ref_organismes_bzh as
select *
from utilisateurs.ref_organismes_export
where cp like '56%'
or cp like '44%'
or cp like '35%'
or cp like '29%'
or cp like '22%'
--or perimetre = 'National' and type_organisme IN ('Administration','Etablissement public','Association','Regroupement d''organismes')
-------
INSERT INTO utilisateurs.bib_organismes
(uuid_organisme,
nom_organisme,
adresse_organisme,
cp_organisme,
ville_organisme,
tel_organisme,
email_organisme,
url_organisme,
additional_data)
select code::uuid ,
libelle_long ,
adresse ,
REPLACE(cp, ' ', '')as cp ,
ville ,
REPLACE(telephone , ' ', '')as telephone ,
mail ,
url ,
json_build_object(
'libelle_court',libelle_court,
'siret',siret,
'description',description,
'syno',syno,
'domaines',domaines,
'zones',zones,
'date_creation',date_creation,
'date_modification',date_modification,
'niveau_adhesion',niveau_adhesion,
'id_agrement',id_agrement,
'libelle_org_agrement',libelle_org_agrement,
'perimetre',perimetre,
'statut_organisme',statut_organisme,
'type_organisme',type_organisme
)::jsonb as additional_data
from utilisateurs.mv_ref_organismes_bzh
;
-------
-- UPSERT
INSERT INTO utilisateurs.bib_organismes
(uuid_organisme,
nom_organisme,
adresse_organisme,
cp_organisme,
ville_organisme,
tel_organisme,
email_organisme,
url_organisme,
additional_data)
(
select code::uuid ,
libelle_long ,
adresse ,
REPLACE(cp, ' ', '')as cp ,
ville ,
REPLACE(telephone , ' ', '')as telephone ,
mail ,
url ,
json_build_object(
'libelle_court',libelle_court,
'siret',siret,
'description',description,
'syno',syno,
'domaines',domaines,
'zones',zones,
'date_creation',date_creation,
'date_modification',date_modification,
'niveau_adhesion',niveau_adhesion,
'id_agrement',id_agrement,
'libelle_org_agrement',libelle_org_agrement,
'perimetre',perimetre,
'statut_organisme',statut_organisme,
'type_organisme',type_organisme
)::jsonb as additional_data
from utilisateurs.ref_organismes_export
-- where cp like '56%'
--or cp like '44%'
--or cp like '35%'
--or cp like '29%'
--or cp like '22%'
where length(cp) <= 6
)
ON CONFLICT (uuid_organisme)
DO
UPDATE SET
uuid_organisme = EXCLUDED.uuid_organisme,
nom_organisme = EXCLUDED.nom_organisme,
adresse_organisme = EXCLUDED.adresse_organisme,
cp_organisme =EXCLUDED.cp_organisme,
ville_organisme = EXCLUDED.ville_organisme,
tel_organisme = EXCLUDED.tel_organisme,
email_organisme = EXCLUDED.email_organisme,
url_organisme = EXCLUDED.url_organisme,
additional_data = EXCLUDED.additional_data
;
Harmonisation avec référentiel INPN
Url référentiel
https://inpn.mnhn.fr/telechargement/referentiels/organismes
Contexte
Bonjour, Ayant beaucoup de partenaires et financeurs, j'ai intégré l'ensemble du référentiel organisme de l'INPN. Cela est aussi une obligation de l'OFB et des communes, nous demandant de remonter les données avec le bon UUID pour l'organisme. C'est pourquoi une uniformisation de la BDD geonature via bib_organismes et le référentiel serait intéressant, le reste restant dans additional_data.
Modifications a faire :
Ajout des champs pour améliorer l'harmonisation :
Ajout des champs pour améliorer l'interface :
Avec un système dans l'interface pour ne pas afficher les organismes inactifs de base et charger les organismes inactifs a la demande. J'insiste sur ce point, qu'il faudrait également mettre en place pour les utilisateurs.
Car avec 21K utilisateurs et 8k organismes en BDD, je peine a trouver des admin secondaires pour m'aider dans la gestion des comptes car juste pour charger, l'interface peut prendre plusieurs minutes, si elle plante pas (j'ai entamé le taff de suppression des organismes réellement inutiles)
Bonus : Créer un système de maj auto
ou au clic via l'interface, une maj des organismes ou intégration des nouveaux sur un territoire
Utilisation de l'API odata-sinp.mnhn.fr
https://inpn.mnhn.fr/docs-web/docs/download/335154 https://odata-sinp.mnhn.fr/organizations
Exemple avec Bretagne Vivante (pour maj) https://odata-sinp.mnhn.fr/organizations/5FD1514F-54F1-3E51-E053-2614A8C0F325
Exemple avec le département Finistère (pour intégration) https://odata-sinp.mnhn.fr/organizations?postCodeStart=29
Avenir usershub ?
J'ai vu que usershub allait être intégré dans geonature, mais ce que je propose reste valable si la bdd reste la même.
Vous me direz ce que vous en pensez, en bonus je rajoute mon script d'intégration/maj si ça peut servir à d'autres 😄
Bonne journée Pierre