Yapılandırılmış Veri Yakalama Kitaplığı ile sağlık verilerini yakalama ve işleme

1. Başlamadan önce

Ne oluşturacaksınız?

Bu codelab'de, Yapılandırılmış Veri Yakalama Kitaplığı ile Android uygulaması oluşturmayı öğreneceksiniz. Uygulamanız, FHIR anketlerini ve yanıtlarını oluşturmak ve işlemek için Yapılandırılmış Veri Yakalama Kitaplığı'nı kullanır.

Neler öğreneceksiniz?

  • Yapılandırılmış Veri Yakalama Kitaplığı'nı Android uygulamanıza entegre etme
  • Anketleri görüntüleme
  • QuestionnaireResponse olarak yanıt alma
  • QuestionnaireResponse dosyasından FHIR kaynaklarını ayıklama

İhtiyacınız olanlar

Bu codelab, Yapılandırılmış Veri Yakalama Kitaplığı'na odaklanmaktadır. Alakalı olmayan kavramlar ve kod blokları işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için kullanımınıza sunulmuştur. Daha önce Android uygulaması geliştirmediyseniz ilk uygulamanızı oluşturarak başlayabilirsiniz.

2. Hazırlanın

Kodu indirme

Bu kod alanının kodunu indirmek için Android FHIR SDK deposunu klonlayın: git clone https://github.com/google/android-fhir.git

Bu codelab'in başlangıç projesi codelabs/datacapture adresindedir.

Uygulamayı Android Studio'ya aktarma

Başlatıcı uygulamayı Android Studio'ya içe aktararak başlayalım.

Android Studio'yu açın, Projeyi İçe Aktar (Gradle, Eclipse ADT vb.)'ı seçin ve daha önce indirdiğiniz kaynak koddan codelabs/datacapture klasörünü seçin.

Android Studio başlangıç ekranı

Başlangıç uygulamasını çalıştırma

Projeyi Android Studio'ya içe aktardığınıza göre uygulamayı ilk kez çalıştırmaya hazırsınız.

Android cihazınızı USB üzerinden ana makinenize bağlayın veya Android Studio emülatörünü başlatın ve Android Studio araç çubuğunda Çalıştır'ı (Çalıştır düğmesi) tıklayın.

Merhaba Dünya uygulaması

Gördüğünüz gibi henüz çok fazla şey yok. Şimdi uygulamanızda anket göstermeye başlayalım.

3. Projeye Yapılandırılmış Veri Yakalama Kitaplığı'nı ekleme

Yapılandırılmış Veri Yakalama Kitaplığı'nın bağımlılıkları ekleme

Yapılandırılmış Veri Yakalama Kitaplığı bağımlılıkları, Yapılandırılmış Veri Yakalama Kitaplığı'nı uygulamanıza entegre etmenize olanak tanır. Projenizin app/build.gradle.kts dosyasının sonuna aşağıdaki satırları ekleyin:

dependencies {
    // ...

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

Projenizi Gradle dosyalarıyla senkronize etme

Tüm bağımlılıkların uygulamanızda kullanılabildiğinden emin olmak için bu noktada projenizi gradle dosyalarıyla senkronize etmeniz gerekir.

Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i (Gradle senkronizasyon düğmesi) seçin. Bağımlılıkların düzgün çalışıp çalışmadığını kontrol etmek için uygulamayı tekrar da çalıştırabilirsiniz.

4. Anket gösterme

Bu adımda, bir anketi FragmentContainerView olarak oluşturmak için başlangıç uygulamasına işlevi ekleyeceksiniz.

Bu süreçte Android Studio, gerekli içe aktarma işlemlerini eklemenizi ister:

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

1. adım: FragmentContainerView ekleyin

Uygulamanın düzenine bir FragmentContainerView ekleyin. Daha sonra oluşturacağınız QuestionnaireFragment burada gösterilir.

  1. activity_main.xml dosyasını (res > layout > activity_main.xml) açın.
  2. Kod, Bölme ve Tasarım görünümleriyle ilgili seçenekleri Düzen Düzenleyici'nin sağ üst kısmında bulabilirsiniz.
  3. Kod görünümünü seçin. Düzen görünümü seçenekleri
  4. TextView'ye ihtiyacınız olmadığı için silin. <TextView ile kapanış /> arasındaki her şeyi sildiğinizden emin olun.
  5. ConstraintLayout içine bir FragmentContainerView ekleyin. activity_main.xml dosyanız aşağıdaki gibi görünmelidir:
    <?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>
    

2. Adım: QuestionnaireFragment yapılandırın

QuestionnaireFragment adlı restoranda rezervasyon yaptırmak için JSON kodlamalı bir FHIR Anketi gerekiyor. Anket küçük olduğundan (<512 KB) fragmanı oluşturmak için kullanılacak bir Bundle bağımsız değişkenine String olarak dahil edersiniz. Daha büyük anketler, performans nedeniyle URI olarak sağlanmalıdır.

İsterseniz questionnaire.json dosyasına bakabilirsiniz. Ancak Yapılandırılmış Veri Yakalama Kitaplığı'nın avantajlarından biri, FHIR Anketi'nin yapısını (veya FHIR hakkında herhangi bir bilgiyi) bilmenize gerek kalmadan bu dosyayı oluşturabilmenizdir. Bu dosyaya codelab'in ilerleyen bölümlerinde daha yakından bakacaksınız.

Oluşturucuyu kullanarak bir QuestionnaireFragment oluşturun ve ayarlayıcı işlevini kullanarak anketi ayarlayın. QuestionnaireFragment öğesini düzen kapsayıcısında görüntülemek için FragmentManager kullanarak bir FragmentTransaction oluşturun.

MainActivity.kt dosyasını açın ve MainActivity sınıfına aşağıdaki kodu ekleyin:

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

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

3. Adım: QuestionnaireFragment'i FragmentContainerView'a ekleyin

QuestionnaireFragment öğesini düzen kapsayıcısında görüntülemek için FragmentManager kullanarak bir FragmentTransaction oluşturun. FragmentManager, daha önce oluşturulan questionnaireParams öğesini kullanarak örnek oluşturma işlemini yönetir.

MainActivity sınıfına aşağıdaki kodu ekleyin:

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

Bölüntüleri kullanma hakkında daha fazla bilgi edinin.

Android Studio araç çubuğunda Çalıştır'ı (Çalıştır düğmesi) tıklayarak kod laboratuvarını çalıştıralım. Aşağıdakine benzer bir şey görürsünüz:

Emülatörde Oluşturulan Anket

Ankete gidin ve bazı yanıtlar girmeyi deneyin. Orijinal FHIR anketindeki temel türe göre otomatik olarak oluşturulan doğru/yanlış, metin ve tarih gibi birkaç farklı yanıt widget'ı kullanılır.

Teknik olarak, anket oluşturmak için yapmanız gereken tek şey bu. Tebrikler!

Kullanıcıların girdiği yanıtları göremiyorsanız anketler çok yararlı olmaz. Anket yanıtı almayla ilgili bir sonraki adıma geçelim.

5. Anket yanıtı alma

Önceki adımlarda, uygulamanızda bir FHIR anketi oluşturdunuz.

Bu bölümde, anket yanıtlarını QuestionnaireResponse olarak alırsınız.

submitQuestionnaire() yöntemini bulun ve aşağıdaki kodu ekleyin:

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

Anket yanıtını almak için daha önce oluşturulan anket parçasını alır ve ardından getQuestionnaireResponse() yöntemini kullanırsınız. Bu işlem, doğrudan veya Android FHIR SDK'sının diğer bölümleriyle kullanabileceğiniz bir HAPI FHIR QuestionnaireResponse döndürür. Bu kod laboratuvarında, günlükte görüntülemek için JSON dizesine dönüştürmek üzere diğer HAPI FHIR kitaplıkları kullanılır.

En son değişikliklerinizle yeniden oluşturmak için uygulamayı tekrar çalıştırın. Anket çalışmaya başladıktan sonra ankete bazı bilgiler girin ve Gönder'e dokunun. Günlükte, JSON olarak QuestionnaireResponse içeren bir mesaj görürsünüz.

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. QuestionnaireResponse öğesinden FHIR kaynakları ayıklama

Başlangıç projesine dahil edilen anket, basit bir hasta kaydı akışı içindir. Bu nedenle, anket yanıtlarını kullanarak bunlara dayalı bir FHIR hasta kaynağı oluşturabilirsiniz. Anket yanıtından FHIR kaynaklarına yapılan bu dönüşüme veri ayıklama denir. Bu işlemi, Yapılandırılmış Veri Yakalama Kitaplığı'nın ResourceMapper sınıfıyla yapabiliriz.

Veri ayıklama işlemini gerçekleştirmek için anketinizin, veri ayıklama işleminin nasıl yapılacağıyla ilgili bilgiler içerecek şekilde yazılmış olması gerekir. Neyse ki örnek anket, Tanıma dayalı ayıklama için zaten ayarlanmıştır.

submitQuestionnaire() yöntemini bulun ve aşağıdaki kodu ekleyin:

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

ResourceMapper.extract() için bir HAPI FHIR Anketi gerekir. Bu anketi, daha önceki anket JSON dizesini ayrıştırarak oluşturabilirsiniz. Ayrıca daha önce aldığımız bir QuestionnaireResponse da gerekir. Bir veya daha fazla ayıklanmış kaynak (bu durumda tek bir Hasta kaynağı) içeren bir HAPI FHIR işlem paketi döndürür.

En son değişikliklerinizle yeniden oluşturmak için uygulamayı tekrar çalıştırın. Çalıştırdıktan sonra bazı bilgileri girip Gönder'e dokunun. Günlükte, ayıklanan FHIR paketinin JSON temsilini içeren bir mesaj extraction result göreceksiniz.

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

7. Tebrikler!

Uygulamanızda FHIR anketlerini ve yanıtlarını işlemek için Yapılandırılmış Veri Yakalama Kitaplığı'nı kullandınız:

  • Anket gösterme
  • Anket yanıtı alma
  • QuestionnaireResponse dosyasından FHIR kaynakları ayıklama

Hepsi bu kadar.

Devam ederken uygulamanızda FHIR kaynaklarıyla daha fazla şekilde çalışmak isteyebilirsiniz. FHIR kaynaklarını uygulamanızda yerel olarak nasıl depolayacağınızı ve yöneteceğinizi ve verileri uzak bir FHIR sunucusuyla nasıl senkronize edeceğinizi öğrenmek için Android FHIR SDK'sının FHIR Motoru Kitaplığı'na göz atın.

İşlediğimiz konular

  • Android uygulamanıza Yapılandırılmış Veri Yakalama Kitaplığı'nı ekleme
  • FHIR anketleriyle çalışmak için QuestionnaireFragment ve ResourceMapper'ü kullanma

Sonraki Adımlar

  • Yapılandırılmış Veri Yakalama Kitaplığı dokümanlarını inceleyin
  • Oluşturulan anketlerin görünümünü ve tarzını özelleştirme
  • Yapılandırılmış Veri Yakalama Kitaplığı'nı kendi Android uygulamanıza uygulama

Daha Fazla Bilgi