# 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:** `StreamingResponse` mit `application/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 1. Klick → Button zeigt Spinner 2. `api.get('/cases/export', { params, responseType: 'blob' })` 3. Blob → `URL.createObjectURL` → `` → Cleanup 4. 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 |