Hausheld
Workflow-Plattform für die mobile Pflege in NRW — Planung, GPS-verifizierter Check-in/out, digitale Signaturen, Entlastungsbetrag-Tracking. Mit Fokus auf Datenintegrität und EU/DSGVO.


Herausforderung
Ein Pflegedienst mit 200 Mitarbeitern in NRW arbeitete mit manuellen Papierplänen, Nachweisen auf Papier und strengen regulatorischen Anforderungen (DSGVO, SGB XI) für Stammdaten und Abrechnung.
Vorgehen
Ein verteiltes Ökosystem: ein FastAPI-Backend (PostgreSQL + PostGIS), eine Next.js-PWA für Mitarbeiter im Einsatz (Plan, GPS-Check-in/out, Kundensignatur) und ein Vite+React-Admin-Dashboard mit Navigation nur über Sidebar: Kalender, Mitarbeiter, Klienten, Karten-Seite (Heatmap + Mitarbeiter-Pins, Mapbox + Deck.gl), Recharts-Analytics, Budget-Warnungen, SGB-XI-CSV-Export, Audit-Log. PostGIS liefert distanzbasierte Vertretungsvorschläge; ein strikter Schicht-Zustandsautomat und ein nur anhängendes Audit-Log unterstützen die Compliance.
- Backend: Single Source of Truth. FastAPI, SQLAlchemy 2 (async), PostgreSQL + PostGIS, Alembic. Erzwingt RBAC, verschlüsselt Gesundheitsdaten, schreibt ins Audit-Log; Geo-Heatmap- und Dashboard-Stats-APIs.
- Mobile: Next.js-PWA (deutsche UI). Plan, Check-in/out, Signaturfeld, Klientenliste für zugewiesene Schichten.
- Admin: Vite + React. Dashboard (KPIs + Recharts-Analytics), Kalender (FullCalendar), Mitarbeiter & Krankmeldungen, Klienten & Budget-Warnungen, Karte (Heatmap + Mitarbeiter-Pins, Mapbox + Deck.gl), Abrechnungsexport, Audit-Log, Vertretungszuweisung. Navigation nur über Sidebar.
Datenfluss ist unidirektional: Frontends rufen nur die API auf; kein direkter DB-Zugriff vom Client.
Ergebnis
Papierbasierte Planung wurde durch einen Mobile-first Workflow ersetzt: GPS-verifizierter Check-in/out, digitale Signaturen, Echtzeit-Koordination und audit-sichere Leistungsnachweise. Admins erhalten Überblick über Dashboard, Karten und Warnungen — weniger Bürokratie, mehr Zeit für Pflege.
Technische Details
Funktionen
- Mobile PWA: Mitarbeiter sehen ihren Plan, Check-in/out mit GPS, Kundensignatur (Leistungsnachweis).
- Admin dashboard: Kalender, Mitarbeiter, Klienten, Karte (Heatmap + Mitarbeiter-Pins), Abrechnung, Audit-Log — alles über Sidebar; Dashboard mit KPIs und Recharts-Analytics.
- Geo map: Karten-Seite: Schichtdichte-Heatmap und Mitarbeiter-Standorte (Mapbox + Deck.gl); Daten aus Demo-Seed.
- Substitution engine: Bis zu 3 Vertreter nach Entfernung (PostGIS) und wöchentlicher Kapazität.
- Budget & billing: Monatsbudget pro Klient, 15%-Warnschwelle, CSV-Export für Kostenträger (SGB XI).
- Audit trail: Nur anhängendes Log jedes Zugriffs auf Klienten- (bzw. Gesundheits-)Daten; lesendes API.
Tech-Stack
| Path | Stack |
|---|---|
| /backend | FastAPI, PostgreSQL, PostGIS, SQLAlchemy 2, Alembic, Pydantic — API, Auth, Geo-Heatmap, Dashboard-Stats, Vertretungen, Budget, Audit, SGB-XI-Export |
| /frontend | Next.js, Tailwind, PWA — Mobile Mitarbeiter-App |
| /admin | Vite, React, Tailwind, FullCalendar, Recharts, Mapbox, Deck.gl — Desktop-Admin; Premium-Analytics und Karte |
Geodaten & Vertretung
PostgreSQL/PostGIS liefert distanzbasierte Vertretungsvorschläge, wenn eine Schicht unbesetzt ist (z. B. Krankmeldung). Die Admin-Karte nutzt die Geo-API (v1) für Heatmap und Mitarbeiter-Pins.
- Worker- und Client-Modelle speichern einen PostGIS-Punkt (WGS84): current_location und address_location.
- Endpoint: GET /shifts/{id}/suggest-substitutes (nur Admin). Sortierung nach ST_Distance (Klient ↔ Mitarbeiter), Ausschluss überlappender Schichten und über Kapazität.
- Ergebnis: Bis zu 3 Mitarbeiter mit Entfernung (m) und verbleibender Kapazität; Admin weist mit einem Klick zu.
- GET /api/v1/geo/heatmap — GeoJSON FeatureCollection für Schichtdichte-Heatmap; Mitarbeiter mit current_location als Pins über GET /workers.
DSGVO & Compliance
| Measure | Implementation |
|---|---|
| Health data encryption | Fernet (AES) für Versicherungsnummer und Pflegegrad; Schlüssel über ENCRYPTION_KEY (nicht in der DB). |
| Audit log | Nur anhängendes audit_logs: user, action, target, timestamp. Lesendes API — keine Manipulation. |
| Soft deletes | Mitarbeiter, Klienten, Schichten: nur deleted_at gesetzt; Zeilen für Audit/legal hold erhalten. |
| Data residency | Ausgelegt für AWS eu-central-1 (Frankfurt); Gesundheitsdaten bleiben in Deutschland. |
Schicht-Workflow
Schichten folgen einem strikten Zustandsautomaten; GPS und Signaturen liefern nachweisbaren Leistungsnachweis.
| Status | Meaning |
|---|---|
| Scheduled | Mitarbeiter zugewiesen; noch nicht begonnen. |
| In_Progress | Mitarbeiter hat eingecheckt (GPS + Zeitstempel gespeichert). |
| Completed | Mitarbeiter hat ausgecheckt (GPS + Kundensignatur); Kosten für Budgetabzug gesetzt. |
| Unassigned | Kein Mitarbeiter (z. B. krank); Admin kann suggest-substitutes nutzen und zuweisen. |
| Cancelled | Schicht nicht durchgeführt. |
Scheduled → (Check-in) → In_Progress → (Check-out + Signatur) → Completed. GPS-verifizierter Check-in/out ersetzt Papiernachweise für Kostenträger und Audits.
API-Referenz
| Area | Endpoints |
|---|---|
| Auth | Auth: POST /auth/dev-login, GET /auth/me |
| Geo (v1) | Geo (v1): GET /api/v1/geo/heatmap (GeoJSON für Karten-Heatmap) |
| Stats (v1) | Stats (v1): GET /api/v1/stats/dashboard-summary (Wochentrends, Stadtverteilung, KPIs, Top-Mitarbeiter) |
| Shifts | Shifts: GET/PATCH /shifts, check-in, check-out, GET /shifts/{id}/suggest-substitutes |
| Workers | Workers: GET /workers, POST /workers/{id}/sick-leave |
| Clients | Clients: GET /clients, budget-status, budget-alerts |
| Billing | Billing: GET /exports/billing?month= (SGB-XI-CSV) |
| Audit | Audit: GET /audit-logs (Admin, read-only) |