Schwangerschafts-Monitoring mit Risikovorhersage
Klinische Plattform zur Schwangerschaftsüberwachung mit ML-basierter Risikovorhersage, entwickelt mit Django und PostgreSQL für ein Berliner Forschungsinstitut.
Die Herausforderung
Als Teil des Accelerators vom BIH (@ Charité) gab es ein klinisches Tool zur Überwachung von Schwangerschaften und Vorhersage von Komplikationen wie Frühgeburten. Die Plattform musste strenge Datenschutzanforderungen im Gesundheitswesen erfüllen — einschließlich Audit-Trails und Pseudonymisierung von Patientendaten — und gleichzeitig für Kliniker mit unterschiedlicher technischer Erfahrung zugänglich bleiben. Daten verschiedener Krankenhausorganisationen mussten strikt voneinander isoliert werden, und das System musste externe ML-Vorhersagedienste für die Risikoanalyse bei Untersuchungen anbinden.
Der Ansatz
Das Projekt folgte einer serverseitig gerenderten Progressive-Enhancement-Strategie: Django-Templates übernehmen Seitenstruktur und Routing, während leichtgewichtige Vanilla-JavaScript-Module gezielt Interaktivität ergänzen — ohne ein schwergewichtiges SPA-Framework. Geschäftslogik liegt in dedizierten Service-Layern, wodurch Views schlank und Logik unabhängig testbar bleiben. Das Frontend nutzt Plotly.js für klinische Datenvisualisierung und Unpoly für partielle Seitenaktualisierungen ohne vollständigen Reload. Django-Formsets mit eigenem JavaScript verarbeiten komplexe verschachtelte Formulare wie Mehrlingsgeburten, und Data-Attribute steuern die bedingte Feldsichtbarkeit deklarativ.
Umsetzung
Ein zentraler Beitrag war das Risikovorhersage-Visualisierungssystem. Ausgehend von einer einfachen PredictionGraph-Komponente mit Plotly.js entwickelte sich dies über mehrere Iterationen zu einem vollständig interaktiven Diagramm mit untersuchungsbasierter Datenauswahl, gruppierten Traces für Einreichungen und Untersuchungen, Tooltips mit Datentabellen, responsivem Layout und Gestationsalter-Validierung, die Abfragen bei ungültigen Werten verhindert. Die ML-Integration umfasst Backend-Validierung erforderlicher Felder vor Abfrage des Vorhersagedienstes, korrekte asynchrone Job-Verarbeitung über Redis Queue zur Vermeidung von Request-Hängern und fehlertolerante Frontend-Behandlung bei ungültigen ML-Eingaben.
Die Unterstützung für Mehrlingsschwangerschaften war ein weiteres umfangreiches Feature. Dies erforderte ein neues Child-Modell mit einer benutzerdefinierten Datenmigration, die bestehende Outcome-Datensätze durchläuft und Daten verlustfrei migriert. Das Frontend nutzt Django-Formsets mit eigenem JavaScript zum dynamischen Hinzufügen und Entfernen von Kind-Unterformularen, eine Tab-basierte Oberfläche zum Wechseln zwischen Kindern und eine korrekte Synchronisierung des Django-Management-Form-Zählers via JS — womit ein subtiles Problem gelöst wird, bei dem Django Formulare über der deklarierten Gesamtanzahl ignoriert.
Das Organisationssperrsystem ermöglicht Administratoren das Einfrieren klinischer Daten. Die Umsetzung erfolgte über den gesamten Stack: ein Locked-Flag am Organisationsmodell, Sperrung auf Model-Ebene, die Erstellung, Änderung und Löschung von Patienten, Untersuchungen, Einreichungen und Outcomes blockiert, sowie Frontend-Logik, die alle Aktionsbuttons bei gesperrter Organisation ausblendet. Persönliche Patientendaten bleiben auch bei Sperrung bearbeitbar.
Die Pseudonymisierung ermöglicht das Löschen personenbezogener Daten aus Patientenakten bei gleichzeitiger Beibehaltung der klinischen Daten für die Forschungskontinuität. Die Implementierung erlaubt es Patienten, ohne Konto oder persönliche Daten zu existieren, wobei die Entfernung bei Kontolöschung ausgelöst wird.
Weitere Features umfassen ein Audit-Log mit Filterung nach Patienten-ID zur Compliance-Nachverfolgung, Löschung von Untersuchungen mit Bestätigungsworkflow und E2E-Testabdeckung, Hospitalisierungsfelder (stationärer Status und Aufnahmeempfehlung), eine Frühgeburt-Checkbox für das Outcome-Formular sowie eine vollständige Navigationsumstrukturierung mit Django-Template-Tags für konsistentes URL-Handling über Authentifizierung, Landingpages und klinische Views hinweg. Die Playwright-E2E-Testmigration ersetzte das veraltete pytest-splinter-Setup durch moderne, locator-basierte Tests gegen einen Live-Django-Server.
Ergebnisse
Die Architektur liefert eine klinische Oberfläche, die komplexe medizinische Workflows — von Mehrlingsgeburten-Dokumentation bis zu interaktiven Risikovorhersage-Diagrammen — ohne SPA-Komplexität abbildet. Die Risikovorhersage-Integration verarbeitet ML-Service-Ausfälle fehlertolerant durch asynchrone Job-Verarbeitung und Frontend-Fallbacks, sodass klinische Arbeitsabläufe nicht durch externe Dienststörungen blockiert werden. Organisationssperre und Pseudonymisierung bieten die im klinischen Forschungsumfeld erforderlichen Data-Governance-Kontrollen, während das Audit-Log die Compliance-Verifizierung ermöglicht. Die Playwright-Migration bietet zuverlässigere browserbasierte Regressionstests im Vergleich zum vorherigen Splinter-basierten Ansatz.
Highlights
- Interaktive ML-Risikovorhersage-Diagramme
- Unterstützung für Mehrlingsschwangerschaften
- Organisationsweite Datensperre
- Pseudonymisierung bei Patientenlöschung
- Audit-Logging mit Patientenfilter
- Playwright-E2E-Testmigration