Gesundheitsdaten mit der Structured Data Capture Library erfassen und verarbeiten

1. Hinweis

Aufgaben

In diesem Codelab erfahren Sie, wie Sie eine Android-App mit der Structured Data Capture Library erstellen. Ihre App verwendet die Structured Data Capture Library zum Rendern und Verarbeiten von FHIR-Fragebögen und -Antworten.

Lerninhalte

  • Strukturierte Datenerfassungsbibliothek in Android-Apps integrieren
  • So blenden Sie einen Fragebogen ein:
  • Antworten als QuestionnaireResponse erhalten
  • FHIR-Ressourcen aus einem QuestionnaireResponse extrahieren

Voraussetzungen

In diesem Codelab geht es um die Aufnahmebibliothek für strukturierte Daten. Auf irrelevante Konzepte wird nicht genauer eingegangen und entsprechende Codeblöcke können Sie einfach kopieren und einfügen. Wenn Sie noch keine Android-Apps entwickelt haben, können Sie damit beginnen, Ihre erste App zu erstellen.

2. Einrichten

Code herunterladen

Klonen Sie das Android FHIR SDK-Repository, um den Code für dieses Codelab herunterzuladen: git clone https://github.com/google/android-fhir.git

Das Startprojekt für dieses Codelab befindet sich in codelabs/datacapture.

App in Android Studio importieren

Importieren wir zuerst die Starter-App in Android Studio.

Öffnen Sie Android Studio, wählen Sie Projekt importieren (Gradle, Eclipse ADT usw.) und dann den Ordner codelabs/datacapture aus dem Quellcode aus, den Sie zuvor heruntergeladen haben.

Android Studio-Startbildschirm

Start-App ausführen

Nachdem Sie das Projekt in Android Studio importiert haben, können Sie die App zum ersten Mal ausführen.

Verbinden Sie Ihr Android-Gerät über USB mit Ihrem Host oder starten Sie den Android Studio-Emulator und klicken Sie in der Android Studio-Symbolleiste auf „Ausführen“ (Schaltfläche „Ausführen“).

Hello World App

Wie Sie sehen, gibt es hier noch nicht viel. Lassen Sie uns also gleich damit beginnen, einen Fragebogen in Ihrer App anzuzeigen!

3. Dem Projekt eine Bibliothek für die strukturierte Datenerfassung hinzufügen

Abhängigkeiten für die Structured Data Capture Library hinzufügen

Die Abhängigkeiten der Structured Data Capture Library ermöglichen es Ihnen, die Structured Data Capture Library in Ihre App zu integrieren. Fügen Sie am Ende der Datei app/build.gradle.kts Ihres Projekts die folgenden Zeilen hinzu:

dependencies {
    // ...

    implementation("com.google.android.fhir:data-capture:1.0.0")
    implementation("androidx.fragment:fragment-ktx:1.5.5")
}

Projekt mit Gradle-Dateien synchronisieren

Damit alle Abhängigkeiten für Ihre App verfügbar sind, sollten Sie Ihr Projekt jetzt mit Gradle-Dateien synchronisieren.

Wählen Sie in der Android Studio-Symbolleiste Sync Project with Gradle Files (Gradle-Synchronisierungsschaltfläche) aus. Außerdem führen Sie die Anwendung noch einmal aus, um zu prüfen, ob die Abhängigkeiten korrekt funktionieren.

4. Fragebogen anzeigen

In diesem Schritt fügen Sie der Starter-App die Funktion hinzu, mit der Sie einen Fragebogen in einem FragmentContainerView rendern können.

Android Studio fordert Sie dann auf, die erforderlichen Importe hinzuzufügen:

  • androidx.core.os.bundleOf
  • androidx.fragment.app.add
  • androidx.fragment.app.commit
  • android.util.Log
  • com.google.android.fhir.datacapture.QuestionnaireFragment

Schritt 1: FragmentContainerView hinzufügen

Fügen Sie dem Layout der Anwendung eine FragmentContainerView hinzu. Hier wird der QuestionnaireFragment angezeigt, den Sie später erstellen.

  1. Öffnen Sie activity_main.xml (res > Layout > activity_main.xml).
  2. Die Optionen für die Code-, Aufteilung- und Designansichten finden Sie oben rechts im Layout-Editor.
  3. Wählen Sie die Codeansicht aus. Optionen für die Layoutansicht
  4. Du brauchst die Datei TextView nicht, also lösche sie. Achte darauf, alles vom <TextView bis zum schließenden /> zu löschen.
  5. Fügen Sie ein FragmentContainerView-Element in ConstraintLayout ein. Die Datei activity_main.xml sollte in etwa so aussehen:
    <?xml version="1.0" encoding="utf-8" ?>
    <androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
    >
    
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

Schritt 2: Der FragmentContainerView einen QuestionnaireFragment hinzufügen

Zum Rendern von QuestionnaireFragment ist ein JSON-codierter FHIR-Fragebogen erforderlich. Da der Fragebogen klein ist (<512 KB), fügen Sie ihn als String in eine Bundle von Argumenten ein, die zum Erstellen des Fragments verwendet werden. Größere Fragebögen sollten aus Leistungsgründen als URI angegeben werden.

Sie können sich die Datei questionnaire.json ansehen, wenn Sie möchten, aber einer der Vorteile der Structured Data Capture Library besteht darin, dass Sie die Struktur des FHIR-Fragebogens (oder etwas über FHIR) nicht kennen müssen, um ihn rendern zu können. Sie sehen sich diese Datei später im Codelab genauer an.

Erstelle mit dem Builder eine QuestionnaireFragment und lege den Fragebogen mithilfe der Setter-Funktion fest. Zum Anzeigen von QuestionnaireFragment innerhalb des Layoutcontainers verwenden Sie FragmentManager, um eine FragmentTransaction zu erstellen.

Öffnen Sie MainActivity.kt und fügen Sie der Klasse MainActivity den folgenden Code hinzu:

// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")

if (savedInstanceState == null) {
  supportFragmentManager.commit {
    setReorderingAllowed(true)
    add(
      R.id.fragment_container_view,
      QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
    )
  }
}

Weitere Informationen zur Verwendung von Fragmenten

Führen Sie das Codelab aus, indem Sie in der Android Studio-Symbolleiste auf „Run“ (Schaltfläche „Ausführen“) klicken. Die Ausgabe sollte etwa so aussehen:

Im Emulator dargestellter Fragebogen

Gehen Sie den Fragebogen durch und geben Sie einige Antworten ein. Es werden verschiedene Antwort-Widgets verwendet, darunter boolesche Werte, Text und Datumsangaben, die basierend auf dem zugrunde liegenden Typ im ursprünglichen FHIR-Fragebogen automatisch gerendert wurden.

Technisch gesehen ist das alles, was Sie tun müssen, um einen Fragebogen zu erstellen. Glückwunsch!

Ein Fragebogen ist nicht sehr hilfreich, wenn Sie die Antworten der Nutzenden nicht sehen können. Fahren wir mit dem nächsten Schritt fort, um eine Fragebogenantwort zu erhalten.

5. Antwort auf den Fragebogen erhalten

In den vorherigen Schritten haben Sie einen FHIR-Fragebogen in Ihrer App gerendert.

In diesem Abschnitt erhalten Sie die Antworten aus dem Fragebogen als Fragebogenantwort.

Suchen Sie die Methode submitQuestionnaire() und fügen Sie den folgenden Code hinzu:

// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
        as QuestionnaireFragment
val questionnaireResponse = fragment.getQuestionnaireResponse()

// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString =
    jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)

Um die Antworten im Fragebogen zu erhalten, rufen Sie das zuvor erstellte Fragebogenfragment ab und verwenden dann die Methode getQuestionnaireResponse(). Dadurch wird ein HAPI FHIR QuestionnaireResponse zurückgegeben, das Sie direkt oder mit anderen Teilen des Android FHIR SDK verwenden können. Dieses Codelab verwendet andere HAPI FHIR-Bibliotheken, um ihn in einen JSON-String zu konvertieren und im Log anzusehen.

Führen Sie die App noch einmal aus, um sie mit den letzten Änderungen neu zu erstellen. Geben Sie nach dem Start einige Informationen in den Fragebogen ein und tippen Sie auf Senden. Im Log sollte eine Nachricht mit QuestionnaireResponse im JSON-Format angezeigt werden.

D/response: {"resourceType":"QuestionnaireResponse","item":[{"linkId":"PR","text":"Patient information","item":[{"linkId":"PR-name","text":"Name","item":[{"linkId":"PR-name-given","text":"First Name","answer":[{"valueString":"Dani"}]},{"linkId":"PR-name-family","text":"Family Name","answer":[{"valueString":"Lee"}]}]},{"linkId":"PR-birthdate","text":"Date of Birth","answer":[{"valueDate":"1990-02-14"}]},{"linkId":"PR-id","text":"Identifying information","item":[{"linkId":"PR-name-id-url"},{"linkId":"PR-name-id","text":"Patient Id","answer":[{"valueString":"12345"}]}]}]}]}

6. FHIR-Ressourcen aus einer QuestionnaireResponse

Der im Startprojekt enthaltene Fragebogen dient einem einfachen Ablauf der Patientenregistrierung. Daher können Sie die Antworten des Fragebogens verwenden, um eine darauf basierende FHIR-Patientenressource zu erstellen. Diese Umwandlung von Fragebogenantworten in FHIR-Ressourcen wird als Datenextraktion bezeichnet. Hierzu können Sie die Klasse ResourceMapper der Bibliothek zur Erfassung strukturierter Daten verwenden.

Damit Sie Daten extrahieren können, muss Ihr Fragebogen Informationen zur Durchführung der Datenextraktion enthalten. Glücklicherweise ist der Stichprobenfragebogen bereits für die definitionsbasierte Extraktion eingerichtet.

Suchen Sie die Methode submitQuestionnaire() und fügen Sie den folgenden Code hinzu:

lifecycleScope.launch {
  val questionnaire =
    jsonParser.parseResource(questionnaireJsonString) as Questionnaire
  val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
  Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}

ResourceMapper.extract() erfordert einen HAPI-FHIR-Fragebogen, den Sie durch Parsen des zuvor verwendeten JSON-Strings des Fragebogens erstellen können, sowie einen QuestionnaireResponse, den wir bereits erhalten haben. Sie gibt ein HAPI FHIR-Transaktions-Bundle zurück, das eine oder mehrere extrahierte Ressourcen enthält – in diesem Fall eine einzelne Patientenressource.

Führen Sie die App noch einmal aus, um sie mit den letzten Änderungen neu zu erstellen. Sobald er ausgeführt wird, geben Sie einige Informationen ein und tippen Sie auf Senden. Im Log sollte jetzt die Meldung extraction result angezeigt werden, die die JSON-Darstellung des extrahierten FHIR-Bundles enthält.

D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}

7. Glückwunsch!

Sie haben die Structured Data Capture Library verwendet, um FHIR-Fragebögen und -Antworten in Ihrer App zu verarbeiten:

  • Fragebogen anzeigen
  • Antwort auf den Fragebogen erhalten
  • FHIR-Ressourcen aus einem QuestionnaireResponse extrahieren

Das ist alles, was Sie brauchen, um loszulegen.

Im weiteren Verlauf möchten Sie möglicherweise in Ihrer gesamten Anwendung auf verschiedene Arten mit FHIR-Ressourcen arbeiten. Sehen Sie sich die FHIR-Engine-Bibliothek des Android FHIR SDK an, um zu erfahren, wie Sie FHIR-Ressourcen lokal in Ihrer Anwendung speichern und verwalten und Daten mit einem Remote-FHIR-Server synchronisieren.

Behandelte Themen

  • So fügen Sie Ihrer Android-App eine Bibliothek für die strukturierte Datenerfassung hinzu
  • So verwenden Sie QuestionnaireFragment und ResourceMapper für die Arbeit mit FHIR-Fragebögen

Nächste Schritte

  • Dokumentation zur Structured Data Capture Library ansehen
  • Design gerenderter Fragebögen anpassen
  • Strukturierte Datenerfassungsbibliothek in Ihrer eigenen Android-App anwenden

Weitere Informationen