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, um FHIR-Fragebögen und -Antworten zu rendern und zu verarbeiten.

Lerninhalte

  • Structured Data Capture Library in Ihre Android-Anwendung einbinden
  • Fragebogen anzeigen
  • Antworten als QuestionnaireResponse erhalten
  • FHIR-Ressourcen aus einer QuestionnaireResponse extrahieren

Voraussetzungen

In diesem Codelab geht es um die Structured Data Capture Library. 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 mit dem Erstellen Ihrer ersten App beginnen.

2. Einrichten

Code herunterladen

Wenn Sie den Code für dieses Codelab herunterladen möchten, klonen Sie das Android FHIR SDK-Repository: git clone https://github.com/google/android-fhir.git

Das Starterprojekt für dieses Codelab befindet sich unter codelabs/datacapture.

App in Android Studio importieren

Importieren Sie zuerst die Starter-App in Android Studio.

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

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 zu sehen. Beginnen wir also gleich damit, einen Fragebogen in Ihrer App anzuzeigen.

3. Strukturierte Datenerfassungsbibliothek zum Projekt hinzufügen

Abhängigkeiten für die Bibliothek zum Erfassen strukturierter Daten hinzufügen

Mit den Abhängigkeiten der Structured Data Capture Library können Sie die Structured Data Capture Library in Ihre App einbinden. Fügen Sie die folgenden Zeilen am Ende der app/build.gradle.kts-Datei Ihres Projekts hinzu:

dependencies {
    // ...

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

Projekt mit Gradle-Dateien synchronisieren

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

Wählen Sie in der Android Studio-Symbolleiste Projekt mit Gradle-Dateien synchronisieren (Gradle-Synchronisierungsschaltfläche) aus. Sie können die App auch noch einmal ausführen, um zu prüfen, ob die Abhängigkeiten ordnungsgemäß funktionieren.

4. Fragebogen anzeigen

In diesem Schritt fügen Sie der Starter-App die Funktion hinzu, mit der ein Fragebogen in einem FragmentContainerView gerendert wird.

Während des Vorgangs werden Sie von Android Studio aufgefordert, 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 ein FragmentContainerView hinzu. Hier wird später die QuestionnaireFragment angezeigt, die Sie erstellen.

  1. Öffnen Sie activity_main.xml (res > layout > activity_main.xml).
  2. Die Optionen für die Code-, Splitscreen- und Designansicht finden Sie rechts oben im Layout-Editor.
  3. Wählen Sie die Codeansicht aus. Optionen für die Layoutansicht
  4. Sie benötigen die TextView nicht. Löschen Sie sie daher. Löschen Sie alles zwischen dem <TextView und dem abschließenden />.
  5. Fügen Sie ein FragmentContainerView in das ConstraintLayout ein. Ihre activity_main.xml-Datei 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: QuestionnaireFragment konfigurieren

Für die Darstellung 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 bereitgestellt werden.

Sie können sich die questionnaire.json-Datei ansehen, wenn Sie möchten. Einer der Vorteile der Structured Data Capture Library ist jedoch, dass Sie die Struktur des FHIR-Fragebogens (oder irgendetwas über FHIR) nicht kennen müssen, um ihn zu rendern. Sie werden sich diese Datei später im Codelab genauer ansehen.

Erstellen Sie eine QuestionnaireFragment mit dem Builder und legen Sie den Fragebogen mit der Setzerfunktion fest. Wenn Sie die QuestionnaireFragment im Layoutcontainer anzeigen möchten, erstellen Sie mit dem FragmentManager ein FragmentTransaction.

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

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

val questionnaireFragment =
  QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()

Schritt 3: QuestionnaireFragment zur FragmentContainerView hinzufügen

Wenn Sie die QuestionnaireFragment im Layoutcontainer anzeigen möchten, erstellen Sie mit dem FragmentManager eine FragmentTransaction. Der FragmentManager führt die Instanziierung mithilfe des zuvor erstellten questionnaireParams durch.

Fügen Sie der Klasse MainActivity den folgenden Code hinzu:

// Step 3: Add the QuestionnaireFragment to the FragmentContainerView
if (savedInstanceState == null) {
  supportFragmentManager.commit {
    setReorderingAllowed(true)
    add(R.id.fragment_container_view, questionnaireFragment)
  }
}
// Submit button callback
supportFragmentManager.setFragmentResultListener(
  QuestionnaireFragment.SUBMIT_REQUEST_KEY,
  this,
) { _, _ ->
  submitQuestionnaire()
}

Weitere Informationen zur Verwendung von Fragmenten

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

Im Emulator gerenderter Fragebogen

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

Technisch gesehen ist das alles, was Sie zum Rendern eines Fragebogens tun müssen. Glückwunsch!

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

5. Antworten auf Fragebögen abrufen

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

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

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 Antwort des Fragebogens abzurufen, rufen Sie das zuvor erstellte Fragebogenfragment ab und verwenden Sie dann die Methode getQuestionnaireResponse(). Dadurch wird eine HAPI FHIR-Ressource QuestionnaireResponse zurückgegeben, die Sie direkt oder mit anderen Teilen des Android FHIR SDK verwenden können. In diesem Codelab werden andere HAPI FHIR-Bibliotheken verwendet, um die Daten in einen JSON-String zu konvertieren, der im Protokoll angezeigt wird.

Führen Sie die App noch einmal aus, um sie mit Ihren letzten Änderungen neu zu erstellen. Geben Sie dann einige Informationen in den Fragebogen ein und tippen Sie auf Senden. Im Log sollte eine Meldung mit der QuestionnaireResponse als JSON-Objekt 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 extrahieren

Der im Starterprojekt enthaltene Fragebogen dient einem einfachen Ablauf für die Patientenregistrierung. Sie können die Antworten auf den Fragebogen also verwenden, um eine FHIR-Patientenressource zu erstellen. Diese Umwandlung von einer Fragebogenantwort in FHIR-Ressourcen wird als Datenextraktion bezeichnet. Das können wir mit der ResourceMapper-Klasse der Structured Data Capture Library tun.

Damit die Datenextraktion durchgeführt werden kann, muss Ihr Fragebogen Informationen zur Durchführung der Datenextraktion enthalten. Glücklicherweise ist der Beispielfragebogen bereits für die definitionsgemäße 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))
}

Für ResourceMapper.extract() ist ein HAPI FHIR-Fragebogen erforderlich, den Sie erstellen können, indem Sie den JSON-String des Fragebogens aus dem vorherigen Schritt parsen. Außerdem ist ein QuestionnaireResponse erforderlich, den wir bereits haben. Es 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 Ihren letzten Änderungen neu zu erstellen. Geben Sie dann einige Informationen ein und tippen Sie auf Senden. Im Log sollte jetzt die Meldung extraction result mit der JSON-Darstellung des extrahierten FHIR-Bundles angezeigt werden.

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
  • Antworten auf Fragebögen abrufen
  • FHIR-Ressourcen aus einer QuestionnaireResponse extrahieren

Das ist alles, was du brauchst, um loszulegen.

Im weiteren Verlauf möchten Sie möglicherweise in Ihrer Anwendung auf verschiedene Arten mit FHIR-Ressourcen arbeiten. In der FHIR Engine Library des Android FHIR SDK erfahren Sie, wie Sie FHIR-Ressourcen lokal in Ihrer Anwendung speichern und verwalten und Daten mit einem Remote-FHIR-Server synchronisieren.

Behandelte Themen

  • Structured Data Capture Library zur Android-App hinzufügen
  • QuestionnaireFragment und ResourceMapper für die Arbeit mit FHIR-Fragebögen verwenden

Nächste Schritte

  • Dokumentation zur Structured Data Capture Library
  • Erscheinungsbild gerenderter Fragebögen anpassen
  • Structured Data Capture Library in Ihrer eigenen Android-App anwenden

Weitere Informationen