diff --git a/workflows/build-theme.js b/workflows/build-theme.js
index 4abd125..9f02979 100644
--- a/workflows/build-theme.js
+++ b/workflows/build-theme.js
@@ -1,30 +1,32 @@
/**
- * IRPF — Workflow de production d'une fiche thème complète
+ * IRPF — Workflow de production d'une fiche thème ultra-approfondie
*
- * Usage : lancer via le Workflow tool avec args = { slug, label }
- * Exemple : args = { slug: "sante", label: "Santé & Système de soins" }
+ * Usage : Workflow({ scriptPath: '...build-theme.js', args: { slug: 'education', label: 'Éducation & Formation' } })
*
- * Ce workflow produit pour UN thème :
- * 1. Collecte internationale (sources mondiales sur la France)
- * 2. Collecte nationale (sources françaises)
- * 3. Deep research sur les angles manquants
- * 4. Synthèse Opus (diagnostic + indicateurs + enjeux)
- * 5. Propositions ultra-détaillées (Opus)
- * 6. Lecture politique dynamique
- * 7. Fichier MDX prêt à déployer dans src/content/themes/
+ * Structure produite (9 sections) :
+ * 1. Diagnostic → état actuel, chiffres clés, paradoxes
+ * 2. Historique → Timeline 30 ans de réformes
+ * 3. Enjeux → Structurel / Politique / Conjoncturel (3 couches visuelles)
+ * 4. International → Comparatifs UE/OCDE + recommandations institutionnelles
+ * 5. Opinion → Sondages Eurobaromètre, CEVIPOF, presse
+ * 6. Acteurs → Cartographie décisionnaires, think tanks, corps intermédiaires
+ * 7. Propositions → Partis + institutionnelles + IRPF originales
+ * 8. Scénarios 2027-2032 → 3 scénarios avec probabilités
+ * 9. Sources → Bibliographie complète
*/
export const meta = {
name: 'irpf-build-theme',
- description: 'Produit une fiche thème IRPF complète : collecte internationale + nationale + synthèse + propositions + MDX',
+ description: 'Produit une fiche thème IRPF ultra-approfondie — 9 sections, composants visuels, deep research multi-sources',
phases: [
- { title: 'Collecte internationale', detail: 'Sources ONU, OCDE, UE, FMI, BM, Conseil de l\'Europe + think tanks' },
- { title: 'Collecte nationale', detail: 'Sources françaises : INSEE, Cour des comptes, HCFP, think tanks FR' },
- { title: 'Deep research ciblé', detail: 'Angles manquants, benchmarks pays, données statistiques spécifiques' },
- { title: 'Synthèse Opus', detail: 'Diagnostic sourcé + indicateurs clés + enjeux structurels' },
- { title: 'Propositions', detail: 'Recommandations détaillées fondées sur l\'international' },
- { title: 'Lecture politique', detail: 'Dynamiques politiques françaises 2025-2027' },
- { title: 'Production MDX', detail: 'Fichier prêt pour src/content/themes/' },
+ { title: 'Collecte internationale', detail: 'OCDE, UE, FMI, OMS, OIT, GIEC, V-Dem, etc.' },
+ { title: 'Collecte nationale', detail: 'INSEE, Cour des comptes, think tanks FR, DREES, etc.' },
+ { title: 'Opinion & acteurs', detail: 'Eurobaromètre, CEVIPOF, cartographie institutionnelle' },
+ { title: 'Historique & enjeux', detail: 'Timeline réformes 30 ans + 3 couches (structurel/politique/conj.)' },
+ { title: 'Synthèse Opus', detail: 'Diagnostic de niveau Cour des comptes × OCDE' },
+ { title: 'Propositions Opus', detail: 'Programme IRPF 2027-2032, fondé sur benchmarks pays' },
+ { title: 'Lecture politique', detail: 'Partis, blocages, fenêtres, séquence réforme' },
+ { title: 'Production MDX', detail: 'Fichier complet prêt à déployer' },
],
};
@@ -32,102 +34,172 @@ export const meta = {
const THEME_CONFIG = {
'economie-finances': {
- ordre: 1, priorite: 'critique', budget_milliards: 492,
- sources_intl: ['FMI Article IV France', 'OCDE Études économiques France', 'Commission européenne Country Report France', 'Eurostat finances publiques', 'BRI statistiques bancaires France', 'GAFI évaluation France', 'HCFP'],
- sources_fr: ['INSEE comptes nationaux', 'Banque de France', 'Cour des comptes', 'CAE', 'iFRAP', 'Institut Montaigne', 'France Stratégie'],
- indicateurs_cibles: ['déficit public %PIB', 'dette publique %PIB', 'dépenses publiques %PIB', 'prélèvements obligatoires %PIB', 'croissance PIB', 'charge de la dette', 'rang compétitivité'],
- angles_specifiques: ['trajectoire dette 2030', 'espace budgétaire réel', 'comparaison Zone Euro', 'réforme fiscale OCDE Pilier 2'],
+ ordre: 1, priorite: 'critique', budget_milliards: 492, effectifs: 0,
+ kpi_label: 'Dette publique / PIB',
+ sources_intl: ['FMI Article IV France 2024', 'OCDE Études économiques France 2024', 'Commission européenne Country Report France 2024', 'Eurostat finances publiques', 'BRI statistiques bancaires France', 'HCFP avis 2024-2025'],
+ sources_fr: ['INSEE comptes nationaux 2024', 'Banque de France projections 2025', 'Cour des comptes situation finances publiques 2024', 'CAE notes récentes', 'iFRAP études fiscales', 'Institut Montaigne économie', 'France Stratégie économie'],
+ sources_opinion: ['IFOP baromètre fiscalité', 'CREDOC niveau de vie 2024', 'Eurobaromètre économie France 2024', 'IFOP confiance économique'],
+ indicateurs_cibles: ['déficit public %PIB', 'dette publique %PIB', 'dépenses publiques %PIB', 'prélèvements obligatoires %PIB', 'croissance PIB', 'charge de la dette milliards', 'rang compétitivité WEF', 'taux chômage', 'inflation'],
+ angles_specifiques: ['trajectoire dette 2030-2035 scénarios FMI', 'espace budgétaire réel réformes possibles', 'comparaison fiscalité Zone Euro détail', 'réforme fiscale OCDE Pilier 2 impact France'],
+ think_tanks: ['iFRAP', 'Institut Montaigne', 'CAE', 'OFCE', 'Terra Nova', 'Fondapol', 'France Stratégie'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Traité de Maastricht 1992', 'Réforme Jospin 35h 2000', 'Crise 2008-2009', 'Réforme fiscale Hollande 2012', 'Pacte responsabilité 2014', 'Macron CICE/baisses IS 2017-2022', 'COVID déficit record 2020', 'Inflation et remontée taux 2022-2024'],
},
'sante': {
- ordre: 2, priorite: 'critique', budget_milliards: 260,
- sources_intl: ['OCDE Health at a Glance', 'OMS Global Health Observatory France', 'Commission UE state of health', 'Eurostat santé'],
- sources_fr: ['DREES', 'Haut Conseil de la Santé Publique', 'Cour des comptes', 'Institut Montaigne santé', 'Terra Nova santé'],
- indicateurs_cibles: ['espérance de vie', 'dépenses santé %PIB', 'médecins pour 1000 hab', 'lits hôpital pour 1000', 'délais attente', 'satisfaction système', 'déserts médicaux'],
- angles_specifiques: ['démographie médicale 2030', 'comparaison systèmes UE', 'performance hospitalière', 'prévention vs curatif'],
+ ordre: 2, priorite: 'critique', budget_milliards: 260, effectifs: 1100000,
+ kpi_label: 'Médecins / 1 000 hab.',
+ sources_intl: ['OCDE Health at a Glance 2023-2024', 'OMS WHO Euro Health Observatory France 2024', 'Commission UE Country Health Profile France 2023', 'Eurostat santé SILC', 'IRDES études comparatives'],
+ sources_fr: ['DREES Panorama santé 2025', 'Haut Conseil de la Santé Publique', 'Cour des comptes santé 2024-2025', 'Institut Montaigne santé', 'Terra Nova santé', 'Fédération Hospitalière de France'],
+ sources_opinion: ['Eurobaromètre santé mentale 2023', 'Eurobaromètre cancer 2024', 'IFOP confiance système de santé 2024', 'CEVIPOF baromètre confiance hôpital', 'Elabe perception déserts médicaux'],
+ indicateurs_cibles: ['espérance de vie', 'dépenses santé %PIB', 'médecins pour 1000 hab', 'généralistes pour 1000 hab', 'lits hospitaliers pour 1000', 'déficit hôpitaux milliards', 'délais attente', '% territoires déserts médicaux'],
+ angles_specifiques: ['démographie médicale 2025-2032 projections', 'comparaison systèmes UE Bismarck vs Beveridge', 'performance hospitalière financement T2A alternatives', 'prévention vs curatif investissement comparé'],
+ think_tanks: ['Institut Montaigne', 'Terra Nova', 'IRDES', 'Fondation de l\'Avenir', 'IFRAP santé'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Loi Évin 1991', 'Plan Juppé 1995-1996', 'CMU 1999', 'Loi HPST Bachelot 2009', 'Pacte territoire-santé 2012-2017', 'Ségur de la Santé 2020', 'Suppression numerus clausus 2019', 'Loi Valletoux 2023'],
},
'education': {
- ordre: 3, priorite: 'haute', budget_milliards: 168,
- sources_intl: ['OCDE PISA 2022 France', 'OCDE TALIS France', 'OCDE Education at a Glance France', 'UNESCO UIS France', 'Commission UE Education Monitor'],
- sources_fr: ['DEPP', 'Cour des comptes', 'Conseil d\'évaluation de l\'école', 'Institut Montaigne éducation', 'Terra Nova éducation'],
- indicateurs_cibles: ['score PISA mathématiques', 'score PISA lecture', 'rang PISA sciences', 'décrochage scolaire', 'inégalités scolaires', 'dépenses par élève', 'formation enseignants'],
- angles_specifiques: ['reproduction sociale', 'comparaison Finlande/Estonie/Canada', 'réforme du lycée', 'numérique éducatif'],
+ ordre: 3, priorite: 'haute', budget_milliards: 168, effectifs: 1000000,
+ kpi_label: 'Score PISA (mathématiques)',
+ sources_intl: ['OCDE PISA 2022 France résultats', 'OCDE TALIS 2018-2024 France enseignants', 'OCDE Education at a Glance 2023 France', 'UNESCO UIS France données', 'Commission UE Education Monitor France 2023'],
+ sources_fr: ['DEPP statistiques éducation 2024', "Conseil d'évaluation de l'école CEE", 'Cour des comptes éducation 2022-2024', 'Institut Montaigne éducation', 'Terra Nova école', 'Ifrap éducation'],
+ sources_opinion: ['Eurobaromètre confiance enseignement France', 'IFOP parents satisfaction école 2024', 'CEVIPOF confiance institutions éducatives', 'Ipsos perception inégalités scolaires'],
+ indicateurs_cibles: ['score PISA maths', 'score PISA lecture', 'score PISA sciences', 'décrochage scolaire %', 'inégalités PISA entre écoles', 'dépenses par élève primaire/secondaire', 'taux scolarisation 3 ans', 'taux réussite bac'],
+ angles_specifiques: ['reproduction sociale mesure OCDE vs France', 'comparaison Finlande Estonie Canada méthodes pédagogiques', 'réforme lycée Blanquer impact mesuré', 'formation initiale et continue enseignants comparée'],
+ think_tanks: ['Institut Montaigne', 'Terra Nova', 'Fondapol', 'Les Échos Études', "Conseil d'évaluation de l'école"],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Loi Haby 1975 collège unique', 'Loi Jospin 1989 enfant au centre', 'Réforme Allègre 1997-2000', 'Loi Fillon 2005 socle commun', 'Rythmes scolaires 2013', 'Réforme lycée Blanquer 2019', 'Choc des savoirs Attal 2024'],
},
'environnement': {
- ordre: 4, priorite: 'critique', budget_milliards: 40,
- sources_intl: ['GIEC AR6 impacts France', 'CCNUCC NDC France', 'AIE France Energy Policy', 'IRENA France', 'Eurostat environnement', 'Commission UE Fit for 55 France'],
- sources_fr: ['ADEME', 'SDES', 'Haut Conseil pour le Climat', 'Cour des comptes', 'I4CE', 'Institut Rousseau'],
- indicateurs_cibles: ['émissions CO2 France', 'part renouvelables', 'objectif 2030 vs trajectoire', 'écart financement vert', 'biodiversité', 'artificialisation sols'],
- angles_specifiques: ['coût inaction climatique', 'financement transition 2030', 'justice climatique', 'comparaison Allemagne/Suède'],
+ ordre: 4, priorite: 'critique', budget_milliards: 40, effectifs: 0,
+ kpi_label: 'Réduction émissions vs 1990',
+ sources_intl: ['GIEC AR6 impacts France régionaux', 'CCNUCC NDC France trajectoire', 'AIE France Energy Policy 2023', 'IRENA France renouvelables', 'Commission UE Fit for 55 France état', 'Eurostat environnement'],
+ sources_fr: ['ADEME bilan carbone France 2024', 'SDES données environnement', 'Haut Conseil pour le Climat rapport 2024', 'Cour des comptes transition énergétique', 'I4CE baromètre investissement vert', 'Institut Rousseau'],
+ sources_opinion: ['Eurobaromètre attitude changement climatique France 2024', 'IFOP perception urgence climatique 2024', 'CREDOC comportements éco-responsables', 'CEVIPOF vote vert'],
+ indicateurs_cibles: ['émissions CO2 France MtCO2e', 'réduction vs 1990 %', 'part renouvelables % mix', 'objectif 2030 écart trajectoire', 'investissement vert milliards', 'artificialisation sols ha/an', 'indice biodiversité'],
+ angles_specifiques: ['coût inaction climatique France 2030-2050 chiffré', 'gap financement transition verte 2030', 'justice climatique impacts inégaux', 'comparaison Allemagne Energiewende et leçons'],
+ think_tanks: ['I4CE', 'Institut Rousseau', 'Haut Conseil pour le Climat', 'IDDRI', 'ADEME', 'France Stratégie'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Loi Grenelle I 2009', 'COP21 Paris 2015', 'Loi transition énergétique 2015', 'Plan Climat 2017', 'Convention citoyenne 2020', 'Loi Climat et Résilience 2021', 'REPowerEU et crise énergie 2022', 'Planification écologique 2023'],
},
'defense': {
- ordre: 5, priorite: 'haute', budget_milliards: 47,
- sources_intl: ['OTAN dépenses France', 'SIPRI Military Expenditure France', 'IISS Military Balance France', 'ECFR France défense', 'Chatham House France'],
- sources_fr: ['FRS', 'IRIS', 'IFRI', 'LPM 2024-2030', 'Cour des comptes défense'],
- indicateurs_cibles: ['% PIB défense', 'effectifs armées', 'budget R&D défense', 'opérations extérieures', 'dissuasion nucléaire budget', 'industrie défense exports'],
- angles_specifiques: ['2% PIB OTAN trajectoire', 'autonomie stratégique européenne', 'compétition technologique', 'base industrielle défense'],
+ ordre: 5, priorite: 'haute', budget_milliards: 47, effectifs: 210000,
+ kpi_label: 'Budget défense % PIB',
+ sources_intl: ['OTAN dépenses défense rapport 2024', 'SIPRI Military Expenditure France 2024', 'IISS Military Balance France 2024', 'ECFR France défense', 'Chatham House France sécurité'],
+ sources_fr: ['LPM 2024-2030 texte et bilan', 'FRS études', 'IRIS défense', 'IFRI sécurité', 'Cour des comptes défense 2023'],
+ sources_opinion: ['Eurobaromètre défense Europe France', 'IFOP soutien armée française', 'IFOP menaces perçues 2024', 'CEVIPOF confiance armée'],
+ indicateurs_cibles: ['% PIB défense', 'effectifs armées actifs', 'budget R&D défense milliards', 'OPEX budget annuel', 'budget dissuasion nucléaire', 'exports défense rang mondial', 'commandes DGA milliards'],
+ angles_specifiques: ['trajectoire 2% PIB OTAN 2025-2030 faisabilité', 'autonomie stratégique européenne PSDC', 'compétition technologique IA-défense France vs US/Chine', 'BITD Base Industrielle Technologique Défense compétitivité'],
+ think_tanks: ['IFRI', 'IRIS', 'FRS', 'IRSEM', 'Chatham House', 'ECFR'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Fin service militaire 1996', 'Intervention Kosovo 1999', 'LPM 2003-2008', 'Livre Blanc 2008 réforme armées', 'Opération Serval Mali 2013', 'Attentats 2015 et Opération Barkhane', 'LPM 2019-2025', 'Guerre Ukraine 2022 réveil stratégique', 'LPM 2024-2030'],
},
'justice': {
- ordre: 6, priorite: 'haute', budget_milliards: 11,
- sources_intl: ['CEDH arrêts France', 'GRECO rapport France', 'CEPEJ évaluation justice européenne France', 'Commission UE État de droit France'],
- sources_fr: ['Ministère Justice statistiques', 'Cour des comptes', 'Syndicats magistrats', 'Institut Montaigne justice'],
- indicateurs_cibles: ['condamnations CEDH', 'durée procédures', 'budget justice %PIB', 'taux population carcérale', 'délais instruction', 'accès aide juridictionnelle'],
- angles_specifiques: ['indépendance judiciaire', 'numérique judiciaire', 'réforme pénitentiaire', 'comparaison UE'],
+ ordre: 6, priorite: 'haute', budget_milliards: 11, effectifs: 90000,
+ kpi_label: 'Durée procédures civiles (mois)',
+ sources_intl: ['CEPEJ évaluation systèmes judiciaires Europe 2024 France', 'CEDH arrêts France 2023-2024', 'GRECO rapport France 5e cycle', 'Commission UE Tableau de bord justice 2024 France', 'Transparency International France'],
+ sources_fr: ['Ministère Justice statistiques 2024', 'Cour des comptes justice 2023', 'Syndicats magistrats USM SM', 'Institut Montaigne justice', 'CNB barreau'],
+ sources_opinion: ['Eurobaromètre confiance système judiciaire France', 'IFOP confiance tribunaux 2024', 'CREDOC accès au droit perçu', 'CEVIPOF confiance justice'],
+ indicateurs_cibles: ['durée procédures civiles mois', 'durée procédures pénales', 'budget justice %PIB', 'magistrats pour 100k hab', 'taux population carcérale pour 100k', 'condamnations CEDH annuelles', 'aide juridictionnelle bénéficiaires'],
+ angles_specifiques: ['indépendance judiciaire garanties constitutionnelles comparées', 'numérique judiciaire retard France vs UE', 'surpopulation carcérale solutions comparées', 'accès justice coûts barrières comparaison UE'],
+ think_tanks: ['Institut Montaigne', 'Fondapol', 'Terra Nova droit', 'IHEJ', 'Association Henri Capitant'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Réforme CSM 1993', 'Loi Guigou présomption innocence 2000', 'Réforme carte judiciaire Dati 2008', 'Loi Taubira 2014 alternatives prison', 'Réforme Belloubet 2017-2019', 'Loi confiance institution judiciaire 2021', 'États généraux justice 2022', 'Plan justice 2023-2027'],
},
'affaires-etrangeres': {
- ordre: 7, priorite: 'normale', budget_milliards: 3.2,
- sources_intl: ['OCDE DAC aide France', 'ECFR France foreign policy scorecard', 'IFRI', 'Chatham House', 'Brookings France'],
- sources_fr: ['MAE rapports', 'France Stratégie international', 'IRIS', 'Sénat Commission AE'],
- indicateurs_cibles: ['APD %RNB', 'rang soft power', 'réseau diplomatique taille', 'contribution ONU', 'exports défense', 'influence culturelle'],
- angles_specifiques: ['APD 0,7% RNB écart', 'influence France Afrique', 'diplomatie climatique', 'francophonie'],
+ ordre: 7, priorite: 'normale', budget_milliards: 3.2, effectifs: 14000,
+ kpi_label: 'APD / RNB %',
+ sources_intl: ['OCDE DAC aide France 2024', 'ECFR France foreign policy scorecard 2024', 'Brookings France global role', 'Chatham House France influence', 'SIPRI France multilatéral'],
+ sources_fr: ['MAE rapport annuel 2024', 'France Stratégie influence française', 'IRIS international', 'IFRI France global', 'Sénat Commission affaires étrangères'],
+ sources_opinion: ['Eurobaromètre politique étrangère France', 'IFOP image France monde', 'BVA confiance diplomatie française', 'CEVIPOF opinion internationale'],
+ indicateurs_cibles: ['APD %RNB', 'APD milliards', 'rang soft power Brand Finance', 'réseau diplomatique postes', 'contribution ONU %', 'exports défense rang', 'francophonie locuteurs millions'],
+ angles_specifiques: ['écart APD 0,7% RNB objectif trajectoire', 'influence France Afrique recomposition post-Sahel', 'diplomatie climatique leadership Paris Accord suivi', 'soft power culturel mesure comparaison'],
+ think_tanks: ['IFRI', 'IRIS', 'Institut Montaigne international', 'Fondapol global', 'European Council on Foreign Relations'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Traité Maastricht 1992 PESC', 'Refus guerre Irak 2003', 'Retour OTAN commandement intégré 2009', 'Traité Lisbonne et SEAE 2009', 'Présidence française UE 2022', 'Retrait Mali/Burkina 2022-2023', 'Réinvestissement OTAN post-Ukraine 2022', 'Réorientation Indo-Pacifique 2022-2025'],
},
'travail-emploi': {
- ordre: 8, priorite: 'critique', budget_milliards: 0,
- sources_intl: ['OCDE Employment Outlook France', 'OIT France conventions', 'Commission UE Semestre emploi France', 'COR retraites'],
- sources_fr: ['DARES', 'INSEE emploi', 'Cour des comptes', 'CAE travail', 'France Stratégie emploi'],
- indicateurs_cibles: ['taux chômage', 'taux emploi 15-64', 'taux emploi seniors', 'coût travail comparatif', 'taux syndicalisation', 'accidents travail', 'âge départ retraite effectif'],
- angles_specifiques: ['plein emploi scenario', 'retraites soutenabilité', 'flexisécurité danoise', 'emploi seniors'],
+ ordre: 8, priorite: 'critique', budget_milliards: 0, effectifs: 0,
+ kpi_label: 'Taux chômage %',
+ sources_intl: ['OCDE Employment Outlook France 2024', 'OIT France conventions et indicateurs', 'Commission UE Semestre européen emploi France 2024', 'Eurostat emploi France', 'OCDE retraites pension systems'],
+ sources_fr: ['DARES emploi activité 2024', 'INSEE enquête emploi', 'Cour des comptes emploi 2023-2024', 'CAE travail', 'France Stratégie emploi', 'COR rapport retraites 2024'],
+ sources_opinion: ['Eurobaromètre conditions travail France', 'IFOP bien-être au travail 2024', 'Malakoff Humanis baromètre QVT', 'CEVIPOF travail valeurs'],
+ indicateurs_cibles: ['taux chômage %', 'taux emploi 15-64 %', 'taux emploi 55-64 %', 'taux emploi jeunes %', 'coût travail comparatif', 'taux syndicalisation %', 'accidents travail taux', 'âge départ retraite effectif moyen'],
+ angles_specifiques: ['plein emploi 5% scenario trajectoire', 'retraites soutenabilité 2050 COR', 'flexisécurité danoise adaptation France', 'emploi seniors France vs Allemagne Suède'],
+ think_tanks: ['CAE', 'OFCE', 'Institut Montaigne travail', 'Terra Nova emploi', 'iFRAP social'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['35 heures Aubry 2000', 'CNE CPE 2005-2006 retrait', 'Accord compétitivité emploi 2013', 'Loi El Khomri 2016', 'Ordonnances travail Macron 2017', 'Réforme assurance chômage 2019-2022', 'Réforme retraites 2023', 'Plan plein emploi France Travail 2024'],
},
'logement': {
- ordre: 9, priorite: 'critique', budget_milliards: 38,
- sources_intl: ['OCDE Affordable Housing France', 'Commission UE logement abordable France', 'UN-Habitat France', 'Eurostat logement'],
- sources_fr: ['SDES', 'Banque des Territoires', 'ANCOLS', 'Fondation Abbé Pierre', 'Institut Montaigne logement'],
- indicateurs_cibles: ['prix immobilier/revenus', 'taux propriétaires', 'stock HLM', 'mal logement France', 'sans-abri', 'construction neuve', 'coût logement %revenu'],
- angles_specifiques: ['choc offre vs demande', 'comparaison Allemagne/Pays-Bas', 'ZAN artificialisation', 'rénovation thermique'],
+ ordre: 9, priorite: 'critique', budget_milliards: 38, effectifs: 0,
+ kpi_label: 'Prix immobilier / revenu médian',
+ sources_intl: ['OCDE Affordable Housing France 2024', 'Commission UE logement abordable rapport 2024', 'UN-Habitat France urbanisation', 'Eurostat logement SILC'],
+ sources_fr: ['SDES logement statistiques 2024', 'Banque des Territoires rapport', 'ANCOLS HLM contrôle', 'Fondation Abbé Pierre mal-logement 2025', 'Institut Montaigne logement'],
+ sources_opinion: ['Eurobaromètre logement accès France', 'IFOP préoccupation logement 2024', 'Ipsos crise logement perçue', 'CREDOC dépenses logement contraintes'],
+ indicateurs_cibles: ['prix immobilier/revenu ratio', 'taux propriétaires %', 'stock HLM unités', 'mal logement personnes', 'sans-abri estimations', 'construction neuve logements/an', 'coût logement %revenu', 'taux vacance'],
+ angles_specifiques: ['choc offre diagnostic blocages ZAN permis', 'comparaison Allemagne Pays-Bas modèle locatif', 'ZAN artificialisation objectif 2050', 'rénovation thermique MaPrimeRénov impact mesuré'],
+ think_tanks: ['Institut Montaigne', 'Terra Nova', 'Fondation Abbé Pierre', 'iFRAP logement', 'FNAIM'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Loi SRU 2000 20% HLM', 'Loi Boutin 2009', 'Loi ALUR Duflot 2014', 'Loi Elan 2018', 'ZAN loi Climat 2021', 'Crise hausse taux 2022-2023', 'Chute construction 2023-2024', 'Plan logement 2023 100 mesures'],
},
'agriculture': {
- ordre: 10, priorite: 'haute', budget_milliards: 22,
- sources_intl: ['FAO France', 'OCDE Agricultural Outlook France', 'Commission UE PAC France', 'Eurostat agri'],
- sources_fr: ['Agreste', 'INRAE', 'Chambres agriculture', 'Cour des comptes PAC'],
- indicateurs_cibles: ['surface agricole utile', 'exploitations viables', 'revenus agricoles', 'part bio', 'pesticides usage', 'souveraineté alimentaire', 'exportations agroalimentaires'],
- angles_specifiques: ['renouvellement générations', 'souveraineté alimentaire', 'PAC réforme', 'agri-écologie'],
+ ordre: 10, priorite: 'haute', budget_milliards: 22, effectifs: 400000,
+ kpi_label: 'Exploitations viables (EBE/UTANS > 1,5 SMIC)',
+ sources_intl: ['FAO food security France', 'OCDE Agricultural Outlook 2024 France', 'Commission UE PAC France mise en oeuvre', 'Eurostat agri-statistiques France', 'IFPRI souveraineté alimentaire'],
+ sources_fr: ['Agreste statistiques 2024', 'INRAE publications', 'Chambres agriculture rapport', 'Cour des comptes PAC 2024', 'Syndicats FNSEA JA'],
+ sources_opinion: ['Eurobaromètre agriculture alimentation France', 'IFOP image agriculteurs 2024', 'CREDOC alimentation durable comportements', 'Ipsos souveraineté alimentaire'],
+ indicateurs_cibles: ['SAU millions ha', 'exploitations viables %', 'revenus agricoles moyens', 'part bio % SAU', 'pesticides usage kg/ha', 'balance agroalimentaire export', 'part auto-approvisionnement produits clés'],
+ angles_specifiques: ['renouvellement générations 50% départ retraite 2030', 'souveraineté alimentaire mesure produits critiques', 'PAC réforme 2023-2027 impact France', 'agri-écologie transition rendements comparés'],
+ think_tanks: ['INRAE', 'IDDRI agri', 'Fondation de France', 'Terra Nova agri', 'iFRAP agriculture'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['PAC réforme Mac Sharry 1992', 'Agenda 2000 PAC', 'Loi d\'orientation agricole 2006', 'PAC 2014-2020', 'Loi Alimentation EGAlim 2018', 'PAC 2021-2027', 'Crise agricole 2024 blocages routes', 'Plan souveraineté 2024'],
},
'numerique': {
- ordre: 11, priorite: 'haute', budget_milliards: 9,
- sources_intl: ['OCDE Digital Economy Outlook France', 'Eurostat DESI France', 'Commission UE Digital Decade France', 'ITU France'],
- sources_fr: ['ARCEP', 'DGE', 'ANSSi', 'France Stratégie numérique', 'Institut Montaigne IA'],
- indicateurs_cibles: ['score DESI', 'couverture fibre/5G', 'compétences numériques', 'startups licornes', 'R&D IA', 'administration numérique', 'cybersécurité'],
- angles_specifiques: ['souveraineté numérique', 'IA France vs US/Chine', 'régulation vs innovation', 'fracture numérique'],
+ ordre: 11, priorite: 'haute', budget_milliards: 9, effectifs: 0,
+ kpi_label: 'Score DESI (rang UE)',
+ sources_intl: ['OCDE Digital Economy Outlook 2024 France', 'Eurostat DESI 2024 France', 'Commission UE Digital Decade France', 'ITU IDI France', 'IMD World Digital Competitiveness'],
+ sources_fr: ['ARCEP état internet France 2024', 'DGE numérique', 'ANSSI cyber état', 'France Stratégie numérique', 'Institut Montaigne IA France'],
+ sources_opinion: ['Eurobaromètre confiance numérique France', 'IFOP usages numériques 2024', 'CREDOC fracture numérique', 'Ipsos intelligence artificielle perception'],
+ indicateurs_cibles: ['score DESI rang UE', 'couverture fibre % logements', 'couverture 5G % population', 'compétences numériques % adultes', 'startups licornes nombre', 'R&D IA investissement', 'démarches admin en ligne %', 'incidents cyber signalés'],
+ angles_specifiques: ['souveraineté numérique cloud français comparaison', 'IA France position vs US Chine UE stratégie', 'régulation vs innovation équilibre IA Act impact', 'fracture numérique géographique et générationnelle solutions'],
+ think_tanks: ['Institut Montaigne IA', 'Terra Nova numérique', 'Renaissance Numérique', 'Fondapol tech', 'Conseil National du Numérique'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Plan numérique Jospin 1997', 'Loi LCEN 2004', 'France Très Haut Débit 2013', 'Loi République numérique 2016', 'Plan IA 1 Villani 2018', 'France Relance numérique 2020', 'Plan IA 2 2021', 'IA Act UE 2024', 'Plan IA 2030 Macron 2024'],
},
'cohesion-sociale': {
- ordre: 12, priorite: 'haute', budget_milliards: 0,
- sources_intl: ['PNUD IDH France', 'OCDE Society at a Glance France', 'Commission UE Social Scoreboard France', 'Eurostat inégalités'],
- sources_fr: ['INSEE pauvreté', 'ONPES', 'Observatoire inégalités', 'Fondation Jean Jaurès', 'Terra Nova social'],
- indicateurs_cibles: ['coefficient Gini', 'taux pauvreté', 'mobilité sociale', 'inégalités territoriales', 'discriminations emploi', 'mixité scolaire', 'ascenseur social'],
- angles_specifiques: ['immobilité sociale France', 'quartiers prioritaires', 'comparaison nordique', 'discriminations systémiques'],
+ ordre: 12, priorite: 'haute', budget_milliards: 0, effectifs: 0,
+ kpi_label: 'Indice Gini (inégalités)',
+ sources_intl: ['OCDE Society at a Glance 2024 France', 'Commission UE Social Scoreboard France', 'Eurostat inégalités SILC', 'PNUD Rapport développement humain France', 'World Inequality Report France'],
+ sources_fr: ['INSEE pauvreté niveaux de vie 2024', 'ONPES rapport pauvreté', 'Observatoire des inégalités rapport 2024', 'Fondation Jean Jaurès mobilité sociale', 'Cour des comptes politique ville'],
+ sources_opinion: ['Eurobaromètre inégalités perçues France', 'IFOP ascenseur social 2024', 'CREDOC pauvreté ressentie', 'CEVIPOF confiance sociale'],
+ indicateurs_cibles: ['coefficient Gini', 'taux pauvreté % seuil 60%', 'taux pauvreté enfants %', 'mobilité sociale intergénérationnelle', 'inégalités territoriales revenus', 'discriminations emploi % signalées', 'mixité scolaire indice'],
+ angles_specifiques: ['immobilité sociale France comparaison OCDE EGO', 'quartiers prioritaires résultats politiques ville', 'comparaison pays nordiques mécanismes redistribution', 'discriminations systémiques mesure et solutions'],
+ think_tanks: ['OFCE', 'Terra Nova social', 'Institut Montaigne', 'Fondation Jean Jaurès', 'Observatoire des inégalités'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Loi RMI 1988', 'CMU 1999', 'RSA Bachelot 2009', 'Quinquennat Hollande inégalités', 'Plan pauvreté Macron 2018', 'Revenu universel débat 2020', 'Inflation et pouvoir d\'achat 2022-2024', 'Plan France ruralités 2023'],
},
'democratie': {
- ordre: 13, priorite: 'haute', budget_milliards: 0,
- sources_intl: ['V-Dem France', 'Freedom House France', 'GRECO France', 'OCDE gouvernance France', 'Commission UE État de droit'],
- sources_fr: ['CEVIPOF', 'Baromètre confiance Sciences Po', 'Transparency International France', 'Fondapol démocratie'],
- indicateurs_cibles: ['score V-Dem', 'confiance institutions', 'taux abstention', 'score liberté presse', 'corruption perçue', 'participation politique', 'représentation femmes'],
- angles_specifiques: ['crise représentative', 'proportionnelle vs majoritaire', 'démocratie participative', 'financement partis'],
+ ordre: 13, priorite: 'haute', budget_milliards: 0, effectifs: 0,
+ kpi_label: 'Score V-Dem démocratie libérale',
+ sources_intl: ['V-Dem France rapport 2024', 'Freedom House France 2024', 'GRECO France 5e cycle rapport', 'OCDE gouvernance publique France', 'Commission UE État de droit France 2024'],
+ sources_fr: ['CEVIPOF Baromètre confiance politique 2025', 'Transparency International France 2024', 'Fondapol démocratie', 'Terra Nova institutions', 'Sciences Po ENEF'],
+ sources_opinion: ['Eurobaromètre démocratie France', 'IFOP confiance institutions 2024', 'CEVIPOF abstention motivations', 'Ipsos défiance politique'],
+ indicateurs_cibles: ['score V-Dem', 'score liberté presse RSF', 'corruption perçue IPC', 'taux participation élections', 'taux abstention présidentielle', 'confiance Parlement %', 'confiance gouvernement %', 'représentation femmes Assemblée %'],
+ angles_specifiques: ['crise représentative France diagnostic comparé', 'proportionnelle vs majoritaire simulations', 'démocratie participative bilan conventions citoyennes', 'financement partis et conflits intérêts réforme'],
+ think_tanks: ['CEVIPOF', 'Fondapol', 'Terra Nova', 'Institut Montaigne', 'Transparency International'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Cohabitation 1986-1988', 'Quinquennat référendum 2000', 'Le Pen au second tour 2002 choc', 'Traité de Lisbonne 2007', 'Mouvement Nuit Debout 2016', 'Gilets Jaunes 2018-2019', 'Grand Débat National 2019', 'Convention citoyenne climat 2020', 'Dissolution choc 2024'],
},
'europe': {
- ordre: 14, priorite: 'haute', budget_milliards: 0,
- sources_intl: ['Commission UE France', 'Eurobaromètre France', 'Bruegel France Europe', 'ECFR France Europe', 'Jacques Delors Institut'],
- sources_fr: ['Institut Montaigne Europe', 'Notre Europe', 'IFRI Europe', 'Terra Nova Europe', 'France Stratégie UE'],
- indicateurs_cibles: ['solde France UE contribution', 'soutien UE opinion publique', 'transposition directives', 'poids France BCE/Commission', 'coopération défense UE'],
- angles_specifiques: ['influence France UE post-Brexit', 'axe Paris-Berlin', 'élargissement', 'autonomie stratégique'],
+ ordre: 14, priorite: 'haute', budget_milliards: 0, effectifs: 0,
+ kpi_label: 'Solde net contribution UE (Md€)',
+ sources_intl: ['Commission UE France bilan 2024', 'Eurobaromètre France attitude UE 2024', 'Bruegel France Europe analyse', 'ECFR France Europe scorecard', 'Institut Jacques Delors'],
+ sources_fr: ['SGAE bilan transposition', 'Institut Montaigne Europe', 'Notre Europe Jacques Delors Institut', 'IFRI Europe', 'Terra Nova Europe'],
+ sources_opinion: ['Eurobaromètre standard France attitude UE', 'IFOP soutien euro 2024', 'CEVIPOF vote européen motivations', 'Ipsos Europe perçue'],
+ indicateurs_cibles: ['solde net contribution UE milliards', 'soutien UE % opinion publique', 'transposition directives % délai', 'Français institutions EU %', 'participation élections européennes', 'infra-représentation Français Commission/PE', 'fonds UE absorbés %'],
+ angles_specifiques: ['influence France dans UE post-Brexit mesure', 'axe Paris-Berlin état 2024-2025', 'élargissement Balkans Ukraine impact France', 'autonomie stratégique défense PSDC réalité'],
+ think_tanks: ['Institut Montaigne', 'Institut Jacques Delors', 'IFRI', 'ECFR', 'Bruegel', 'Notre Europe'],
+ partis: ['LFI', 'PS', 'EELV', 'Renaissance', 'LR', 'RN'],
+ timeline_periodes: ['Maastricht 1992 référendum', 'Euro 2002', 'Référendum TCE Non 2005', 'Traité Lisbonne 2007', 'Crise zone euro 2010-2012', 'Brexit 2016-2020', 'Plan de relance NextGenerationEU 2021', 'Présidence française UE 2022', 'Élections européennes 2024'],
},
};
@@ -136,19 +208,19 @@ const THEME_CONFIG = {
const COLLECT_SCHEMA = {
type: 'object',
properties: {
- source: { type: 'string' },
- type: { type: 'string', enum: ['statistiques', 'rapport', 'recommandation', 'benchmark', 'etude'] },
+ source: { type: 'string' },
+ type: { type: 'string', enum: ['statistiques', 'rapport', 'recommandation', 'benchmark', 'etude'] },
donnees: {
type: 'array',
items: {
type: 'object',
properties: {
- indicateur: { type: 'string' },
- valeur: { type: 'string' },
- annee: { type: 'string' },
- tendance: { type: 'string', enum: ['hausse', 'baisse', 'stable', 'nd'] },
- rang_comparatif: { type: 'string' },
- url_source: { type: 'string' },
+ indicateur: { type: 'string' },
+ valeur: { type: 'string' },
+ annee: { type: 'string' },
+ tendance: { type: 'string', enum: ['hausse', 'baisse', 'stable', 'nd'] },
+ rang_comparatif: { type: 'string' },
+ url_source: { type: 'string' },
},
required: ['indicateur', 'valeur', 'annee'],
},
@@ -159,255 +231,402 @@ const COLLECT_SCHEMA = {
items: {
type: 'object',
properties: {
- pays: { type: 'string' },
- mesure: { type: 'string' },
+ pays: { type: 'string' },
+ mesure: { type: 'string' },
resultat_mesure: { type: 'string' },
+ source: { type: 'string' },
},
required: ['pays', 'mesure'],
},
},
- url_principale: { type: 'string' },
- date_publication: { type: 'string' },
+ url_principale: { type: 'string' },
+ date_publication: { type: 'string' },
},
required: ['source', 'type', 'donnees'],
};
+const OPINION_SCHEMA = {
+ type: 'object',
+ properties: {
+ source: { type: 'string' },
+ sondages: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ question: { type: 'string' },
+ pct: { type: 'number' },
+ reponse: { type: 'string' },
+ annee: { type: 'number' },
+ note: { type: 'string' },
+ comparaison: { type: 'string' },
+ },
+ required: ['question', 'pct', 'annee'],
+ },
+ },
+ evolution: { type: 'string' },
+ clivages: { type: 'string' },
+ },
+ required: ['source', 'sondages'],
+};
+
// ─── WORKFLOW ─────────────────────────────────────────────────────────────────
-const themeSlug = args?.slug || 'economie-finances';
+const themeSlug = args?.slug || 'economie-finances';
const themeLabel = args?.label || 'Économie & Finances publiques';
-const config = THEME_CONFIG[themeSlug] || THEME_CONFIG['economie-finances'];
+const config = THEME_CONFIG[themeSlug] || THEME_CONFIG['economie-finances'];
-log(`Démarrage production fiche : ${themeLabel}`);
+log(`Démarrage fiche ultra-approfondie : ${themeLabel} (${config.sources_intl.length + config.sources_fr.length + config.sources_opinion.length} sources)`);
-// PHASE 1 : Collecte internationale
+// ── PHASE 1 : Collecte internationale ─────────────────────────────────────────
phase('Collecte internationale');
-log(`${config.sources_intl.length} sources internationales à interroger...`);
const intlData = await parallel(
config.sources_intl.map(source => () =>
agent(
- `Tu es un analyste expert des institutions internationales et de la France.
+ `Tu es un analyste expert des institutions internationales spécialisé sur la France.
SOURCE : ${source}
THÈME : ${themeLabel}
- INDICATEURS RECHERCHÉS : ${config.indicateurs_cibles.join(', ')}
- ANGLES SPÉCIFIQUES : ${config.angles_specifiques.join(', ')}
+ INDICATEURS CIBLÉS : ${config.indicateurs_cibles.join(' · ')}
- Collecte pour cette source :
- 1. Les données statistiques les plus récentes sur la France pour ce thème
- (valeur exacte, année, tendance, rang parmi pays OCDE/UE)
- 2. Les recommandations explicites faites à la France dans les 24 derniers mois
- 3. Les benchmarks : quels pays font mieux que la France et pourquoi ?
- 4. L'URL du document source principal
+ Collecte EXHAUSTIVE pour cette source :
+ 1. Toutes les données statistiques disponibles sur la France pour ce thème
+ (valeur exacte + unité, année, tendance 5 ans, position parmi pays OCDE/UE)
+ 2. Toutes les recommandations explicites faites à la France sur 24 mois
+ 3. Benchmarks : 3-5 pays qui font mieux que la France, avec le mécanisme précis et les résultats chiffrés
+ 4. Points de désaccord ou de divergence avec d'autres institutions
+ 5. Données en cours de collecte (prochaines publications)
- Sois précis et sourcé. Uniquement des faits vérifiables.`,
+ Sois exhaustif, précis, sourcé. Cite les numéros de rapport et pages si possible.`,
{
- label: `intl:${source.substring(0, 30)}`,
+ label: `intl:${source.slice(0, 28)}`,
phase: 'Collecte internationale',
- schema: { ...COLLECT_SCHEMA, properties: { ...COLLECT_SCHEMA.properties, source: { type: 'string', default: source } } },
+ schema: COLLECT_SCHEMA,
model: 'sonnet',
}
).then(r => r ? { ...r, source } : null)
)
);
-// PHASE 2 : Collecte nationale
+// ── PHASE 2 : Collecte nationale ─────────────────────────────────────────────
phase('Collecte nationale');
-log(`${config.sources_fr.length} sources françaises à interroger...`);
const frData = await parallel(
config.sources_fr.map(source => () =>
agent(
- `Tu es un expert des politiques publiques françaises.
+ `Tu es un expert des politiques publiques françaises et de l'administration d'État.
SOURCE FRANÇAISE : ${source}
THÈME : ${themeLabel}
- INDICATEURS : ${config.indicateurs_cibles.join(', ')}
+ INDICATEURS : ${config.indicateurs_cibles.join(' · ')}
- Pour cette source institutionnelle française :
- 1. Les chiffres-clés les plus récents sur ce thème
- 2. Les principales conclusions/diagnostics du dernier rapport
- 3. Les recommandations formulées
- 4. Les évolutions récentes (12 derniers mois)
- 5. Les données disponibles en open data (URL API si possible)`,
+ Pour cette source française :
+ 1. Chiffres-clés les plus récents (valeur, année, tendance)
+ 2. Principales conclusions du dernier rapport ou publication
+ 3. Recommandations formulées, avec statut de mise en oeuvre connu
+ 4. Débats internes ou divergences avec d'autres institutions françaises
+ 5. Prochaines publications ou travaux annoncés
+ 6. Données disponibles en open data (URL si possible)`,
{
- label: `fr:${source.substring(0, 30)}`,
+ label: `fr:${source.slice(0, 28)}`,
phase: 'Collecte nationale',
- schema: { ...COLLECT_SCHEMA, properties: { ...COLLECT_SCHEMA.properties, source: { type: 'string', default: source } } },
+ schema: COLLECT_SCHEMA,
model: 'sonnet',
}
).then(r => r ? { ...r, source } : null)
)
);
-const allData = [...intlData, ...frData].filter(Boolean);
-log(`${allData.length} sources collectées`);
+// ── PHASE 3 : Opinion & acteurs ───────────────────────────────────────────────
+phase('Opinion & acteurs');
-// PHASE 3 : Deep research sur les angles spécifiques manquants
-phase('Deep research ciblé');
+const [opinionData, acteursData, historiqueData] = await parallel([
+ // Opinion publique
+ () => parallel(
+ config.sources_opinion.map(source => () =>
+ agent(
+ `Tu es un expert de l'opinion publique française et des sondages politiques.
+
+ SOURCE SONDAGE : ${source}
+ THÈME : ${themeLabel}
+
+ Recherche les données d'opinion sur ce thème :
+ 1. Questions précises posées aux Français (formulation exacte)
+ 2. Pourcentages de réponses (favorable, satisfait, confiance, etc.)
+ 3. Évolution sur 5-10 ans si disponible
+ 4. Clivages sociodémographiques significatifs (âge, revenus, territoire, CSP)
+ 5. Comparaison France vs UE27 si disponible (Eurobaromètre)
+ 6. Confiance dans les institutions spécifiques du secteur`,
+ {
+ label: `opinion:${source.slice(0, 25)}`,
+ phase: 'Opinion & acteurs',
+ schema: OPINION_SCHEMA,
+ model: 'sonnet',
+ }
+ ).then(r => r ? { ...r, source } : null)
+ )
+ ),
+
+ // Cartographie des acteurs
+ () => agent(
+ `Tu es un politologue expert des politiques publiques françaises.
+
+ THÈME : ${themeLabel}
+ THINK TANKS PRINCIPAUX : ${config.think_tanks.join(', ')}
+
+ Cartographie complète des acteurs qui influencent la politique sur ce thème :
+
+ 1. INSTITUTIONS DÉCISIONNAIRES
+ - Ministère(s) compétent(s) : rôle exact, budget, ministre actuel
+ - Agences / établissements publics : mission, tutelle, budget, effectifs
+ - Corps d'inspection : IGF, IGA, IGAS, etc. — rôle sur ce thème
+ - Instances consultatives : Conseil, Haut Comité, Comission nationale...
+
+ 2. THINK TANKS — pour chacun : orientation politique, publications récentes sur ce thème, positions clés
+ Couvrir : ${config.think_tanks.join(', ')} + France Stratégie + OFCE + CAE
+
+ 3. SYNDICATS ET FÉDÉRATIONS professionnelles actives sur ce thème
+
+ 4. ACTEURS EUROPÉENS / INTERNATIONAUX influençant la politique française
+
+ Sois factuel et précis.`,
+ {
+ label: `acteurs:${themeSlug}`,
+ phase: 'Opinion & acteurs',
+ model: 'sonnet',
+ }
+ ),
+
+ // Historique
+ () => agent(
+ `Tu es un historien des politiques publiques françaises depuis 1990.
+
+ THÈME : ${themeLabel}
+ PÉRIODES CLÉS IDENTIFIÉES : ${config.timeline_periodes.join(' | ')}
+
+ Produis une chronologie des réformes majeures sur ce thème depuis 1990.
+ Pour chaque événement / réforme :
+ - Année précise
+ - Titre court (max 8 mots)
+ - Description (2-3 phrases : contexte, contenu, impact mesuré)
+ - Impact : positif | negatif | neutre | majeur
+
+ Inclure :
+ - Les réformes législatives majeures
+ - Les crises et ruptures
+ - Les tournants décisifs
+ - Les réformes avortées significatives
+
+ Format de sortie : liste JSON d'objets {annee, titre, description, impact}`,
+ {
+ label: `historique:${themeSlug}`,
+ phase: 'Opinion & acteurs',
+ schema: {
+ type: 'object',
+ properties: {
+ items: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ annee: { type: 'string' },
+ titre: { type: 'string' },
+ description: { type: 'string' },
+ impact: { type: 'string', enum: ['positif', 'negatif', 'neutre', 'majeur'] },
+ },
+ required: ['annee', 'titre', 'description'],
+ },
+ },
+ analyse: { type: 'string' },
+ },
+ required: ['items'],
+ },
+ model: 'sonnet',
+ }
+ ),
+]);
+
+// ── PHASE 4 : Deep research sur angles spécifiques ───────────────────────────
+phase('Historique & enjeux');
const deepResearch = await parallel(
config.angles_specifiques.map(angle => () =>
agent(
`Deep research expert sur les politiques publiques françaises.
- ANGLE SPÉCIFIQUE À CREUSER : ${angle}
+ ANGLE PRÉCIS : ${angle}
THÈME GÉNÉRAL : ${themeLabel}
- Recherche approfondie sur cet angle précis :
- - Données quantitatives récentes (sourcer avec précision)
- - Études académiques ou institutionnelles de référence
- - Positions des principales institutions (OCDE, UE, think tanks)
- - Expériences comparatives internationales réussies
- - État du débat politique français sur ce point
- - Propositions concrètes qui existent déjà dans la littérature
-
- Sois exhaustif sur cet angle précis. Cite tes sources.`,
+ Recherche exhaustive et sourcée sur cet angle :
+ - Données quantitatives récentes (avec sources précises)
+ - Études académiques ou institutionnelles de référence (titres, dates)
+ - Consensus et divergences institutionnelles
+ - Expériences internationales comparatives réussies (avec résultats mesurés)
+ - État du débat politique français
+ - Propositions concrètes documentées dans la littérature
+ - Points de controverse scientifique ou méthodologique`,
{
- label: `deep:${angle.substring(0, 40)}`,
- phase: 'Deep research ciblé',
+ label: `deep:${angle.slice(0, 35)}`,
+ phase: 'Historique & enjeux',
model: 'sonnet',
}
)
)
);
-// PHASE 4 : Synthèse Opus
-phase('Synthèse Opus');
-log('Synthèse de niveau Cour des comptes × OCDE...');
-
-const allStats = allData.flatMap(d => d.donnees || []);
-const allReco = allData.flatMap(d => d.recommandations_france || []);
+const allData = [...intlData, ...frData].filter(Boolean);
+const allStats = allData.flatMap(d => d.donnees || []);
+const allReco = allData.flatMap(d => d.recommandations_france || []);
const allBenchmarks = allData.flatMap(d => d.benchmarks || []);
+const allOpinion = (opinionData || []).filter(Boolean);
+
+log(`Collecte terminée : ${allData.length} sources · ${allStats.length} indicateurs · ${allBenchmarks.length} benchmarks · ${allOpinion.length} sondages`);
+
+// ── PHASE 5 : Synthèse Opus ───────────────────────────────────────────────────
+phase('Synthèse Opus');
const synthesis = await agent(
- `Tu es un expert de haut niveau des politiques publiques françaises, équivalent à un rapporteur de la Cour des comptes ou un économiste senior de l'OCDE.
+ `Tu es un expert senior des politiques publiques françaises — équivalent rapporteur Cour des comptes / économiste OCDE.
THÈME : ${themeLabel}
- Tu disposes de :
- - ${allStats.length} indicateurs statistiques collectés auprès de ${allData.length} sources
- - ${allReco.length} recommandations institutionnelles explicites pour la France
+ MATÉRIAU DISPONIBLE :
+ - ${allStats.length} indicateurs de ${allData.length} sources institutionnelles
+ - ${allReco.length} recommandations explicites à la France
- ${allBenchmarks.length} benchmarks de pays comparables
- - ${deepResearch.filter(Boolean).length} deep research sur des angles spécifiques
+ - ${deepResearch.filter(Boolean).length} analyses approfondies sur les angles spécifiques
- STATISTIQUES DISPONIBLES :
- ${JSON.stringify(allStats.slice(0, 60), null, 2)}
+ DONNÉES STATISTIQUES :
+ ${JSON.stringify(allStats.slice(0, 70), null, 2)}
RECOMMANDATIONS INSTITUTIONNELLES :
- ${allReco.slice(0, 40).join('\n')}
+ ${allReco.slice(0, 50).join('\n')}
- BENCHMARKS INTERNATIONAUX :
- ${JSON.stringify(allBenchmarks.slice(0, 25), null, 2)}
+ BENCHMARKS PAYS :
+ ${JSON.stringify(allBenchmarks.slice(0, 30), null, 2)}
- DEEP RESEARCH SPÉCIFIQUES :
+ DEEP RESEARCH :
${deepResearch.filter(Boolean).slice(0, 4).join('\n\n---\n\n')}
- PRODUCTION ATTENDUE :
+ PRODUIRE — SOIS EXHAUSTIF ET CHIFFRÉ :
- 1. DIAGNOSTIC (900-1200 mots)
- Rédige un diagnostic complet, rigoureux, comparatif de la situation française.
- Structure : état des lieux chiffré → position internationale → tendances → facteurs explicatifs → défis structurels.
- Chaque affirmation doit être sourcée. Comparer systématiquement à l'Allemagne, le Royaume-Uni, les pays nordiques, la moyenne OCDE.
+ 1. DIAGNOSTIC (1 200-1 500 mots)
+ Le paradoxe ou la tension centrale de la France sur ce thème.
+ État des lieux complet, sourcé, avec positions internationale et nationale.
+ Chaque chiffre cite sa source (Institution, année).
+ Comparer systématiquement : Allemagne, Suède/Finlande, Royaume-Uni, Espagne, moyenne OCDE/UE.
- 2. INDICATEURS CLÉS (8-12 indicateurs)
- Sélectionne les plus significatifs : valeur France, source, année, tendance, comparaison OCDE.
+ 2. INDICATEURS CLÉS (10-15 indicateurs)
+ Les plus significatifs : valeur France + source + année + tendance + comparaison OCDE.
- 3. ENJEUX STRUCTURELS (5-7 enjeux)
- Hiérarchisés par urgence, avec les sources internationales qui les documentent.
+ 3. ENJEUX STRUCTURELS (6-8 enjeux hiérarchisés)
+ Classification : immédiat / court-terme / moyen-terme / long-terme.
+ Pour chaque enjeu : description précise + sources + ampleur.
- 4. CONSENSUS INTERNATIONAL
- Ce sur quoi TOUTES les institutions convergent concernant la France.
+ 4. ENJEUX POLITIQUES (3-5 points de débat partisan)
+ Ce qui divise vraiment, avec les positions de chaque camp.
- 5. DIVERGENCES
- Points de désaccord entre institutions ou approches contradictoires.`,
+ 5. ENJEUX CONJONCTURELS (actualité 6 mois)
+ Décisions récentes, textes en cours, crises émergentes.
+
+ 6. CONSENSUS INTERNATIONAL
+ Sur quoi TOUTES les institutions convergent.
+
+ 7. DIVERGENCES ET INCERTITUDES
+ Points de désaccord entre institutions, controverses méthodologiques.
+
+ 8. KPI PRINCIPAL À RETENIR (le plus parlant, avec valeur et tendance)`,
{
label: `synth:${themeSlug}`,
phase: 'Synthèse Opus',
schema: {
type: 'object',
properties: {
- diagnostic: { type: 'string' },
+ diagnostic: { type: 'string' },
indicateurs_cles: {
type: 'array',
items: {
type: 'object',
properties: {
- label: { type: 'string' },
- valeur: { type: 'string' },
- source: { type: 'string' },
- annee: { type: 'string' },
- tendance: { type: 'string', enum: ['hausse', 'baisse', 'stable', 'nd'] },
+ label: { type: 'string' },
+ valeur: { type: 'string' },
+ source: { type: 'string' },
+ annee: { type: 'string' },
+ tendance: { type: 'string', enum: ['hausse', 'baisse', 'stable', 'nd'] },
comparaison_ocde: { type: 'string' },
},
required: ['label', 'valeur', 'source', 'tendance'],
},
},
- enjeux_structures: {
+ enjeux_structurels: {
type: 'array',
items: {
type: 'object',
properties: {
- titre: { type: 'string' },
+ titre: { type: 'string' },
description: { type: 'string' },
- urgence: { type: 'string', enum: ['immediate', 'court-terme', 'moyen-terme', 'long-terme'] },
- sources: { type: 'array', items: { type: 'string' } },
+ urgence: { type: 'string', enum: ['immediate', 'court-terme', 'moyen-terme', 'long-terme'] },
+ sources: { type: 'array', items: { type: 'string' } },
},
required: ['titre', 'description', 'urgence'],
},
},
+ enjeux_politiques: { type: 'array', items: { type: 'object', properties: { question: { type: 'string' }, camps: { type: 'string' } }, required: ['question'] } },
+ enjeux_conjoncturels: { type: 'string' },
consensus_international: { type: 'string' },
- divergences: { type: 'string' },
- sources_citees: { type: 'array', items: { type: 'string' } },
+ divergences: { type: 'string' },
+ kpi_principal: { type: 'object', properties: { valeur: { type: 'string' }, label: { type: 'string' }, tendance: { type: 'string' }, contexte: { type: 'string' } }, required: ['valeur', 'label'] },
+ sources_citees: { type: 'array', items: { type: 'string' } },
},
- required: ['diagnostic', 'indicateurs_cles', 'enjeux_structures', 'consensus_international'],
+ required: ['diagnostic', 'indicateurs_cles', 'enjeux_structurels', 'kpi_principal'],
},
model: 'opus',
}
);
-// PHASE 5 : Propositions
-phase('Propositions');
+// ── PHASE 6 : Propositions Opus ───────────────────────────────────────────────
+phase('Propositions Opus');
-const propositions = await agent(
- `Tu es un conseiller politique senior, expert des politiques publiques françaises et du droit comparé international.
+const propositionsResult = await agent(
+ `Tu es un conseiller politique senior, expert du droit comparé et des politiques publiques françaises.
THÈME : ${themeLabel}
- DIAGNOSTIC ÉTABLI :
- ${synthesis?.diagnostic || ''}
+ DIAGNOSTIC :
+ ${synthesis?.diagnostic?.slice(0, 2000) || ''}
- ENJEUX IDENTIFIÉS :
- ${JSON.stringify(synthesis?.enjeux_structures || [])}
+ ENJEUX STRUCTURELS :
+ ${JSON.stringify(synthesis?.enjeux_structurels || [], null, 2)}
- RECOMMANDATIONS DES INSTITUTIONS INTERNATIONALES :
- ${allReco.slice(0, 30).join('\n')}
+ RECOMMANDATIONS INSTITUTIONNELLES :
+ ${allReco.slice(0, 40).join('\n')}
BENCHMARKS PAYS :
- ${JSON.stringify(allBenchmarks.slice(0, 20), null, 2)}
+ ${JSON.stringify(allBenchmarks.slice(0, 25), null, 2)}
- GÉNÈRE un programme d'action pour la France 2027-2032 :
+ GÉNÈRE 7-9 propositions IRPF 2027-2032 :
- 6-8 propositions réparties en :
- - 1-2 RUPTURE : réforme structurelle majeure, fort impact, irréversible
- - 2-3 RÉFORMISTE : ajustements significatifs du modèle existant
- - 1-2 CONSOLIDATION : amplifier ce qui fonctionne déjà
- - 1 EXPÉRIMENTATION : pilote innovant inspiré d'un pays-modèle
+ CATÉGORIES :
+ - rupture (1-2) : réforme structurelle majeure, fort impact, nécessite consensus politique
+ - reformiste (3-4) : ajustement significatif, faisable 1-2 ans
+ - consolidation (1-2) : amplifier ce qui fonctionne, faible résistance
+ - experimentation (1) : pilote innovant dans 2-3 territoires/secteurs
- Pour chaque proposition :
- • Titre clair et mécanisme précis (qui, quoi, comment, calendrier)
- • Fondement dans les recommandations institutionnelles internationales (citer la source)
- • Pays ayant mis en oeuvre + résultats mesurés
- • Impact budgétaire : coût net, horizon, gains attendus
- • Obstacles identifiés et comment les contourner
- • Quick win possible sans texte législatif ? (oui/non)
- • Niveau de preuve : fort / modéré / émergent / expérimental
+ POUR CHAQUE PROPOSITION, produire :
+ • Titre court et clair (mécanisme en sous-titre)
+ • Description complète (qui fait quoi, comment, calendrier)
+ • Fondement : quelle(s) institution(s) internationale(s) recommandent cette approche ?
+ • Pays référence : quel pays a mis ça en place, résultats chiffrés sur 5 ans
+ • Impact budgétaire : coût net première année, coût récurrent, gains attendus, horizon
+ • Obstacles politiques principaux et comment les contourner
+ • Quick win sans texte législatif ? (oui/non + quoi)
+ • Niveau de preuve (fort/modéré/émergent/expérimental)
- Sois concret, chiffré, actionnable. Pas de vague "il faudrait".`,
+ Sois concret et chiffré. Évite le vague.`,
{
label: `prop:${themeSlug}`,
- phase: 'Propositions',
+ phase: 'Propositions Opus',
schema: {
type: 'object',
properties: {
@@ -416,20 +635,22 @@ const propositions = await agent(
items: {
type: 'object',
properties: {
- titre: { type: 'string' },
- categorie: { type: 'string', enum: ['rupture', 'reformiste', 'consolidation', 'experimentation'] },
- description: { type: 'string' },
- mecanisme: { type: 'string' },
+ titre: { type: 'string' },
+ sous_titre: { type: 'string' },
+ categorie: { type: 'string', enum: ['rupture', 'reformiste', 'consolidation', 'experimentation'] },
+ description: { type: 'string' },
+ mecanisme: { type: 'string' },
fondement_international: { type: 'string' },
- pays_reference: { type: 'array', items: { type: 'string' } },
- impact_budgetaire: { type: 'string' },
- obstacles: { type: 'array', items: { type: 'string' } },
- quick_win: { type: 'boolean' },
- niveau_preuve: { type: 'string', enum: ['fort', 'modere', 'emergent', 'experimental'] },
+ pays_reference: { type: 'array', items: { type: 'string' } },
+ impact_budgetaire: { type: 'string' },
+ obstacles: { type: 'array', items: { type: 'string' } },
+ quick_win: { type: 'boolean' },
+ niveau_preuve: { type: 'string', enum: ['fort', 'modere', 'emergent', 'experimental'] },
},
required: ['titre', 'categorie', 'description', 'fondement_international', 'niveau_preuve'],
},
},
+ synthese_irpf: { type: 'string' },
},
required: ['propositions'],
},
@@ -437,24 +658,27 @@ const propositions = await agent(
}
);
-// PHASE 6 : Lecture politique
+// ── PHASE 7 : Lecture politique ───────────────────────────────────────────────
phase('Lecture politique');
const politique = await agent(
- `Tu es un politologue spécialisé dans la vie politique française et les dynamiques de réforme.
+ `Tu es un politologue spécialisé dans la vie politique française 2024-2027.
THÈME : ${themeLabel}
- PROPOSITIONS IRPF : ${JSON.stringify(propositions?.propositions?.slice(0, 3) || [])}
+ PARTIS À ANALYSER : ${config.partis.join(', ')}
Analyse politique 2025-2027 :
- 1. Position actuelle du gouvernement Bayrou sur ce thème
- 2. Positions des partis majeurs (RN, LFI, PS, EELV, Renaissance/Horizons, LR)
- 3. Fenêtres politiques dans les 18 mois (élections, présidences, crises, momentum)
- 4. Acteurs clés (ministres, hauts fonctionnaires, syndicats, lobbys) — qui accélère, qui bloque
- 5. Blocages structurels : corporatismes, contraintes constitutionnelles, résistances
- 6. Coalitions possibles pour faire avancer des réformes sur ce thème
- 7. Séquence optimale de mise en oeuvre`,
+ 1. Position et actions du gouvernement Bayrou sur ce thème (textes, discours, budget)
+ 2. Position de chaque parti majeur : résumé 2 phrases + argument central + texte récent
+ Pour : ${config.partis.join(', ')}
+ 3. Votes parlementaires significatifs récents sur ce thème
+ 4. Fenêtres politiques dans les 24 mois (élections, présidences, crises, momentum)
+ 5. Acteurs clés non-partisans : ministres, hauts fonctionnaires, syndicats, lobbys
+ — qui accélère, qui bloque, quel est leur levier
+ 6. Blocages structurels : corporatismes, contraintes constitutionnelles, traités UE
+ 7. Coalitions possibles pour faire avancer des réformes
+ 8. Séquence optimale de mise en oeuvre (quick wins d'abord, réformes lourdes ensuite)`,
{
label: `pol:${themeSlug}`,
phase: 'Lecture politique',
@@ -462,78 +686,190 @@ const politique = await agent(
type: 'object',
properties: {
position_gouvernement: { type: 'string' },
- positions_partis: { type: 'array', items: { type: 'object', properties: { parti: { type: 'string' }, position: { type: 'string' } }, required: ['parti', 'position'] } },
- fenetres_politiques: { type: 'array', items: { type: 'string' } },
- acteurs_cles: { type: 'array', items: { type: 'object', properties: { nom: { type: 'string' }, role: { type: 'string' }, influence: { type: 'string' } }, required: ['nom', 'role'] } },
- blocages: { type: 'array', items: { type: 'string' } },
- coalitions: { type: 'array', items: { type: 'string' } },
+ positions_partis: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ parti: { type: 'string' },
+ position: { type: 'string' },
+ argument: { type: 'string' },
+ texte_recent: { type: 'string' },
+ },
+ required: ['parti', 'position'],
+ },
+ },
+ votes_parlementaires: { type: 'array', items: { type: 'string' } },
+ fenetres_politiques: { type: 'array', items: { type: 'string' } },
+ acteurs_cles: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ nom: { type: 'string' },
+ role: { type: 'string' },
+ influence: { type: 'string', enum: ['accelerateur', 'bloquant', 'neutre'] },
+ levier: { type: 'string' },
+ },
+ required: ['nom', 'role', 'influence'],
+ },
+ },
+ blocages: { type: 'array', items: { type: 'string' } },
+ coalitions: { type: 'array', items: { type: 'string' } },
sequence_optimale: { type: 'string' },
},
- required: ['position_gouvernement', 'positions_partis', 'fenetres_politiques', 'blocages'],
+ required: ['position_gouvernement', 'positions_partis', 'blocages'],
},
model: 'sonnet',
}
);
-// PHASE 7 : Production MDX
+// ── PHASE 8 : Production MDX ─────────────────────────────────────────────────
phase('Production MDX');
+const kpi = synthesis?.kpi_principal || { valeur: '—', label: config.kpi_label, tendance: 'stable' };
+const mainOpinionSondage = allOpinion.flatMap(o => o?.sondages || []).find(s => s?.pct > 0);
+const timelineItems = historiqueData?.items || [];
+
const frontmatter = `---
title: "${themeLabel}"
slug: "${themeSlug}"
-description: "Diagnostic complet, données internationales et propositions IRPF sur le thème ${themeLabel}."
+description: "${synthesis?.diagnostic?.split('.')[0] || 'Diagnostic complet de la situation française.'}."
ordre: ${config.ordre}
priorite: "${config.priorite}"
${config.budget_milliards ? `budget_etat_milliards: ${config.budget_milliards}` : ''}
-tags: [${config.indicateurs_cibles.slice(0, 5).map(i => `"${i.replace(/[^a-zA-ZÀ-ÿ0-9 ]/g, '').trim().toLowerCase().replace(/ /g, '-')}"`).join(', ')}]
-sources_data: [${config.sources_intl.slice(0, 5).map(s => `"${s.split(' ')[0]}"`).join(', ')}]
-derniere_maj: "2026-06"
-nb_propositions: ${propositions?.propositions?.length || 0}
+${config.effectifs ? `effectifs_publics: ${config.effectifs}` : ''}
+kpi_valeur: "${kpi.valeur}"
+kpi_label: "${kpi.label || config.kpi_label}"
+kpi_tendance: ${kpi.tendance || 'stable'}
+${kpi.contexte ? `kpi_contexte: "${kpi.contexte}"` : ''}
+${mainOpinionSondage ? `opinion_pct: ${mainOpinionSondage.pct}
+opinion_question: "${mainOpinionSondage.question?.replace(/"/g, "'")}"
+opinion_source: "${mainOpinionSondage.annee > 0 ? (allOpinion[0]?.source || 'Sondage') : 'Sondage'}"
+opinion_annee: ${mainOpinionSondage.annee}` : ''}
+sections:
+ - diagnostic
+ - historique
+ - enjeux
+ - international
+ - opinion
+ - acteurs
+ - propositions
+ - scenarios
+ - sources
score_sources: ${allData.length}
+nb_propositions: ${propositionsResult?.propositions?.length || 0}
+tags: [${config.indicateurs_cibles.slice(0, 6).map(i => `"${i.replace(/[^a-zA-ZÀ-ÿ0-9 ]/g, '').trim().toLowerCase().replace(/ /g, '-')}"`).join(', ')}]
+sources_data: [${[...new Set([...config.sources_intl.slice(0, 4).map(s => s.split(' ')[0]), ...config.sources_fr.slice(0, 3).map(s => s.split(' ')[0])])].map(s => `"${s}"`).join(', ')}]
+derniere_maj: "2026-06"
---`;
const mdxContent = await agent(
- `Tu es un rédacteur web expert. Génère le contenu MDX complet pour la fiche thème IRPF.
+ `Tu es un rédacteur expert en politiques publiques. Génère le fichier MDX COMPLET de la fiche IRPF.
- FRONTMATTER (déjà prêt, ne pas modifier) :
+ FRONTMATTER (inclure tel quel en premier) :
${frontmatter}
- MATÉRIAU :
- Diagnostic : ${synthesis?.diagnostic || ''}
- Indicateurs : ${JSON.stringify(synthesis?.indicateurs_cles || [])}
- Enjeux : ${JSON.stringify(synthesis?.enjeux_structures || [])}
- Consensus international : ${synthesis?.consensus_international || ''}
- Propositions : ${JSON.stringify(propositions?.propositions || [])}
- Lecture politique : ${JSON.stringify(politique || {})}
- Sources : ${(synthesis?.sources_citees || []).join(', ')}
+ APRÈS LE FRONTMATTER, ajouter les imports :
+ import Structurel from '../../components/Structurel.astro';
+ import Politique from '../../components/Politique.astro';
+ import Conjoncturel from '../../components/Conjoncturel.astro';
+ import Kpi from '../../components/Kpi.astro';
+ import Sondage from '../../components/Sondage.astro';
+ import Timeline from '../../components/Timeline.astro';
- STRUCTURE DU FICHIER MDX :
+ MATÉRIAUX DISPONIBLES :
+ - Diagnostic : ${synthesis?.diagnostic?.slice(0, 3000) || '(non disponible)'}
+ - Indicateurs clés : ${JSON.stringify(synthesis?.indicateurs_cles || [], null, 2)}
+ - Enjeux structurels : ${JSON.stringify(synthesis?.enjeux_structurels || [], null, 2)}
+ - Enjeux politiques : ${JSON.stringify(synthesis?.enjeux_politiques || [], null, 2)}
+ - Enjeux conjoncturels : ${synthesis?.enjeux_conjoncturels || ''}
+ - Consensus international : ${synthesis?.consensus_international || ''}
+ - Propositions IRPF : ${JSON.stringify(propositionsResult?.propositions || [], null, 2)}
+ - Synthèse IRPF : ${propositionsResult?.synthese_irpf || ''}
+ - Positions partis : ${JSON.stringify(politique?.positions_partis || [], null, 2)}
+ - Fenêtres politiques : ${JSON.stringify(politique?.fenetres_politiques || [], null, 2)}
+ - Blocages : ${JSON.stringify(politique?.blocages || [], null, 2)}
+ - Acteurs clés : ${acteursData || ''}
+ - Sondages : ${JSON.stringify(allOpinion.flatMap(o => o?.sondages || []).slice(0, 8), null, 2)}
+ - Timeline items : ${JSON.stringify(timelineItems.slice(0, 15), null, 2)}
+ - Benchmarks pays : ${JSON.stringify(allBenchmarks.slice(0, 15), null, 2)}
+ - Sources citées : ${(synthesis?.sources_citees || []).join(', ')}
- ## Diagnostic
- [Le diagnostic complet sourcé — reprendre texte intégral du diagnostic]
+ STRUCTURE MDX OBLIGATOIRE (respecter exactement l'ordre et les IDs d'ancres) :
- ## Indicateurs clés
- [Tableau markdown des 8-12 indicateurs avec source et tendance]
+ ## Diagnostic {#diagnostic}
+ [Texte complet du diagnostic : 800-1000 mots, sourcé, comparatif. Chaque chiffre cité entre parenthèses avec la source.]
+ ### Indicateurs clés
+ [Composants
pour les 8-12 indicateurs les plus significatifs]
+ ### Tableau comparatif
+ [Tableau markdown France + 4-5 pays comparables, avec les indicateurs clés]
- ## Ce que disent les institutions internationales
- [Pour chaque institution clé : recommandation principale + statut de mise en oeuvre]
+ ## Historique {#historique}
+ [Intro 1-2 phrases]
+ [Composant
avec tous les items disponibles]
+ ### Les tournants décisifs
+ [Analyse des 2-3 moments clés qui expliquent la situation actuelle]
- ## Enjeux structurels
- [Les 5-7 enjeux avec leur niveau d'urgence, description et sources]
+ ## Enjeux {#enjeux}
+ [Intro : les trois couches de lecture]
+
+ ### Contraintes de fond
+ [Enjeux structurels : les invariants, les contraintes profondes. LISTE à puces avec sources. 400-600 mots]
+
+
+ ### Ce qui fait débat
+ [Tableau partis avec positions + arguments + textes récents. 300-400 mots]
+
+
+ ### Actualité 2025-2026
+ [Décisions récentes, textes en cours, polémiques, état du débat. 200-300 mots]
+
- ## Comparaisons internationales
- [Tableau pays-mesure-résultat + analyse]
+ ## International {#international}
+ ### Comparaison UE & OCDE
+ [Tableau : France + Allemagne + Suède + 2-3 autres pays + Moyenne UE — sur les 3-4 indicateurs principaux]
+ ### Ce que recommandent les institutions
+ [OCDE · Commission UE · FMI · Cour des comptes · France Stratégie — une recommandation principale chacun]
+ ### Bonnes pratiques — ce qui fonctionne ailleurs
+ [2-3 exemples concrets de pays avec résultats mesurés]
- ## Propositions IRPF 2027-2032
- [Les propositions complètes : titre, catégorie, description, mécanisme, pays référence, impact budgétaire]
+ ## Opinion {#opinion}
+ ### Ce qu'en pensent les Français
+ [Composants
pour les 3-5 sondages les plus significatifs]
+ ### Évolution et clivages
+ [Tableau si données dispo + analyse des fractures sociodémographiques]
- ## Lecture politique
- [Dynamiques françaises : gouvernement, partis, blocages, fenêtres d'opportunité]
+ ## Acteurs {#acteurs}
+ ### Institutions décisionnaires
+ [Tableau : institution + rôle + budget + responsable actuel]
+ ### Think tanks et experts
+ [Tableau : think tank + orientation + dernière publication sur le thème]
+ ### Corps intermédiaires
+ [Syndicats, fédérations, organisations professionnelles — leur poids sur ce sujet]
- ## Sources & références
- [Bibliographie complète avec URLs]
+ ## Propositions {#propositions}
+ > [Paragraphe de cadrage IRPF : philosophie et priorités]
- Retourne le fichier MDX COMPLET, prêt à sauvegarder.`,
+ [Pour chaque proposition : **Titre en gras** — catégorie en badge — description complète — pays référence — impact budgétaire]
+ ### Cartographie des positions partisanes
+ [Tableau : parti + position + coût estimé]
+
+ ## Scénarios 2027–2032 {#scenarios}
+ [3 scénarios : continuité (prob. XX%) · réforme graduelle (prob. XX%) · rupture (prob. XX%)]
+ [Pour chaque scénario : hypothèse + impact + conditions + risques]
+
+ ## Sources {#sources}
+ [Bibliographie complète : institutions internationales + françaises + académiques. URL quand dispo.]
+
+ RÈGLES DE STYLE :
+ - Chaque chiffre = source entre parenthèses italiques
+ - Tables Markdown pour toutes comparaisons
+ - Composants MDX utilisés exactement comme dans les imports
+ - Ton : OCDE × Sciences Po × Le Monde — rigoureux, lisible, non partisan
+ - Longueur totale : 4000-6000 mots (sans le frontmatter)
+
+ Retourne le fichier MDX COMPLET, frontmatter inclus, prêt à sauvegarder.`,
{
label: `mdx:${themeSlug}`,
phase: 'Production MDX',
@@ -541,19 +877,25 @@ const mdxContent = await agent(
}
);
-log(`Fiche ${themeLabel} complète — ${allData.length} sources, ${propositions?.propositions?.length || 0} propositions`);
+log(`Fiche ${themeLabel} produite — ${allData.length} sources · ${propositionsResult?.propositions?.length || 0} propositions · ${timelineItems.length} événements timeline`);
return {
- slug: themeSlug,
- label: themeLabel,
+ slug: themeSlug,
+ label: themeLabel,
+ frontmatter,
stats: {
- sources_collectees: allData.length,
- indicateurs: synthesis?.indicateurs_cles?.length || 0,
- enjeux: synthesis?.enjeux_structures?.length || 0,
- propositions: propositions?.propositions?.length || 0,
+ sources_internationales: intlData.filter(Boolean).length,
+ sources_nationales: frData.filter(Boolean).length,
+ sources_opinion: allOpinion.length,
+ indicateurs: synthesis?.indicateurs_cles?.length || 0,
+ enjeux_structurels: synthesis?.enjeux_structurels?.length || 0,
+ propositions: propositionsResult?.propositions?.length || 0,
+ timeline_events: timelineItems.length,
+ benchmarks: allBenchmarks.length,
},
+ kpi,
synthesis,
- propositions,
+ propositions: propositionsResult,
politique,
- mdx: `${frontmatter}\n\n${mdxContent}`,
+ mdx: mdxContent,
};