docs: workflows multiagents + cartographie sources institutionnelles

- workflows/build-theme.js : production complète d'une fiche thème
  (collecte intl + FR + deep research + synthèse Opus + propositions + politique + MDX)
- workflows/build-all-themes.js : orchestration 14 thèmes en parallèle
- docs/institutions-sources.md : cartographie exhaustive des sources mondiales pour la France
  (ONU, FMI, BM, OCDE, UE, Conseil Europe, G7/G20, think tanks, APIs)
- docs/workflow-guide.md : guide d'utilisation et coûts estimés

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marc Reverdin 2026-06-05 19:52:45 +02:00
parent 07ccb222ae
commit 60a1523fe0
4 changed files with 955 additions and 0 deletions

View file

@ -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 |

119
docs/workflow-guide.md Normal file
View file

@ -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.

View file

@ -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 })),
};

559
workflows/build-theme.js Normal file
View file

@ -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}`,
};