feat: causal lab

This commit is contained in:
OpenSquared
2026-07-02 16:46:38 +02:00
parent 5126360ce9
commit 01709e5edf
4 changed files with 384 additions and 0 deletions

View File

@@ -673,6 +673,43 @@ def ff_purge_fxstreet() -> Dict[str, Any]:
conn.close()
@router.post("/guidance-sync")
def guidance_sync_endpoint() -> Dict[str, Any]:
"""
Déclenche manuellement la synchronisation des guidance events (MACRO_RATE_GUIDANCE).
Crée/met à jour un market_event de type guidance pour chaque decision de taux à venir
détectée dans ff_calendar. Appelé automatiquement après chaque calendar-sync.
"""
try:
from services.guidance_sync import sync_guidance
result = sync_guidance()
return {"status": "ok", **result}
except Exception as e:
import traceback
return {"status": "error", "error": str(e), "trace": traceback.format_exc()}
@router.get("/guidance-sync/status")
def guidance_sync_status() -> Dict[str, Any]:
"""Liste les guidance market_events actuellement en DB."""
from services.database import get_conn
conn = get_conn()
try:
rows = conn.execute("""
SELECT me.id, me.name, me.start_date, me.end_date,
me.expected_value, me.sub_type,
COUNT(cea.id) as n_analyses
FROM market_events me
LEFT JOIN causal_event_analyses cea ON cea.market_event_id = me.id
WHERE me.origin = 'guidance_sync'
GROUP BY me.id
ORDER BY me.end_date ASC
""").fetchall()
return {"count": len(rows), "events": [dict(r) for r in rows]}
finally:
conn.close()
@router.get("/ff-stats")
def ff_stats() -> Dict[str, Any]:
"""Quick inventory of ff_calendar table."""