dak.c2s/docs/plans/2026-02-26-report-viewer-design.md
CCS Admin dbb5afaeb9 feat: add inline report viewer with 5-tab sheet display
- Backend: GET /reports/{id}/data endpoint returns stored report JSON
- Frontend: ReportViewer component renders all 5 Excel sheets as tabs
  (KW gesamt, Fachgebiete, Gutachten, Therapieänderungen, ICD onko)
- ReportsPage: clickable rows with inline expansion to view reports
- Empty KW rows filtered, summary row at bottom, German labels
- Download button still available alongside inline view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 22:57:35 +00:00

1.9 KiB

Berichts-Webansicht (Inline-Expansion)

Kontext

Berichte werden aktuell als Excel-Dateien generiert und können nur heruntergeladen werden. Ziel: Berichte direkt auf der Webseite anzeigen, ohne Excel öffnen zu müssen.

Entscheidungen

  • Inline-Expansion: Klick auf eine Tabellenzeile klappt den Bericht darunter auf
  • 5 Tabs: Alle 5 Excel-Sheets als separate Tabs (KW gesamt, Fachgebiete, Gutachten, Therapieänderungen, ICD onko)
  • Backend-Endpoint: GET /reports/{id}/data liefert gespeichertes report_data-JSON
  • Leere KWs ausblenden: Nur Zeilen mit Daten anzeigen

Architektur

Backend

Neuer Endpoint in backend/app/api/reports.py:

GET /reports/{id}/data → WeeklyReport.report_data (JSON)

Authentifiziert (get_current_user), gibt das gespeicherte JSON zurück. Kein Neuberechnen.

Frontend

Datei Änderung
hooks/useReports.ts Neuer Hook useReportData(id)
pages/ReportsPage.tsx Zeile klickbar, Inline-Expansion mit expandiertem Report
components/ReportViewer.tsx (NEU) 5-Tab-Viewer-Komponente

Sheet-Darstellung

Tab Spalten
KW gesamt KW, Erstberatungen, Unterlagen, Ablehnungen, Keine RM, Gutachten
Fachgebiete KW, pro Fallgruppe: Anzahl, Gutachten, Keine RM
Gutachten KW, Gesamt + pro Fallgruppe: Gutachten, Alternative, Bestätigung
Therapieänderungen KW, Gutachten, TA Ja, TA Nein, Diagnosekorrektur, Unterversorgung, Übertherapie
ICD onko ICD-Code, Anzahl (sortiert nach Häufigkeit)

Jede Tabelle: Summenzeile am Ende, leere KWs ausgeblendet.

Datenfluss

  1. User klickt auf Tabellenzeile → expandedId State wird gesetzt
  2. useReportData(expandedId) fetcht GET /reports/{id}/data
  3. ReportViewer rendert die 5 Tabs mit den Tabellendaten
  4. Erneuter Klick auf die Zeile → expandedId = null → Expansion wird geschlossen