New GET /cases/export endpoint generates .xlsx with openpyxl using the same filters as the case list (year, fallgruppe, ICD status, search). Role-aware columns: admins see patient names, DAK staff does not. Frontend adds a Download button next to the filter bar with loading state. Refactors shared query logic into _build_case_query helper. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.9 KiB
Fallliste als Excel exportieren — Design
Ziel
Export-Button auf der Cases-Seite, der alle gefilterten Fälle als .xlsx herunterlädt. Nutzt aktive Filter (Jahr, Fallgruppe, ICD-Status, Suchbegriff).
Architektur
Backend-Endpoint GET /cases/export generiert XLSX on-demand mit openpyxl (bereits installiert). Gleiche Filter-Parameter wie GET /cases/, aber ohne Pagination. Rollenbasierte Spaltenauswahl + Masking für DAK-Mitarbeiter.
Frontend ruft den Endpoint als Blob ab und triggert Browser-Download. Bewährtes Pattern aus ReportsPage.
Backend
Endpoint: GET /cases/export
- Datei:
backend/app/api/cases.py - Query-Parameter:
jahr,fallgruppe,has_icd,search(optional) - Auth: Alle authentifizierten Nutzer
- Response:
StreamingResponsemitapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet - Dateiname:
Fallliste_YYYY-MM-DD.xlsx
Spalten
Admin: Fall-ID, Datum, Nachname, Vorname, KVNR, Fallgruppe, ICD, Gutachten-Typ, Therapieänderung, Unterlagen, Gutachten, Abgelehnt, Abgerechnet, Abbruch
DAK-Mitarbeiter: Fall-ID, Datum, KVNR, Fallgruppe, ICD, Gutachten-Typ, Therapieänderung, Unterlagen, Gutachten, Abgelehnt, Abgerechnet, Abbruch
Excel-Formatierung
- Header-Zeile: fett, hellgrauer Hintergrund
- Auto-Width für Spalten
- Ja/Nein für Boolean-Felder
- Datum als deutsches Format (DD.MM.YYYY)
Frontend
Button-Platzierung
Download-Icon-Button neben den bestehenden Filtern auf CasesPage. Sichtbar für alle Rollen.
Download-Flow
- Klick → Button zeigt Spinner
api.get('/cases/export', { params, responseType: 'blob' })- Blob →
URL.createObjectURL→<a download>→ Cleanup - Button kehrt zum Normalzustand zurück
Dateien
| Datei | Änderung |
|---|---|
backend/app/api/cases.py |
Neuer GET /cases/export Endpoint |
frontend/src/pages/CasesPage.tsx |
Download-Button + Blob-Download-Logik |