diff --git a/tools/finlab/dashboard/server.py b/tools/finlab/dashboard/server.py index 06706c8..955a366 100644 --- a/tools/finlab/dashboard/server.py +++ b/tools/finlab/dashboard/server.py @@ -8,12 +8,13 @@ Lancement : uvicorn dashboard.server:app --host 0.0.0.0 --port 8800 """ from __future__ import annotations +import datetime as dt import math from pathlib import Path import pandas as pd import yaml -from fastapi import FastAPI, Request +from fastapi import FastAPI, File, Request, UploadFile from fastapi.responses import FileResponse, JSONResponse from fastapi.staticfiles import StaticFiles @@ -167,6 +168,34 @@ def api_plan(ticker: str, capital: float = 1427.0): return _clean({"plan": p, "render": plan_mod.render(p)}) +# ── Import de relevés (image → analysée par la Console IA) ───────────────────── +IMPORTS_DIR = data.ROOT / "imports" +_IMG_EXT = {".png", ".jpg", ".jpeg", ".webp", ".gif"} + + +@app.post("/api/import") +async def api_import(file: UploadFile = File(...)): + """Enregistre une capture de relevé dans le workspace (imports/) ; la Console IA la scanne + ensuite pour mettre à jour portfolio.yaml (vision côté abonnement, pas de clé API ici).""" + ext = Path(file.filename or "").suffix.lower() + if ext not in _IMG_EXT: + return JSONResponse(status_code=400, content={"error": f"format image non supporté: {ext or '?'}"}) + IMPORTS_DIR.mkdir(parents=True, exist_ok=True) + ts = dt.datetime.now().strftime("%Y%m%d-%H%M%S") + name = f"releve-{ts}{ext}" + (IMPORTS_DIR / name).write_bytes(await file.read()) + return {"saved": name, "rel": f"imports/{name}"} + + +@app.get("/api/imports") +def api_imports(): + if not IMPORTS_DIR.exists(): + return {"imports": []} + files = sorted((f for f in IMPORTS_DIR.iterdir() if f.suffix.lower() in _IMG_EXT), + key=lambda f: f.stat().st_mtime, reverse=True) + return {"imports": [f.name for f in files]} + + # ── Statique ────────────────────────────────────────────────────────────────── @app.get("/") def index(): diff --git a/tools/finlab/dashboard/static/index.html b/tools/finlab/dashboard/static/index.html index 4d1342b..84d4ea6 100644 --- a/tools/finlab/dashboard/static/index.html +++ b/tools/finlab/dashboard/static/index.html @@ -101,7 +101,10 @@
-

Mes comptes

+

Mes comptes + +

+
Chargement…
@@ -190,6 +193,17 @@
+ + +