From 0693d41d9155e4aee2f12c12ed466a9905a3278f Mon Sep 17 00:00:00 2001 From: OpenSquared Date: Sun, 28 Jun 2026 15:50:51 +0200 Subject: [PATCH] feat: causal lab --- frontend/src/pages/AIDesks.tsx | 124 ++++++++++++++++++---------- frontend/src/pages/CycleActions.tsx | 28 +------ 2 files changed, 84 insertions(+), 68 deletions(-) diff --git a/frontend/src/pages/AIDesks.tsx b/frontend/src/pages/AIDesks.tsx index 0cb0183..153a3bc 100644 --- a/frontend/src/pages/AIDesks.tsx +++ b/frontend/src/pages/AIDesks.tsx @@ -343,8 +343,31 @@ function NewsConfig({ } -const ECO_CURRENCIES = ['USD', 'EUR', 'GBP', 'JPY', 'AUD', 'CAD', 'NZD', 'CHF', 'CNY'] -const ECO_DEFAULT_CURRENCIES = ['USD', 'EUR', 'GBP', 'JPY'] +const ECO_COUNTRIES = [ + { code: 'USD', label: 'États-Unis' }, + { code: 'EUR', label: 'Zone Euro' }, + { code: 'GBP', label: 'Royaume-Uni' }, + { code: 'JPY', label: 'Japon' }, + { code: 'AUD', label: 'Australie' }, + { code: 'CAD', label: 'Canada' }, + { code: 'NZD', label: 'Nouvelle-Zélande' }, + { code: 'CHF', label: 'Suisse' }, + { code: 'CNY', label: 'Chine' }, +] +const ECO_DEFAULT_COUNTRIES = ['USD', 'EUR', 'GBP', 'JPY'] + +const ECO_EVENT_TYPES = [ + { id: 'inflation', label: 'Inflation (CPI/PCE/PPI)' }, + { id: 'emploi', label: 'Emploi (NFP/Claims/ADP)' }, + { id: 'pmi', label: 'PMI (Mfg/Services)' }, + { id: 'pib', label: 'PIB / Croissance' }, + { id: 'taux', label: 'Décisions de taux' }, + { id: 'commerce', label: 'Balance commerciale' }, + { id: 'ventes', label: 'Ventes au détail' }, + { id: 'logement', label: 'Immobilier / Logement' }, + { id: 'confiance', label: 'Confiance / Sentiment' }, +] +const ECO_DEFAULT_TYPES = ['inflation', 'emploi', 'pmi', 'pib', 'taux'] function EcoConfig({ config, @@ -354,62 +377,70 @@ function EcoConfig({ onChange: (c: Record) => void }) { const set = (k: string, v: any) => onChange({ ...config, [k]: v }) - const currencies: string[] = config.currencies ?? ECO_DEFAULT_CURRENCIES + const countries: string[] = config.countries ?? ECO_DEFAULT_COUNTRIES + const eventTypes: string[] = config.event_types ?? ECO_DEFAULT_TYPES - const toggleCurrency = (ccy: string) => { - const next = currencies.includes(ccy) - ? currencies.filter(c => c !== ccy) - : [...currencies, ccy] - set('currencies', next) + const toggleCountry = (code: string) => { + const next = countries.includes(code) + ? countries.filter(c => c !== code) + : [...countries, code] + set('countries', next) + } + + const toggleEventType = (id: string) => { + const next = eventTypes.includes(id) + ? eventTypes.filter(t => t !== id) + : [...eventTypes, id] + set('event_types', next) } return (
- {/* Row 1: z-score + days */} -
-
- - set('z_threshold', parseFloat(e.target.value))} - className="w-full bg-dark-900 border border-slate-700/40 rounded px-2 py-1.5 text-sm text-white" - /> -
-
- - set('days', parseInt(e.target.value))} - className="w-full bg-dark-900 border border-slate-700/40 rounded px-2 py-1.5 text-sm text-white" - /> -
-
- - {/* Row 2: currencies */} + {/* Pays / Zones */}
- +
- {ECO_CURRENCIES.map(ccy => ( + {ECO_COUNTRIES.map(c => ( ))}
- {/* Row 3: impact + lookback_releases */} -
+ {/* Types d'événements */} +
+ +
+ {ECO_EVENT_TYPES.map(t => ( + + ))} +
+
+ + {/* Impact + seuil surprise + releases contexte */} +
+
+ + set('z_threshold', parseFloat(e.target.value))} + className="w-full bg-dark-900 border border-slate-700/40 rounded px-2 py-1.5 text-sm text-white" + /> +
- {/* Row 4: create_market_event toggle */} + {/* create_market_event toggle */}
- {/* Instruments / Gauges */} + {/* Instruments / Gauges — not shown for eco (link is through causal graph) */} {d.type === 'sentiment' ? ( set('instruments', v)} /> - ) : ( + ) : d.type !== 'eco' && ( set('instruments', v)} diff --git a/frontend/src/pages/CycleActions.tsx b/frontend/src/pages/CycleActions.tsx index f35d4aa..d238882 100644 --- a/frontend/src/pages/CycleActions.tsx +++ b/frontend/src/pages/CycleActions.tsx @@ -36,7 +36,7 @@ interface ActionResult { const SOURCE_LABELS: Record = { news: 'News', - eco: 'Éco. FRED', + eco: 'Éco. Calendar', technical: 'Technique', reports: 'Reports', } @@ -236,7 +236,7 @@ function CheckEventsPanel() { {/* Fenêtre de scan */}
-
Fenêtre de scan (news + éco)
+
Fenêtre de scan
{SCAN_PRESETS.map(p => { const { date_from, date_to } = presetDates(p.hours) @@ -284,30 +284,6 @@ function CheckEventsPanel() {
- {/* Advanced */} -
- - - -
)}