{
  "asOf": "2026-10-31",
  "status": "published-approved-20261031",
  "principle": "Un seul critère par classement, ordre réversible, aucune moyenne ni note électorale. Valeur absente distincte de zéro. La couverture du corpus ne mesure pas la qualité d’un programme.",
  "criteria": [
    {
      "id": "age",
      "theme": "Parcours",
      "label": "Âge",
      "unit": "ans",
      "definition": "Âge révolu au jour de référence, uniquement avec une date de naissance complète confirmée.",
      "source": "Biographies institutionnelles ; à défaut biographie officielle ou référence bibliographique identifiée.",
      "state": "calculable",
      "sort": "asc"
    },
    {
      "id": "first-office",
      "theme": "Parcours",
      "label": "Depuis le premier mandat électif",
      "unit": "années écoulées",
      "definition": "Temps écoulé depuis le premier mandat documenté. Les interruptions restent visibles ; ce n’est pas une durée cumulée d’expérience politique.",
      "source": "Archives électorales et biographies institutionnelles.",
      "state": "à consolider"
    },
    {
      "id": "local-office",
      "theme": "Parcours",
      "label": "Durée de mandats locaux",
      "unit": "années cumulées",
      "definition": "Union des périodes de mandats électifs locaux ; deux mandats simultanés ne comptent pas deux fois.",
      "source": "Collectivités, Répertoire national des élus et archives électorales.",
      "state": "à consolider"
    },
    {
      "id": "local-executive",
      "theme": "Parcours",
      "label": "Durée à la tête d’un exécutif local",
      "unit": "années cumulées",
      "definition": "Maire ou présidence d’intercommunalité, département ou région ; union des périodes, fonctions d’adjoint séparées.",
      "source": "Collectivités et archives officielles.",
      "state": "à consolider"
    },
    {
      "id": "national-parliament",
      "theme": "Institutions",
      "label": "Durée à l’Assemblée et au Sénat",
      "unit": "années cumulées",
      "definition": "Union des périodes de mandat national effectivement exercées, interruptions ministérielles prises en compte.",
      "source": "Assemblée nationale et Sénat.",
      "state": "à consolider"
    },
    {
      "id": "eu-parliament",
      "theme": "Institutions",
      "label": "Durée au Parlement européen",
      "unit": "années cumulées",
      "definition": "Mandats européens effectivement exercés, avec dates d’entrée et de sortie.",
      "source": "Parlement européen.",
      "state": "à consolider"
    },
    {
      "id": "government",
      "theme": "Institutions",
      "label": "Durée au gouvernement",
      "unit": "mois cumulés",
      "definition": "Union des périodes de fonctions ministérielles, ministres délégués et secrétaires d’État inclus ; remaniement sans interruption non doublé.",
      "source": "Journal officiel et archives du Gouvernement.",
      "state": "à consolider"
    },
    {
      "id": "prime-minister",
      "theme": "Institutions",
      "label": "Durée à Matignon",
      "unit": "mois cumulés",
      "definition": "Périodes de fonction de Premier ministre, dates des décrets de nomination et de cessation.",
      "source": "Journal officiel et Gouvernement.",
      "state": "à consolider"
    },
    {
      "id": "coverage",
      "theme": "Programme documenté",
      "label": "Sujets avec une position récente",
      "unit": "% des 42 sujets",
      "definition": "Nombre de thèmes avec au moins une position individuelle indexée en 2026 ou 2027, divisé par les 42 thèmes du site. Textes collectifs et archives exclus. Une valeur nulle signifie zéro position repérée dans ce périmètre.",
      "source": "Corpus AinsiFont et liens des sources originales.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "positions",
      "theme": "Programme documenté",
      "label": "Positions récentes indexées",
      "unit": "fiches",
      "definition": "Fiches individuelles du corpus datées 2026 ou 2027. Une fiche n’équivaut pas nécessairement à une mesure unique ; aucun classement de qualité n’en est déduit.",
      "source": "Corpus AinsiFont, règles de découpage affichées.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "financial",
      "theme": "Programme documenté",
      "label": "Montants financiers documentés",
      "unit": "montants",
      "definition": "Entrées financières du corpus 2026/2027, hors estimations historiques 2022. Composantes, enveloppes et bénéfices individuels restent distingués ; aucune addition.",
      "source": "Registre financier et documents d’origine.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "figures",
      "theme": "Programme documenté",
      "label": "Chiffres annoncés indexés",
      "unit": "occurrences contextualisées",
      "definition": "Chiffres reliés aux fiches individuelles 2026/2027 ; doublons de même valeur dans une même fiche supprimés. Occurrences et non promesses distinctes.",
      "source": "Registre des chiffres AinsiFont et sources originales.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "interviews",
      "theme": "Présence médiatique",
      "label": "Interviews sur douze mois",
      "unit": "entretiens distincts",
      "definition": "Du 1er novembre 2025 au 31 octobre 2026. Entretiens éditoriaux identifiés ; rediffusions et extraits d’un même entretien dédupliqués. Liste des médias surveillés obligatoire.",
      "source": "Archives des médias, INA quand accessible ; périmètre publié.",
      "state": "recensement à constituer"
    },
    {
      "id": "media",
      "theme": "Présence médiatique",
      "label": "Médias ayant réalisé un entretien",
      "unit": "rédactions distinctes",
      "definition": "Sur les mêmes douze mois et le même périmètre que les interviews. Une rédaction compte une fois ; radios, TV, presse et médias numériques distingués.",
      "source": "Registre dédupliqué des entretiens.",
      "state": "recensement à constituer"
    },
    {
      "id": "airtime",
      "theme": "Présence médiatique",
      "label": "Durée des entretiens complets",
      "unit": "minutes",
      "definition": "Somme des durées vérifiées des entretiens intégraux recensés, hors publicités et doublons. Pas une estimation du temps de parole médiatique total.",
      "source": "Durées des archives intégrales ; éventuelles données Arcom affichées séparément.",
      "state": "recensement à constituer"
    },
    {
      "id": "debates",
      "theme": "Présence médiatique",
      "label": "Débats contradictoires suivis",
      "unit": "débats",
      "definition": "Échanges éditoriaux avec un contradicteur politique identifié sur les mêmes douze mois. Simple entretien avec un journaliste exclu.",
      "source": "Archives audiovisuelles et programmes des médias.",
      "state": "recensement à constituer"
    },
    {
      "id": "references",
      "theme": "Traçabilité",
      "label": "Sources des positions récentes",
      "unit": "URL distinctes",
      "definition": "URL originales ou rapportées reliées aux seules fiches individuelles 2026/2027. Canonicalisation et déduplication affichées.",
      "source": "Index documentaire AinsiFont.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "primary",
      "theme": "Traçabilité",
      "label": "Part de sources primaires",
      "unit": "% des URL reliées",
      "definition": "Sources originales parmi les URL des positions individuelles 2026/2027, sans pondération par nombre de fiches. Une source primaire peut contenir une affirmation fausse.",
      "source": "Typologie documentaire et URL originales.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "dated",
      "theme": "Traçabilité",
      "label": "Part de sources datées au jour",
      "unit": "% des URL reliées",
      "definition": "URL des positions individuelles 2026/2027 dont le jour de publication est documenté ; une date de consultation ne compte pas comme publication.",
      "source": "Métadonnées vérifiées des publications.",
      "state": "calculable",
      "sort": "desc"
    },
    {
      "id": "recency",
      "theme": "Traçabilité",
      "label": "Dernière position datée indexée",
      "unit": "jours écoulés",
      "definition": "Délai depuis la date de prise de position individuelle la plus récente dans le corpus, au 31 octobre 2026. Ce n’est pas la date de dernière expression publique réelle.",
      "source": "Date des propos explicitement établie, distincte de la mise en ligne et de la consultation.",
      "state": "calculable",
      "sort": "asc"
    }
  ],
  "displayCriteria": [
    "age",
    "political-years"
  ],
  "careerMethod": "Repère le plus ancien retenu : adhésion partisane, fonction politique ou candidature datée. Écart d’années civiles, non durée cumulée d’activité ; chronologies non exhaustives. Les sources et intervalles sont conservés. Activités professionnelles, études, service militaire et journalisme ne suffisent pas à eux seuls.",
  "themes": [
    {
      "id": "finances",
      "name": "Dette, déficit et budget"
    },
    {
      "id": "fiscalite",
      "name": "Fiscalité et redistribution"
    },
    {
      "id": "pouvoir",
      "name": "Pouvoir d’achat et inflation"
    },
    {
      "id": "emploi",
      "name": "Emploi, chômage et travail"
    },
    {
      "id": "entreprises",
      "name": "Entreprises et entrepreneuriat"
    },
    {
      "id": "industrie",
      "name": "Industrie et réindustrialisation"
    },
    {
      "id": "commerce",
      "name": "Commerce, exportations et investissement"
    },
    {
      "id": "innovation",
      "name": "Recherche, innovation et IA"
    },
    {
      "id": "retraites",
      "name": "Retraites"
    },
    {
      "id": "sante",
      "name": "Santé et hôpital"
    },
    {
      "id": "autonomie",
      "name": "Grand âge et autonomie"
    },
    {
      "id": "famille",
      "name": "Famille, enfance et natalité"
    },
    {
      "id": "education",
      "name": "École et éducation"
    },
    {
      "id": "superieur",
      "name": "Enseignement supérieur et formation"
    },
    {
      "id": "logement",
      "name": "Logement et habitat"
    },
    {
      "id": "egalite",
      "name": "Égalité, inclusion et handicap"
    },
    {
      "id": "energie",
      "name": "Énergie et mix électrique"
    },
    {
      "id": "climat",
      "name": "Climat et décarbonation"
    },
    {
      "id": "adaptation",
      "name": "Adaptation et risques climatiques"
    },
    {
      "id": "biodiversite",
      "name": "Biodiversité et forêts"
    },
    {
      "id": "eau",
      "name": "Eau et ressources naturelles"
    },
    {
      "id": "agriculture",
      "name": "Agriculture et alimentation"
    },
    {
      "id": "transports",
      "name": "Transports et mobilités"
    },
    {
      "id": "dechets",
      "name": "Déchets et économie circulaire"
    },
    {
      "id": "institutions",
      "name": "Institutions et démocratie"
    },
    {
      "id": "justice",
      "name": "Justice et politique pénale"
    },
    {
      "id": "securite",
      "name": "Sécurité et police"
    },
    {
      "id": "immigration",
      "name": "Immigration et intégration"
    },
    {
      "id": "laicite",
      "name": "Laïcité et libertés"
    },
    {
      "id": "administration",
      "name": "Administration et services publics"
    },
    {
      "id": "culture",
      "name": "Culture, médias et patrimoine"
    },
    {
      "id": "sport",
      "name": "Sport et vie associative"
    },
    {
      "id": "territoires",
      "name": "Décentralisation et collectivités"
    },
    {
      "id": "ruralite",
      "name": "Ruralité et petites villes"
    },
    {
      "id": "outremer",
      "name": "Outre-mer"
    },
    {
      "id": "urbanisme",
      "name": "Aménagement, villes et foncier"
    },
    {
      "id": "europe",
      "name": "Union européenne et gouvernance"
    },
    {
      "id": "diplomatie",
      "name": "Diplomatie et alliances"
    },
    {
      "id": "defense",
      "name": "Défense et dissuasion"
    },
    {
      "id": "souverainete",
      "name": "Souverainetés stratégiques"
    },
    {
      "id": "cooperation",
      "name": "Coopération et aide au développement"
    },
    {
      "id": "commerce-monde",
      "name": "Commerce mondial et mondialisation"
    }
  ],
  "denominator": 42,
  "people": [
    {
      "id": "kazib",
      "name": "Anasse Kazib",
      "initials": "AK",
      "party": "Révolution permanente",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Campagne présidentielle portée par Révolution permanente.",
      "values": {
        "age": 39,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://auposte.media/invites/anasse-kazib",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Au Poste — Anasse Kazib",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "kazib",
        "yearLow": 2017,
        "yearHigh": 2017,
        "title": "Adhésion au Nouveau Parti anticapitaliste",
        "url": "https://www.lemonde.fr/politique/article/2026/06/21/presidentielle-2027-le-militant-trotskiste-anasse-kazib-tente-une-nouvelle-fois-l-aventure_6706090_823448.html",
        "sourceTitle": "Le Monde, 21 juin 2026",
        "locator": "Adhésion au Nouveau Parti anticapitaliste",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 39,
      "ageMax": 39,
      "politicsMin": 9,
      "politicsMax": 9
    },
    {
      "id": "mikolajczak",
      "name": "Antoine Mikolajczak",
      "initials": "AM",
      "party": "Équinoxe",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Le parti présente explicitement son candidat désigné.",
      "values": {
        "age": null,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://www.placegrenet.fr/2026/09/14/presidentielle-2027-antoine-mikolajczak-candidat-dequinoxe-a-la-recherche-de-parrainages-en-isere/689123",
      "birthNote": "Année de naissance explicitement publiée ; jour et mois non confirmés.",
      "birthSourceTitle": "Place Gre’net — Antoine Mikolajczak",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "mikolajczak",
        "yearLow": 2024,
        "yearHigh": 2024,
        "title": "Engagement à Équinoxe",
        "url": "https://parti-equinoxe.fr/qui-est-antoine-mikolajczak/",
        "sourceTitle": "Équinoxe — biographie du candidat",
        "locator": "Engagement à Équinoxe",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 27,
      "ageMax": 28,
      "politicsMin": 2,
      "politicsMax": 2
    },
    {
      "id": "mathieu",
      "name": "Benoît Mathieu",
      "initials": "BM",
      "party": "Sans étiquette",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Site personnel de campagne et recherche de parrainages.",
      "values": {
        "age": null,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 2.380952380952381,
        "positions": 5,
        "financial": 0,
        "figures": 1,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://benoitmathieu2027.fr/le-candidat",
      "birthNote": "La biographie indique 27 ans sans date de naissance ; aucun âge actuel calculé à partir de cette mention.",
      "birthSourceTitle": "Benoît Mathieu — site officiel",
      "topicIds": [
        "institutions"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Programme démocratique 2027",
          "url": "https://www.benoitmathieu2027.fr/programme",
          "publisher": "Benoît Mathieu — Cap 500 signatures",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "mathieu",
        "yearLow": 2026,
        "yearHigh": 2026,
        "title": "Lancement de Cap 500 signatures",
        "url": "https://www.lemonde.fr/m-perso/article/2026/10/12/ce-qui-ressort-c-est-un-sentiment-de-colere-benoit-mathieu-le-microcandidat-a-la-presidentielle-qui-ausculte-la-france-a-velo_6792421_4497916.html",
        "sourceTitle": "Le Monde, 12 octobre 2026",
        "locator": "Lancement de Cap 500 signatures",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": null,
      "ageMax": null,
      "politicsMin": 0,
      "politicsMax": 0
    },
    {
      "id": "cazeneuve",
      "name": "Bernard Cazeneuve",
      "initials": "BC",
      "party": "La Convention",
      "declared": false,
      "status": "Candidature à confirmer",
      "statusNote": "Sources contradictoires : annonce présentée comme candidature, puis relativisée par son entourage. LCP décrit encore une étape préalable le 14 octobre. Exclu par prudence du filtre des déclarés.",
      "values": {
        "age": 63,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 33.33333333333333,
        "positions": 15,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 100,
        "recency": 108
      },
      "birthSource": "https://www.info.gouv.fr/les-anciens-premiers-et-premieres-ministres-de-la-ve-republique/bernard-cazeneuve",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Gouvernement — Bernard Cazeneuve",
      "topicIds": [
        "famille",
        "egalite",
        "sante",
        "institutions",
        "culture",
        "administration",
        "fiscalite",
        "industrie",
        "energie",
        "defense",
        "europe",
        "immigration",
        "innovation",
        "territoires"
      ],
      "latestPositionDate": "2026-07-15",
      "sources": [
        {
          "title": "Lettre aux Français : propositions",
          "url": "https://www.la-convention.fr/lettre",
          "publisher": "Bernard Cazeneuve — La Convention",
          "date": "2026-07-15",
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Lettre aux Français : propositions",
          "url": "https://www.la-convention.fr/lettre",
          "publisher": "Bernard Cazeneuve — La Convention",
          "date": "2026-07-15",
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "cazeneuve",
        "yearLow": 1997,
        "yearHigh": 1997,
        "title": "Élection comme député de la Manche",
        "url": "https://www.info.gouv.fr/les-anciens-premiers-et-premieres-ministres-de-la-ve-republique/bernard-cazeneuve",
        "sourceTitle": "Gouvernement — anciens Premiers ministres",
        "locator": "Élection comme député de la Manche",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 63,
      "ageMax": 63,
      "politicsMin": 29,
      "politicsMax": 29
    },
    {
      "id": "retailleau",
      "name": "Bruno Retailleau",
      "initials": "BR",
      "party": "Les Républicains",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 65,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 14.285714285714285,
        "positions": 12,
        "financial": 16,
        "figures": 7,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 6,
        "primary": 50,
        "dated": 66.66666666666667,
        "recency": null
      },
      "birthSource": "https://www.senat.fr/senateur/retailleau_bruno04033b.html",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Sénat — Bruno Retailleau",
      "topicIds": [
        "retraites",
        "energie",
        "education",
        "institutions",
        "immigration",
        "emploi"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Projet : retraites",
          "url": "https://www.avecretailleau.fr/projet/theme/retraites",
          "publisher": "Campagne de Bruno Retailleau / Les Républicains",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Projet : électricité",
          "url": "https://www.avecretailleau.fr/projet/theme/electricite",
          "publisher": "Campagne de Bruno Retailleau / Les Républicains",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Rétablir un examen d’entrée en sixième",
          "url": "https://www.publicsenat.fr/actualites/politique/presidentielle-2027-bruno-retailleau-veut-refonder-lecole-autour-de-quatre-axes-principaux",
          "publisher": "Public Sénat",
          "date": "2026-08-31",
          "kind": "presse"
        },
        {
          "title": "Élargir le référendum aux questions législatives",
          "url": "https://republicains.fr/actualites/2026/09/02/en-france-la-seule-cour-supreme-cest-le-peuple-je-lui-donnerai-le-dernier-mot/",
          "publisher": "Les Républicains — reproduction d’un entretien au Figaro",
          "date": "2026-09-02",
          "kind": "presse"
        },
        {
          "title": "Porter à 1 000 euros la gratification minimale des stages longs",
          "url": "https://www.publicsenat.fr/actualites/economie/presidentielle-que-proposent-les-candidats-pour-augmenter-les-salaires",
          "publisher": "Public Sénat",
          "date": "2026-10-30",
          "kind": "presse"
        },
        {
          "title": "Baisser les cotisations de 30 milliards par an",
          "url": "https://www.avecretailleau.fr/projet/mesure/rendre-30-milliards-d-euros-aux-salaries-et-aux-entreprises",
          "publisher": "Bruno Retailleau — campagne 2027",
          "date": "2026-09-24",
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Trajectoire financière",
          "url": "https://www.avecretailleau.fr/projet/mesure/la-trajectoire-financiere-du-projet-197-md-dont-146-md-pour",
          "publisher": "Bruno Retailleau 2027",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Cotisations et rémunération nette",
          "url": "https://www.avecretailleau.fr/projet/mesure/rendre-30-milliards-d-euros-aux-salaries-et-aux-entreprises",
          "publisher": "Bruno Retailleau 2027",
          "date": null,
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Projet : retraites",
          "url": "https://www.avecretailleau.fr/projet/theme/retraites",
          "publisher": "Campagne de Bruno Retailleau / Les Républicains",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Projet : électricité",
          "url": "https://www.avecretailleau.fr/projet/theme/electricite",
          "publisher": "Campagne de Bruno Retailleau / Les Républicains",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "retailleau",
        "yearLow": 1988,
        "yearHigh": 1988,
        "title": "Conseiller général de la Vendée",
        "url": "https://www.info.gouv.fr/personnalite/bruno-retailleau",
        "sourceTitle": "Gouvernement — biographie de Bruno Retailleau",
        "locator": "Parcours professionnel : octobre 1988 – avril 2015",
        "quality": "biographie institutionnelle consultée",
        "note": "Mandat local attesté ; l’ancienneté depuis ce repère ne prouve pas l’absence d’un engagement partisan antérieur.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 65,
      "ageMax": 65,
      "politicsMin": 38,
      "politicsMax": 38
    },
    {
      "id": "egger",
      "name": "Clara Egger",
      "initials": "CE",
      "party": "Solution démocratique",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 38,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://catalogue.bnf.fr/ark:/12148/cb16228391n",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "BnF — Clara Egger",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "egger",
        "yearLow": 2021,
        "yearHigh": 2021,
        "title": "Candidature déclarée pour la présidentielle 2022",
        "url": "https://www.espoir-ric.fr/wp-content/uploads/2021/10/Communique191021.pdf",
        "sourceTitle": "Espoir RIC — communiqué du 19 octobre 2021",
        "locator": "Communiqué désignant Clara Egger comme candidate",
        "quality": "source de campagne, repérage partiel",
        "note": "Candidature déclarée, non qualification officielle au scrutin. Les mobilisations antérieures ne sont pas quantifiées ici. Communiqué repéré dans l’index de recherche ; l’accès direct au PDF est incomplet lors du contrôle.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 38,
      "ageMax": 38,
      "politicsMin": 5,
      "politicsMax": 5
    },
    {
      "id": "lisnard",
      "name": "David Lisnard",
      "initials": "DL",
      "party": "Nouvelle Énergie",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 57,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 7.142857142857142,
        "positions": 3,
        "financial": 0,
        "figures": 3,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 2,
        "primary": 0,
        "dated": 100,
        "recency": 4
      },
      "birthSource": "https://www.tf1info.fr/actualite/david-lisnard-14520/",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "TF1 Info — David Lisnard",
      "topicIds": [
        "logement",
        "fiscalite",
        "education"
      ],
      "latestPositionDate": "2026-10-27",
      "sources": [
        {
          "title": "Systématiser l’expulsion des délinquants des HLM",
          "url": "https://www.unenouvelleenergie.fr/questions/quel-candidat-veut-lutter-contre-le-narcotrafic/",
          "publisher": "Nouvelle Énergie — reproduction d’une publication individuelle",
          "date": "2026-10-16",
          "kind": "presse"
        },
        {
          "title": "Ramener la CSG sur les revenus d’activité à 6,6 %",
          "url": "https://www.lejdd.fr/politique/depenses-publiques-justice-appel-a-ciotti-ce-quil-faut-retenir-de-linterview-de-david-lisnard-a-cnews-187194",
          "publisher": "Le Journal du Dimanche",
          "date": "2026-10-28",
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Ramener la CSG sur les revenus d’activité à 6,6 %",
          "url": "https://www.lejdd.fr/politique/depenses-publiques-justice-appel-a-ciotti-ce-quil-faut-retenir-de-linterview-de-david-lisnard-a-cnews-187194",
          "publisher": "Le Journal du Dimanche",
          "date": "2026-10-28",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "lisnard",
        "yearLow": 2014,
        "yearHigh": 2014,
        "title": "Élection comme maire de Cannes",
        "url": "https://medias.amf.asso.fr/upload/files/Profession%20de%20foi%20david%20Lisnard%20A4%20FINAL%281%29.pdf",
        "sourceTitle": "AMF — profession de foi de David Lisnard, 2021",
        "locator": "Élection comme maire de Cannes",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 57,
      "ageMax": 57,
      "politicsMin": 12,
      "politicsMax": 12
    },
    {
      "id": "batho",
      "name": "Delphine Batho",
      "initials": "DB",
      "party": "Génération Écologie",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 53,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 4.761904761904762,
        "positions": 2,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 2,
        "primary": 50,
        "dated": 100,
        "recency": 122
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA335999",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Delphine Batho",
      "topicIds": [
        "energie",
        "adaptation"
      ],
      "latestPositionDate": "2026-07-01",
      "sources": [
        {
          "title": "Développer les boucles locales d’énergie partagée",
          "url": "https://generationecologie.fr/2026/06/22/quelle-politique-energetique-pour-la-france/",
          "publisher": "Génération Écologie — intervention aux Entretiens de Terra Nova",
          "date": "2026-06-22",
          "kind": "primaire"
        },
        {
          "title": "Ouvrir des lieux de fraîcheur accessibles",
          "url": "https://www.generationecologie.fr/2026/07/01/face-aux-vagues-de-chaleur-avoir-le-sens-des-priorites/",
          "publisher": "Génération Écologie — entretien LCI avec Anaïs Bouton",
          "date": "2026-07-01",
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Ouvrir des lieux de fraîcheur accessibles",
          "url": "https://www.generationecologie.fr/2026/07/01/face-aux-vagues-de-chaleur-avoir-le-sens-des-priorites/",
          "publisher": "Génération Écologie — entretien LCI avec Anaïs Bouton",
          "date": "2026-07-01",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "batho",
        "yearLow": 2007,
        "yearHigh": 2007,
        "title": "Première élection comme députée des Deux-Sèvres",
        "url": "https://www.archives.developpement-durable.gouv.fr/repertoire-d-archives-detaille-cabinet-de-delphine-a48117.html",
        "sourceTitle": "Archives du ministère de la Transition écologique",
        "locator": "Première élection comme députée des Deux-Sèvres",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 53,
      "ageMax": 53,
      "politicsMin": 19,
      "politicsMax": 19
    },
    {
      "id": "villepin",
      "name": "Dominique de Villepin",
      "initials": "DDV",
      "party": "La France humaniste",
      "declared": false,
      "status": "Candidature non confirmée",
      "statusNote": "Aucune déclaration explicite établie dans la source consultée.",
      "values": {
        "age": 72,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 28.57142857142857,
        "positions": 17,
        "financial": 6,
        "figures": 10,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.info.gouv.fr/les-anciens-premiers-et-premieres-ministres-de-la-ve-republique/dominique-de-villepin",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Gouvernement — Dominique de Villepin",
      "topicIds": [
        "emploi",
        "energie",
        "logement",
        "fiscalite",
        "industrie",
        "finances",
        "territoires",
        "entreprises",
        "ruralite",
        "urbanisme",
        "famille",
        "transports"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Projet économique : 20 propositions",
          "url": "https://lafrancehumaniste.fr/programme/economie.html",
          "publisher": "La France Humaniste — Dominique de Villepin",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Projet économique — vingt propositions",
          "url": "https://lafrancehumaniste.fr/programme/economie.html",
          "publisher": "La France Humaniste",
          "date": null,
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Projet économique : 20 propositions",
          "url": "https://lafrancehumaniste.fr/programme/economie.html",
          "publisher": "La France Humaniste — Dominique de Villepin",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "villepin",
        "yearLow": 1993,
        "yearHigh": 1993,
        "title": "Directeur de cabinet d’Alain Juppé aux Affaires étrangères",
        "url": "https://www.info.gouv.fr/les-anciens-premiers-et-premieres-ministres-de-la-ve-republique/dominique-de-villepin",
        "sourceTitle": "Gouvernement — anciens Premiers ministres",
        "locator": "Directeur de cabinet d’Alain Juppé aux Affaires étrangères",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 72,
      "ageMax": 72,
      "politicsMin": 33,
      "politicsMax": 33
    },
    {
      "id": "philippe",
      "name": "Édouard Philippe",
      "initials": "ÉP",
      "party": "Horizons",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 55,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 69.04761904761905,
        "positions": 53,
        "financial": 9,
        "figures": 22,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 6,
        "primary": 83.33333333333333,
        "dated": 16.666666666666668,
        "recency": null
      },
      "birthSource": "https://www.info.gouv.fr/les-anciens-premiers-et-premieres-ministres-de-la-ve-republique/edouard-philippe",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Gouvernement — Édouard Philippe",
      "topicIds": [
        "finances",
        "fiscalite",
        "retraites",
        "energie",
        "immigration",
        "institutions",
        "souverainete",
        "innovation",
        "europe",
        "commerce-monde",
        "adaptation",
        "defense",
        "justice",
        "emploi",
        "industrie",
        "eau",
        "sante",
        "education",
        "famille",
        "agriculture",
        "entreprises",
        "administration",
        "securite",
        "laicite",
        "urbanisme",
        "biodiversite",
        "sport",
        "transports",
        "culture"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Pour une France plus prospère",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-prospere",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus conquérante",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-conquerante",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus sûre",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-sure",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus attentive à ses enfants",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-attentive-a-ses-enfants",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "L’école : questions et réponses",
          "url": "https://www.edouardphilippe.fr/questions-reponses/ecoles",
          "publisher": "Édouard Philippe - Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Porter à 1 000 euros la gratification minimale des stages longs",
          "url": "https://www.publicsenat.fr/actualites/economie/presidentielle-que-proposent-les-candidats-pour-augmenter-les-salaires",
          "publisher": "Public Sénat",
          "date": "2026-10-30",
          "kind": "presse"
        }
      ],
      "financialSources": [
        {
          "title": "Priorités économiques",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-prospere",
          "publisher": "Avec Édouard 2027",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Priorités écologiques — Édouard Philippe",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-conquerante",
          "publisher": "Priorités écologiques — Édouard Philippe",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Priorités pour les enfants",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-attentive-a-ses-enfants",
          "publisher": "Avec Édouard 2027",
          "date": null,
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Pour une France plus prospère",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-prospere",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus conquérante",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-conquerante",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus sûre",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-sure",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pour une France plus attentive à ses enfants",
          "url": "https://www.edouardphilippe.fr/priorites/pour-une-france-plus-attentive-a-ses-enfants",
          "publisher": "Édouard Philippe — Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "L’école : questions et réponses",
          "url": "https://www.edouardphilippe.fr/questions-reponses/ecoles",
          "publisher": "Édouard Philippe - Avec Édouard 2027",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "philippe",
        "yearLow": 1989,
        "yearHigh": 1992,
        "title": "Militant de la section PS à Sciences Po",
        "url": "https://www.sciencespo.fr/fr/actualites/en-entrant-a-sciences-po-jetais-de-gauche/",
        "sourceTitle": "Sciences Po — entretien et dossier étudiant (31 août 2017)",
        "locator": "Scolarité 1989–1992 et passage sur la section PS",
        "quality": "témoignage publié par une institution",
        "note": "L’adhésion est située pendant les études, sans année précise : intervalle 1989–1992 conservé, sans choisir arbitrairement 1989.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 55,
      "ageMax": 55,
      "politicsMin": 34,
      "politicsMax": 37
    },
    {
      "id": "zemmour",
      "name": "Éric Zemmour",
      "initials": "ÉZ",
      "party": "Reconquête",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 68,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://catalogue.bnf.fr/ark:/12148/cb124681117.public",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "BnF — Éric Zemmour",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "zemmour",
        "yearLow": 2021,
        "yearHigh": 2021,
        "title": "Déclaration de candidature présidentielle",
        "url": "https://www.tf1info.fr/politique/eric-zemmour-la-mue-difficile-d-un-journaliste-et-polemiste-en-candidat-a-l-election-presidentielle-2022-2203348.html",
        "sourceTitle": "TF1 Info, 30 novembre 2021",
        "locator": "Déclaration de candidature présidentielle",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 68,
      "ageMax": 68,
      "politicsMin": 5,
      "politicsMax": 5
    },
    {
      "id": "roussel",
      "name": "Fabien Roussel",
      "initials": "FR",
      "party": "Parti communiste français",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 57,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 9.523809523809524,
        "positions": 7,
        "financial": 3,
        "figures": 3,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 3,
        "primary": 100,
        "dated": 100,
        "recency": null
      },
      "birthSource": "https://questions.assemblee-nationale.fr/dyn/deputes/PA720692",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Fabien Roussel",
      "topicIds": [
        "energie",
        "transports",
        "education",
        "superieur"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Université d’été 2026 : discours de Fabien Roussel",
          "url": "https://www.pcf.fr/ue_26_discours_fr",
          "publisher": "Parti communiste français",
          "date": "2026-08-26",
          "kind": "primaire"
        },
        {
          "title": "Plan jeunesse et éducation de Fabien Roussel",
          "url": "https://oise.pcf.fr/132876",
          "publisher": "PCF Oise",
          "date": "2026-10-06",
          "kind": "primaire"
        },
        {
          "title": "Nationaliser TotalEnergies",
          "url": "https://oise.pcf.fr/132787",
          "publisher": "PCF Oise / Fabien Roussel",
          "date": "2026-07-28",
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Discours de Fabien Roussel — université d’été 2026",
          "url": "https://www.pcf.fr/ue_26_discours_fr",
          "publisher": "Parti communiste français",
          "date": "2026-08-26",
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Université d’été 2026 : discours de Fabien Roussel",
          "url": "https://www.pcf.fr/ue_26_discours_fr",
          "publisher": "Parti communiste français",
          "date": "2026-08-26",
          "kind": "primaire"
        },
        {
          "title": "Plan jeunesse et éducation de Fabien Roussel",
          "url": "https://oise.pcf.fr/132876",
          "publisher": "PCF Oise",
          "date": "2026-10-06",
          "kind": "primaire"
        },
        {
          "title": "Nationaliser TotalEnergies",
          "url": "https://oise.pcf.fr/132787",
          "publisher": "PCF Oise / Fabien Roussel",
          "date": "2026-07-28",
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "roussel",
        "yearLow": 1985,
        "yearHigh": 1985,
        "title": "Engagement au Mouvement des jeunes communistes",
        "url": "https://fr.wikipedia.org/wiki/Fabien_Roussel#Premi%C3%A8res_actions_militantes",
        "sourceTitle": "Wikipédia — chronologie de Fabien Roussel, sources citées",
        "locator": "Premières actions militantes : année 1985",
        "quality": "source secondaire encyclopédique",
        "note": "L’année 1985 est donnée par la chronologie encyclopédique. La biographie du PCF confirme l’engagement lycéen mais sans année ; ne pas présenter ce repère comme une certification institutionnelle.",
        "checkedAt": "2026-10-31",
        "additionalSource": "https://www.pcf.fr/bio_sg"
      },
      "ageMin": 57,
      "ageMax": 57,
      "politicsMin": 41,
      "politicsMax": 41
    },
    {
      "id": "philippot",
      "name": "Florian Philippot",
      "initials": "FP",
      "party": "Les Patriotes",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 45,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://www.tf1info.fr/actualite/florian-philippot-11201/",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "TF1 Info — Florian Philippot",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "philippot",
        "yearLow": 2011,
        "yearHigh": 2011,
        "title": "Adhésion au Front national",
        "url": "https://www.publicsenat.fr/actualites/non-classe/les-grandes-dates-de-florian-philippot-77632",
        "sourceTitle": "Public Sénat, 21 septembre 2017",
        "locator": "Adhésion au Front national",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 45,
      "ageMax": 45,
      "politicsMin": 15,
      "politicsMax": 15
    },
    {
      "id": "lalanne",
      "name": "Francis Lalanne",
      "initials": "FL",
      "party": "France Libre",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 68,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 28.57142857142857,
        "positions": 12,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://universalmusic.fr/artistes/20000100246",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Universal Music — Francis Lalanne",
      "topicIds": [
        "europe",
        "defense",
        "souverainete",
        "institutions",
        "transports",
        "fiscalite",
        "entreprises",
        "administration",
        "justice",
        "agriculture",
        "diplomatie",
        "laicite"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Le Projet 2027",
          "url": "https://dieudolalanne2027.com/programme/",
          "publisher": "Campagne Francis Lalanne — France Libre",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "lalanne",
        "yearLow": 2007,
        "yearHigh": 2007,
        "title": "Candidature aux élections législatives",
        "url": "https://www.universalmusic.fr/artistes/20000100246",
        "sourceTitle": "Universal Music — biographie artistique",
        "locator": "Candidature aux élections législatives",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 68,
      "ageMax": 68,
      "politicsMin": 19,
      "politicsMax": 19
    },
    {
      "id": "asselineau",
      "name": "François Asselineau",
      "initials": "FA",
      "party": "Union populaire républicaine",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 69,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 2.380952380952381,
        "positions": 1,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 0,
        "dated": 100,
        "recency": 8
      },
      "birthSource": "https://upr.fr/francois-asselineau",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "UPR — François Asselineau",
      "topicIds": [
        "finances"
      ],
      "latestPositionDate": "2026-10-23",
      "sources": [
        {
          "title": "François Asselineau invité de Clémence Houdiakova sur Tocsin",
          "url": "https://upr.fr/actualites/francois-asselineau-invite-de-clemence-houdiakova-sur-tocsin-23-10-2026",
          "publisher": "UPR — résumé de l’entretien Tocsin",
          "date": "2026-10-23",
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "François Asselineau invité de Clémence Houdiakova sur Tocsin",
          "url": "https://upr.fr/actualites/francois-asselineau-invite-de-clemence-houdiakova-sur-tocsin-23-10-2026",
          "publisher": "UPR — résumé de l’entretien Tocsin",
          "date": "2026-10-23",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "asselineau",
        "yearLow": 1993,
        "yearHigh": 1993,
        "title": "Fonctions en cabinets ministériels",
        "url": "https://www.upr.fr/wp-content/uploads/2013/04/UPR-dossier-de-presse-generique-V77-2-05-2013.pdf",
        "sourceTitle": "UPR — dossier de presse, 2013",
        "locator": "Fonctions en cabinets ministériels",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 69,
      "ageMax": 69,
      "politicsMin": 33,
      "politicsMax": 33
    },
    {
      "id": "hollande",
      "name": "François Hollande",
      "initials": "FH",
      "party": "Parti socialiste",
      "declared": false,
      "status": "Candidature non confirmée",
      "statusNote": "Aucune déclaration explicite établie dans la source consultée.",
      "values": {
        "age": 72,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 9.523809523809524,
        "positions": 8,
        "financial": 0,
        "figures": 5,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 0,
        "dated": 100,
        "recency": 65
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA1654",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — François Hollande",
      "topicIds": [
        "retraites",
        "emploi",
        "fiscalite",
        "pouvoir"
      ],
      "latestPositionDate": "2026-08-27",
      "sources": [
        {
          "title": "Propositions sur les retraites et la fiscalité",
          "url": "https://lcp.fr/actualites/presidentielle-francois-hollande-propose-la-retraite-a-63-ans-et-dira-en-decembre-s-il",
          "publisher": "LCP, avec AFP",
          "date": "2026-08-27",
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Propositions sur les retraites et la fiscalité",
          "url": "https://lcp.fr/actualites/presidentielle-francois-hollande-propose-la-retraite-a-63-ans-et-dira-en-decembre-s-il",
          "publisher": "LCP, avec AFP",
          "date": "2026-08-27",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "hollande",
        "yearLow": 1988,
        "yearHigh": 1988,
        "title": "Député de la Corrèze",
        "url": "https://www.elysee.fr/francois-hollande",
        "sourceTitle": "Élysée — biographie de François Hollande",
        "locator": "Député de la Corrèze",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 72,
      "ageMax": 72,
      "politicsMin": 38,
      "politicsMax": 38
    },
    {
      "id": "ruffin",
      "name": "François Ruffin",
      "initials": "FR",
      "party": "Debout !",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 51,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 40.476190476190474,
        "positions": 29,
        "financial": 10,
        "figures": 13,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 7,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA722142",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — François Ruffin",
      "topicIds": [
        "retraites",
        "emploi",
        "industrie",
        "commerce",
        "innovation",
        "souverainete",
        "logement",
        "institutions",
        "justice",
        "sport",
        "culture",
        "famille",
        "agriculture",
        "biodiversite",
        "climat",
        "transports",
        "fiscalite"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Cahier : statut des travailleurs essentiels",
          "url": "https://nouspresident.fr/statut-travailleurs-essentiels/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : relocaliser 100 produits stratégiques",
          "url": "https://nouspresident.fr/pour-proteger-notre-industrie-relocaliser-100-produits-strategiques/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : face à la crise du logement",
          "url": "https://nouspresident.fr/face-a-la-crise-du-logement/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : séparation de l’argent et de l’État",
          "url": "https://nouspresident.fr/separation-argent-etat/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : temps des loisirs",
          "url": "https://nouspresident.fr/temps-loisirs/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : exception agriculturelle française",
          "url": "https://nouspresident.fr/pour-une-exception-agriculturelle-francaise/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : travaillisme écologique",
          "url": "https://nouspresident.fr/travaillisme-ecologique/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Cahier logement",
          "url": "https://nouspresident.fr/face-a-la-crise-du-logement/",
          "publisher": "Nous Président — François Ruffin",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Cahier industrie",
          "url": "https://nouspresident.fr/pour-proteger-notre-industrie-relocaliser-100-produits-strategiques/",
          "publisher": "Nous Président — François Ruffin",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Cahier loisirs",
          "url": "https://nouspresident.fr/temps-loisirs/",
          "publisher": "Nous Président — François Ruffin",
          "date": null,
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Cahier : statut des travailleurs essentiels",
          "url": "https://nouspresident.fr/statut-travailleurs-essentiels/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : relocaliser 100 produits stratégiques",
          "url": "https://nouspresident.fr/pour-proteger-notre-industrie-relocaliser-100-produits-strategiques/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Cahier : face à la crise du logement",
          "url": "https://nouspresident.fr/face-a-la-crise-du-logement/",
          "publisher": "François Ruffin / Nous Président",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "ruffin",
        "yearLow": 2017,
        "yearHigh": 2017,
        "title": "Première élection comme député de la Somme",
        "url": "https://www2.assemblee-nationale.fr/sycomore/fiche/19368",
        "sourceTitle": "Assemblée nationale — Sycomore",
        "locator": "Première élection comme député de la Somme",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 51,
      "ageMax": 51,
      "politicsMin": 9,
      "politicsMax": 9
    },
    {
      "id": "attal",
      "name": "Gabriel Attal",
      "initials": "GA",
      "party": "Renaissance",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 37,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 35.714285714285715,
        "positions": 23,
        "financial": 3,
        "figures": 11,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 6,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.info.gouv.fr/personnalite/gabriel-attal",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Gouvernement — Gabriel Attal",
      "topicIds": [
        "emploi",
        "famille",
        "retraites",
        "superieur",
        "sante",
        "education",
        "egalite",
        "immigration",
        "commerce",
        "souverainete",
        "defense",
        "innovation",
        "entreprises",
        "logement",
        "climat"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Travail et salaires",
          "url": "https://attalpresident.fr/programme/travail-salaires",
          "publisher": "Gabriel Attal — Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Régulation des écrans et des réseaux sociaux chez les adolescents",
          "url": "https://parti-renaissance.fr/petitions/regulation-ecrans-et-rs",
          "publisher": "Renaissance",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "École",
          "url": "https://attalpresident.fr/programme/education",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Frontières",
          "url": "https://attalpresident.fr/programme/frontieres",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Intelligence artificielle",
          "url": "https://attalpresident.fr/programme/intelligence-artificielle",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Dette écologique",
          "url": "https://attalpresident.fr/programme/dette-ecologique",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Réforme de l’assurance chômage",
          "url": "https://attalpresident.fr/programme/mesures/reforme-assurance-chomage-cinq-milliards",
          "publisher": "Attal Président",
          "date": null,
          "kind": "original"
        },
        {
          "title": "Lettre et plan de finances publiques",
          "url": "https://attalpresident.fr/actualites/gabriel-attal-lettre-aux-francais-plan-finances-publiques",
          "publisher": "Attal Président",
          "date": "2026-10-15",
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Travail et salaires",
          "url": "https://attalpresident.fr/programme/travail-salaires",
          "publisher": "Gabriel Attal — Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Régulation des écrans et des réseaux sociaux chez les adolescents",
          "url": "https://parti-renaissance.fr/petitions/regulation-ecrans-et-rs",
          "publisher": "Renaissance",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "École",
          "url": "https://attalpresident.fr/programme/education",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Frontières",
          "url": "https://attalpresident.fr/programme/frontieres",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Intelligence artificielle",
          "url": "https://attalpresident.fr/programme/intelligence-artificielle",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Dette écologique",
          "url": "https://attalpresident.fr/programme/dette-ecologique",
          "publisher": "Gabriel Attal - Attal Président",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "attal",
        "yearLow": 2006,
        "yearHigh": 2006,
        "title": "Militant au Parti socialiste",
        "url": "https://graphics.france24.com/trombinoscope-gouvernement-borne-remaniement-portraits/",
        "sourceTitle": "France 24 — portraits du gouvernement Borne 2",
        "locator": "Notice Gabriel Attal : militant au PS de 2006 à 2016",
        "quality": "biographie de presse consultée",
        "note": "Adhésion partisane ; les fonctions de cabinet débutent plus tard. Année de départ, sans jour ni mois.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 37,
      "ageMax": 37,
      "politicsMin": 20,
      "politicsMax": 20
    },
    {
      "id": "melenchon",
      "name": "Jean-Luc Mélenchon",
      "initials": "JM",
      "party": "La France insoumise",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 75,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 14.285714285714285,
        "positions": 6,
        "financial": 36,
        "figures": 13,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 100,
        "recency": 17
      },
      "birthSource": "https://www2.assemblee-nationale.fr/sycomore/fiche?num_dept=19278",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Jean-Luc Mélenchon",
      "topicIds": [
        "education",
        "superieur",
        "sante",
        "famille",
        "logement",
        "finances"
      ],
      "latestPositionDate": "2026-10-14",
      "sources": [
        {
          "title": "Comment nous allons remettre de l’ordre dans les comptes publics",
          "url": "https://melenchon2027.fr/wp-content/uploads/2026/10/Comment-nous-allons-remettre-de-l-ordre-dans-les-comptes-publics.pdf",
          "publisher": "Jean-Luc Mélenchon — campagne 2027",
          "date": "2026-10-14",
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Orientations budgétaires 2027",
          "url": "https://melenchon2027.fr/wp-content/uploads/2026/10/Comment-nous-allons-remettre-de-l-ordre-dans-les-comptes-publics.pdf",
          "publisher": "Mélenchon 2027",
          "date": "2026-10-14",
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Comment nous allons remettre de l’ordre dans les comptes publics",
          "url": "https://melenchon2027.fr/wp-content/uploads/2026/10/Comment-nous-allons-remettre-de-l-ordre-dans-les-comptes-publics.pdf",
          "publisher": "Jean-Luc Mélenchon — campagne 2027",
          "date": "2026-10-14",
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "melenchon",
        "yearLow": 1972,
        "yearHigh": 1972,
        "title": "Membre de l’Organisation communiste internationaliste",
        "url": "https://discovery.ucl.ac.uk/10053910/1/P.%20Marliere-France%20Insoumise.pdf",
        "sourceTitle": "Philippe Marlière — chapitre académique, UCL / Routledge (2018)",
        "locator": "Page PDF 5 : appartenance à l’OCI entre 1972 et 1976",
        "quality": "publication académique consultée",
        "note": "Repère partisan daté. Le militantisme étudiant antérieur n’est pas inclus ; ce n’est pas la date du premier mandat.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 75,
      "ageMax": 75,
      "politicsMin": 54,
      "politicsMax": 54
    },
    {
      "id": "bardella",
      "name": "Jordan Bardella",
      "initials": "JB",
      "party": "Rassemblement national",
      "declared": false,
      "status": "Candidature non annoncée",
      "statusNote": "Hypothèse de remplacement de Marine Le Pen ; aucune déclaration autonome vérifiée.",
      "values": {
        "age": 31,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://data.europarl.europa.eu/en/datasets/members-of-the-european-parliament-meps-parliamentary-term10/0030",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Parlement européen — Jordan Bardella",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "bardella",
        "yearLow": 2015,
        "yearHigh": 2015,
        "title": "Élection comme conseiller régional d’Île-de-France",
        "url": "https://www.latribune.fr/depeches/reuters/KCN1P70M7/bardella-bon-eleve-du-rn-promu-au-premier-rang.html",
        "sourceTitle": "Reuters / La Tribune, 13 janvier 2019",
        "locator": "Élection comme conseiller régional d’Île-de-France",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 31,
      "ageMax": 31,
      "politicsMin": 11,
      "politicsMax": 11
    },
    {
      "id": "branco",
      "name": "Juan Branco",
      "initials": "JB",
      "party": "Les Ruches",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration dans un entretien direct à Sud Radio.",
      "values": {
        "age": 37,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 28.57142857142857,
        "positions": 12,
        "financial": 0,
        "figures": 1,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://catalogue.bnf.fr/ark:/12148/cb16517435h",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "BnF — Juan Branco",
      "topicIds": [
        "institutions",
        "europe",
        "defense",
        "energie",
        "eau",
        "sante",
        "transports",
        "innovation",
        "education",
        "fiscalite",
        "territoires",
        "pouvoir"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "La Voie — projet intégral",
          "url": "https://www.ruches.org/le-projet",
          "publisher": "Les Ruches — Juan Branco",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "branco",
        "yearLow": null,
        "yearHigh": null,
        "title": "Début d’engagement non daté dans les biographies retenues",
        "url": null,
        "sourceTitle": null,
        "locator": null,
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 37,
      "ageMax": 37,
      "politicsMin": null,
      "politicsMax": null
    },
    {
      "id": "bouamrane",
      "name": "Karim Bouamrane",
      "initials": "KB",
      "party": "Parti socialiste",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 53,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 30.952380952380953,
        "positions": 13,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.tf1info.fr/actualite/karim-bouamrane-13875/",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "TF1 Info — Karim Bouamrane",
      "topicIds": [
        "securite",
        "logement",
        "sante",
        "education",
        "superieur",
        "climat",
        "agriculture",
        "famille",
        "egalite",
        "immigration",
        "administration",
        "innovation",
        "defense"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Une France humaine, une France forte",
          "url": "https://www.karimbouamrane2027.org/manifeste.html",
          "publisher": "Karim Bouamrane — manifeste de campagne",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "bouamrane",
        "yearLow": 1995,
        "yearHigh": 1995,
        "title": "Conseiller municipal de Saint-Ouen",
        "url": "https://lcp.fr/actualites/presidentielle-2027-qui-est-karim-bouamrane-le-maire-socialiste-de-saint-ouen-et-nouveau",
        "sourceTitle": "LCP, 9 juin 2026",
        "locator": "Conseiller municipal de Saint-Ouen",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 53,
      "ageMax": 53,
      "politicsMin": 31,
      "politicsMax": 31
    },
    {
      "id": "wauquiez",
      "name": "Laurent Wauquiez",
      "initials": "LW",
      "party": "Les Républicains",
      "declared": false,
      "status": "A exclu de se présenter",
      "statusNote": "Renoncement à une candidature potentielle ; ne constitue pas un retrait d'une candidature annoncée.",
      "values": {
        "age": 51,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA267285",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Laurent Wauquiez",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "wauquiez",
        "yearLow": 2004,
        "yearHigh": 2004,
        "title": "Première élection comme député de la Haute-Loire",
        "url": "https://www.publicsenat.fr/actualites/politique/les-grandes-dates-de-laurent-wauquiez-80634",
        "sourceTitle": "Public Sénat, 10 décembre 2017",
        "locator": "Première élection comme député de la Haute-Loire",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 51,
      "ageMax": 51,
      "politicsMin": 22,
      "politicsMax": 22
    },
    {
      "id": "lepen",
      "name": "Marine Le Pen",
      "initials": "ML",
      "party": "Rassemblement national",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; ne préjuge ni de l'éligibilité ni de la qualification finale.",
      "values": {
        "age": 58,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 2.380952380952381,
        "positions": 1,
        "financial": 1,
        "figures": 2,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 0,
        "dated": 100,
        "recency": 25
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA720614",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Marine Le Pen",
      "topicIds": [
        "finances"
      ],
      "latestPositionDate": "2026-10-06",
      "sources": [
        {
          "title": "Viser 140 milliards d’euros d’économies à l’horizon 2032",
          "url": "https://www.publicsenat.fr/actualites/politique/140-milliards-deuros-deconomies-dici-2032-leffort-radical-propose-par-marine-le-pen-pour-redresser-les-f",
          "publisher": "Public Sénat",
          "date": "2026-10-06",
          "kind": "presse"
        }
      ],
      "financialSources": [
        {
          "title": "Conférence budgétaire RN",
          "url": "https://www.publicsenat.fr/actualites/politique/140-milliards-deuros-deconomies-dici-2032-leffort-radical-propose-par-marine-le-pen-pour-redresser-les-f",
          "publisher": "Public Sénat",
          "date": "2026-10-06",
          "kind": "rapporté"
        }
      ],
      "recentSources": [
        {
          "title": "Viser 140 milliards d’euros d’économies à l’horizon 2032",
          "url": "https://www.publicsenat.fr/actualites/politique/140-milliards-deuros-deconomies-dici-2032-leffort-radical-propose-par-marine-le-pen-pour-redresser-les-f",
          "publisher": "Public Sénat",
          "date": "2026-10-06",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "lepen",
        "yearLow": 1986,
        "yearHigh": 1986,
        "title": "Adhésion au Front national",
        "url": "https://www.tvanouvelles.ca/2022/04/24/marine-le-pen-en-dix-grandes-dates",
        "sourceTitle": "AFP / TVA Nouvelles — dix grandes dates (24 avril 2022)",
        "locator": "Entrée 1993 rappelant l’adhésion au FN en 1986",
        "quality": "chronologie AFP consultée",
        "note": "Adhésion partisane ; le premier mandat électif date de 1998, un autre indicateur.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 58,
      "ageMax": 58,
      "politicsMin": 40,
      "politicsMax": 40
    },
    {
      "id": "tondelier",
      "name": "Marine Tondelier",
      "initials": "MT",
      "party": "Les Écologistes",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Candidature maintenue ; investiture interne encore attendue.",
      "values": {
        "age": null,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 14.285714285714285,
        "positions": 7,
        "financial": 10,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 3,
        "primary": 66.66666666666667,
        "dated": 100,
        "recency": 31
      },
      "birthSource": "https://www.leparisien.fr/politique/marine-tondelier/",
      "birthNote": "Année confirmée. Jour divergent : Le Parisien et JDD indiquent le 23 août, TF1 Info le 20 août ; date complète laissée vide par prudence.",
      "birthSourceTitle": "Le Parisien — Marine Tondelier",
      "topicIds": [
        "famille",
        "energie",
        "adaptation",
        "agriculture",
        "logement",
        "securite"
      ],
      "latestPositionDate": "2026-09-30",
      "sources": [
        {
          "title": "Créer un congé d’allaitement choisi et rémunéré",
          "url": "https://www.leparisien.fr/politique/des-pauses-remunerees-et-des-conges-choisis-marine-tondelier-propose-plusieurs-mesures-pour-aider-les-meres-allaitantes-01-10-2026-5RZS3TGS3VCLFM5LQVMRIHQNZU.php",
          "publisher": "Le Parisien",
          "date": "2026-10-01",
          "kind": "presse"
        },
        {
          "title": "Organiser une convention citoyenne sur l’énergie",
          "url": "https://www.sudradio.fr/linvite-politique/marine-tondelier-je-propose-dinstaurer-des-conges-payes-climatiques",
          "publisher": "Sud Radio",
          "date": "2026-05-01",
          "kind": "primaire"
        },
        {
          "title": "Discours aux Journées d’été des Écologistes 2026",
          "url": "https://lesecologistes.fr/posts/2s0kOxQEOQdC8JP4jkXuu7/discours-de-marine-tondelier-aux-journees-d-ete-des-ecologistes-2026",
          "publisher": "Les Écologistes",
          "date": "2026-08-21",
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Pour une prospérité écologique",
          "url": "https://lesecologistes.fr/document/3N4JsAEmq6vsx42IITGNZa/vdef-programme-1.pdf",
          "publisher": "Les Écologistes",
          "date": "2026-07",
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Créer un congé d’allaitement choisi et rémunéré",
          "url": "https://www.leparisien.fr/politique/des-pauses-remunerees-et-des-conges-choisis-marine-tondelier-propose-plusieurs-mesures-pour-aider-les-meres-allaitantes-01-10-2026-5RZS3TGS3VCLFM5LQVMRIHQNZU.php",
          "publisher": "Le Parisien",
          "date": "2026-10-01",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "tondelier",
        "yearLow": 2009,
        "yearHigh": 2009,
        "title": "Adhésion au parti écologiste",
        "url": "https://terres-et-territoires.com/wp-content/uploads/2025/08/430-22-08-25_compressed-1.pdf",
        "sourceTitle": "Terres et Territoires — entretien, 22 août 2025",
        "locator": "Page imprimée 40, paragraphe sur 2009",
        "quality": "entretien de presse consulté",
        "note": "Repère partisan déclaré dans un entretien ; les mandats locaux commencent ensuite.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 39,
      "ageMax": 40,
      "politicsMin": 17,
      "politicsMax": 17
    },
    {
      "id": "markovic",
      "name": "Mira Markovic",
      "initials": "MM",
      "party": "Parti animaliste",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Annonce officielle du parti.",
      "values": {
        "age": null,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://parti-animaliste.fr/bureau",
      "birthNote": "Date de naissance non confirmée dans la biographie officielle consultée. Ne pas confondre avec la personnalité serbe homonyme.",
      "birthSourceTitle": "Parti animaliste — Douchka Markovic",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "markovic",
        "yearLow": 2014,
        "yearHigh": 2014,
        "title": "Mandat municipal dans le 18e arrondissement puis au Conseil de Paris",
        "url": "https://parti-animaliste.fr/news/communique-de-presse/mira-markovic-representera-le-parti-animaliste-a-la-presidentielle",
        "sourceTitle": "Parti animaliste, 2 octobre 2026",
        "locator": "Mandat municipal dans le 18e arrondissement puis au Conseil de Paris",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": null,
      "ageMax": null,
      "politicsMin": 12,
      "politicsMax": 12
    },
    {
      "id": "polony",
      "name": "Natacha Polony",
      "initials": "NP",
      "party": "Sans étiquette",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 51,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 26.190476190476193,
        "positions": 14,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 2,
        "primary": 50,
        "dated": 50,
        "recency": 61
      },
      "birthSource": "https://catalogue.bnf.fr/ark:/12148/cb146336373",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "BnF — Natacha Polony",
      "topicIds": [
        "industrie",
        "souverainete",
        "entreprises",
        "education",
        "justice",
        "laicite",
        "administration",
        "diplomatie",
        "defense",
        "institutions",
        "commerce"
      ],
      "latestPositionDate": "2026-08-31",
      "sources": [
        {
          "title": "Ma vision pour la France",
          "url": "https://natachapolony2027.fr/natacha-polony/ma-vision",
          "publisher": "Natacha Polony — site de campagne",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Entretien du 31 août 2026",
          "url": "https://www.rtl.fr/actu/politique/j-en-ai-assez-de-commenter-le-desastre-sur-rtl-natacha-polony-dit-vouloir-rassembler-ceux-qui-ne-sont-pas-representes-en-se-lancant-en-politique-avant-la-presidentielle-de-2027-7900666858",
          "publisher": "RTL — entretien direct",
          "date": "2026-08-31",
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Entretien du 31 août 2026",
          "url": "https://www.rtl.fr/actu/politique/j-en-ai-assez-de-commenter-le-desastre-sur-rtl-natacha-polony-dit-vouloir-rassembler-ceux-qui-ne-sont-pas-representes-en-se-lancant-en-politique-avant-la-presidentielle-de-2027-7900666858",
          "publisher": "RTL — entretien direct",
          "date": "2026-08-31",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "polony",
        "yearLow": null,
        "yearHigh": null,
        "title": "Début d’engagement non daté dans les biographies retenues",
        "url": null,
        "sourceTitle": null,
        "locator": null,
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 51,
      "ageMax": 51,
      "politicsMin": null,
      "politicsMax": null
    },
    {
      "id": "arthaud",
      "name": "Nathalie Arthaud",
      "initials": "NA",
      "party": "Lutte ouvrière",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 56,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://www.europe1.fr/politique/Le-CV-de-Nathalie-Arthaud-916552",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Europe 1 — Le CV de Nathalie Arthaud",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "arthaud",
        "yearLow": 1988,
        "yearHigh": 1988,
        "title": "Adhésion à Lutte ouvrière",
        "url": "https://www.sudradio.fr/la-biographie-et-le-cv-de-nathalie-arthaud",
        "sourceTitle": "Sud Radio — biographie de Nathalie Arthaud",
        "locator": "Premiers engagements ; membre de LO depuis 1988",
        "quality": "biographie de presse consultée",
        "note": "Adhésion à LO, pas début réel garanti de l’engagement : la source mentionne aussi un passage antérieur à la Jeunesse communiste sans en fixer l’année exacte.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 56,
      "ageMax": 56,
      "politicsMin": 38,
      "politicsMax": 38
    },
    {
      "id": "dupont",
      "name": "Nicolas Dupont-Aignan",
      "initials": "ND",
      "party": "Debout la France",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 65,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 21.428571428571427,
        "positions": 12,
        "financial": 0,
        "figures": 6,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 100,
        "recency": 11
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA1206",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Nicolas Dupont-Aignan",
      "topicIds": [
        "justice",
        "immigration",
        "europe",
        "superieur",
        "famille",
        "emploi",
        "pouvoir",
        "energie",
        "fiscalite"
      ],
      "latestPositionDate": "2026-10-20",
      "sources": [
        {
          "title": "Communiqué — 20 mesures à Limoges",
          "url": "https://www.dupontaignan.fr/actualite/communique-nicolas-dupont-aignan-a-limoges/",
          "publisher": "Campagne Nicolas Dupont-Aignan",
          "date": "2026-10-20",
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [
        {
          "title": "Communiqué — 20 mesures à Limoges",
          "url": "https://www.dupontaignan.fr/actualite/communique-nicolas-dupont-aignan-a-limoges/",
          "publisher": "Campagne Nicolas Dupont-Aignan",
          "date": "2026-10-20",
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "dupont",
        "yearLow": 1993,
        "yearHigh": 1993,
        "title": "Fonctions dans les cabinets de François Bayrou et Michel Barnier",
        "url": "https://www.europe1.fr/politique/Le-CV-de-Nicolas-Dupont-Aignan-916530",
        "sourceTitle": "Europe 1 — CV de Nicolas Dupont-Aignan",
        "locator": "Fonctions dans les cabinets de François Bayrou et Michel Barnier",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 65,
      "ageMax": 65,
      "politicsMin": 33,
      "politicsMax": 33
    },
    {
      "id": "becht",
      "name": "Olivier Becht",
      "initials": "OB",
      "party": "Sans affiliation renseignée",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 50,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 23.809523809523807,
        "positions": 12,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 2,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA642935",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Olivier Becht",
      "topicIds": [
        "energie",
        "autonomie",
        "egalite",
        "agriculture",
        "sante",
        "innovation",
        "justice",
        "institutions",
        "territoires",
        "administration"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Les cinq refondations",
          "url": "https://becht2027.fr/projet-france/les-5-refondations/",
          "publisher": "Olivier Becht — Projet France",
          "date": null,
          "kind": "primaire"
        },
        {
          "title": "Pacte démocratique et territorial",
          "url": "https://becht2027.fr/projet-france/les-5-refondations/refondation-democratique-territoriale/",
          "publisher": "Olivier Becht — Projet France",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "becht",
        "yearLow": 2017,
        "yearHigh": 2017,
        "title": "Première élection comme député du Haut-Rhin",
        "url": "https://www.info.gouv.fr/personnalite/olivier-becht?mission=ministre-delegue-aupres-de-la-ministre-de-leurope-et-des-affaires-etrangeres-charge-du-commerce-exterieur-de-lattractivite-et-des-francais-de-letranger-2",
        "sourceTitle": "Gouvernement — biographie d’Olivier Becht",
        "locator": "Première élection comme député du Haut-Rhin",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 50,
      "ageMax": 50,
      "politicsMin": 9,
      "politicsMax": 9
    },
    {
      "id": "faure",
      "name": "Olivier Faure",
      "initials": "OF",
      "party": "Parti socialiste",
      "declared": false,
      "status": "Primaire terminée — non retenu",
      "statusNote": "Candidature à la primaire terminée après la victoire de Raphaël Glucksmann ; aucune candidature autonome maintenue vérifiée.",
      "values": {
        "age": 58,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 0,
        "positions": 0,
        "financial": 0,
        "figures": 0,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 0,
        "primary": null,
        "dated": null,
        "recency": null
      },
      "birthSource": "https://www.assemblee-nationale.fr/dyn/deputes/PA609332",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Olivier Faure",
      "topicIds": [],
      "latestPositionDate": null,
      "sources": [],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "faure",
        "yearLow": 1997,
        "yearHigh": 1997,
        "title": "Conseiller parlementaire de Martine Aubry",
        "url": "https://www.lemonde.fr/politique/article/2016/07/07/olivier-faure-le-depute-plastique-rabroue_4965390_823448.html",
        "sourceTitle": "Le Monde, 7 juillet 2016",
        "locator": "Conseiller parlementaire de Martine Aubry",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 58,
      "ageMax": 58,
      "politicsMin": 29,
      "politicsMax": 29
    },
    {
      "id": "glucksmann",
      "name": "Raphaël Glucksmann",
      "initials": "RG",
      "party": "Place publique",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Vainqueur de la primaire sociale-démocrate d'octobre.",
      "values": {
        "age": 47,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 26.190476190476193,
        "positions": 18,
        "financial": 1,
        "figures": 2,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 5,
        "primary": 20,
        "dated": 100,
        "recency": 66
      },
      "birthSource": "https://www.europarl.europa.eu/meps/fr/197694/name/cv",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Parlement européen — Raphaël Glucksmann",
      "topicIds": [
        "autonomie",
        "famille",
        "fiscalite",
        "education",
        "institutions",
        "immigration",
        "retraites",
        "europe",
        "energie",
        "innovation",
        "superieur"
      ],
      "latestPositionDate": "2026-08-26",
      "sources": [
        {
          "title": "Lettre de Raphaël Glucksmann aux Français",
          "url": "https://place-publique.eu/posts/2fgDdljEIy36rgxBjRyiQZ/raphael-glucksmann-sa-lettre-aux-francais",
          "publisher": "Place publique / Raphaël Glucksmann",
          "date": "2026-08-25",
          "kind": "primaire"
        },
        {
          "title": "Fiscalité, école, immigration : propositions",
          "url": "https://www.publicsenat.fr/actualites/politique/fiscalite-ecole-immigration-ce-que-propose-raphael-glucksmann",
          "publisher": "Public Sénat",
          "date": "2026-08-24",
          "kind": "presse"
        },
        {
          "title": "Premières lignes du livre programmatique",
          "url": "https://lcp.fr/actualites/presidentielle-raphael-glucksmann-devoile-les-premieres-lignes-de-son-possible-programme",
          "publisher": "LCP",
          "date": "2026-05-26",
          "kind": "presse"
        },
        {
          "title": "Entretien sur écologie et protection sociale",
          "url": "https://www.lemonde.fr/politique/article/2026/08/26/raphael-glucksmann-l-europe-est-cruciale-pour-mener-a-bien-la-transformation-ecologique_6756834_823448.html",
          "publisher": "Le Monde — entretien",
          "date": "2026-08-26",
          "kind": "presse"
        },
        {
          "title": "Porter à 1 000 euros la gratification minimale des stages longs",
          "url": "https://www.publicsenat.fr/actualites/economie/presidentielle-que-proposent-les-candidats-pour-augmenter-les-salaires",
          "publisher": "Public Sénat",
          "date": "2026-10-30",
          "kind": "presse"
        }
      ],
      "financialSources": [
        {
          "title": "Propositions de Raphaël Glucksmann",
          "url": "https://www.publicsenat.fr/actualites/politique/fiscalite-ecole-immigration-ce-que-propose-raphael-glucksmann",
          "publisher": "Public Sénat",
          "date": "2026-08-24",
          "kind": "rapporté"
        }
      ],
      "recentSources": [
        {
          "title": "Entretien sur écologie et protection sociale",
          "url": "https://www.lemonde.fr/politique/article/2026/08/26/raphael-glucksmann-l-europe-est-cruciale-pour-mener-a-bien-la-transformation-ecologique_6756834_823448.html",
          "publisher": "Le Monde — entretien",
          "date": "2026-08-26",
          "kind": "presse"
        }
      ],
      "politicalStart": {
        "id": "glucksmann",
        "yearLow": 2009,
        "yearHigh": 2009,
        "title": "Conseiller du président géorgien Mikheil Saakachvili",
        "url": "https://www.tf1info.fr/politique/elections/presidentielle/que-sait-on-des-annees-georgiennes-de-raphael-glucksmann-passees-au-cote-de-l-ex-president-saakachvili-2296301.html",
        "sourceTitle": "TF1 Info — Les Vérificateurs",
        "locator": "Conseiller du président géorgien Mikheil Saakachvili",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 47,
      "ageMax": 47,
      "politicsMin": 17,
      "politicsMax": 17
    },
    {
      "id": "knafo",
      "name": "Sarah Knafo",
      "initials": "SK",
      "party": "Reconquête",
      "declared": false,
      "status": "A exclu de se présenter",
      "statusNote": "Renoncement à une candidature potentielle ; ne constitue pas un retrait d'une candidature annoncée.",
      "values": {
        "age": 33,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 35.714285714285715,
        "positions": 21,
        "financial": 30,
        "figures": 1,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 0,
        "recency": null
      },
      "birthSource": "https://www.tf1info.fr/actualite/sarah-knafo-14479/",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "TF1 Info — Sarah Knafo",
      "topicIds": [
        "administration",
        "immigration",
        "emploi",
        "sante",
        "innovation",
        "energie",
        "territoires",
        "logement",
        "climat",
        "institutions",
        "cooperation",
        "europe",
        "superieur",
        "justice",
        "culture"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Plan budgétaire de Sarah Knafo",
          "url": "https://www.budget2027.fr/",
          "publisher": "Sarah Knafo / Reconquête",
          "date": null,
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Plan budgétaire — page intitulée Budget 2026",
          "url": "https://www.budget2027.fr/",
          "publisher": "Sarah Knafo",
          "date": null,
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Plan budgétaire de Sarah Knafo",
          "url": "https://www.budget2027.fr/",
          "publisher": "Sarah Knafo / Reconquête",
          "date": null,
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "knafo",
        "yearLow": 2024,
        "yearHigh": 2024,
        "title": "Élection au Parlement européen",
        "url": "https://www.europarl.europa.eu/meps/fr/256924/name/cv",
        "sourceTitle": "Parlement européen — CV déclaré par Sarah Knafo",
        "locator": "Élection au Parlement européen",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 33,
      "ageMax": 33,
      "politicsMin": 2,
      "politicsMax": 2
    },
    {
      "id": "labib",
      "name": "Selma Labib",
      "initials": "SL",
      "party": "NPA-Révolutionnaires",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Annonce officielle du mouvement ; candidature réaffirmée dans une lettre du 26 octobre.",
      "values": {
        "age": null,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 14.285714285714285,
        "positions": 10,
        "financial": 2,
        "figures": 2,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 1,
        "primary": 100,
        "dated": 100,
        "recency": 49
      },
      "birthSource": "https://npa-revolutionnaires.org/europeennes2024/nos-candidats/1-selma-labib/",
      "birthNote": "La biographie de 2024 indique 28 ans sans date de naissance ; date complète trouvée sur un agrégateur non retenue faute de confirmation primaire.",
      "birthSourceTitle": "NPA Révolutionnaires — Selma Labib",
      "topicIds": [
        "pouvoir",
        "retraites",
        "emploi",
        "immigration",
        "defense",
        "superieur"
      ],
      "latestPositionDate": "2026-09-12",
      "sources": [
        {
          "title": "Discours à la Fête de l’Humanité",
          "url": "https://beta.npa-revolutionnaires.org/articles/intervention-de-selma-labib-a-la-fete-de-lhumanite-2026",
          "publisher": "Selma Labib — NPA-Révolutionnaires",
          "date": "2026-09-15",
          "kind": "primaire"
        }
      ],
      "financialSources": [
        {
          "title": "Intervention de Selma Labib",
          "url": "https://beta.npa-revolutionnaires.org/articles/intervention-de-selma-labib-a-la-fete-de-lhumanite-2026",
          "publisher": "NPA Révolutionnaires",
          "date": "2026-09-15",
          "kind": "original"
        }
      ],
      "recentSources": [
        {
          "title": "Discours à la Fête de l’Humanité",
          "url": "https://beta.npa-revolutionnaires.org/articles/intervention-de-selma-labib-a-la-fete-de-lhumanite-2026",
          "publisher": "Selma Labib — NPA-Révolutionnaires",
          "date": "2026-09-15",
          "kind": "primaire"
        }
      ],
      "politicalStart": {
        "id": "labib",
        "yearLow": 2024,
        "yearHigh": 2024,
        "title": "Tête de liste du NPA-Révolutionnaires aux européennes",
        "url": "https://npa-revolutionnaires.org/europeennes2024/nos-candidats/1-selma-labib/",
        "sourceTitle": "NPA-Révolutionnaires — présentation de la candidate, 2024",
        "locator": "Tête de liste du NPA-Révolutionnaires aux européennes",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": null,
      "ageMax": null,
      "politicsMin": 2,
      "politicsMax": 2
    },
    {
      "id": "bertrand",
      "name": "Xavier Bertrand",
      "initials": "XB",
      "party": "Nous France / LR",
      "declared": true,
      "status": "Candidature déclarée",
      "statusNote": "Déclaration recensée ; qualification officielle non acquise.",
      "values": {
        "age": 61,
        "first-office": null,
        "local-office": null,
        "local-executive": null,
        "national-parliament": null,
        "eu-parliament": null,
        "government": null,
        "prime-minister": null,
        "coverage": 16.666666666666664,
        "positions": 10,
        "financial": 0,
        "figures": 2,
        "interviews": null,
        "media": null,
        "airtime": null,
        "debates": null,
        "references": 3,
        "primary": 0,
        "dated": 33.333333333333336,
        "recency": null
      },
      "birthSource": "https://www2.assemblee-nationale.fr/sycomore/fiche/11024",
      "birthNote": "Date de naissance complète explicitement publiée dans la source.",
      "birthSourceTitle": "Assemblée nationale — Xavier Bertrand",
      "topicIds": [
        "territoires",
        "sante",
        "transports",
        "culture",
        "education",
        "adaptation",
        "institutions"
      ],
      "latestPositionDate": null,
      "sources": [
        {
          "title": "Xavier Bertrand : Paris n’a pas envie de dépenser un euro de plus pour la Corse — Corse Matin",
          "url": "https://www.nousfrance.fr/2026/05/xavier-bertrand-paris-na-pas-envie-de-depenser-un-euro-de-plus-pour-la-corse-corse-matin/",
          "publisher": "Nous France — reprise de Corse Matin, Anne-C. Chabanon",
          "date": "2026-04-30",
          "kind": "presse"
        },
        {
          "title": "Entretien Var-Matin — culture et protection civile",
          "url": "https://www.nousfrance.fr/2026/08/je-my-prepare-pas-encore-officiellement-candidat-xavier-bertrand-pose-les-bases-de-son-projet-pour-la-presidentielle-avec-la-culture-en-toile-de-fond-var-matin/",
          "publisher": "Nous France — reprise de Var-Matin, Fabrice Michelier",
          "date": null,
          "kind": "presse"
        },
        {
          "title": "Xavier Bertrand presque candidat à la présidentielle — Ouest-France",
          "url": "https://www.nousfrance.fr/2026/08/xavier-bertrand-presque-candidat-a-la-presidentielle-ouest-france/",
          "publisher": "Nous France — reprise de Ouest-France, Yves-Marie Robin",
          "date": null,
          "kind": "presse"
        }
      ],
      "financialSources": [],
      "recentSources": [],
      "politicalStart": {
        "id": "bertrand",
        "yearLow": 2004,
        "yearHigh": 2004,
        "title": "Secrétaire d’État à l’Assurance maladie",
        "url": "https://www.ccifrancebelgique.be/agenda/nos-intervenants/s/speaker/xavier-bertrand-0.html",
        "sourceTitle": "CCI France Belgique — biographie de Xavier Bertrand",
        "locator": "Secrétaire d’État à l’Assurance maladie",
        "quality": "repère documentaire partiel",
        "note": "Plus ancien repère politique daté retenu dans cette chronologie ; des engagements antérieurs peuvent manquer. Ni durée cumulée de mandats ni preuve d’une activité continue.",
        "checkedAt": "2026-10-31"
      },
      "ageMin": 61,
      "ageMax": 61,
      "politicsMin": 22,
      "politicsMax": 22
    }
  ]
}