# Sources de Données Publiques

Toutes les données de CLAIR viennent de sources publiques. Aucune n'exige de clé d'API, à l'exception des deux services d'IA (Mistral, Tavily). Chaque source a un client dédié dans `services/ingestion/src/sources/`.

---

## 📊 Sources suivies (`source_states`)

Chaque source est identifiée par une clé `organisme:type`, définie dans `services/ingestion/src/utils/source-freshness.ts` et reprise comme clé dans la table `source_states`. Les 24 premières lignes du tableau sont lues par le batch nocturne, dans l'ordre donné sur la page [Orchestrateur d'ingestion](/donnees/orchestrateur-ingestion).

« Toujours » signifie que la source n'expose aucun en-tête exploitable (`ETag`, `Last-Modified`) : elle est relue à chaque passage.

| Clé | Ressource | Format | Ce qui est ingéré |
| :--- | :--- | :--- | :--- |
| `assemblee_nationale:commissions` | [data.assemblee-nationale.fr](https://data.assemblee-nationale.fr/acteurs/historique-des-deputes), `AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json.zip` (organes actifs et clos), plus l'AMO10 pour les mandats en cours | ZIP / JSON | Organes : commissions, délégations, offices, missions, groupes d'études et d'amitié… |
| `assemblee_nationale:deputes` | [data.assemblee-nationale.fr](https://data.assemblee-nationale.fr/acteurs/deputes-en-exercice), `AMO10_deputes_actifs_mandats_actifs_organes.json.zip` | ZIP / JSON | Députés, mandats, groupes politiques, circonscriptions |
| `assemblee_nationale:scrutins` | `Scrutins.json.zip` | ZIP / JSON | Scrutins publics et votes nominatifs |
| `assemblee_nationale:amendements` | `Amendements.json.zip` | ZIP / JSON | Amendements, auteurs, cosignataires, métadonnées de séance |
| `assemblee_nationale:dossiers` | `Dossiers_Legislatifs.json.zip` | ZIP / JSON | Dossiers législatifs, actes, saisines de commissions |
| `assemblee_nationale:interventions` | `syseron.xml.zip` (comptes rendus de séance) | ZIP / XML | Prises de parole en séance, situées dans le débat (article, amendements nommés, orateur) |
| `assemblee_nationale:reunions` | `Agenda.json.zip` | ZIP / JSON | Agenda : réunions de commission et séances |
| `assemblee_nationale:seances_odj` | `seances_publique_excel.csv` | CSV | Ordre du jour des séances publiques |
| `assemblee_nationale:videos` | [videos.assemblee-nationale.fr](https://videos.assemblee-nationale.fr) | HTML | Liens vers les vidéos des séances et réunions |
| `senat:senateurs` | [senat.fr/api-senat/senateurs.json](https://www.senat.fr/api-senat/senateurs.json) | JSON | Sénateurs en exercice et groupes. Ses commissions du jour servent de contrôle à `senat:fonctions` |
| `senat:senateurs_histo` | [data.senat.fr](https://data.senat.fr) ODSEN (`ODSEN_ELUSEN.csv` et fichiers associés) | CSV | Anciens sénateurs, mandats clos, groupe d'époque |
| `senat:fonctions` | `export_sens.zip` de data.senat.fr (dump de la base des sénateurs) | ZIP (dump SQL) | Fonctions datées : bureau du Sénat, commissions permanentes et affaires européennes (membre, président, rapporteur général…), fonctions de groupe |
| `assemblee_nationale:gouvernements` | même archive AMO30 que les commissions, téléchargée une seule fois pour les deux | ZIP / JSON | Gouvernements depuis 2007, postes ministériels, présidences de la République et de l'Assemblée |
| `senat:scrutins` | pages `scrutin-public` de senat.fr, `dosleg.zip` de data.senat.fr | HTML + dump SQL | Scrutins publics et votes nominatifs |
| `senat:amendements` | `ameli.zip` de data.senat.fr, puis un CSV par texte sur senat.fr | ZIP + CSV | Amendements, cosignataires et article visé (colonne « Subdivision » du CSV, sinon `amd.subid` → `sub` d'AMELI) |
| `senat:dossiers` | `dosleg.zip` de data.senat.fr | ZIP (dump SQL) | Dossiers législatifs |
| `senat:interventions` | `cri.zip` de data.senat.fr et comptes rendus HTML de senat.fr | ZIP + HTML | Prises de parole en séance |
| `senat:agenda` | API agenda de senat.fr (`/api/v1/agenda/events`) | JSON | Séances publiques et réunions de commission |
| `senat:reunions` | comptes rendus de commission sur senat.fr | HTML (toujours) | Comptes rendus rattachés aux réunions, sénateurs cités |
| `senat:dossier_commissions` | pages dossier législatif de senat.fr | HTML (toujours) | Commissions saisies des dossiers du Sénat |
| `senat:videos` | [videos.senat.fr](https://videos.senat.fr) | HTML (toujours) | Liens vers les vidéos des séances et réunions |
| `hatvp:lobbyistes` | [hatvp.fr](https://www.hatvp.fr/agora/opendata/csv/Vues_Separees_CSV.zip), répertoire des représentants d'intérêts | ZIP / CSV | Représentants d'intérêts, actions déclarées, secteurs |
| `interieur:candidatures` | [data.gouv.fr](https://www.data.gouv.fr), jeu « élections sénatoriales 2026, candidatures » publié par le ministère de l'Intérieur | CSV (toujours) | Listes et candidats aux sénatoriales 2026 |
| `dila:legi` | [echanges.dila.gouv.fr](https://echanges.dila.gouv.fr/OPENDATA/LEGI/), base LEGI (droit consolidé, Licence Ouverte) : un dump global, puis un incrément par jour | TAR.GZ / XML | Index des textes et des articles de loi : identifiants Légifrance, numéros, dates de vigueur, titres. Ni le contenu ni la structure des textes. Sert à lier les références des amendements à Légifrance. Son état (dernière archive appliquée) est tenu par `sync-index-legi`, pas par `source-freshness.ts` ; le premier chargement, celui du dump global (1,1 Go), se lance à la main |
| `dila:interventions` | [echanges.dila.gouv.fr](https://echanges.dila.gouv.fr/OPENDATA/Debats/AN/) | TAR / XML | Ancienne source des débats de l'Assemblée. **Plus rien n'y est publié depuis janvier 2026** : elle est sortie du batch nocturne et n'est plus lue que par la commande manuelle `sync --in` |

Le batch nocturne ne lit que la **législature courante** de l'Assemblée (17e) et une **fenêtre récente** des sessions du Sénat. L'historique (15e et 16e législatures, Sénat depuis la session 2006) a été chargé par des commandes ponctuelles et ne bouge plus : voir [Commandes CLI](/donnees/commandes-cli).

---

## 🔍 Sources lues par le batch sans suivi de fraîcheur

| Source | Ressource | Usage |
| :--- | :--- | :--- |
| HATVP, déclarations | [hatvp.fr/livraison/opendata/liste.csv](https://www.hatvp.fr/livraison/opendata/liste.csv) | Déclarations d'intérêts et de patrimoine des parlementaires. Relue à chaque batch où au moins une source a changé |
| Assemblée, pages de scrutin | `assemblee-nationale.fr/dyn/<législature>/scrutins/<uid>` | Scrutins des 30 derniers jours encore sans amendement rattaché, pour relier scrutin et amendements |
| Sénat, pages de scrutin | `senat.fr/scrutin-public/...` | Même rôle, pour les nouveaux scrutins du Sénat |
| Assemblée, comptes rendus de commission | page de notice `assemblee-nationale.fr/dyn/docs/<ref>.html`, puis le PDF qu'elle référence (lu avec `pdftotext`) | Débats de commission et avis de commission sur les amendements, pour les réunions des 60 derniers jours |
| Assemblée, textes législatifs | `assemblee-nationale.fr/dyn/opendata/<texteRef>.html` | Texte des articles de chaque nouvelle version de texte, fourni au modèle pour les résumés de scrutins. Une version déjà ingérée n'est pas relue |
| Wikipedia FR et Wikidata | API MediaWiki de fr.wikipedia.org et wikidata.org | Biographie et faits datés, en entrée des fiches parlementaires générées par IA |
| Tavily | api.tavily.com, recherche restreinte au domaine vie-publique.fr | Trouver la page vie-publique.fr d'un **sujet** (liens « contexte »). Chaque nuit ne dépense qu'une part du crédit restant du mois, au prorata des jours restants ; les sujets en attente passent à la nuit suivante |
| Mistral | api.mistral.ai | Génération des résumés (`mistral-small-latest`) et embeddings (`mistral-embed`). Voir [Enrichissement IA](/donnees/enrichissement-ia) |

---

## 🗳️ Élections sénatoriales 2026

| Source | Ressource | Commande | Usage |
| :--- | :--- | :--- | :--- |
| Ministère de l'Intérieur, candidatures | data.gouv.fr (CSV ; XLSX pour les éditions 2020 et 2023) | batch nocturne (`interieur:candidatures`) ou `sync-candidatures` | Listes et candidats |
| Ministère de l'Intérieur, résultats | [resultats-elections.interieur.gouv.fr/Senatoriales2026/](https://www.resultats-elections.interieur.gouv.fr/Senatoriales2026/) (HTML ; l'adresse distingue la casse) | `sync-resultats-senatoriales`, lancée à la main le soir du scrutin, en boucle | Participation par tour, voix, sièges, élus |
| Répertoire national des élus | [data.gouv.fr](https://www.data.gouv.fr/datasets/5c34c4d1634f4173183a64f1/), republié chaque trimestre (CSV) | `sync-mandats-locaux` | Mandats locaux des candidats titulaires |
| Résultats des sénatoriales 2020 et 2023 | data.gouv.fr | `generer-reference-hemicycle` | Composition du Sénat par nuance avant le scrutin, figée dans `apps/api/src/modules/senatoriales/hemicycle-reference.json` |

Les résultats et les mandats locaux ne font partie d'aucun batch planifié.

---

## 🛠️ Sources lues seulement par des commandes manuelles

| Source | Commande | Usage |
| :--- | :--- | :--- |
| Sénat, index des débats (`debats.zip` de data.senat.fr) | `segmenter-debats-senat` | Situer les prises de parole du Sénat dans la structure du débat |
| DILA, comptes rendus de l'Assemblée | `sync --in` | Source morte depuis janvier 2026 (voir plus haut) |

---

## 📰 Source lue à la demande par l'API

L'onglet presse d'un sujet (`GET /api/v1/sujets/:slug/presse`) interroge le flux RSS de Google Actualités au moment de la requête ; le résultat est mis en cache 3 h (15 min s'il est vide). Rien n'est stocké en base.

---

## 🆔 Identifiants de la source

Les identifiants des sources sont conservés pour permettre de remonter à l'original :

| Donnée | Colonne | Exemple |
| :--- | :--- | :--- |
| Député | `parlementaires.source_id` | `PA795828` |
| Sénateur | `parlementaires.source_id` (matricule) | `14133K` |
| Dossier législatif | `dossiers_legislatifs.uid` | `DLR5L17N50168` |
| Amendement | `amendements.uid` (tel que publié) et `uid_canonique` (clé de dédoublonnage) | |
| Organe AN | `commissions.uid` | `PO59048` |
| Gouvernement, présidence de la République | `gouvernements.uid`, `presidences.uid` | `PO873634` |
| Présidence de l'Assemblée (mandat au bureau) | `presidences_assemblee.uid` | `PM845400` |
| Poste ministériel (mandat MINISTERE de l'AN) | `postes_ministeriels.uid` | `PM873637` |
| Membre du gouvernement | `membres_gouvernement.acteur_uid` | `PA643210` |
| Intervention AN | `interventions.source_uid` (`id_syceron` du paragraphe) | |
| Lobbyiste | `lobbyistes.identifiant_national` (SIREN, RNA…) | |

Le contenu brut reçu de la source est conservé dans les colonnes `source_data` (JSON) de `parlementaires`, `mandats_parlementaires`, `dossiers_legislatifs`, `scrutins` et `lobbyistes`.
