Méthodologie

Couverture : index et synthèses

Ce que l'outil couvre aujourd'hui, en chiffres. La classification thématique et les synthèses sont produites hors ligne (pipeline + modèle de langage local), jamais à l'exécution.

100% 17 219 scrutins publics pris en compte, législatures 15, 16, 17, 39 thèmes.

La profondeur d'enrichissement dépend du type de scrutin : l'indexation par thème couvre désormais la quasi-totalité des scrutins (les ordinaires sont classés par un modèle de langage local, en complément de l'héritage depuis le texte). Le périmètre des votes finals a été élargi : il regroupe désormais tous les votes sur l'ensemble d'un texte (l'adoption ou le rejet d'une loi entière), qu'ils aient été tenus en scrutin solennel ou ordinaire, et plus seulement les votes solennels. Le résumé d'enjeu et la synthèse « Comprendre les votes », d'abord produits pour le cœur solennel, sont en cours d'extension à ces votes nouvellement intégrés (100 % à ce jour, soit 962 sur 962). Les positions détaillées par groupe (qui a voté quoi, et la raison du vote lorsque l'information est disponible) sont renseignées pour 903 scrutins.

La position d'un groupe (« a voté pour », « a voté contre », « s'est abstenu·e ») est calculée à partir des voix de ses membres, et non lue dans le champ que les données ouvertes de l'Assemblée consacrent à cette position : ce champ contredit le décompte du groupe lui-même sur 2,92 % des positions que nous affichons. Nos décomptes, eux, se recoupent exactement avec les votes nominatifs. Un groupe est dit divisé lorsque sa position majoritaire réunit moins de 60 % de ses voix exprimées.

🔎 Décryptage approfondi : couverture complète. Les 261 votes finals de la 17e législature (les grandes lois marquantes et les 22 motions de censure) sont désormais tous accompagnés d'un décryptage « Les arguments en présence » : ce que le texte change concrètement, puis les positions de ses défenseurs et de ses opposants, chacune attribuée à qui la porte et sourcée, sans que le site prenne parti. Soit 261 sur 261 (100 %).

Le même travail est achevé sur les 15e et 16e législatures : 269 de leurs votes finals sont décryptés, et il ne reste aucun vote dont nous possédions le compte rendu de séance. Ce compte rendu est le critère : c'est la seule source qui permette d'attribuer une position à une personne nommée plutôt qu'à un groupe. Les votes qui en sont dépourvus restent donc hors de portée, et nous ne les décryptons pas. Lorsqu'un texte a été voté plusieurs fois, ses lectures sont réunies sur une même fiche : c'est leur comparaison qui montre quels groupes se sont déplacés, et dans quel sens.

Une citation entre guillemets est littérale, et prise dans l'intervention que son lien ouvre. Chaque argument attribué à une personne porte le lien vers le compte rendu officiel, ancré sur sa prise de parole exacte. Un contrôle automatique relit la phrase dans le compte rendu avant publication et refuse la fiche si elle n'y figure pas, au caractère près : une conjugaison changée ou une apostrophe droite au lieu d'une apostrophe typographique suffisent à le déclencher. Sur une entrée qui porte un lien, il vérifie aussi que la phrase vient bien de cette prise de parole et non d'une autre du même orateur. Sur une entrée qui n'en a pas encore, il relit la citation dans la journée de séance annoncée par la source : c'est plus faible, et il signale au lieu de refuser.

La prise de parole citée s'ouvre sur la fiche, le passage cité surligné à sa place dans l'intervention complète. Nous en publions une copie pour éviter d'avoir à chercher la phrase dans un compte rendu de plusieurs centaines de milliers de caractères ; cette copie porte toujours la date de la séance et le lien vers le compte rendu officiel, qui reste la source.

Un résumé qui annonce le résultat d'un vote le donne en entier, abstentions comprises. Un décompte partiel n'est pas faux, mais il laisse croire à un vote plus tranché qu'il ne fut : un texte adopté à quatre voix d'écart peut avoir été accompagné de 80 abstentions, et une unanimité annoncée n'est que celle des suffrages exprimés, dont les abstentions ne font pas partie. Le seul chiffre qu'un résumé peut taire est celui qui vaut zéro.

Une position est classée sur ce que la personne dit, et son vote est rappelé quand il diverge. Critiquer une partie d'un texte et le voter n'est pas s'y opposer : un tel propos est présenté comme une réserve. Et lorsqu'un député annonce en séance un vote qu'il n'émet pas, l'écart entre les deux est écrit sous son argument plutôt que corrigé en silence.

Le débat rattaché à un vote est celui de sa séance, et la date prime sur la ressemblance des titres. Un même texte revient devant l'Assemblée à plusieurs lectures, parfois des années plus tard : une citation se date au compte rendu dont elle est tirée, jamais au jour du vote, et discussion et vote solennel n'ont pas toujours lieu le même jour.

Quand une journée a porté plusieurs séances, la source en donne le numéro. L'Assemblée peut siéger deux ou trois fois le même jour, et publier un compte rendu par séance : une source réduite à une date ne dit alors pas lequel ouvrir. La ligne précise donc la séance, et ce numéro est lu dans le compte rendu que le lien de l'argument ouvre déjà.

Votes finals 962

votes sur l'ensemble d'un texte (solennels ou ordinaires), votes sur l'article unique qui tranchent le texte, motions de censure

  • Indexés par thème 99%
  • Résumé d'enjeu 100%
  • Synthèse « Comprendre les votes » 94%
  • Positions détaillées par groupe 94%
Scrutins ordinaires 16 257

amendements, articles, motions diverses

  • Indexés par thème 100%
  • Résumé d'enjeu votes finals (+ cas notables)
  • Synthèse « Comprendre les votes » votes finals (+ cas notables)
  • Positions détaillées par groupe votes finals (+ cas notables)

Rattachement à un dossier législatif : 17 177 scrutins (~100%) sont reliés au dossier de la loi discutée, ce qui donne accès à son texte, à ses articles et à son parcours. D'où vient ce lien. 8 420 (~49 %) sont affirmés par l'Assemblée elle-même, dans l'open data du vote. Les 7 750 autres sont déduits, et le site préfère le dire plutôt que de les présenter comme une donnée publiée : par l'intitulé exact de la loi, comparé au titre du dossier. 1 007 autres ont été tranchés à la main, quand ni le libellé ni la procédure ne permettaient de conclure : la preuve de chacun est écrite dans le code, à côté du lien. Un lien publié par l'Assemblée n'est jamais remplacé par une déduction. Parcours complet dans l'Explorer (mode Grands dossiers). Un grand dossier regroupe un grand débat ou une saga politique (curation éditoriale, recoupant plusieurs thèmes), distinct des thèmes qui, eux, classent l'ensemble des votes de façon exhaustive.

Détail des articles (« Dispositions du texte ») : 16 835 scrutins (~98 % de ceux rattachés à un dossier) affichent le détail des articles de leur texte, extrait du document officiel de l'Assemblée. L'objectif est de couvrir tous les scrutins rattachés à un texte ; le reste tient à des documents pas encore récupérés (chantier en cours, voir le journal des évolutions).

« Ce que prévoit le texte » : 17 047 scrutins (~99 % de ceux rattachés à un dossier) affichent un résumé en clair de leur texte, soit leur propre enjeu, soit celui du texte parent. Objectif à terme : tous les scrutins rattachés à un texte.

Mises au point de vote : 3 658 scrutins portent au moins une déclaration publiée par l'Assemblée sous son analyse du scrutin, rubrique « Mises au point », où un·e député·e fait consigner la position qu'il avait voulu prendre. Elles sont reprises sur la fiche du vote, à côté du relevé et jamais à sa place : une mise au point ne rectifie pas le scrutin, et l'Assemblée publie le relevé inchangé dans le même document. 4 996 de ces déclarations émanent de député·es qui ont un vote enregistré sur le scrutin, 2 707 de député·es qui n'y figurent pas, et 12 nomment la position qui avait déjà été enregistrée, auquel cas la fiche le dit en une ligne.

Votes qui n'ont pas pu être pris en compte : sur 160 scrutins, l'Assemblée signale 181 cas où un vote n'a pas pu être pris en compte, ou bien où un·e député·e n'a pas pris part au scrutin. Elle l'écrit au fil de sa liste nominative, et non dans sa rubrique « Mises au point » : ces cas sont donc repris à part sur la fiche, avec ses formulations et aucune autre. La cause n'est documentée nulle part dans les données publiées, et le site ne la nomme pas.

Textes déposés décryptés : 6 589 textes (~98 % des 6 724 textes déposés, votés ou non) portent un résumé « Ce que prévoit le texte », rédigé hors ligne à partir de l'exposé des motifs et des articles réels. Couverture en hausse continue ; objectif : tous les textes dont le document officiel est disponible.

« Indexé » = au moins un thème attribué : classification par un modèle de langage exécuté en local, désormais sur l'ensemble des scrutins (votes finals comme amendements et articles), complétée par l'héritage du thème depuis le texte rattaché. Chiffres recalculés à chaque génération des données.

Décryptages du créateur du site : 17 articles consacrés à des grands textes qu'il a lui-même analysés dans son infolettre personnelle Zone Habitable ↗. Le site relie chaque article à l'ensemble des scrutins de la loi concernée, soit 318 votes au total : il ne s'agit donc pas d'autant de textes distincts décryptés, mais bien de quelques grands textes suivis de près.

Au-delà des votes : ce que les groupes proposent

Un vote est une réaction ; une proposition de loi dit ce qu'un groupe veut mettre lui-même à l'agenda, et une question au Gouvernement ce qu'un·e député·e demande concrètement. Le site classe ces propositions par thème, les agrège par groupe et par famille, relie les amendements déposés, et affiche sur chaque fiche les questions posées (écrites, en séance, orales) avec la rubrique officielle indexée par les services de l'Assemblée, le statut de réponse et le lien vers le texte intégral. Aucune reformulation : intitulés et rubriques sont repris tels quels de l'open data.

6 724propositions de loi indexéesdéposées sur 3 législatures (15e à 17e)
6 397PPL rattachées à un thème17e législature (308% des PPL, classées en local)
14groupes au profil thématique+ 12 familles (ce que chacun met à l'agenda)
13 478amendements reliésà leur déposant et leur dispositif (open data), sur les 15e à 17e législatures (depuis 2017)
13 419amendements avec « L'essentiel » en clairsynthèse hors-ligne du dispositif, soit 100% des amendements reliés (déploiement progressif, amendement après amendement)
524député·es auteur·rices d'amendementau moins un amendement déposé et mis aux voix, relié à leur fiche
95 365questions au Gouvernement indexées3 législatures (écrites, en séance, orales), reliées aux fiches de 1 174 député·es, par législature
102 611prises de parole en séance comptéescompte rendu intégral officiel des 619 séances de la 17e, hors présidence de séance, interjections à part
532déclarations d'intérêts reliéesDIA officielles (HATVP) reprises telles quelles sur les fiches, soit 92% des 577 député·es en exercice ; la plus récente par député·e
3 718organisations inscrites au répertoire du lobbyingrépertoire AGORA (HATVP) repris tel quel, dont 69 404 fiches d'action visant la catégorie parlementaire ; 379 inscriptions closes ont leur fiche mais n'entrent pas dans ces chiffres
604lois promulguées suivieslien vers le Journal officiel et le suivi de l'application sur Légifrance (15e à 17e)
96des député·es avec leurs questions reliées630 sur 654 ayant siégé en 17e ; les autres n'ont posé aucune question sur la 17e législature
Amendements reliés, désormais depuis 2017.

En intégrant les amendements de la 15e législature (jeu de données d'archives de l'Assemblée), le nombre de scrutins d'amendement reliés à leur amendement (déposant et dispositif) est porté à 13 478, la grande majorité des scrutins d'amendement, sur les trois législatures 2017-2026. Les ventilations et la courbe par famille politique remontent ainsi jusqu'en 2017, sans le biais d'un démarrage en 2022.

Chaque amendement déposé a sa fiche

Un amendement n'a presque jamais de scrutin public : en commission comme souvent en séance, on vote à main levée, et il ne reste aucune trace du vote de chaque député·e. Le site publie désormais une fiche pour tout amendement déposé, qu'il ait été voté, retiré, déclaré irrecevable ou pas encore examiné, et chaque fiche dit lequel de ces cas s'applique. Un amendement « tombé » ou « non défendu » n'a jamais été mis aux voix : nous ne le présentons donc pas comme un rejet.

610 568amendements avec une fiche15e législature, 16e législature, 17e législature ; tous les amendements déposés, quel qu'ait été leur sort
243 749examinés en commissioncontre 366 819 en séance publique : le stade commission, longtemps invisible sur ce site, pèse 40% des amendements déposés
13 476ont fait l'objet d'un scrutin publicsoit 2% : pour tous les autres, le vote nominatif n'existe pas dans les données de l'Assemblée, et nous ne le reconstituons pas
34 643amendements de crédits budgétairessans texte à réécrire : leur contenu est un mouvement d'argent entre programmes, affiché en tableau
20 530articles ou divisions parcourablessur 1 011 dossiers de loi : depuis la fiche d'un texte, les amendements se parcourent article par article
100%renvoient à leur fiche officiellelien construit depuis la référence de texte de l'open data, jamais devinée ; sans elle, aucun lien n'est proposé

Le travail en commission

Avant d'arriver dans l'hémicycle, un texte est examiné et amendé en commission. Le site reconstruit ce travail depuis l'open data : pour chaque dossier, les amendements examinés, ceux qui ont été adoptés (ceux qui modifient le texte), avec leur auteur·rice et leur groupe. Les dispositifs juridiques les plus complexes sont résumés en clair par un modèle de langage local, puis recoupés par un second modèle ; les rares synthèses douteuses sont régénérées ou retirées. Aucune synthèse n'invente : chacune est ancrée dans le dispositif et l'exposé des motifs, et signalée comme générée.

983dossiers de loi suivis en commission15e à 17e législatures
243 749amendements examinés en commissiondont 36 960 adoptés, ceux qui modifient le texte
100%des amendements adoptés détaillés sont attribués15 170 amendements : nom de l'auteur·rice ou rôle (rapporteur, Gouvernement), via les référentiels officiels toutes législatures
93%avec la pastille de groupe (couleur officielle)14 167 amendements reliés à leur groupe politique
3 440amendements de commission résumés en clairIA locale sur les dispositifs les plus complexes, vérifiée par recoupement, soit 23% des adoptés détaillés (déploiement progressif)
4 109rapports parlementaires référencéscommissions permanentes et commissions d'enquête, 15e à 17e législatures ; 53 rapports d'application sont reliés à la loi qu'ils évaluent, dont 52 au vote qui l'a adoptée
3 823rapports mènent au document officielsur 4 047 rapports de commission ; les 1 235 liens vers le Sénat sont reconstruits depuis le numéro et l'année de session, puis confrontés un par un au site du Sénat : l'intitulé servi doit être celui du rapport. Les autres n'ont pas d'adresse déterminable de façon sûre, et la fiche le dit plutôt que de proposer un lien approximatif
6 350textes dont l'auteur·rice est nommé·eavec son groupe politique, résolu depuis les référentiels officiels ; 3142 textes portent leur origine (transmis par le Sénat, adopté par l'Assemblée) quand aucun auteur n'est renseigné
3 171articles reliés au vote qui les a tranchéssur 564 textes : article adopté, rejeté ou amendé, avec les amendements rattachés
470lois trouvables par leur numéroune recherche « 2023-580 » mène directement au texte, comme un numéro de scrutin ou une URL
74circonscriptions où le siège a changé de main20 parce que la personne élue est entrée au Gouvernement, ce qui suspend son mandat : « Trouver mon député·e » nomme celle qui siège

Mettre les mesures en perspective

Pour aider chacun à juger l'efficacité des mesures, sans que le site prenne position : des constats d'organismes nommés et datés, des « repères » chiffrés (un chiffre marquant, une mise en regard, une source précise vérifiée à la main), mis en regard des votes et des grands dossiers.

90constats d'efficacité30 thèmes sur 39 couverts, sources nommées et vérifiées
35dossiers et textes avec avis d'experts81 sources datées et vérifiées
5 720textes classés par type de mesuresanction, incitation, interdiction...
566lois dont l'application est suiviedécrets pris ou encore attendus, 148 avec un décret en attente (baromètre de l'Assemblée)
26%grands textes avec « objectif affiché face aux moyens »164 sur 631 dossiers passés au vote solennel
77%grands dossiers avec indicateurs graphiques chiffrés17 sur 22 (séries officielles : INSEE, Ministère de l'Intérieur, Citepa, DREES...)

Ce qui avance en ce moment

Les chiffres ci-dessous sont ceux des chantiers en cours, pas des chantiers terminés. Ils bougent à chaque publication, et c'est à cela qu'ils servent : montrer où le site est encore incomplet, et de combien.

97%des articles de loi disent en une ligne ce qu'ils font19 701 sur 20 327 articles des textes soumis à un vote majeur, chacun relu deux fois, par deux lecteurs qui ne se voient pas
11 642votes d'amendement montrent les arguments échangés en séanceretrouvés mot pour mot dans le compte rendu de leur séance ; 343 rapprochements refusés faute de concordance
72%des articles affichent leur nombre d'amendements déposés17e législature ; 67 % en 16e et 64 % en 15e. Le reste, pour l'essentiel, n'a reçu aucun amendement
69fiches portent la marque des articles censurés ou réservés606 marques d'articles, posées d'après le dispositif de la décision du Conseil constitutionnel

Ce que la recherche sait trouver

La barre de recherche couvre les député·es, les grands dossiers, les scrutins, les textes déposés (votés ou non), les prises de parole en séance et les rapports de commission d'enquête. Elle reconnaît aussi les identifiants : le numéro d'un scrutin (par exemple « 1556 »), qui désigne un vote différent dans chaque législature et vous les propose donc tous ; le numéro officiel d'une loi (par exemple « 2021-1109 »), qui mène au texte promulgué correspondant, pour les lois dont nous connaissons le texte final ; enfin un identifiant ou une adresse de page collés, y compris venant d'un autre site, qui ouvrent directement la bonne fiche. Les alias sont des métadonnées ajoutées à un texte pour le rendre trouvable par des mots courants absents de son intitulé officiel (par exemple « viol » ou « pédocriminalité » sur des textes intitulés « infractions sexuelles »).

100%des textes déposés cherchables6 724 textes : titre, auteur·rice, thème (3 législatures)
100%des député·es cherchablespar nom, sur les 3 législatures
100%des grands dossiers cherchables22 dossiers, plus thèmes et concepts
13%des textes avec alias (mots courants)842 textes trouvables au-delà de leur intitulé officiel ; couverture en cours d'extension
47sigles et noms usuels reconnus à la saisieIVG, ZAN, PLFSS, AESH, fin de vie... reliés à leur formulation officielle quand vous les tapez (distinct des alias par texte ci-contre)

Les acteurs et le référentiel

654député·es au total17e législature (15e et 16e aussi couvertes)
14groupes politiques17e législature
12familles politiquesregroupements transversaux aux législatures
22grands dossiersparcours transversaux par sujet
43concepts de recherchesynonymes menant vers un thème

Provenance des contenus

Comment savoir d'où vient un contenu ? Chaque contenu sensible porte un petit badge de provenance, qui indique d'un coup d'œil ce qui peut comporter des approximations (texte d'IA) et ce qui est vérifiable. Survolez un badge pour le détail.

  • Texte rédigé hors ligne par un modèle de langage local (synthèses « Comprendre les votes », enjeux, « Ce que prévoit le texte », classification par thème). Peut contenir des approximations : c'est le seul contenu exposé à l'erreur, à recouper avec les votes et le texte officiel.
  • Calculé directement à partir des votes publics (décomptes, boussole, discipline, scores, faits marquants, rapprochements par similarité). Aucune interprétation : reproductible à l'identique.
  • Vérifié à la main : liens vers des sources officielles ou des organismes de référence, contrôlés un par un. Aucune génération automatique.

Dans tous les cas, aucun modèle de langage n'est appelé pendant votre navigation : tout est pré-calculé et figé dans des fichiers statiques.

Une exception assumée à la neutralité : les « décryptages du créateur du site » (sa newsletter), reliés à certains votes et grands dossiers, sont des analyses personnelles, toujours signalées comme « avis personnel » et nettement séparées des contenus factuels et sourcés.

Ce que le Conseil constitutionnel a décidé

Beaucoup de lois sont soumises au Conseil constitutionnel avant leur promulgation. Il peut les valider, en censurer des articles, ou les valider sous réserve d'une interprétation précise : ce dernier cas valide le texte tout en en changeant la portée, et il n'est donc jamais affiché comme une simple validation.

  • D'où viennent les décisions. De l'archive publique des décisions du Conseil (données ouvertes), pour le numéro, la date et le sens ; et de la page du Conseil elle-même pour le dispositif, c'est-à-dire ce que la décision décide.
  • Les articles censurés sont marqués dans la liste du texte. Quand la décision nomme un article, la ligne de cet article porte ce que le Conseil en a dit. Deux règles, et elles sont là pour éviter de vous induire en erreur. D'abord, « censuré » et « censuré en partie » ne se confondent pas : près d'un renvoi sur deux ne vise que des mots, un alinéa ou un paragraphe, et l'article reste en vigueur pour le reste. Ensuite, une validation n'est jamais marquée : la liste des censures est complète par construction, celle des validations ne l'est pas (le Conseil ne répond qu'aux griefs dont il est saisi), et marquer les secondes ferait lire « non examiné » comme « non conforme ».
  • Ce marquage n'apparaît que sur le texte définitif. Le Conseil juge la loi telle qu'elle est définitivement adoptée. Une lecture antérieure ne contient que les articles encore en discussion et ne porte pas la même numérotation : sur ces textes-là, la moitié des numéros cités par le Conseil n'existe pas. Plutôt que de poser une marque sur l'article qui porte ce numéro dans un autre état du texte, la fiche n'en pose aucune.
  • Le dispositif est recopié, jamais résumé. Ce que vous lisez est le texte du Conseil, mot pour mot. Sur un texte où « sous réserve » change la portée d'un article entier, résumer serait exactement l'endroit où un contresens s'introduirait.
  • Comment une décision est reliée à une loi. Par le titre officiel de la loi, et par la date : la décision doit avoir été rendue dans les soixante jours précédant la promulgation. Un titre seul ne suffit pas ; « Loi de finances rectificative pour 2017 » en désigne deux, et deux lois organiques différentes peuvent porter le même intitulé à onze ans d'écart.
  • Quand une loi organique et une loi ordinaire portent le même nom, elles sont souvent votées ensemble et le Conseil rend deux décisions le même jour. Chaque fiche affiche celle de sa loi, et n'affiche rien si aucune ne correspond.
  • Ce que le site ne peut pas montrer. L'archive publique s'arrête à une date donnée : une loi plus récente peut avoir été examinée sans que sa décision figure encore ici. Et une loi encore en navette n'a évidemment pas de décision.

Ce qui s'est dit sur un amendement

Un vote sur trois porte sur un amendement. Sa fiche montre désormais les prises de parole de sa discussion, et non plus seulement celles du texte auquel il se rattache.

  • Le découpage vient du compte rendu, pas d'une interprétation. La présidence de séance ouvre chaque amendement par une formule fixe : « La parole est à M. X, pour soutenir l'amendement n° N » ; elle en annonce le sort par une formule tout aussi fixe : « (L'amendement n° N est adopté.) ». Ce qui est publié est ce qui se trouve entre les deux.
  • Le numéro seul ne suffit pas, le texte doit concorder. Deux textes peuvent être discutés le même jour, et « l'amendement n° 22 » existe dans les deux. Le texte discuté doit donc être celui du vote. Éprouvé : un extrait pris au hasard ailleurs dans les débats passe ce contrôle 7 fois sur 100, le bon 95 fois sur 100.
  • Aucune intention n'est prêtée. La page dit « lors de la discussion de cet amendement », jamais « untel dit de cet amendement ». Dans un tiers des cas, ce n'est pas l'auteur·rice qui défend son amendement mais un·e collègue de son groupe : la rapporteure le dit parfois en toutes lettres.
  • Les propos sont recopiés, et les coupes se voient. Quand une intervention est interrompue, le compte rendu la publie en plusieurs morceaux ; chaque morceau est repris tel quel et les raccords sont marqués par des crochets. La fin de l'intervention est toujours conservée, parce que c'est là que se trouve l'avis de la commission ou du Gouvernement. Un contrôle vérifie que chaque morceau publié se retrouve mot pour mot dans le compte rendu de la séance.

Les résumés de réunion de commission

Chaque réunion de commission porte un résumé rédigé hors ligne par un modèle de langage, à partir du compte rendu officiel. Le compte rendu est lié à côté de chacun : c'est lui qui fait foi.

  • Un contrôle automatique les relit. Chaque nombre, chaque passage entre guillemets et chaque personne nommée doit se retrouver dans le compte rendu. Un résumé qui échoue n'est pas publié.
  • Pourquoi les noms d'abord. Un résumé de réunion attribue des propos : la faute la plus coûteuse n'y est pas le chiffre inventé, c'est le nom inventé. Le contrôle a d'ailleurs trouvé, dès sa première exécution, un résumé qui citait deux députés inexistants parmi 28 noms exacts.
  • Ce que ce contrôle prouve, et ce qu'il ne prouve pas. Un compte rendu fait des dizaines de milliers de signes : un petit nombre s'y retrouve par hasard. Les noms et les citations, eux, sont des chaînes trop distinctives pour que le hasard joue. Le contrôle attrape l'invention, pas le contresens : la lecture du compte rendu reste la référence.

Intérêts déclarés (HATVP) : ce que le site fait, et ne fait pas

Les fiches député·es reprennent la déclaration d'intérêts et d'activités (DIA) publiée en open data par la Haute Autorité pour la transparence de la vie publique : activités professionnelles, fonctions de direction, participations financières, fonctions bénévoles, autres mandats. Reprise telle quelle : aucun tri, aucune reformulation, aucune classification maison ; la déclaration la plus récente fait foi.

  • Aucun rapprochement automatique n'est établi entre ces déclarations et les votes. Une déclaration d'intérêts n'est ni une faute ni un indice : c'est une obligation légale de transparence. La seule mise en regard que fait le site est la juxtaposition, sur une même fiche, d'informations toutes publiques (commission, votes, intérêts déclarés) : les conclusions appartiennent au lecteur ou à la lectrice.
  • Le patrimoine n'apparaît jamais : les déclarations de situation patrimoniale des parlementaires ne sont pas librement republiables (consultation encadrée en préfecture), et ce site ne cherche pas à les reproduire.
  • Vie privée des tiers : l'activité professionnelle du conjoint est reprise sans son nom ; les collaborateurs parlementaires sont comptés, pas nommés.
  • Si aucune déclaration n'est publiée, la fiche l'indique factuellement (les publications interviennent dans les mois qui suivent l'élection) ; le décompte brut est rafraîchi chaque jour avec le reste des données.
  • Couverture : les député·es en exercice (17e législature). La Haute Autorité retire de l'open data les déclarations à la fin du mandat : celles des ancien·nes député·es des 15e et 16e législatures ne sont donc plus disponibles publiquement, et n'apparaissent pas sur leurs fiches. C'est une limite de la source, pas un choix du site.

Sources et crédits

Tout part de fichiers ouverts publiés par des institutions publiques (Assemblée Nationale, et HATVP pour les intérêts déclarés) : aucun scraping, aucune donnée privée.

L'essentiel vient de l'open data de l'Assemblée Nationale, sous Licence Ouverte Etalab 2.0, complété par l'open data de la HATVP (déclarations d'intérêts). Jeux de données mobilisés :

Scrutins publics

Un fichier JSON par scrutin : titre, date, type de vote, sort, et vote nominatif de chaque député·e.

Référentiel AMO

Acteurs, Mandats, Organes. Référentiel complet des député·es et des groupes parlementaires, avec dates de mandat.

Répertoire du lobbying

Répertoire des représentants d'intérêts (AGORA, HATVP) : organisations, moyens et fiches d'action déclarés, repris tels quels sur la page lobbying. Les chiffres et classements ne comptent que les inscriptions en vigueur. Une inscription close (cessation déclarée à la HATVP) garde sa fiche, qui le dit en tête avec la date et le motif repris de hatvp.fr ; elle est listée à part sur la page lobbying.

Déclarations HATVP

Déclarations d'intérêts et d'activités des député·es (Haute Autorité pour la transparence de la vie publique), reprises telles quelles. Règles détaillées.

Dossiers législatifs

Permet de rattacher un scrutin au texte de loi correspondant et à son URL Légifrance.

Photographies

Notices biographiques

  • Le résumé d'introduction de la section « Qui est-ce ? » de chaque fiche de député·e provient de Wikipédia (API REST « page/summary »), sous licence CC BY-SA. Texte rédigé par des contributeurs et contributrices, repris tel quel et sourcé : aucune reformulation, aucune génération automatique. L'âge, la profession et la circonscription, eux, viennent directement de l'open data de l'Assemblée.

Géocodage et cartographie

  • Base Adresse Nationale (BAN) : géocodage d'adresse pour « Trouver mon député », appelé directement depuis votre navigateur (aucun relais, aucune conservation).
  • Contours des départements : france-geojson (Grégoire David), sous licence ODbL.

Dans les pas de

  • nosdéputés.fr et l'équipe Regards Citoyens, pionniers de la transparence parlementaire en France depuis 2009. monparlement.fr poursuit la même intention avec d'autres angles de lecture.
  • Datan, qui met en données et en visualisations l'activité de l'Assemblée. Découvert en cours de route : monparlement.fr s'inscrit dans le même élan, avec ses propres partis pris de lecture.

Logiciels, modèles et outils

  • Svelte + Vite (interface et build), Python (pipeline d'agrégation et de classification), scikit-learn (analyses statistiques).
  • Modèles de langage ouverts, exécutés en local via Ollama pour la classification thématique, les synthèses et les rapprochements par similarité (hors ligne) : Qwen3 (Alibaba) pour la classification et les synthèses, recoupées par un second modèle, et nomic-embed-text (Nomic AI) pour les rapprochements, sous licence Apache 2.0.
  • Développement assisté par Claude Code (Anthropic) : écriture du code, refontes et automatisations du pipeline. Certaines synthèses « Comprendre les votes » ont aussi été rédigées en session avec Claude.
  • Et l'ensemble des contributeur·rice·s du logiciel libre dont le travail rend ce projet possible.

Une source manquante ou mal créditée ? Signalez-le. Voir aussi les mentions légales.

Périmètre

L'outil couvre les 15e (2017–2022), 16e (2022–2024) et 17e (en cours) législatures. Deux notions y découpent les votes, et le site ne les confond pas :

  • un vote final tranche un texte entier : le vote sur l'ensemble d'un projet ou d'une proposition de loi, solennel ou ordinaire, une motion de censure, un vote du Congrès. Quand une loi ne compte qu'un article, l'Assemblée ne vote souvent que sur cet article unique, et ce vote est le vote final : le compte rendu de séance note alors l'article adopté « ainsi que l'ensemble » du texte, et un rejet fait tomber le texte avec lui. Il ne compte pas quand un vote sur l'ensemble du même texte le suit, quand un article additionnel est adopté après lui, ou quand le compte rendu dit l'article adopté sans le texte, par exemple parce que la séance a été levée avant le vote sur l'ensemble. Il y en a 962. C'est la base des analyses politiques (alliances, alignement avec le Gouvernement, cohésion), parce qu'il porte la position finale de chaque groupe. Beaucoup de votes sur l'article unique autorisent la ratification ou l'approbation d'un accord international : souvent consensuels, ils pèsent sur les taux d'accord entre groupes, qu'ils tirent vers le haut ;
  • un vote majeur est un vote final important, retenu sur des critères objectifs, sans jugement du site : vote solennel, motion de censure, Congrès, vote final d'un budget de l'État ou de la Sécurité sociale (loi de finances, loi de financement, loi spéciale, règlement), d'une révision de la Constitution, ou vote final réunissant au moins 200 votants. Il y en a 431. Ce sont eux que les listes « Majeurs » affichent. Le seuil de 200 votants écarte les votes finals tenus devant un hémicycle clairsemé, comme une proposition de loi adoptée avec quelques dizaines de votants : le texte compte, mais il n'a pas mobilisé l'Assemblée.
Tous les scrutins, à deux niveaux de finesse

Les votes finals sont classés thématiquement un par un. Les scrutins ordinaires (amendements, articles : ~15 000 sur les trois législatures) sont désormais eux aussi indexés : par un modèle de langage local, complété par l'héritage du thème de leur texte, soit la quasi-totalité des scrutins couverts. Tous restent accessibles en drill-down. Les chiffres de couverture exacts figurent en tête de page.

Le sélecteur en haut à droite permet de basculer entre une législature unique (qui conserve les groupes parlementaires précis de la période) et la vue législatures cumulées, qui fusionne par famille politique transverse (voir section 3).

Familles politiques (vue multi-législatures)

Les groupes parlementaires changent à chaque législature (LREM → Renaissance → EPR ; PS → SOC ; etc.). Pour comparer 9 ans d'activité, on regroupe en 12 familles politiques transverses :

  1. France Insoumise - FI, LFI
  2. Communistes / GDR - GDR, GDR-NUPES
  3. Écologistes - EcoS, NUPES-EELV
  4. Socialistes - SOC, PS, NG
  5. LIOT / Indépendants
  6. MoDem / Démocrates - DEM
  7. Renaissance / Majorité - LREM, REN, EPR, AGIR
  8. Horizons - HOR
  9. Droite - LR, DR, UDI
  10. UDR - UDDPLR (parti Ciotti)
  11. Rassemblement National - RN
  12. Non-inscrits - NI

En vue par législature, l'affichage utilise les groupes réels de cette période. En vue cumulée, les votes sont sommés par famille sur l'ensemble des scrutins disponibles. Le mapping est auditable dans le code source (constante GROUP_CODE_TO_FAMILY).

Agrégation par groupe

Pour chaque scrutin, l'open data fournit le détail nominatif des votes (un par député·e). On agrège par groupe parlementaire en sommant les pour, contre, abstentions et non-votants (absents ou exclus du scrutin).

L'ordre d'affichage des groupes est hémicyclique gauche → droite :

LFI · GDR · EcoS · SOC · LIOT · DEM · EPR · HOR · DR · UDDPLR · RN · NI

Classification thématique

Une taxonomie de 39 thèmes regroupés en 9 catégories est définie en amont dans data/themes.yaml. Chaque vote final est associé à un ou plusieurs thèmes par classification LLM, puis stocké dans un cache data/cache/classifications.json versionné dans Git. Deux moteurs possibles, tous deux hors ligne : un modèle de langage local via Ollama (par ex. qwen3:14b ou mistral-nemo), lancé par pipeline/ollama_enrich.py, ou une génération en session.

Les amendements et articles (~15 000 scrutins, souvent sans référence de dossier dans l'open data) héritent ensuite du thème de leur texte : rattachement par dossier législatif, sinon reconnaissance du nom du texte cité dans l'intitulé du scrutin.

Pour une part croissante de ces amendements, une synthèse « L'essentiel » résume en clair leur apport propre (ce que l'amendement change), affichée sous le résultat du scrutin. Elle est préparée hors ligne, à partir du seul texte officiel (dispositif et exposé des motifs) : rédigée et vérifiée à la main pour les débats les plus récents, par un modèle de langage local pour le reste. Signalée par un repère « IA » ; le texte exact reste consultable. Le corpus est couvert : les seuls amendements sans phrase sont ceux dont l'Assemblée ne publie ni dispositif, ni exposé des motifs, ni sort.

Pas de LLM à l'usage.

La classification est faite une fois pour toutes en amont. Le site ne fait aucun appel à un LLM lors de la consultation par un internaute. Tout est servi en statique.

Les corrections manuelles sont possibles via data/overrides.yaml, qui prévaut toujours sur la classification automatique. Un mode admin local (UI d'édition) est disponible en dev mais n'est pas inclus dans le build de production.

Heatmap groupe × thème

La couleur d'une cellule (thème × groupe) représente la position dominante du groupe sur l'ensemble des scrutins du thème, sur la période filtrée :

  • Majoritairement pour
  • Majoritairement contre
  • Abstention dominante
  • Forte absence (non-votants)

On somme tous les votes du groupe sur les scrutins du thème (filtré par période), puis on prend la catégorie la plus représentée. Aucune normalisation par taille de groupe : c'est bien la position dominante, pas un score de cohésion.

Cohésion & dissensus

Le dissensus interne d'un groupe sur un scrutin mesure la divergence entre député·es. Formellement :

dissensus = 1 − max(pour, contre, abst) / (pour + contre + abst)

Un dissensus de 0 signifie unanimité (tous les votants du groupe ont fait le même choix). Un dissensus de 0,66 signifie un éclatement parfait entre les trois modalités. Les absents sont exclus du calcul.

Inversement, la cohésion affichée sur la fiche d'un groupe est la moyenne sur les votes finals de max(pour, contre, abst) / votants, soit 1 − dissensus moyen.

Grands dossiers (transversaux)

Au-delà de la taxonomie thématique, l'outil propose 22 « grands dossiers » (médias, protection de l'enfance, énergie, climat, retraites, santé-environnement, agriculture, pouvoir d'achat, sécurité-narcotrafic, Europe-international, immigration, école, système de santé). Ce sont des problèmes politiques transverses regroupant les scrutins selon (thèmes ∪ mots-clés) ∩ période, avec possibilité d'inclusion/exclusion manuelle d'IDs précis (par ex. motions de censure du 49.3 retraites 2023).

La configuration est dans data/dossiers.yaml. Chaque dossier propose une chronologie mensuelle, une mini-heatmap par famille politique cumulée sur l'ensemble du périmètre, et la liste complète des scrutins (multi-législatures).

Explorer : ce qui a occupé le Parlement

La page Explorer réunit la recherche, les filtres et un panorama de l'activité. Son graphe « Ce qui a occupé le Parlement » repose sur quelques choix de méthode.

Une pondération par le temps, approché par le nombre de votes. Le graphe ne compte ni les lois ni les seuls votes solennels, mais tous les scrutins publics, amendements et articles compris, mois par mois. L'idée : un texte sur lequel l'Assemblée vote 300 amendements l'a bien plus occupée qu'un vote sec. Le nombre de scrutins sert donc de proxy du temps parlementaire consacré à chaque sujet. C'est une approximation (pas un chronomètre) : les mois budgétaires, riches en amendements, pèsent lourd, ce qui est voulu. Tous les mois de la période sont affichés, y compris les creux (intersession estivale, dissolution, crise gouvernementale). Le sélecteur Majeurs / Tous bascule à la fois le graphe et la liste de résultats entre tous les scrutins (amendements compris) et les seuls votes majeurs : la même donnée, deux focales.

Plusieurs façons de lire la même donnée. Volume (l'ampleur absolue, on repère les pics) ; Proportion (la part de chaque sujet ramenée à 100 % par mois, comparable dans le temps) ; Frise (une ligne par sujet, son intensité au fil des mois) ; Flux (un streamgraph centré, les sujets s'écoulant en rubans). La ventilation se fait au choix par thème (la taxonomie du site), par grand dossier (sur les votes solennels) ou par famille politique (qui est à l'initiative de l'activité : les amendements sont attribués à la famille de leur déposant·e, les textes à celle de leur auteur·rice, et les projets de loi à une série « Gouvernement » à part ; attribution via le groupe à la législature concernée, sur les amendements des 15e, 16e et 17e législatures, y compris des député·es depuis parti·es). Volume par défaut ; choisir un thème, un dossier ou une famille concentre le graphe et filtre la liste de résultats plus bas (pour une famille : ses amendements et textes). Pour la lisibilité, « climat » et « énergie » sont réunis, et les motions de censure forment une série à part (repérée par le type de scrutin, pas par un thème).

Le lissage de la vue « Flux ». Cette vue arrondit légèrement les transitions d'un mois à l'autre (courbes de Bézier de type Catmull-Rom, tension faible) pour un rendu organique. Le lissage est purement visuel : il ne déplace pas les points réels et n'invente aucune valeur entre deux mois. Les chiffres exacts restent ceux du mois : ils s'affichent dans le panneau de détail (au survol) et, sans aucun lissage, dans les vues Volume et Proportion. Sur des données très irrégulières, c'est un compromis assumé entre fluidité et fidélité.

Les faits marquants. Quelques mois portent un repère qui explique un pic ou un creux : session budgétaire, dissolution de juin 2024, censure du gouvernement Barnier (décembre 2024), chute du gouvernement Bayrou (septembre 2025)… Ces annotations sont curées à la main, factuelles et datées, avec un lien vers une source précise quand elle existe ; elles ne sont jamais générées par un modèle.

La courbe d'un mot. En cherchant un terme, une courbe en montre l'empreinte mois par mois à travers les sources datées : intitulés de scrutins, textes de loi, prises de parole en séance et questions parlementaires (questions écrites et orales sans débat adressées aux ministres, 17e législature ; les questions au Gouvernement orales en sont absentes, faute de date dans la source). La vue « Par famille » ventile le terme par famille politique pour voir qui s'en est emparé : textes, prises de parole et questions sont rattachés à la famille de leur auteur·rice ou orateur·rice (les projets de loi à une série « Gouvernement »), via le groupe à la législature concernée, comme le panorama ci-dessus. Les scrutins, sans auteur unique, en sont exclus ; une minorité d'intervenant·es (non-inscrit·es, orateur·rices non rattaché·es) reste sans famille. Une vue « Comparer » superpose enfin les courbes de plusieurs mots, pour confronter leurs trajectoires. La courbe compte des occurrences, pas des positions : un même mot peut être défendu ou combattu.

Objectif, moyens, avis d'experts et profil d'action

Plusieurs couches aident à juger les textes et les acteurs sans que le site prenne position, sur des angles transversaux aux thèmes (chacun a son idée de ce qui compte). Toutes sont produites hors ligne et relues à la main ; aucune n'appelle de modèle de langage à l'exécution.

L'essentiel « en clair ». Sur les grands votes, la section « Ce que le texte change » s'ouvre sur une phrase de synthèse qui dit l'essentiel du texte, avant le résumé complet et le détail des mesures. Ces phrases sont rédigées à la main (pas de modèle appelé à l'affichage), à partir du résumé et de l'objectif du texte déjà vérifiés ; elles simplifient volontairement, le détail faisant foi.

Objectif affiché contre moyens. Pour les grands dossiers et les grands textes, l'objectif annoncé par les auteurs (toujours attribué, jamais validé par le site) est mis en regard des moyens concrets du texte, étiquetés adopté / censuré / écarté / modifié. L'objectif réel n'est pas affirmé : il émerge de la mise en regard, et des travaux indépendants présentés sur les mêmes fiches. Sur la fiche d'un vote, cette mise en regard vit désormais dans « Ce que le texte change » (en version resserrée ; le panneau complet reste sur la fiche du texte et celle du grand dossier).

Travaux indépendants. Des recommandations, avis et constats d'organismes nommés et datés (Cour des comptes, INSEE, DREES, hauts conseils, Conseil constitutionnel, revues systématiques type Campbell ou Cochrane...), vérifiés à la source (statut HTTP contrôlé, aucune URL inventée), jamais des cercles de réflexion partisans. Sur une fiche de vote, recommandations (formulées autour du texte) et évaluations (de ce type de mesure) sont réunies en une seule liste, dédoublonnée, du plus récent au plus ancien. Le site résume et attribue ces travaux, il ne tranche pas.

Type de mesure. Chaque texte est classé (sanction, incitation, interdiction, subvention, autorisation...) par un modèle local, pour rattacher les constats d'efficacité au bon mécanisme, au-delà du seul thème.

Profil d'action. Sur la fiche d'un groupe ou d'un·e député·e, et en comparatif sur Ce qu'ils proposent, des repères sur la manière de travailler (présence, prise de parole et amendements, travail législatif, initiative, orientation de vote), transversaux au clivage gauche-droite. Chaque repère est adossé à une métrique calculée sur les données ouvertes ; l'orientation de vote est rappelée comme un repère, en précisant qu'elle dépend surtout de la position majorité / opposition. Le site ne note personne.

Préparer un rendez-vous : scores et détecteurs

Le module « Préparer un rendez-vous » de la fiche député·e corrige un biais de volume : les scrutins budgétaires et de procédure sont nombreux et obligatoires, ils mesurent l'ordre du jour plus que le positionnement. Tous les calculs sont faits au build, à partir des votes publics ; rien n'est calculé sur la personne qui consulte, et les sujets choisis restent dans le navigateur (localStorage).

  • Score discriminant d'un scrutin (0 à 1) : disc = (1 - part de la position dominante parmi les familles politiques exprimées) / (1 - 1/3). Un vote quasi unanime vaut ~0 ; un vote qui coupe les familles en deux vaut ~1. Le score est divisé par deux quand la partition pour/contre recoupe exactement la mécanique majorité/opposition (bloc central d'un côté, gauche et droite de l'autre) : ces votes disent le statut institutionnel, pas la vision.
  • Votes « contraints » vs « de choix » : sont classés contraints les motions de censure, déclarations de politique générale, textes budgétaires (budget de l'État et de la Sécurité sociale, règlements, lois spéciales, programmations des finances) et les votes à partition pur majorité/opposition. Le bilan du module ne retient que les votes de choix, pondérés par le score discriminant (plancher 0,2 pour qu'aucun vote exprimé ne disparaisse). Environ la moitié des votes finals sont de choix.
  • Détecteurs d'écarts (chacun produit un fait daté, jamais un jugement) : écart au groupe (vote opposé à la position dominante de son groupe) ; écart temporel (positions opposées sur deux textes du même grand dossier dans deux législatures, avec le caveat « textes jamais identiques » et les deux liens) ; cosignature puis vote manquant ou contraire au vote d'ensemble ; absence sélective (au moins 25 points d'absence de plus sur un thème, sur 8 scrutins minimum, que son taux global, caveat délégation/mission affiché) ; vote contre sans alternative (au moins 6 votes de choix à plus de 80 % contre sur un thème, sans proposition de loi signée ou cosignée sur ce thème) ; voix décisives (scrutins à très faible marge) ; silence (thème à 6 scrutins de choix ou plus sans aucune position exprimée ni initiative).
  • Limites : l'initiative est mesurée sur les propositions de loi signées et cosignées (les amendements ne sont pas ventilés par thème) ; une absence peut refléter une délégation de vote, une mission ou une réunion simultanée ; l'écart temporel compare des textes proches mais jamais identiques. Ces caveats sont affichés dans le module, sans clic.

Famille de référence (optionnel). À la fin du quiz « Quel groupe vote comme moi ? », vous pouvez choisir de garder en mémoire votre famille la plus proche : le site affiche alors sa position sur chaque page de vote, pour confronter vos attentes aux votes réels. Ce choix est stocké uniquement dans votre navigateur (localStorage), n'est jamais transmis ni demandé d'office, et s'efface en un clic (« oublier ») partout où il apparaît.

Mesure d'audience anonyme

Pour savoir quelles pages servent (et orienter le travail), le site compte les pages vues de façon anonyme par construction, sans rien retirer à la promesse de départ : aucun cookie, aucun identifiant, aucune empreinte.

  • Au chargement d'une page, le navigateur envoie à une petite fonction hébergée par le site le chemin de la page (ex. /scrutins) et une classe d'écran parmi trois (téléphone, tablette, ordinateur), déduite de la largeur d'écran. À la première page vue seulement, il ajoute, si l'on arrive d'un autre site, le nom de ce site (ex. www.google.com), jamais l'adresse de la page d'origine. Dans l'Explorer, une recherche stabilisée envoie le texte cherché et le fait qu'elle ait ou non donné un résultat. Ni l'adresse IP, ni le navigateur utilisé, ni aucun identifiant ne sont lus ou stockés, et rien ne relie deux envois entre eux ; le code de la fonction est publié dans le dépôt du site (functions/hit-counter) et tient en une page.
  • Les préférences Do Not Track et Global Privacy Control sont respectées : si elles sont activées, rien n'est envoyé.
  • Les vues sont agrégées en compteurs par jour (« la page X a été vue N fois le jour J », « N arrivées depuis tel site », « N pages vues sur téléphone », « tel texte cherché N fois »), puis les traces brutes sont supprimées ; les compteurs eux-mêmes ne sont gardés que 31 jours. Chaque envoi n'est daté qu'à l'heure près. Il n'existe aucun parcours individuel, aucune session, aucun recoupement possible. Tout est publié sur la page Audience ; un site d'origine ou un texte cherché n'y apparaît qu'à partir de 3 occurrences sur la période. Un texte cherché n'est en outre publié que si chacun de ses mots appartient au vocabulaire public du site (titres des votes et des textes, thèmes, dossiers, noms des député·es et des groupes) : un nom de personne privée, ou une phrase saisie pour être publiée, ne l'est jamais.

Ce que votre navigateur contacte, exactement

Le site ne charge aucun script extérieur : ni régie publicitaire, ni outil de mesure d'audience commercial, ni bouton officiel de réseau social, ni bibliothèque servie par un CDN. Les polices de caractères sont embarquées dans le site, pas appelées chez Google. Ce n'est pas seulement une intention : la Content-Security-Policy du site déclare script-src 'self', et c'est votre navigateur qui l'applique. Un script tiers y serait bloqué, même si le code du site tentait de le charger.

Restent cinq domaines extérieurs, tous déclarés dans cette même politique. Les voici en entier, en commençant par ceux qui se déclenchent sans que vous fassiez rien :

  • commons.wikimedia.org et upload.wikimedia.org (images) : les portraits des député·es y sont hébergés, sous licence libre. Afficher une fiche qui en comporte une envoie donc une requête à Wikimedia, qui y voit passer votre adresse IP. Les initiales sur fond coloré s'affichent quand la photo manque.
  • www2.assemblee-nationale.fr (images) : le portrait officiel, utilisé en second recours sur une fiche quand Wikimedia n'en a pas. Même remarque : c'est une requête faite par votre navigateur à l'Assemblée nationale.
  • api-adresse.data.gouv.fr (Base Adresse Nationale, service public) : appelée seulement si vous tapez une adresse pour trouver votre député·e. Rien n'est envoyé tant que vous n'utilisez pas cette recherche.
  • api.kessel.media : appelée seulement si vous vous inscrivez à la lettre d'information, au moment où vous validez. Aucun encart ni script de l'hébergeur de la lettre n'est chargé dans la page.

S'y ajoutent les deux fonctions du site lui-même (compteur de pages vues et formulaire de contact), hébergées sur son propre compte : ce ne sont pas des tiers, et leur code est publié dans le dépôt. Les deux seules requêtes automatiques vers l'extérieur sont donc les portraits, et elles ne concernent que les fiches de député·e.

Les autres adresses que vous verrez dans les pages (Assemblée nationale, Légifrance, HATVP, data.gouv.fr, Wikipédia…) sont des liens : rien n'est demandé à ces sites tant que vous ne cliquez pas.

Activité parlementaire des député·es

Pour chaque député·e, deux indicateurs principaux sont calculés sur les votes solennels (motions de censure et Congrès compris) :

  • Présence = % de scrutins où le député apparaît dans votesNominatifs (avec n'importe quelle modalité : pour, contre, abstention, non-votant).
  • Participation = % de scrutins où le député a réellement exprimé un vote (pour / contre / abstention, donc hors non-votant).
  • « Non-votant » et « absent » sont deux choses différentes, longtemps confondues sur ce site. Un·e non-votant·e est présent·e et inscrit·e au scrutin mais ne prend pas part au vote (la présidence de séance, par exemple) : l'Assemblée le ou la nomme. Un·e absent·e n'est pas inscrit·e au scrutin ; l'Assemblée ne publie aucune liste d'absents, ce nombre se déduit (effectif du groupe au jour du vote moins les député·es nommé·es). Sur une fiche de vote, les deux colonnes sont désormais distinctes, et pour chaque groupe pour + contre + abstention + non-votants + absents est égal à l'effectif du groupe.
  • Pourquoi ce n'était pas le cas avant. Les données de l'Assemblée publient, à côté des abstentions, un décompte dit « non-votants volontaires ». Vérification faite sur les 101 208 lignes de groupe de la 17e législature, cette valeur est toujours égale au nombre d'abstentions du même groupe, sans une seule exception, et aucune liste nominative ne lui correspond : il s'agit d'une autre qualification des mêmes personnes, et non d'une catégorie supplémentaire. Nous l'additionnions : chaque abstention était donc comptée une seconde fois, sur environ 74 % des scrutins. Ce décompte n'est plus additionné.
  • Participation sur sa commission = même calcul, mais restreint aux scrutins portant sur un dossier examiné par une commission dont le député ou la députée était membre à la date du vote, sur l'ensemble des scrutins (amendements inclus), et non sur les seuls votes solennels. Un·e élu·e ne peut pas être partout : ce second taux dit s'il ou elle est présent·e sur son propre champ.
    Le taux affiché en regard, « son taux d'ensemble », est calculé sur les mêmes dates et avec la même règle, toutes commissions confondues, de sorte que l'écart entre les deux se lise sans réserve.
    Ce qui est exclu, et pourquoi. Les scrutins sans dossier législatif dans l'open data (2 614 des 8 434 de la législature en cours) : sans dossier, aucune commission. Les dossiers examinés par une commission spéciale : la source ne dit pas laquelle, et les rattacher au hasard inventerait une appartenance. Enfin, l'indicateur n'est pas publié lorsque le périmètre d'un·e député·e compte moins de 30 scrutins : un taux sur douze votes se lirait comme un taux sur 900, sans valoir autant.

La fiche député·e affiche un graphique hebdomadaire comparé à la médiane des député·es de la législature (style nosdéputés.fr) avec détection automatique des vacances parlementaires. Tri possible par présence ou participation dans l'annuaire, avec basculement entre vue individuelle et vue agrégée par groupe (médiane interne, top et bottom 3).

Limite :

La "présence" ne traduit pas la présence physique mais l'apparition aux votes solennels (~70-130 votes par législature). Un ministre apparaît rarement (Le Maire ~1%) car il ne vote pas, ce qui ne dit rien de son engagement réel.

Propositions de loi initiées

Le pipeline parse les fichiers dossiers/json/document/PION*.json de l'open data AN pour extraire l'auteur·rice principal·e et les cosignataires de chaque proposition de loi (PPL) initialement déposée. Les textes de commission (TC), textes adoptés (TA) et textes transmis (TAP) sont exclus pour ne compter que l'initiative législative au sens strict.

Volumes : 2 929 PPL sous la 15e, 1 716 sous la 16e, 2 079 sous la 17e. Affichage du compte par député·e sur sa fiche et dans la colonne de l'annuaire ; tri possible par nombre de PPL en tant qu'auteur ou cosignataire.

Analyses politiques

La page Analyses propose plusieurs lectures complémentaires. Toutes les valeurs sont précalculées en Python dans analyses.json et servies en statique, aucun calcul lourd côté navigateur.

Bloc gouvernemental dynamique

Pour la loyauté, les adoptions disputées et la carte 2D, le « bloc gouvernemental » n'est pas figé une fois pour toutes, il dépend de la législature : LREM + MoDem pour la 15ᵉ (Macron 1), RE + MoDem + Horizons pour la 16ᵉ, EPR + MoDem + Horizons pour la 17ᵉ. Un raffinement par période (Barnier / Bayrou / Lecornu) reste à venir. Une exception : la liste des propositions de loi d'opposition décrite ci-dessous retient, elle, un bloc fixe (Renaissance + MoDem + Horizons). Sans effet à ce jour, aucun groupe de la famille Horizons n'ayant existé sous la 15ᵉ.

Propositions de loi d'opposition : ce que la mesure dit, et ce qu'elle ne dit pas

La page Analyses liste les votes finals portant sur une proposition de loi dont l'auteur·rice principal·e siège hors du bloc gouvernemental. C'est une mesure de l'initiative législative, obtenue en croisant les fichiers d'auteur·rice de l'open data avec les scrutins. Les textes rejetés y figurent au même titre que les textes adoptés, et sont signalés comme tels.

Cette liste ne mesure pas les « niches parlementaires » au sens du règlement, c'est-à-dire les journées d'ordre du jour réservées aux groupes d'opposition et minoritaires (article 48 de la Constitution). Un texte d'opposition peut être examiné hors d'une journée réservée, et une journée réservée peut porter des textes d'origines diverses. Confrontation faite le 1er septembre 2026 avec le calendrier prévisionnel de l'Assemblée pour la 17ᵉ législature : la déduction par les auteur·rices produit 48 journées candidates pour 20 journées réservées réelles ; 14 de ces candidates tombent un vrai jour de niche, et 12 avec le bon groupe, soit 25 % de précision sur le couple (jour, groupe). Elle est de surcroît aveugle par construction aux journées des groupes Démocrates et Horizons, qui y ont droit comme groupes minoritaires tout en appartenant au bloc gouvernemental. La vraie liste ne se déduit pas des textes : elle se lit dans le calendrier de l'Assemblée, et n'est pas encore branchée sur le site.

Alliances inter-familles

Pour chaque paire de familles, % de votes finals où elles ont eu la même position dominante (pour / contre / abstention). Lecture empirique, qui ne reflète pas forcément les alliances déclarées. Rendu en réseau force-directed (les liens épais et opaques correspondent aux paires les plus alignées).

Proximité et coalitions sur les fiches groupe / famille

Sur la fiche d'un groupe ou d'une famille, la même mesure est déclinée au niveau du groupe parlementaire : la proximité de vote (barres classées) est le % de votes finals où les deux groupes ont voté dans le même sens, tous votes confondus. Les coalitions isolent les seuls scrutins « qui divisent » (le camp perdant pèse au moins 15 % des sièges exprimés) : en écartant les votes de quasi-consensus, on fait ressortir le bloc réel quand l'hémicycle se partage. La phrase de positionnement et l'alignement gouvernemental ne reformulent rien : ils reprennent ces chiffres. Le statut membre / apparenté·e du trombinoscope vient des mandats publiés par l'Assemblée.

Loyauté ↔ opposition

% de scrutins où la position dominante de chaque famille a été celle du bloc gouvernemental de la législature concernée. Lecture en gradient rouge-vert.

Transpartisans : ce qui rassemble (ou rejette à l'unisson)

Top scrutins consensus, dans les deux sens : on capte aussi bien les textes unanimement adoptés que unanimement rejetés par toutes les familles (avant on ratait ces derniers). Le tri se fait sur un consensus_score = max(max_pour, max_contre) / total_familles.

Carte 2D des familles politiques (refonte)

La carte 2D par député utilisait initialement une PCA sur la matrice scrutins×députés. Les axes n'étaient pas interprétables et donnaient parfois des positions absurdes. Conservée en details pliable pour réference, mais remplacée par une carte des 12 familles politiques avec deux axes calculés à la volée à partir des alignements de vote :

  • Axe X : alignement-droite − alignement-gauche ∈ [−1, +1]. Pour chaque famille F, on calcule alignement(F, gauche) = moyenne de l'alignement de F avec chacune des familles de gauche (LFI, GDR, Écolos, Soc), et idem alignement(F, droite) avec (LR, RN, UDR). Le score X est la différence. Positif = F se comporte comme la droite, négatif = comme la gauche.
  • Axe Y : (alignement-gouv − 0.5) × 2 ∈ [−1, +1]. Pour chaque famille F, on calcule alignement(F, gouv) = moyenne avec les familles du bloc gouvernemental (EPR/MoDem/HOR sous LG17, LREM/MoDem sous LG15-16). Centré sur 0 pour la lisibilité visuelle.

Les cercles sont proportionnels à l'effectif cumulé de la famille sur LG15-17 (dédoublonné par id PA), pré-calculé en pipeline. Le filtre période global déplace les points (« ▶ Lecture » anime sur toute la chronologie).

Sismographe des dissensions internes

Pour chaque groupe parlementaire G et chaque vote final S, on calcule la dissension interne :

dissension(G, S) = 1 − max(pour, contre, abstention) / votants_du_groupe

où votants_du_groupe = pour + contre + abstention (les absences sont exclues du dénominateur). Une dissension de 0 signifie unanimité totale (tout le groupe vote dans le même sens), 0.66 signifie répartition équiprobable entre les 3 directions.

Seuils visuels :

  • < 5% : unanime (vert vif).
  • 5–15% : quasi-unanime (vert pâle).
  • 15–30% : tension (jaune).
  • 30–45% : forte division (orange).
  • > 45% : fracture (rouge).

Filtre : un groupe doit avoir au moins MIN_VOTANTS = 5 votants sur un scrutin pour qu'il soit comptabilisé (évite les artefacts pour les petits groupes sur les scrutins à faible présence). Les groupes sont triés par dissension moyenne décroissante (les plus turbulents en haut).

Sur l'accueil, l'aperçu du sismographe masque les non-inscrits (NI) : faute de ligne politique commune, leur « division » n'est pas un fait notable. La page Analyses conserve, elle, tous les groupes.

Synthèses pédagogiques par scrutin (★ "Comprendre les votes")

Sur les scrutins emblématiques, un bandeau spécial explique pourquoi chaque famille politique a voté comme elle a voté, en s'appuyant sur :

  • les positions historiques connues de la famille (programme, votes précédents) ;
  • le climat politique du moment (alliances, oppositions, gouvernement) ;
  • les motivations spécifiques au texte (parties soutenues, parties contestées).

Ces synthèses sont générées par un modèle d'intelligence artificielle (Claude) en amont, hors-ligne, puis figées dans des fichiers JSON (frontend/public/data/scrutins_llm/<id>.json). L'application n'utilise pas de LLM en direct : pas d'appel API à l'exécution, pas de surcoût, pas de fuite de requêtes, comportement déterministe. Ce n'est pas une rédaction humaine : la consigne donnée au modèle est une neutralité politique stricte et apartisane (décrire les positions, pas les juger). Le texte généré est vérifié contre les votes réels (un script de validation refuse toute synthèse qui contredit la position de vote d'une famille) et reste soumis à correction publique via la page contact. 903 scrutins couverts à ce jour, étendu progressivement.

Tags sectoriels (filtres de recherche)

En complément de la classification thématique principale (39 thèmes), on précalcule 20 tags sectoriels par mots-clés dans les titres : télécoms, énergie, agriculture, santé-hôpital, retraites, fiscalité, transport, etc. Génération automatique dans le pipeline build via pipeline/tags.py (fichier sector_tags.json exposé au frontend). Permet de filtrer la recherche par sous-thème sectoriel sans dépendre d'une analyse manuelle.

Niches politiques (typées)

Niches politiques (typées)

Scrutins adoptés malgré une opposition ou une fracture du bloc gouvernemental. On distingue désormais 3 types :

  • Fracture : au moins une famille gouv pour et au moins une contre, vrai désaccord interne.
  • Contre : majorité gouv contre alors que le texte passe (porté par l'opposition).
  • Abstention : aucune famille gouv n'a voté pour ni contre (laisser-passer stratégique).

Évolution temporelle, small multiples

Pour un parti sélectionné, on affiche une grille de mini-graphiques (un par thème), montrant l'évolution trimestrielle du % vote « pour » du parti comparé à celui du bloc gouvernemental (ligne pointillée). Les thèmes sont triés par écart moyen avec la majorité, du plus contrasté au plus aligné.

Profil radar (député ou famille)

Sur chaque fiche député·e et famille, un radar SVG affiche l'engagement thématique (volume de votes par catégorie, normalisé sur le max-catégorie). La fiche député ajoute deux jauges de cohérence : % de votes alignés avec sa famille et avec la majorité gouvernementale.

Score d'activité parlementaire : 3 axes

L'ancien score unique pondérait votes ordinaires, PPL initiées, rapports avec des coefficients opaques (1.0 / 0.05 / 5.0 / 0.5 / 8.0). Remplacé par 3 axes séparés, chacun ramené à [0, 100] par le 90ᵉ percentile de sa propre distribution :

  • presenceScore : participation aux votes solennels.
  • voiceScore : votes exprimés sur l'ensemble des scrutins (solennels + ordinaires).
  • legislativeScore : initiative législative (PPL auteur·e × 1, cosignée × 0.2, rapporteur·e × 3).

Un activityScore composite (moyenne des trois) reste exposé pour rétro-compatibilité, mais le radar utilise les 3 axes séparément.

Votes décisifs

Section dédiée dans Analyses qui isole les scrutins joués à moins de 20 voix d'écart entre POUR et CONTRE. Seuil minimum : 50 votants exprimés pour éviter les scrutins quasi-désertés. L'écart est calculé par |pour − contre| sur le décompte final, hors abstention.

La motion LIOT du 20 mars 2023 (référence historique) y figure en haut : rejetée à 9 voix près sur 287 nécessaires pour faire tomber le gouvernement Borne.

Quel groupe vote comme moi ? (positionnement)

Quiz de positionnement : l'utilisateur répond Pour / Contre / Abstention sur 10 textes phares depuis 2017, et l'outil calcule son % d'alignement avec chacune des 12 familles politiques sur la base de leurs votes effectifs.

Méthodologie : pour chaque question, on récupère la position dominante de chaque famille politique sur le scrutin réel concerné. On compare au vote utilisateur (avec un mapping inversé pour les motions de censure). Le score d'une famille = nb_réponses_alignées / nb_questions_répondues.

Garanties d'équilibre : chaque question affiche les arguments POUR et CONTRE pour permettre un choix éclairé. Les 10 textes de base couvrent retraites, immigration, climat, bioéthique, sécurité, agriculture, énergie. La liste évoluera vers un meilleur équilibre opposition / majorité présidentielle au fil des ajouts.

Événements marquants député

Sur la fiche d'un·e député·e, le chart hebdomadaire affiche des marqueurs verticaux pour les événements de carrière : élection (★ cyan), fin de mandat (◇ gris), nomination ministre (▲ orange), sortie du gouvernement (△ gris clair).

Source : les mandats du fichier acteur AMO30 (types ASSEMBLEE, MINISTERE). On filtre à partir du 21 juin 2017 (début LG15, limite globale de l'outil). 3 819 événements parsés pour 1 282 députés.

Héritage de thème via dossier

Les votes finals sont thématisés par classification LLM préalable. Les scrutins ordinaires (amendements, articles) n'ont pas de thème direct.

Mécanisme : pour chaque scrutin encore sans thème, si son dossierRef correspond à un vote final du même dossier, on hérite des thèmes de ce dernier. 1 068 scrutins ainsi classifiés en LG17 (LG15/16 : la donnée source ne fournit pas le dossierRef pour les scrutins ordinaires anciens, donc 0 héritage, vérifié).

La heatmap Thèmes propose un toggle Majeurs / Tous (votes majeurs, ou tous les scrutins). En mode "Tous", les ordinaires héritent du thème du dossier-mère.

Résumés d'enjeux (LLM hors ligne)

Pour faciliter la compréhension, chaque vote final reçoit (progressivement) un résumé généré par IA en deux parties :

  • resume : ce que le texte dit (objet, mesures clés).
  • dynamique : les positions des groupes et la dynamique politique autour du vote.

Ces résumés sont générés hors ligne, puis stockés dans data/cache/enjeux.json versionné dans Git : soit en session, soit par un modèle de langage local via Ollama (par ex. mistral-nemo). Le site ne fait aucun appel à un LLM lors de la consultation. La couverture est partielle (priorité aux scrutins récents et symboliques) et progresse au fil des générations.

Généré par IA, pas par un humain :

Ces résumés sont produits par un modèle d'IA avec une consigne de neutralité apartisane, pas écrits par une rédaction humaine. Ils explicitent le contexte politique et juridique sans prendre parti. Une IA peut commettre une erreur factuelle : à corriger via signalement le cas échéant.

Limites assumées

  • Biais de classification. La classification thématique LLM peut comporter des erreurs. Toutes les classifications sont publiées dans le cache versionné, donc auditables. Les corrections sont possibles via overrides.yaml.
  • Majeurs par défaut, amendements disponibles. Beaucoup de vues partent des votes majeurs, plus lisibles ; mais les amendements et articles sont désormais indexés par thème, cherchables et activables (périmètre « Tous »), et comptés dans le graphe d'activité de l'Explorer.
  • Graphe d'activité : un proxy, pas un chronomètre. « Ce qui a occupé le Parlement » pondère par le nombre de scrutins (amendements compris), une approximation du temps parlementaire et non une mesure exacte ; les mois budgétaires y pèsent mécaniquement plus.
  • Agrégation par groupe. L'agrégation écrase la dimension individuelle. Le détail nominatif est accessible sur chaque scrutin et chaque fiche député·e, mais ne fait pas l'objet d'un classement global.
  • Mapping groupe → famille politique. C'est un choix éditorial. Les frontières (par ex. Horizons vs Renaissance) sont parfois discutables ; le code source documente ces choix de manière explicite.
  • Pas de tracking, pas d'engagement. Voir les mentions légales pour les avertissements complets.

Architecture

Le site est 100% statique : aucune base de données, aucun appel API à l'usage. Le pipeline Python tourne en amont localement :

  1. fetch - téléchargement des fichiers open data (scrutins, AMO, dossiers)
  2. classify - classification thématique par LLM, cache en JSON
  3. build - génération des JSON statiques servis par le frontend

Stack frontend : Svelte 5 et SvelteKit (adaptateur statique), à URLs propres. Cette page, la FAQ, les pages de présentation, le journal des versions, l'accueil, les pages d'index (député·es, groupes, semaine, questions, lobbying, rapports…) et les fiches des député·es, groupes, familles, dossiers, thèmes, commissions d'enquête, votes majeurs, textes, rapports, questions et représentants d'intérêts sont pré-rendus en entier par SvelteKit, comme l'explorateur, les analyses, les outils (quiz, coalition, « Devinez leur vote ») et les fiches d'amendement : ils se lisent sans JavaScript, puis deviennent interactifs. Chaque fiche publie ses propres données, préparées au même moment. Toutes les pages du site sont ainsi pré-rendues, y compris les fiches des votes ordinaires et des amendements ; leur titre, leur description et leur aperçu de partage sont calculés au même moment, par le même code que la page. Zéro dépendance d'analytics. Hébergeable sur n'importe quel serveur statique (objet/CDN, GitHub Pages, Netlify, etc.).

Reproductibilité

Toutes les sources sont publiques et reconstructibles. L'ambition est qu'un tiers puisse cloner, relancer le pipeline et obtenir les mêmes JSON (modulo la classification LLM, déterministe à température 0 mais sensible aux versions de modèle).

Pour figer la classification, on s'appuie sur le cache versionné : tant que le hash du titre du scrutin ne change pas, la classification est réutilisée telle quelle. Cela permet de reproduire à l'identique tant que les overrides et le cache sont fournis avec le code.

Code, configs, cache, JSON pré-générés - disponibles sur demande en attendant la publication du dépôt public.

Télécharger les sources

Toutes les données utilisées par ce site sont publiques. Elles peuvent être réassemblées à partir de l'open data de l'Assemblée Nationale.

Le code source du pipeline Python et du frontend Svelte, ainsi que les fichiers intermédiaires (cache de classification thématique, overrides éditoriaux, configuration des grands dossiers, etc.) sont publiés sur un dépôt Git public.

En attendant la mise en ligne publique du dépôt, je partage volontiers sur demande :

  • les scripts Python (pipeline/) et le frontend Svelte (frontend/)
  • les fichiers de configuration éditoriale (data/themes.yaml, data/dossiers.yaml, data/overrides.yaml)
  • le cache des classifications LLM (data/cache/)
  • les JSON pré-générés servis par le frontend (frontend/public/data/)

Les fichiers bruts de l'AN (~ 500 Mo) restent téléchargeables directement depuis data.assemblee-nationale.fr.