# Annuaire des élus RNE — Elan Cité

Outil interne pour rechercher, par commune, le maire actuel, l'équipe
municipale, et savoir si le maire a changé depuis les élections municipales
de mars 2026 — sans que vos équipes commerciales aient besoin d'un compte
Claude ni d'aucun autre accès payant : c'est une simple page web PHP.

Source des données : Répertoire National des Élus (RNE), data.gouv.fr,
Ministère de l'Intérieur, Licence Ouverte 2.0. Mise à jour trimestrielle
par le Ministère.

## Ce qui est fourni

- `import_rne.php` — script CLI qui télécharge les CSV du RNE et les charge
  en base MySQL. A lancer via une tâche cron OVH (pas via le navigateur).
- `config.php` — vos identifiants MySQL OVH (à compléter).
- `search.php` — la page de recherche destinée à vos équipes.

## Installation sur OVH (hébergement web mutualisé classique)

1. **Créer une base MySQL** dans votre espace client OVH
   (Hébergements > [votre hébergement] > Bases de données > Créer une base).
   Notez l'hôte, le nom de la base, l'utilisateur et le mot de passe.

2. **Compléter `config.php`** avec ces identifiants.

3. **Uploader les 3 fichiers** via FTP/SFTP dans un dossier de votre
   hébergement (ex : `/annuaire-elus/`), idéalement **hors du dossier
   public** si votre offre OVH le permet, ou avec le fichier
   `config.php` protégé par un `.htaccess` :
   ```
   <Files "config.php">
     Require all denied
   </Files>
   ```

4. **Premier import manuel** (par SSH si disponible sur votre offre OVH, ou
   via une tâche cron déclenchée une fois immédiatement) :
   ```
   php import_rne.php
   ```
   Lisez bien la sortie : elle affiche les colonnes détectées dans chaque
   fichier et le nombre de lignes importées par table. **Vérifiez que les 4
   tables (`maires`, `conseillers_municipaux`, `maires_sortants_2026`,
   `conseillers_municipaux_sortants_2026`) rapportent un nombre de lignes >
   0** — un message "ABANDON : ressource introuvable" signale que le RNE a
   changé le titre d'un fichier et qu'il faut ajuster `title_contains` /
   `title_excludes` dans `import_rne.php`.

5. **Programmer l'import automatique** : espace client OVH > Hébergement
   web > Tâches planifiées (cron) > créer une tâche qui exécute
   `php /chemin/vers/import_rne.php` une fois par mois (le RNE n'est mis à
   jour que trimestriellement, une fréquence mensuelle est largement
   suffisante et sans risque de surcharge).

6. **Donner l'accès à vos équipes** : partagez simplement l'URL de
   `search.php` (ex : `https://votredomaine.fr/annuaire-elus/search.php`).
   Aucun compte, aucun mot de passe nécessaire à ce stade — si vous
   voulez restreindre l'accès à vos équipes uniquement, ajoutez une
   authentification HTTP basique (`.htaccess` + `.htpasswd`, gérable
   depuis l'espace client OVH ou en ligne de commande) ou placez la page
   derrière votre intranet existant.

## Vérifications effectuées le 2026-07-07

Avant de livrer ce code, j'ai vérifié directement la structure réelle des
données du RNE (je n'avais pas pu le faire lors d'un brouillon précédent) :

- **Ressources data.gouv.fr confirmées** : le dataset
  [`repertoire-national-des-elus-1`](https://www.data.gouv.fr/api/1/datasets/repertoire-national-des-elus-1/)
  contient bien un CSV `elus-maires-mai.csv` et un CSV
  `elus-conseillers-municipaux-cm.csv`. Le dataset
  [`elections-municipales-2026-maires-et-conseillers-municipaux-sortants`](https://www.data.gouv.fr/api/1/datasets/elections-municipales-2026-maires-et-conseillers-municipaux-sortants/)
  contient exactement 2 CSV : `mun2026-maires-sortants-*.csv` et
  `mun2026-cm-sortants-*.csv`.
- **Bug corrigé** : le brouillon initial cherchait un titre contenant
  "conseillers municipaux" (avec espace) et "conseiller" (pour la table
  sortante) ; les titres réels utilisent des tirets et l'abréviation "cm"
  et ne contenaient jamais ces mots-clés. L'import de ces deux tables
  échouait silencieusement. Corrigé dans `import_rne.php`.
- **Colonnes confirmées** pour le fichier `maires` (téléchargé et inspecté
  directement) : Code du département, Libellé du département, Code/Libellé
  de la collectivité à statut particulier, Code de la commune, Libellé de
  la commune, Nom de l'élu, Prénom de l'élu, Code sexe, Date de naissance,
  Code/Libellé de la catégorie socio-professionnelle, Date de début du
  mandat, Date de début de la fonction. Les mots-clés de détection dans
  `search.php` les repèrent correctement.
- **Bug corrigé** : le code commune INSEE n'est pas formaté pareil entre le
  fichier des maires en mandat ("1001", sans zéro de tête) et celui des
  maires sortants 2026 ("01001", avec zéro de tête). Sans correction, la
  comparaison "maire reconduit / changement" ne fonctionnait jamais pour
  les communes des départements 01 à 09. Corrigé via
  `normalize_code_commune()` dans `search.php`.

## Limites connues et points à surveiller

- **Conseillers municipaux non entièrement vérifié** : le fichier national
  des conseillers municipaux dépasse la taille que j'ai pu télécharger pour
  inspection directe (> 10 Mo). Sa structure de colonnes (notamment une
  éventuelle colonne "fonction") reste à confirmer via le log affiché au
  premier import (étape 4 ci-dessus) avant de considérer cette partie de
  l'outil fiable à 100 %.
- **Rapprochement maire actuel / maire sortant** : le RNE identifie les
  personnes par nom + prénom (+ date de naissance selon les fichiers), pas
  par un identifiant stable. La comparaison "même personne / personne
  différente" se fait donc par correspondance de nom — homonymies
  théoriquement possibles, à garder en tête pour les cas ambigus.
- **Volumétrie** : le fichier des conseillers municipaux pèse plusieurs
  dizaines de Mo au niveau national. Le script l'importe en une fois ; si
  votre offre OVH a des limites strictes de mémoire/temps CLI, on peut
  scinder l'import par lots (dites-le-moi si besoin).
- **Fiabilité des données** : les données de profession sont déclaratives.
  Les demandes de correction sur les données sources doivent être
  adressées à la préfecture compétente, pas à ce site (voir mention légale
  du jeu de données sur data.gouv.fr).

## Pour aller plus loin

- Ajouter une colonne "date de dernière synchronisation" visible sur la
  page pour que vos équipes sachent si les données sont à jour.
- Ajouter d'autres niveaux de mandat (conseillers départementaux,
  régionaux, etc.) : il suffit d'ajouter une entrée dans le tableau
  `$SOURCES` de `import_rne.php`.
- Exporter un résultat de recherche en CSV pour l'attacher à une fiche
  client/CRM.
