- 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>
559 lines
27 KiB
JavaScript
559 lines
27 KiB
JavaScript
/**
|
||
* 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}`,
|
||
};
|