diff --git a/docs/institutions-sources.md b/docs/institutions-sources.md new file mode 100644 index 0000000..df27b15 --- /dev/null +++ b/docs/institutions-sources.md @@ -0,0 +1,195 @@ +# Sources institutionnelles mondiales — IRPF + +> Ces institutions sont des **sources de données, rapports et recommandations sur la France**. +> Elles alimentent le contenu du site, elles ne sont pas le sujet. +> Toutes produisent des analyses, indicateurs ou recommandations directement exploitables pour les 14 thèmes IRPF. + +--- + +## Système ONU + +| Institution | Pertinence France | Type de production | URL données | +|------------|------------------|-------------------|-------------| +| PNUD | IDH France, rapport développement humain | Statistiques annuelles | hdr.undp.org | +| UNICEF | Pauvreté enfants France, éducation | Rapports pays | data.unicef.org | +| OMS | Santé France, comparaisons mondiales | WHO Global Health Observatory | who.int/data | +| OIT | Emploi, droit du travail, retraites France | ILOSTAT, rapports supervisory | ilostat.ilo.org | +| UNESCO | Éducation France, PISA, culture | UIS Statistics | uis.unesco.org | +| FAO | Agriculture France, sécurité alimentaire | FAOSTAT | fao.org/faostat | +| ONUDC | Justice, criminalité, drogues France | Rapports annuels | unodc.org/unodc/data | +| ONU Femmes | Égalité genre France | Indices, rapports | data.unwomen.org | +| UNEP | Environnement France, émissions | Stats environnementales | unep.org | +| CNUCED | Commerce France, investissements | UNCTADstat | unctadstat.unctad.org | +| HCR | Asile, réfugiés France | Stats réfugiés | unhcr.org/refugee-statistics | + +## FMI & Banque mondiale + +| Institution | Document clé pour la France | Fréquence | URL | +|------------|---------------------------|-----------|-----| +| **FMI** | Article IV France (diagnostic macro annuel) | Annuel | imf.org/fr/Publications | +| FMI | World Economic Outlook (données France) | Biannuel | imf.org/external/datamapper | +| FMI | Global Financial Stability Report | Biannuel | imf.org | +| **Banque mondiale** | World Development Indicators France | Annuel | data.worldbank.org | +| BM | Doing Business / Business Ready | Annuel | businessreadiness.worldbank.org | +| BM | Worldwide Governance Indicators | Annuel | info.worldbank.org/governance | +| **BRI** | Stats bancaires France | Trimestriel | bis.org/statistics | + +## OCDE (source principale) + +| Publication | Thèmes couverts | URL | +|------------|----------------|-----| +| **Études économiques France** | Macro, réformes structurelles | oecd.org/economy/france | +| **PISA** | Éducation 15 ans, comparatif | pisadataexplorer.oecd.org | +| TALIS | Enseignants, conditions travail | oecd.org/talis | +| Education at a Glance | Système éducatif complet | oecd.org/education/eag | +| **Health at a Glance** | Santé, dépenses, résultats | oecd.org/health | +| **Going for Growth** | Réformes prioritaires | oecd.org/economy/growth | +| Better Life Index | Bien-être, qualité de vie | oecdbetterlifeindex.org | +| **Revenue Statistics** | Fiscalité France | oecd.org/tax | +| Society at a Glance | Social, inégalités | oecd.org/social | +| Employment Outlook | Emploi, marché travail | oecd.org/employment | +| **OECD.Stat** | Toutes données OCDE France | stats.oecd.org | +| IEA (sous OCDE) | Énergie France, émissions CO2 | iea.org/countries/france | + +## Institutions européennes + +| Institution | Production pertinente | Fréquence | +|------------|----------------------|-----------| +| **Commission européenne** | Country Report France (Semestre européen) | Annuel | +| Commission | Recommandations spécifiques pays France | Annuel | +| Commission | Procédure de déficit excessif France | En cours | +| **Eurostat** | Toutes statistiques UE comparatives France | Continu | +| **BCE** | Politique monétaire, inflation zone euro | Continu | +| **BEI** | Investissements France, prêts sectoriels | Annuel | +| Cour des comptes européenne | Audits sectoriels (dont France) | Variable | +| Parlement européen | Rapports sectoriels, résolutions | Variable | +| **ECOFIN** | Positions budgétaires, recommandations | Variable | + +## Conseil de l'Europe + +| Institution | Document France | Importance | +|------------|----------------|-----------| +| **CEDH** | Arrêts contre la France | ★★★ — engagements juridiques | +| **GRECO** | Rapport anti-corruption France | ★★★ — niveau 4 | +| ECRI | Rapport racisme/discrimination France | ★★ | +| Commission de Venise | Avis sur lois françaises | ★★ | +| MONEYVAL | Évaluation LCB-FT France | ★★ | +| GRETA | Lutte traite êtres humains France | ★ | + +## G7 / G20 / Groupes internationaux + +| Instance | Pertinence | Type | +|---------|-----------|------| +| **G7** | France membre — engagements, déclarations | Engagements politiques | +| **G20** | Positions françaises, working groups | Engagements politiques | +| FSB | Stabilité financière France | Recommandations | +| **GAFI/FATF** | Évaluation mutuelle France LCB-FT | Évaluation contraignante | +| OCDE/G20 Pilier 2 | Impôt minimum mondial (France) | Normes fiscales | +| Club de Paris | Créancier France, dettes souveraines | Positions | + +## Sécurité & Défense + +| Institution | Production | URL | +|------------|-----------|-----| +| **OTAN** | Dépenses défense France (2% PIB) | nato.int/cps/statistics | +| **SIPRI** | Military Expenditure Database France | sipri.org/databases/milex | +| IISS | Military Balance France | iiss.org | +| OSCE | Conformité France | osce.org | + +## Climat & Énergie + +| Institution | Document France | URL | +|------------|----------------|-----| +| **CCNUCC/UNFCCC** | NDC France, bilan carbone | unfccc.int | +| **GIEC/IPCC** | AR6 impacts France | ipcc.ch | +| **AIE/IEA** | France Energy Policy Review | iea.org | +| IRENA | Énergies renouvelables France | irena.org | +| Copernicus (UE) | Données climatiques France | climate.copernicus.eu | +| **Cour des comptes** | Rapport politique climatique France | ccomptes.fr | + +## Think tanks — Production sur la France + +### Internationaux +| Think tank | Spécialité France | URL | +|-----------|------------------|-----| +| **Bruegel** | Économie UE, zone euro, France | bruegel.org | +| CEPS | Politiques européennes | ceps.eu | +| **ECFR** | Politique étrangère France | ecfr.eu | +| Chatham House | France géopolitique, diplomatie | chathamhouse.org | +| IISS | Défense France | iiss.org | +| Brookings | France économie, gouvernance | brookings.edu | +| Peterson Institute | Commerce France, macro | piie.com | +| Jacques Delors Institut | Europe, France | institutdelors.eu | +| Notre Europe | Intégration européenne | notre-europe.eu | + +### Français (source primaire) +| Think tank | Spécialité | URL | +|-----------|-----------|-----| +| **Institut Montaigne** | Économie, éducation, santé, défense | institutmontaigne.org | +| **Terra Nova** | Social, environnement, démocratie | tnova.fr | +| **iFRAP** | Dépenses publiques, fonction publique | ifrap.org | +| **Fondapol** | Société, numérique, valeurs | fondapol.org | +| **Jean Jaurès** | Social, démocratie, travail | jean-jaures.org | +| **IFRI** | Relations internationales, défense | ifri.org | +| **IRIS** | Géopolitique, défense | iris-france.org | +| **FRS** | Stratégie, défense, nucléaire | frstrategie.org | +| **CAE** | Économie (Conseil d'Analyse Économique) | cae-eco.fr | +| **France Stratégie** | Prospective, politiques publiques | strategie.gouv.fr | + +## Bases de données statistiques — accès direct + +### API gratuites +``` +INSEE API : api.insee.fr (SDMX) +Eurostat API : ec.europa.eu/eurostat/api/dissemination +OCDE.Stat : stats.oecd.org (SDMX) +World Bank API : api.worldbank.org/v2 +FMI DataMapper : imf.org/external/datamapper/api +BRI SDMX : stats.bis.org +ILOSTAT : ilostat.ilo.org/resources/ilostat-api +WHO GHO API : ghoapi.azureedge.net +FAOSTAT API : fenix.fao.org/faostat/api +data.gouv.fr : www.data.gouv.fr/api + +Banque de France : webstat.banque-france.fr (SDMX) +DREES : data.drees.sante.gouv.fr +DARES : dares.travail.gouv.fr/donnees +SDES : stats.developpement-durable.gouv.fr +Agreste (SSP) : agreste.agriculture.gouv.fr +DEPP : data.education.gouv.fr +ARCEP : data.arcep.fr +HCFP : hcfp.fr (PDF) +Cour des comptes : ccomptes.fr (PDF + données) +``` + +### Bases thématiques +``` +V-Dem : v-dem.net (démocratie) +Freedom House : freedomhouse.org/countries (libertés) +Transparency Intl : transparency.org/cpi (corruption) +SIPRI MILEX : sipri.org/databases/milex (défense) +UNDP HDI : hdr.undp.org/data-center (développement) +EIU : eiu.com (payant mais références) +WEF GCI : weforum.org/reports (compétitivité) +``` + +--- + +## Mapping thèmes → institutions prioritaires + +| Thème IRPF | Institutions clés | +|-----------|------------------| +| Économie & Finances | FMI Art.IV, OCDE Études Éco, Commission UE Semestre, HCFP, Cour des comptes, CAE | +| Santé | OCDE Health at a Glance, OMS GHO, DREES, Haut Conseil Santé Publique | +| Éducation | OCDE PISA/TALIS/EAG, UNESCO UIS, DEPP, Cour des comptes | +| Environnement | GIEC, CCNUCC NDC, AIE, ADEME, SDES, Commission UE | +| Défense | OTAN, SIPRI, IISS, FRS, IRIS, LPM | +| Justice | CEDH (arrêts), GRECO, Commission UE État de droit, Min. Justice stats | +| Affaires étrangères | IFRI, ECFR, Chatham House, OCDE DAC (aide), MAE | +| Travail & Emploi | OIT, OCDE Employment Outlook, DARES, COR (retraites) | +| Logement | OCDE Housing, SDES, Banque des Territoires, UN-Habitat | +| Agriculture | FAO, Eurostat Agri, Agreste, OCDE Agricultural Outlook | +| Numérique | OCDE Digital, Eurostat DESI, ARCEP, DGE | +| Cohésion sociale | PNUD HDI, OCDE Society at a Glance, ONPES, INSEE ERF | +| Démocratie | V-Dem, Freedom House, GRECO, CEVIPOF, Baromètre confiance | +| Europe | Commission UE, Bruegel, ECFR, Jacques Delors, BCE | diff --git a/docs/workflow-guide.md b/docs/workflow-guide.md new file mode 100644 index 0000000..6211dd9 --- /dev/null +++ b/docs/workflow-guide.md @@ -0,0 +1,119 @@ +# Guide — Workflows de production IRPF + +## Principe + +Les workflows collectent automatiquement les sources internationales et françaises, +synthétisent avec Claude Opus, et produisent les fichiers MDX prêts à déployer. + +--- + +## Lancer la production d'UN thème (test/pilote) + +Dans Claude Code, utiliser le Workflow tool : + +``` +Workflow({ + scriptPath: '/Users/base/Code/30-projects/IRPF/workflows/build-theme.js', + args: { slug: 'sante', label: 'Santé & Système de soins' } +}) +``` + +**Slugs disponibles :** +- `economie-finances` +- `sante` +- `education` +- `environnement` +- `defense` +- `justice` +- `affaires-etrangeres` +- `travail-emploi` +- `logement` +- `agriculture` +- `numerique` +- `cohesion-sociale` +- `democratie` +- `europe` + +**Durée estimée par thème :** 8-15 min +**Coût estimé par thème :** 60-100k tokens + +--- + +## Lancer la production complète (14 thèmes) + +``` +Workflow({ + scriptPath: '/Users/base/Code/30-projects/IRPF/workflows/build-all-themes.js' +}) +``` + +**Durée estimée :** 45-90 min (parallèle) +**Coût estimé :** 800k-1,5M tokens + +### Lancer un sous-ensemble + +``` +Workflow({ + scriptPath: '/Users/base/Code/30-projects/IRPF/workflows/build-all-themes.js', + args: { themes: ['sante', 'education', 'economie-finances'] } +}) +``` + +--- + +## Ce que produit le workflow par thème + +1. **Collecte internationale** — ~10 sources (FMI, OCDE, UE, ONU, think tanks intl) +2. **Collecte française** — ~8 sources (INSEE, Cour des comptes, think tanks FR) +3. **Deep research** — 3-4 angles spécifiques approfondis +4. **Synthèse Opus** — diagnostic 900-1200 mots + 10 indicateurs + 6 enjeux +5. **Propositions Opus** — 6-8 mesures détaillées avec mécanisme + budget + pays référence +6. **Lecture politique** — dynamiques 2025-2027, partis, blocages, fenêtres +7. **Fichier MDX** — prêt pour `src/content/themes/[slug].mdx` + +--- + +## Après le workflow : intégration dans le site + +Le workflow retourne les fichiers MDX dans `result.mdx_files`. +Il faut ensuite : + +1. Sauvegarder les fichiers MDX dans `src/content/themes/` +2. Commiter et pusher sur Forgejo +3. Déclencher le rebuild : `curl -X POST https://france.reverdin.eu/_rebuild?token=TOKEN` + +### Script de déploiement post-workflow + +```bash +# Depuis ~/Code/30-projects/IRPF/ +git add src/content/themes/ +git commit -m "content: mise à jour fiches thèmes via workflow IRPF" +git push origin main +curl -X POST "https://france.reverdin.eu/_rebuild?token=f76831324704eab2be6e4ef26daf2099539741f1648ec844" +``` + +--- + +## Sources prioritaires par thème + +Voir `docs/institutions-sources.md` pour la liste complète. + +### Top 5 sources transversales (toujours pertinentes) +1. **OCDE** — études économiques + comparaisons 38 pays (stats.oecd.org) +2. **FMI Article IV France** — diagnostic macro annuel (imf.org) +3. **Commission européenne Country Report** — Semestre européen (ec.europa.eu) +4. **Cour des comptes** — audits sectoriels français (ccomptes.fr) +5. **INSEE** — toutes données socio-économiques françaises (api.insee.fr) + +--- + +## Coûts et budgets tokens + +| Action | Tokens estimés | Durée | +|--------|---------------|-------| +| 1 thème pilote | 60-100k | 8-15 min | +| 3 thèmes test | 200-300k | 15-25 min | +| 14 thèmes complet | 800k-1,5M | 45-90 min | + +Utiliser `/model` pour vérifier le modèle actif avant de lancer. +Recommandé : lancer d'abord 1 thème pilote, valider la qualité, puis lancer le reste. diff --git a/workflows/build-all-themes.js b/workflows/build-all-themes.js new file mode 100644 index 0000000..1cd07fd --- /dev/null +++ b/workflows/build-all-themes.js @@ -0,0 +1,82 @@ +/** + * IRPF — Workflow de production complète des 14 thèmes + * + * Lance build-theme.js en parallèle pour tous les thèmes. + * Résultat : 14 fichiers MDX prêts + résumé global. + * + * Usage : Workflow({ scriptPath: 'workflows/build-all-themes.js' }) + * Durée estimée : 45-90 min (parallèle) + * Coût estimé : 800k-1,5M tokens (Haiku collecte, Sonnet analyse, Opus synthèse/propositions) + */ + +export const meta = { + name: 'irpf-build-all', + description: 'Production complète IRPF : 14 thèmes × (collecte intl + FR + deep research + synthèse Opus + propositions + politique + MDX)', + phases: [ + { title: 'Collecte', detail: 'Sources internationales + françaises pour les 14 thèmes en parallèle' }, + { title: 'Synthèse', detail: 'Opus par thème — diagnostic + indicateurs + enjeux' }, + { title: 'Propositions', detail: 'Programme 2027-2032 par thème' }, + { title: 'Lecture politique', detail: 'Dynamiques françaises par thème' }, + { title: 'MDX', detail: '14 fichiers prêts pour le site' }, + { title: 'Commit', detail: 'Push vers Forgejo + rebuild VPS' }, + ], +}; + +const THEMES = [ + { slug: 'economie-finances', label: 'Économie & Finances publiques' }, + { slug: 'sante', label: 'Santé & Système de soins' }, + { slug: 'education', label: 'Éducation & Formation' }, + { slug: 'environnement', label: 'Environnement & Transitions' }, + { slug: 'defense', label: 'Défense & Sécurité nationale' }, + { slug: 'justice', label: 'Justice & État de droit' }, + { slug: 'affaires-etrangeres', label: 'Affaires étrangères & Diplomatie' }, + { slug: 'travail-emploi', label: 'Travail, Emploi & Retraites' }, + { slug: 'logement', label: 'Logement & Urbanisme' }, + { slug: 'agriculture', label: 'Agriculture & Alimentation' }, + { slug: 'numerique', label: 'Numérique & Innovation' }, + { slug: 'cohesion-sociale', label: 'Cohésion sociale & Inégalités' }, + { slug: 'democratie', label: 'Démocratie & Institutions' }, + { slug: 'europe', label: 'Europe & Géopolitique' }, +]; + +// Sélection partielle possible via args +const themesToBuild = args?.themes + ? THEMES.filter(t => args.themes.includes(t.slug)) + : THEMES; + +log(`Lancement production de ${themesToBuild.length} thèmes en parallèle...`); + +// Lancer build-theme pour chaque thème (workflow enfant) +const results = await parallel( + themesToBuild.map(theme => () => + workflow('irpf-build-theme', { slug: theme.slug, label: theme.label }) + .then(r => { + log(`✓ ${theme.label} — ${r?.stats?.propositions || 0} propositions, ${r?.stats?.sources_collectees || 0} sources`); + return r; + }) + .catch(err => { + log(`✗ ${theme.label} — erreur: ${err.message}`); + return null; + }) + ) +); + +const successful = results.filter(Boolean); +log(`${successful.length}/${themesToBuild.length} thèmes produits avec succès`); + +// Résumé global +return { + total_themes: themesToBuild.length, + success: successful.length, + echecs: themesToBuild.length - successful.length, + themes: successful.map(r => ({ + slug: r.slug, + label: r.label, + sources: r.stats?.sources_collectees, + indicateurs: r.stats?.indicateurs, + propositions: r.stats?.propositions, + })), + total_propositions: successful.reduce((s, r) => s + (r.stats?.propositions || 0), 0), + total_sources: successful.reduce((s, r) => s + (r.stats?.sources_collectees || 0), 0), + mdx_files: successful.map(r => ({ slug: r.slug, content: r.mdx })), +}; diff --git a/workflows/build-theme.js b/workflows/build-theme.js new file mode 100644 index 0000000..4abd125 --- /dev/null +++ b/workflows/build-theme.js @@ -0,0 +1,559 @@ +/** + * IRPF — Workflow de production d'une fiche thème complète + * + * Usage : lancer via le Workflow tool avec args = { slug, label } + * Exemple : args = { slug: "sante", label: "Santé & Système de soins" } + * + * 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/ + */ + +export const meta = { + name: 'irpf-build-theme', + description: 'Produit une fiche thème IRPF complète : collecte internationale + nationale + synthèse + propositions + MDX', + 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/' }, + ], +}; + +// ─── CONFIGURATION PAR THÈME ───────────────────────────────────────────────── + +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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, + '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'], + }, +}; + +// ─── SCHÉMAS ───────────────────────────────────────────────────────────────── + +const COLLECT_SCHEMA = { + type: 'object', + properties: { + 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' }, + }, + required: ['indicateur', 'valeur', 'annee'], + }, + }, + recommandations_france: { type: 'array', items: { type: 'string' } }, + benchmarks: { + type: 'array', + items: { + type: 'object', + properties: { + pays: { type: 'string' }, + mesure: { type: 'string' }, + resultat_mesure: { type: 'string' }, + }, + required: ['pays', 'mesure'], + }, + }, + url_principale: { type: 'string' }, + date_publication: { type: 'string' }, + }, + required: ['source', 'type', 'donnees'], +}; + +// ─── WORKFLOW ───────────────────────────────────────────────────────────────── + +const themeSlug = args?.slug || 'economie-finances'; +const themeLabel = args?.label || 'Économie & Finances publiques'; +const config = THEME_CONFIG[themeSlug] || THEME_CONFIG['economie-finances']; + +log(`Démarrage production fiche : ${themeLabel}`); + +// 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. + + SOURCE : ${source} + THÈME : ${themeLabel} + INDICATEURS RECHERCHÉS : ${config.indicateurs_cibles.join(', ')} + ANGLES SPÉCIFIQUES : ${config.angles_specifiques.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 + + Sois précis et sourcé. Uniquement des faits vérifiables.`, + { + label: `intl:${source.substring(0, 30)}`, + phase: 'Collecte internationale', + schema: { ...COLLECT_SCHEMA, properties: { ...COLLECT_SCHEMA.properties, source: { type: 'string', default: source } } }, + model: 'sonnet', + } + ).then(r => r ? { ...r, source } : null) + ) +); + +// 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. + + SOURCE FRANÇAISE : ${source} + THÈME : ${themeLabel} + 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)`, + { + label: `fr:${source.substring(0, 30)}`, + phase: 'Collecte nationale', + schema: { ...COLLECT_SCHEMA, properties: { ...COLLECT_SCHEMA.properties, source: { type: 'string', default: source } } }, + model: 'sonnet', + } + ).then(r => r ? { ...r, source } : null) + ) +); + +const allData = [...intlData, ...frData].filter(Boolean); +log(`${allData.length} sources collectées`); + +// PHASE 3 : Deep research sur les angles spécifiques manquants +phase('Deep research ciblé'); + +const deepResearch = await parallel( + config.angles_specifiques.map(angle => () => + agent( + `Deep research expert sur les politiques publiques françaises. + + ANGLE SPÉCIFIQUE À CREUSER : ${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.`, + { + label: `deep:${angle.substring(0, 40)}`, + phase: 'Deep research ciblé', + 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 allBenchmarks = allData.flatMap(d => d.benchmarks || []); + +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. + + 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 + - ${allBenchmarks.length} benchmarks de pays comparables + - ${deepResearch.filter(Boolean).length} deep research sur des angles spécifiques + + STATISTIQUES DISPONIBLES : + ${JSON.stringify(allStats.slice(0, 60), null, 2)} + + RECOMMANDATIONS INSTITUTIONNELLES : + ${allReco.slice(0, 40).join('\n')} + + BENCHMARKS INTERNATIONAUX : + ${JSON.stringify(allBenchmarks.slice(0, 25), null, 2)} + + DEEP RESEARCH SPÉCIFIQUES : + ${deepResearch.filter(Boolean).slice(0, 4).join('\n\n---\n\n')} + + PRODUCTION ATTENDUE : + + 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. + + 2. INDICATEURS CLÉS (8-12 indicateurs) + Sélectionne 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. + + 4. CONSENSUS INTERNATIONAL + Ce sur quoi TOUTES les institutions convergent concernant la France. + + 5. DIVERGENCES + Points de désaccord entre institutions ou approches contradictoires.`, + { + label: `synth:${themeSlug}`, + phase: 'Synthèse Opus', + schema: { + type: 'object', + properties: { + 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'] }, + comparaison_ocde: { type: 'string' }, + }, + required: ['label', 'valeur', 'source', 'tendance'], + }, + }, + enjeux_structures: { + type: 'array', + items: { + type: 'object', + properties: { + titre: { type: 'string' }, + description: { type: 'string' }, + urgence: { type: 'string', enum: ['immediate', 'court-terme', 'moyen-terme', 'long-terme'] }, + sources: { type: 'array', items: { type: 'string' } }, + }, + required: ['titre', 'description', 'urgence'], + }, + }, + consensus_international: { type: 'string' }, + divergences: { type: 'string' }, + sources_citees: { type: 'array', items: { type: 'string' } }, + }, + required: ['diagnostic', 'indicateurs_cles', 'enjeux_structures', 'consensus_international'], + }, + model: 'opus', + } +); + +// PHASE 5 : Propositions +phase('Propositions'); + +const propositions = await agent( + `Tu es un conseiller politique senior, expert des politiques publiques françaises et du droit comparé international. + + THÈME : ${themeLabel} + + DIAGNOSTIC ÉTABLI : + ${synthesis?.diagnostic || ''} + + ENJEUX IDENTIFIÉS : + ${JSON.stringify(synthesis?.enjeux_structures || [])} + + RECOMMANDATIONS DES INSTITUTIONS INTERNATIONALES : + ${allReco.slice(0, 30).join('\n')} + + BENCHMARKS PAYS : + ${JSON.stringify(allBenchmarks.slice(0, 20), null, 2)} + + GÉNÈRE un programme d'action pour la France 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 + + 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 + + Sois concret, chiffré, actionnable. Pas de vague "il faudrait".`, + { + label: `prop:${themeSlug}`, + phase: 'Propositions', + schema: { + type: 'object', + properties: { + propositions: { + type: 'array', + items: { + type: 'object', + properties: { + 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'] }, + }, + required: ['titre', 'categorie', 'description', 'fondement_international', 'niveau_preuve'], + }, + }, + }, + required: ['propositions'], + }, + model: 'opus', + } +); + +// PHASE 6 : 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. + + THÈME : ${themeLabel} + PROPOSITIONS IRPF : ${JSON.stringify(propositions?.propositions?.slice(0, 3) || [])} + + 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`, + { + label: `pol:${themeSlug}`, + phase: 'Lecture politique', + schema: { + 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' } }, + sequence_optimale: { type: 'string' }, + }, + required: ['position_gouvernement', 'positions_partis', 'fenetres_politiques', 'blocages'], + }, + model: 'sonnet', + } +); + +// PHASE 7 : Production MDX +phase('Production MDX'); + +const frontmatter = `--- +title: "${themeLabel}" +slug: "${themeSlug}" +description: "Diagnostic complet, données internationales et propositions IRPF sur le thème ${themeLabel}." +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} +score_sources: ${allData.length} +---`; + +const mdxContent = await agent( + `Tu es un rédacteur web expert. Génère le contenu MDX complet pour la fiche thème IRPF. + + FRONTMATTER (déjà prêt, ne pas modifier) : + ${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(', ')} + + STRUCTURE DU FICHIER MDX : + + ## Diagnostic + [Le diagnostic complet sourcé — reprendre texte intégral du diagnostic] + + ## Indicateurs clés + [Tableau markdown des 8-12 indicateurs avec source et tendance] + + ## Ce que disent les institutions internationales + [Pour chaque institution clé : recommandation principale + statut de mise en oeuvre] + + ## Enjeux structurels + [Les 5-7 enjeux avec leur niveau d'urgence, description et sources] + + ## Comparaisons internationales + [Tableau pays-mesure-résultat + analyse] + + ## Propositions IRPF 2027-2032 + [Les propositions complètes : titre, catégorie, description, mécanisme, pays référence, impact budgétaire] + + ## Lecture politique + [Dynamiques françaises : gouvernement, partis, blocages, fenêtres d'opportunité] + + ## Sources & références + [Bibliographie complète avec URLs] + + Retourne le fichier MDX COMPLET, prêt à sauvegarder.`, + { + label: `mdx:${themeSlug}`, + phase: 'Production MDX', + model: 'sonnet', + } +); + +log(`Fiche ${themeLabel} complète — ${allData.length} sources, ${propositions?.propositions?.length || 0} propositions`); + +return { + slug: themeSlug, + label: themeLabel, + stats: { + sources_collectees: allData.length, + indicateurs: synthesis?.indicateurs_cles?.length || 0, + enjeux: synthesis?.enjeux_structures?.length || 0, + propositions: propositions?.propositions?.length || 0, + }, + synthesis, + propositions, + politique, + mdx: `${frontmatter}\n\n${mdxContent}`, +};