Mengambil dan memproses data kesehatan dengan Library Pengambilan Data Terstruktur

1. Sebelum memulai

Yang akan Anda build

Dalam codelab ini, Anda akan mempelajari cara membuat aplikasi Android dengan Structured Data Capture Library. Aplikasi Anda akan menggunakan Structured Data Capture Library untuk merender dan memproses FHIR Questionnaire dan respons.

Yang akan Anda pelajari

  • Cara mengintegrasikan Structured Data Capture Library ke dalam aplikasi Android Anda
  • Cara menampilkan Kuesioner
  • Cara mendapatkan jawaban sebagai QuestionnaireResponse
  • Cara mengekstrak resource FHIR dari QuestionnaireResponse

Yang Anda butuhkan

Codelab ini berfokus pada Structured Data Capture Library. Konsep dan blok kode yang tidak relevan akan dibahas sekilas dan disediakan, jadi Anda cukup menyalin dan menempelkannya. Jika belum pernah membuat aplikasi Android, Anda dapat memulai dengan membuat aplikasi pertama Anda.

2. Memulai persiapan

Mendownload Kode

Untuk mendownload kode codelab ini, buat clone repo Android FHIR SDK: git clone https://github.com/google/android-fhir.git

Project awal untuk codelab ini terletak di codelabs/datacapture.

Mengimpor aplikasi ke Android Studio

Mari kita mulai dengan mengimpor aplikasi awal ke Android Studio.

Buka Android Studio, pilih Import Project (Gradle, Eclipse ADT, etc.), lalu pilih folder codelabs/datacapture dari kode sumber yang telah Anda download sebelumnya.

Layar awal Android Studio

Menjalankan aplikasi awal

Setelah mengimpor project ke Android Studio, Anda siap menjalankan aplikasi untuk pertama kalinya.

Hubungkan perangkat Android Anda melalui USB ke host, atau Mulai emulator Android Studio, lalu klik Run (Tombol Run) di toolbar Android Studio.

Aplikasi Hello World

Seperti yang dapat Anda lihat, belum banyak yang ada di sini, jadi mari kita langsung menampilkan kuesioner di aplikasi Anda.

3. Menambahkan Library Pengambilan Data Terstruktur ke project

Menambahkan dependensi untuk Structured Data Capture Library

Dependensi Structured Data Capture Library memungkinkan Anda mengintegrasikan Structured Data Capture Library di aplikasi Anda. Tambahkan baris berikut di akhir file app/build.gradle.kts project Anda:

dependencies {
    // ...

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

Sinkronkan project Anda dengan file Gradle

Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, Anda harus menyinkronkan project dengan file gradle pada tahap ini.

Pilih Sync Project with Gradle Files (Tombol sinkronisasi Gradle) dari toolbar Android Studio. Anda juga dapat menjalankan aplikasi lagi untuk memeriksa apakah dependensi berfungsi dengan benar.

4. Menampilkan Kuesioner

Pada langkah ini, Anda akan menambahkan fungsi ke aplikasi starter untuk merender kuesioner dalam FragmentContainerView.

Selama proses ini, Android Studio akan meminta Anda menambahkan impor yang diperlukan:

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

Langkah 1: Tambahkan FragmentContainerView

Tambahkan FragmentContainerView ke tata letak aplikasi. Di sinilah QuestionnaireFragment yang akan Anda buat nanti akan ditampilkan.

  1. Buka activity_main.xml (res > layout > activity_main.xml).
  2. Temukan opsi untuk tampilan Kode, Terpisah, dan Desain di kanan atas Layout Editor.
  3. Pilih tampilan Kode. Opsi tampilan tata letak
  4. Anda dapat menghapus TextView karena tidak diperlukan. Pastikan untuk menghapus semuanya dari <TextView hingga /> penutup.
  5. Tambahkan FragmentContainerView di dalam ConstraintLayout. File activity_main.xml Anda akan terlihat seperti ini:
    <?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>
    

Langkah 2: Konfigurasikan QuestionnaireFragment

QuestionnaireFragment memerlukan FHIR Questionnaire yang dienkode JSON agar dapat dirender. Karena kuesioner berukuran kecil (<512 KB), Anda akan menyertakannya sebagai String dalam Bundle argumen yang akan digunakan untuk membuat fragmen. Kuesioner yang lebih besar harus disediakan sebagai URI karena alasan performa.

Anda dapat melihat file questionnaire.json jika mau, tetapi salah satu manfaat Structured Data Capture Library adalah Anda tidak perlu mengetahui struktur FHIR Questionnaire (atau apa pun tentang FHIR) agar dapat merendernya. Anda akan melihat file ini lebih cermat nanti dalam codelab.

Buat QuestionnaireFragment menggunakan builder-nya, dan tetapkan kuesioner menggunakan fungsi setter. Untuk menampilkan QuestionnaireFragment dalam penampung tata letak, gunakan FragmentManager untuk membuat FragmentTransaction.

Buka MainActivity.kt dan tambahkan kode berikut ke class MainActivity:

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

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

Langkah 3: Tambahkan QuestionnaireFragment ke FragmentContainerView

Untuk menampilkan QuestionnaireFragment dalam penampung tata letak, gunakan FragmentManager untuk membuat FragmentTransaction. FragmentManager menangani instansiasi menggunakan questionnaireParams yang dibuat sebelumnya.

Tambahkan kode berikut ke class 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()
}

Pelajari lebih lanjut cara menggunakan fragmen.

Mari jalankan codelab dengan mengklik Run (Tombol Run) di toolbar Android Studio. Anda akan melihat sesuatu yang mirip dengan ini:

Kuesioner Dirender di Emulator

Buka kuesioner dan coba masukkan beberapa jawaban. Ada beberapa widget jawaban berbeda yang digunakan, termasuk boolean, teks, dan tanggal, yang dirender secara otomatis berdasarkan jenis yang mendasarinya dalam kuesioner FHIR asli.

Secara teknis, hanya itu yang perlu Anda lakukan untuk merender kuesioner. Selamat!

Kuesioner tidak akan terlalu berguna jika Anda tidak dapat melihat jawaban yang dimasukkan pengguna. Mari kita lanjutkan ke langkah berikutnya untuk mendapatkan Respons Kuesioner.

5. Mendapatkan Respons Kuesioner

Pada langkah-langkah sebelumnya, Anda telah merender kuesioner FHIR di aplikasi.

Di bagian ini, Anda akan mendapatkan jawaban dari kuesioner sebagai QuestionnaireResponse.

Temukan metode submitQuestionnaire() dan tambahkan kode berikut:

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

Untuk mendapatkan respons kuesioner, Anda mengambil fragmen kuesioner yang dibuat sebelumnya, lalu menggunakan metode getQuestionnaireResponse(). Tindakan ini akan menampilkan QuestionnaireResponse HAPI FHIR yang dapat Anda gunakan secara langsung atau dengan bagian lain dari Android FHIR SDK. Codelab ini menggunakan library HAPI FHIR lainnya untuk mengonversinya menjadi string JSON agar dapat dilihat di log.

Jalankan aplikasi lagi untuk membangunnya kembali dengan perubahan terbaru Anda. Setelah berjalan, masukkan beberapa informasi ke dalam kuesioner, lalu ketuk Kirim. Di log, Anda akan melihat pesan yang berisi QuestionnaireResponse sebagai 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. Mengekstrak Resource FHIR dari QuestionnaireResponse

Kuesioner yang disertakan dengan project awal adalah untuk alur pendaftaran pasien sederhana, jadi pada akhirnya Anda mungkin ingin menggunakan respons kuesioner untuk membuat resource FHIR Patient berdasarkan respons tersebut. Konversi dari respons kuesioner menjadi resource FHIR ini disebut ekstraksi data. Kita dapat melakukannya dengan class ResourceMapper dari Structured Data Capture Library.

Untuk melakukan ekstraksi data, kuesioner Anda harus dibuat untuk menyertakan informasi tentang cara melakukan ekstraksi data. Untungnya, kuesioner sampel sudah disiapkan untuk Ekstraksi berbasis definisi.

Temukan metode submitQuestionnaire() dan tambahkan kode berikut:

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

ResourceMapper.extract() memerlukan Kuesioner FHIR HAPI, yang dapat Anda buat dengan mengurai string JSON kuesioner dari sebelumnya, dan QuestionnaireResponse, yang sudah kita dapatkan sebelumnya. API ini menampilkan transaksi HAPI FHIR Bundle yang berisi satu atau beberapa resource yang diekstrak–dalam hal ini satu resource Patient.

Jalankan aplikasi lagi untuk membangunnya kembali dengan perubahan terbaru Anda. Setelah berjalan, masukkan beberapa informasi, lalu ketuk Kirim. Di log, Anda akan melihat pesan extraction result yang berisi representasi JSON dari FHIR Bundle yang diekstrak.

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

7. Selamat!

Anda telah menggunakan Structured Data Capture Library untuk memproses kuesioner dan respons FHIR di aplikasi Anda:

  • Menampilkan Kuesioner
  • Mendapatkan Respons Kuesioner
  • Mengekstrak Resource FHIR dari QuestionnaireResponse

Hanya itu yang perlu Anda lakukan untuk menyiapkan dan menjalankannya.

Saat melanjutkan, Anda mungkin ingin menggunakan resource FHIR dengan lebih banyak cara di seluruh aplikasi. Lihat FHIR Engine Library Android FHIR SDK untuk mempelajari cara menyimpan dan mengelola resource FHIR secara lokal di aplikasi Anda serta menyinkronkan data dengan server FHIR jarak jauh.

Yang telah kita bahas

  • Cara menambahkan Structured Data Capture Library ke aplikasi Android Anda
  • Cara menggunakan QuestionnaireFragment dan ResourceMapper untuk menggunakan kuesioner FHIR

Langkah Berikutnya

  • Mempelajari dokumentasi untuk Structured Data Capture Library
  • Menyesuaikan tampilan dan nuansa kuesioner yang dirender
  • Menerapkan Structured Data Capture Library di aplikasi Android Anda sendiri

Pelajari Lebih Lanjut