Acquisisci ed elabora i dati relativi allo stato di integrità con la libreria di acquisizione dei dati strutturati

1. Prima di iniziare

Cosa creerai

In questo codelab imparerai a creare un'app per Android con la libreria di acquisizione di dati strutturati. L'app utilizzerà la libreria di acquisizione dei dati strutturati per eseguire il rendering ed elaborare i questionari e le risposte FHIR.

Obiettivi didattici

  • Come integrare la libreria Structured Data Capture Library nella tua applicazione per Android
  • Come visualizzare un questionario
  • Come ricevere risposte in qualità di QuestionnaireResponse
  • Come estrarre le risorse FHIR da un QuestionnaireResponse

Che cosa ti serve

Questo codelab è incentrato sulla libreria di acquisizione dei dati strutturati. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla. Se non hai mai creato app per Android, puoi iniziare creando la tua prima app.

2. Configurazione

Scarica il codice

Per scaricare il codice di questo codelab, clona il repository Android FHIR SDK: git clone https://github.com/google/android-fhir.git

Il progetto iniziale per questo codelab si trova in codelabs/datacapture.

Importa l'app in Android Studio

Iniziamo importando l'app di avvio in Android Studio.

Apri Android Studio, seleziona Importa progetto (Gradle, Eclipse ADT e così via) e scegli la cartella codelabs/datacapture dal codice sorgente che hai scaricato in precedenza.

Schermata di avvio di Android Studio

Esegui l'app di avvio

Ora che hai importato il progetto in Android Studio, puoi eseguire l'app per la prima volta.

Collega il dispositivo Android all'host tramite USB o avvia l'emulatore Android Studio e fai clic su Esegui (Pulsante Esegui) nella barra degli strumenti di Android Studio.

App Hello World

Come puoi vedere, non c'è ancora molto da fare, quindi iniziamo subito a visualizzare un questionario nella tua app.

3. Aggiungere la libreria di acquisizione dei dati strutturati al progetto

Aggiungi le dipendenze per la libreria di acquisizione dei dati strutturati

Le dipendenze della libreria Structured Data Capture ti consentono di integrare la libreria Structured Data Capture nella tua app. Aggiungi le seguenti righe alla fine del file app/build.gradle.kts del progetto:

dependencies {
    // ...

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

Sincronizzare il progetto con i file Gradle

Per assicurarti che tutte le dipendenze siano disponibili per la tua app, a questo punto devi sincronizzare il progetto con i file Gradle.

Seleziona Sincronizza progetto con i file Gradle (Pulsante di sincronizzazione Gradle) dalla barra degli strumenti di Android Studio. Puoi anche eseguire di nuovo l'app per verificare che le dipendenze funzionino correttamente.

4. Visualizzare un questionario

In questo passaggio, aggiungerai all'app iniziale la funzionalità per visualizzare un questionario in un FragmentContainerView.

Durante la procedura, Android Studio ti chiederà di aggiungere le importazioni necessarie:

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

Passaggio 1: aggiungi un FragmentContainerView

Aggiungi un FragmentContainerView al layout dell'applicazione. Qui verrà visualizzato il QuestionnaireFragment che creerai in un secondo momento.

  1. Apri activity_main.xml (res > layout > activity_main.xml).
  2. Le opzioni per le viste Codice, Dividi e Progettazione si trovano in alto a destra nell'editor del layout.
  3. Seleziona la vista Codice. Opzioni di visualizzazione del layout
  4. Non hai bisogno di TextView, quindi eliminalo. Assicurati di eliminare tutto da <TextView a /> di chiusura.
  5. Aggiungi un FragmentContainerView all'interno di ConstraintLayout. Il file activity_main.xml dovrebbe avere il seguente aspetto:
    <?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>
    

Passaggio 2: configura un QuestionnaireFragment

QuestionnaireFragment richiede un questionario FHIR codificato in JSON per essere visualizzato. Poiché il questionario è di piccole dimensioni (<512 KB), lo includerai come String in un Bundle di argomenti che verranno utilizzati per creare il frammento. Per motivi di rendimento, i questionari più grandi devono essere forniti come URI.

Se vuoi, puoi esaminare il file questionnaire.json, ma uno dei vantaggi della libreria di acquisizione dei dati strutturati è che non devi conoscere la struttura del questionario FHIR (o nulla su FHIR) per visualizzarlo. Esaminerai più da vicino questo file più avanti nel codelab.

Crea un QuestionnaireFragment utilizzando il relativo builder e imposta il questionario utilizzando la funzione di impostazione. Per visualizzare il QuestionnaireFragment all'interno del contenitore del layout, utilizza il FragmentManager per creare un FragmentTransaction.

Apri MainActivity.kt e aggiungi il seguente codice alla classe MainActivity:

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

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

Passaggio 3: aggiungi QuestionnaireFragment a FragmentContainerView

Per visualizzare il QuestionnaireFragment all'interno del contenitore del layout, utilizza FragmentManager per creare un FragmentTransaction. FragmentManager gestisce l'inizializzazione utilizzando questionnaireParams creato in precedenza.

Aggiungi il codice seguente alla classe MainActivity:

// 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()
}

Scopri di più su come utilizzare i frammenti.

Esegui il codelab facendo clic su Esegui (Pulsante Esegui) nella barra degli strumenti di Android Studio. Dovresti visualizzare un messaggio simile al seguente:

Questionario visualizzato nell&#39;emulatore

Esplora il questionario e prova a inserire alcune risposte. Vengono utilizzati diversi widget di risposta, tra cui booleani, testo e date, che sono stati visualizzati automaticamente in base al tipo sottostante nel questionario FHIR originale.

Tecnicamente, è tutto ciò che devi fare per visualizzare un questionario. Complimenti!

Un questionario non è molto utile se non riesci a vedere le risposte inserite dagli utenti. Passiamo al passaggio successivo per ricevere una risposta al questionario.

5. Ricevere una risposta al questionario

Nei passaggi precedenti hai visualizzato un questionario FHIR nella tua app.

In questa sezione, riceverai le risposte al questionario come QuestionnaireResponse.

Trova il metodo submitQuestionnaire() e aggiungi il seguente codice:

// 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)

Per ottenere la risposta al questionario, recupera il frammento del questionario creato in precedenza e utilizza il metodo getQuestionnaireResponse(). Viene restituito un oggetto HAPI FHIR QuestionnaireResponse che puoi utilizzare direttamente o con altre parti dell'SDK Android FHIR. Questo codelab utilizza altre librerie HAPI FHIR per convertire il messaggio in una stringa JSON da visualizzare nel log.

Esegui di nuovo l'app per ricostruirla con le modifiche più recenti. Una volta avviato, inserisci alcune informazioni nel questionario e tocca Invia. Nel log dovresti vedere un messaggio contenente QuestionnaireResponse in formato JSON.

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. Estrarre risorse FHIR da una risposta al questionario

Il questionario incluso nel progetto iniziale è destinato a un semplice flusso di registrazione dei pazienti, pertanto potresti voler utilizzare le risposte al questionario per creare una risorsa FHIR Patient in base a queste. Questa conversione da una risposta al questionario alle risorse FHIR è chiamata estrazione dei dati. Possiamo farlo con la classe ResourceMapper della libreria di acquisizione dei dati strutturati.

Per eseguire l'estrazione dei dati, il questionario deve includere informazioni su come eseguire l'estrazione. Fortunatamente, il questionario di esempio è già configurato per l'estrazione basata su definizioni.

Trova il metodo submitQuestionnaire() e aggiungi il seguente codice:

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

ResourceMapper.extract() richiede un questionario HAPI FHIR, che puoi creare analizzando la stringa JSON del questionario precedente, e un QuestionnaireResponse, che abbiamo già ottenuto in precedenza. Restituisce un bundle di transazioni HAPI FHIR contenente una o più risorse estratte, in questo caso una singola risorsa Patient.

Esegui di nuovo l'app per ricostruirla con le modifiche più recenti. Una volta avviata, inserisci alcune informazioni e tocca Invia. Nel log dovresti ora vedere un messaggio extraction result contenente la rappresentazione JSON del bundle FHIR estratto.

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

7. Complimenti!

Hai utilizzato la libreria Structured Data Capture per elaborare questionari e risposte FHIR nella tua app:

  • Visualizzare un questionario
  • Ricevere una risposta al questionario
  • Estrarre risorse FHIR da un QuestionnaireResponse

È tutto ciò che ti serve per iniziare a utilizzare il servizio.

Man mano che procedi, potresti voler utilizzare le risorse FHIR in più modi all'interno dell'applicazione. Consulta la libreria FHIR Engine dell'SDK Android FHIR per scoprire come archiviare e gestire le risorse FHIR localmente nella tua applicazione e sincronizzare i dati con un server FHIR remoto.

Argomenti trattati

  • Come aggiungere la raccolta di dati strutturati alla tua app per Android
  • Come utilizzare QuestionnaireFragment e ResourceMapper per lavorare con i questionari FHIR

Passaggi successivi

  • Esplora la documentazione della Structured Data Capture Library
  • Personalizzare l'aspetto dei questionari visualizzati
  • Applicare la libreria Structured Data Capture Library nella tua app per Android

Scopri di più