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

51 lines
1.9 KiB
Markdown

# 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