Klinischer Datenaustausch PoC

Klinischer Datenaustausch PoC

Wir haben eine PoC-Anwendung auf Flutter-Basis für Notärzte und Rettungsassistenten entwickelt, um klinische Daten sicher zu speichern und auszutauschen. Diese Anwendung hat die Beta-Testphase bestanden und über 30 neue Kunden angezogen.

Inhaltsverzeichnis

Kontext

Unser Kunde ist ein Anbieter von Softwarelösungen für das Gesundheitswesen. Er verfügte über eine Anwendung für den klinischen Datenaustausch, die Ärzten und Rettungsassistenten helfen sollte, die Beschwerden von Patienten schnell zu beurteilen und darauf zu reagieren, indem sie alle klinischen Daten (einschließlich Kardiogramme von EKG-Geräten) während der Patientenuntersuchung in das Patienteninformationsformular auf ihren Geräten einfügen.

Die App wurde für medizinische Zentren, Krankenhäuser und andere Gesundheitseinrichtungen entwickelt und war bisher nur für Windows-Tablets erhältlich. Das Unternehmen plante, die Zahl der Nutzer zu erweitern und zu erhöhen, und wollte daher eine Lösung für alle Plattformen entwickeln, um ein breiteres Publikum zu erreichen. Die Lösung sollte außerdem über sichere Funktionen für den Zugriff auf Aufzeichnungen und deren Speicherung verfügen, um die Privatsphäre der Patienten zu schützen und die HIPAA-Vorschriften einzuhalten. Um seine Vision zu verwirklichen, beauftragte der Kunde Itransition mit der Entwicklung seiner medizinischen App.

Lösung

Entdeckungsphase

Um den Kontext des Projekts zu ermitteln, die Anforderungen zu validieren und den richtigen Tech-Stack auszuwählen, boten wir dem Kunden an, mit einer Erkundungsphase zu beginnen. Der Kunde gewährte uns Zugang zum aktuellen System und zu zusätzlichen Materialien, um ein besseres Verständnis des Projekts zu erhalten, wie z.B. .zol-Dateien von EKGs, anonymisierte Versicherungskartenmuster usw. Wir führten auch Erkundungsgespräche durch. Auf der Grundlage dieser Informationen erstellten wir ein Visions- und Umfangsdokument mit allen Anforderungen an die Lösung, wie zum Beispiel:

  • Funktionalität zum Anhängen von Dateien (z.B. Dateien von EKG-Geräten, Fotos von OCR-Versicherungskarten) und Übertragung dieser Dateien von/zu jedem Gerät unabhängig vom Betriebssystem, auf dem sie gespeichert sind
  • Starke Text- und Bildverschlüsselung/Entschlüsselung zum Schutz der Lösung vor Datenlecks
  • Funktionen zur Standortbestimmung, damit Sanitäter die Adresse der medizinischen Untersuchung nicht manuell eingeben müssen

Der Kunde legte bei der zukünftigen Lösung Wert auf optimierte Gesamtbetriebskosten, einfache Systemwartung und -unterstützung, stabile Leistung und Flexibilität. Unter Berücksichtigung all dieser Aspekte empfahlen wir, sich für eine plattformübergreifende Anwendungsentwicklung zu entscheiden. Aufgrund der Branchen- und Technologiespezifika schlugen wir eine PoC-Entwicklung vor, um die technische Machbarkeit der Lösung zu bewerten und die Idee zu testen und dann die Funktionalität der Lösung schrittweise zu erweitern. Wir haben uns für Flutter entschieden, da es sich am besten für die PoC-Entwicklung eignet und andere plattformübergreifende Technologien nicht für die Entwicklung von Webanwendungen verwendet werden können.

Klinischer Datenaustausch PoC

Itransition lieferte einen PoC für den Austausch klinischer Daten, der auf iOS-, Android- und Windows-Geräten verfügbar ist.

Wir entschieden uns für das BloC (Business Logic Component) Pattern mit einem Clean Architecture Ansatz, der es uns ermöglichte, eine flexible Lösung mit leicht anpassbarer plattformspezifischer Funktionalität zu entwickeln. Die Lösung erwies sich auch als einfacher zu testen, da die Geschäftslogik von den Hauptfunktionen getrennt wurde.

Solution architecture

Parsing von .zol-Dateien aus dem EKG-Gerät

Da der Kunde Dateien von EKG-Geräten anhängen wollte, mussten wir das Parsen von .zol-Dateien implementieren und verwendeten Zoll SDKs für jede Plattform. Um plattformspezifische Funktionen bereitzustellen, haben wir die Schicht mit Flutter-Plugins und dann eine Schicht mit Aufrufen aus der Flutter-Anwendung erstellt. Außerdem haben wir den Android-, iOS- und Windows-Quellcode angepasst, um einen reibungslosen Dateitransfer zu den Flutter-Plugins zu gewährleisten.

Datenverschlüsselung und -entschlüsselung

Wir haben eine Lösung für die Ver- und Entschlüsselung von Daten entwickelt, um die HIPAA-Konformität der App sicherzustellen. Um ver- und entschlüsselt werden zu können, sollten angehängte Dateien zunächst in den lokalen Datenspeicher hochgeladen werden, weshalb wir Hive als Key-Value-Speicher mit einem integrierten Verschlüsselungsmechanismus verwendet haben.

Um die Daten zu verschlüsseln, verwendeten wir eine Krypto-Bibliothek mit einer eindeutigen Geräte-ID/einem eindeutigen Wert, der vom Backend als privater Schlüssel generiert wurde. Die verschlüsselte Datei wird sicher auf das andere Gerät übertragen, und dann wird die Datei mit den Hive-Tools entschlüsselt. Anschließend zeigt die App eine Vorschau (sofern möglich) oder nur das Symbol und den Namen der Datei an, die mit der Standardfunktionalität des Betriebssystems geöffnet werden kann.

Wir haben auch Schritte und Anleitungen für die sichere Extraktion von Informationen aus iOS-, Android- und Windows-Geräten mit kaputten Bildschirmen vorbereitet. Wenn die Benutzer beispielsweise den privaten Schlüssel kennen und die Daten des iOS-Geräts mit iTunes und Mac synchronisiert sind, können sie auf die erforderlichen Daten zugreifen und sie wiederherstellen.

Dateien anhängen und Fotos machen

Wir haben die Funktionen von Flutter genutzt, um es den Ärzten vor Ort zu ermöglichen, mit einem Klick Fotos zu machen und zugehörige Dokumente hochzuladen. Für die Auswahl von Bildern aus der Android- und iOS-Bildbibliothek und die Aufnahme neuer Bilder haben wir das Flutter Camera Plugin implementiert.

Flutter hat keine Beschränkungen oder Einschränkungen für das Anhängen von Dateien jeder Größe und für jede Plattform. Daher haben wir die Pakete von Flutter genutzt, um die Suche nach Dateien im Dateisystem des Geräts und die Erstellung von Anhängen zu vereinfachen.

Datenübertragung mit BLE

Für den Datentransfer haben wir BLE verwendet, da es weit weniger Batteriestrom verbraucht als klassisches Bluetooth und eine robuste und zuverlässige Verbindung bietet. Um Daten zwischen zwei Geräten zu übertragen, sollte eines als Bluetooth-Zentrale und das andere als Peripheriegerät fungieren. Da es in Flutter jedoch keine Lösung gibt, um das Gerät in den Peripheriemodus zu schalten, haben wir eine native Entwicklungsschicht für alle Plattformen verwendet. Danach wurden die Daten an das FlutterBlue-Plugin weitergeleitet und über BLE direkt an ein anderes Gerät übertragen.

Erkennung medizinischer Aufzeichnungen

Der Kunde wollte eine Funktionalität entwickeln, die den Namen und die Krankenversicherungsnummer eines Patienten von der Versicherungskarte liest, ein Foto der Karte macht, die notwendigen Daten erkennt und sie zu den Patienteninformationen hinzufügt. Der Kunde stellte uns verschiedene Muster von Versicherungskarten zur Verfügung und wir erkannten die folgenden Herausforderungen bei der Implementierung:

  • Horizontales Ausrichtungsproblem (z.B. wenn es keine sichtbaren Kanten der Karte gibt, sinkt die Ausrichtungsqualität)
  • Problem mit dem Datensatz (Patientennamen können auf Patientenkarten unterschiedlich platziert sein)
  • Problem mit der Modellqualität (bei einer erheblichen horizontalen Verschiebung kann sich der Text auf den Kopf stellen und die Erkennungsqualität verringern)

Um diese Probleme zu lösen, haben wir ein ML-Modell mit PyTorch implementiert. Zunächst erkennt das Modell mit dem CRAFT-Textdetektor den Textbereich, indem es die Position jedes Zeichens und die Affinität zwischen den Zeichen untersucht, die Bounding Box des Textes findet und die Textposition anhand der Koordinaten erkennt, die auf der Grundlage der analysierten Versicherungskarten berechnet wurden. Zur Erkennung von Text anhand seiner Platzierung auf dem Bild haben wir SATRN verwendet. Anschließend fügt das ML-Modell die erkannten Daten in das entsprechende Feld in der App ein.

Geolokalisierung

Das Flutter Location Plugin kümmert sich um die Identifizierung eines Standorts auf Android und iOS und stellt Callbacks bereit, wenn der Standort geändert wird. Mit dem Flutter Location Plugin kann die App:

  • Bestimmt den Standort des Benutzers mit Breiten- und Längengrad
  • Ermöglicht es dem Benutzer, die Karte so anzupassen, dass sie genau auf die Stelle zeigt, an der er den Patienten abgeholt hat
  • Berechnet und zeigt die Adresse auf der Grundlage des ermittelten Breiten- und Längengrads an

Um die Koordinaten zu ermitteln und zu speichern, haben wir außerdem Hive als lokalen Datenspeicher für die Erstellung einer NoSQL-Datenbank verwendet.

Dynamische UI

Der Kunde wollte seinen Kunden die erste Version der App zeigen und sie diese auf ihren Geräten testen lassen. Daher boten wir eine dynamische UI-Implementierung an, die es den Kunden ermöglicht, die Benutzeroberfläche der App auf der Grundlage der Definition einer bestehenden Seite oder einer Java-Portlet-Definition anzupassen. Wir haben eine JSON-Beispieldatei generiert, die es uns ermöglicht, UI-Elemente nach bestimmten Regeln in Flutter anzuordnen.

Um eine vollständig dynamische UI zu erstellen, haben wir Funktionen implementiert, die es ermöglichen, Masken auf bestimmte Felder anzuwenden und Fehlermeldungen bei der Feldvalidierung anzuzeigen. Der Kunde teilte uns auch seine Stilrichtlinien mit, die wir zur Erstellung von Wireframes mit einer Bildschirmkarte und klickbaren Menüpunkten nutzten.

 

Patient information
Event information
Status summary with submenu
Network status popup

Ergebnisse

Itransition lieferte einen PoC einer auf Flutter basierenden Anwendung für Notärzte und Sanitäter zur sicheren Speicherung und zum Austausch klinischer Daten. Die Lösung hat die Beta-Testphase erfolgreich durchlaufen und dem Kunden geholfen, mehr als 30 neue Kunden aus dem Gesundheitswesen zu gewinnen. Unsere Entwickler sind zu einem integralen Bestandteil des internen Teams des Kunden geworden und arbeiten nach der PoC-Phase weiter mit uns an der Entwicklung einer voll funktionsfähigen Anwendung.