mirror of
https://github.com/complexcaresolutions/dak.c2s.git
synced 2026-03-17 20:43:41 +00:00
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>
56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# 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` → `<a download>` → 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 |
|