"""Erzeugt aus der lokalen Ablage eine HTML-Triage-Übersicht. python3 -m pipe.dashboard [ausgabe.html] Rein lokal, liest nur die meta.json-Dateien. Notfälle stehen oben. """ from __future__ import annotations import html import json import sys from pathlib import Path from . import config, kategorien RANG = {"notfall": 0, "hoch": 1, "normal": 2, "niedrig": 3} FARBE = {"notfall": "#E9322D", "hoch": "#E0A339", "normal": "#31CC7C", "niedrig": "#8A93A3"} KAT_LABEL = kategorien.KATEGORIE_LABEL def _anrufe() -> list[dict]: daten = [] if not config.ABLAGE_LOKAL.is_dir(): return daten for meta in config.ABLAGE_LOKAL.glob("*/*/meta.json"): try: daten.append(json.loads(meta.read_text(encoding="utf-8"))) except Exception: continue daten.sort(key=lambda d: (RANG.get(d["auswertung"]["dringlichkeit"], 9), d["empfangen"])) return daten def _karte(d: dict) -> str: e = d["auswertung"] farbe = FARBE.get(e["dringlichkeit"], "#888") wer = html.escape(e.get("anrufer_name") or "—") nummer = html.escape(d.get("anrufer_nummer") or e.get("rueckrufnummer") or "—") stich = " ".join(f"{html.escape(s)}" for s in (e.get("stichworte") or [])) return f"""
{html.escape(KAT_LABEL.get(e['kategorie'], e['kategorie']))} {html.escape(e['dringlichkeit'])} {html.escape(d['empfangen'].replace('T', ' '))}
{wer} · {nummer} {"· 📞 Rückruf" if e.get('rueckruf_gewuenscht') else ""}

{html.escape(e.get('anliegen_kurz') or '')}

{stich}
Transkript

{html.escape(d.get('transkript') or '')}

""" def baue(ausgabe: Path) -> Path: anrufe = _anrufe() zahl = {k: sum(1 for d in anrufe if d["auswertung"]["dringlichkeit"] == k) for k in RANG} zusammenfassung = " · ".join( f"{zahl[k]} {k}" for k in RANG if zahl[k] ) karten = "\n".join(_karte(d) for d in anrufe) doc = f""" Anruf-Übersicht · {html.escape(kategorien.PROFIL_NAME)}

Anruf-Übersicht · {html.escape(kategorien.PROFIL_NAME)}

{len(anrufe)} Anrufe · {zusammenfassung or '—'} · lokal erzeugt aus der Ablage

{karten}
""" ausgabe.write_text(doc, encoding="utf-8") return ausgabe def main() -> int: ziel = Path(sys.argv[1]) if len(sys.argv) > 1 else config.WURZEL / "dashboard.html" baue(ziel) print(f"Dashboard: {ziel}") return 0 if __name__ == "__main__": raise SystemExit(main())