स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की मदद से, स्वास्थ्य से जुड़ा डेटा कैप्चर करें और प्रोसेस करें

1. शुरू करने से पहले

आप क्या बनाएंगे

इस कोडलैब में, आपको स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की मदद से Android ऐप्लिकेशन बनाने का तरीका पता चलेगा. आपका ऐप्लिकेशन, FHIR सवालों की सूचियों और उनके जवाबों को रेंडर और प्रोसेस करने के लिए, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का इस्तेमाल करेगा.

आप इन चीज़ों के बारे में जानेंगे

  • अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी को इंटिग्रेट करने का तरीका
  • सवालों की सूची दिखाने का तरीका
  • QuestionnaireResponse में जवाब पाने का तरीका
  • किसी QuestionnaireResponse से FHIR संसाधन निकालने का तरीका

आपको इनकी ज़रूरत होगी

यह कोडलैब, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी पर फ़ोकस करता है. जो कॉन्सेप्ट और कोड ब्लॉक काम के नहीं हैं उन्हें ग्लॉस कर दिया जाता है. आपको इन्हें आसानी से कॉपी करके चिपकाया जा सकता है. अगर आपने पहले से Android ऐप्लिकेशन नहीं बनाए हैं, तो शुरुआत में अपना पहला ऐप्लिकेशन बनाएं.

2. सेट अप करें

कोड डाउनलोड करें

इस कोडलैब का कोड डाउनलोड करने के लिए, Android FHIR SDK टूल के रेपो का क्लोन बनाएं: git clone https://github.com/google/android-fhir.git

इस कोडलैब के लिए स्टार्टर प्रोजेक्ट, codelabs/datacapture में मौजूद है.

Android Studio में ऐप्लिकेशन इंपोर्ट करें

सबसे पहले, स्टार्टर ऐप्लिकेशन को Android Studio में इंपोर्ट करें.

Android Studio खोलें, फिर प्रोजेक्ट इंपोर्ट करें (gradle, Eclipse ADT वगैरह) को चुनें. इसके बाद, उस सोर्स कोड से codelabs/datacapture फ़ोल्डर चुनें जिसे आपने पहले डाउनलोड किया है.

Android Studio की शुरुआती स्क्रीन

स्टार्टर ऐप चलाएं

Android Studio में प्रोजेक्ट इंपोर्ट करने के बाद, पहली बार इस ऐप्लिकेशन को इस्तेमाल किया जा सकता है.

यूएसबी की मदद से अपने Android डिवाइस को होस्ट से कनेक्ट करें या Android Studio एम्युलेटर शुरू करें. इसके बाद, Android Studio के टूलबार में,चलाएं (चलाएं बटन) पर क्लिक करें.

Hello World ऐप्लिकेशन

जैसा कि आपको दिख रहा है कि यहां अभी ज़्यादा कुछ नहीं है, तो चलिए सीधे आपके ऐप्लिकेशन में सवालों की सूची दिखाते हैं!

3. प्रोजेक्ट में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी जोड़ना

स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी के लिए डिपेंडेंसी जोड़ें

स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी डिपेंडेंसी की मदद से, अपने ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी को इंटिग्रेट किया जा सकता है. अपने प्रोजेक्ट की app/build.gradle.kts फ़ाइल के आखिर में, ये लाइनें जोड़ें:

dependencies {
    // ...

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

अपना प्रोजेक्ट Gradle फ़ाइलों के साथ सिंक करना

यह पक्का करने के लिए कि आपके ऐप्लिकेशन के लिए सभी डिपेंडेंसी उपलब्ध हों, आपको अपना प्रोजेक्ट इसी समय ग्रेडल फ़ाइलों के साथ सिंक करना होगा.

Android Studio के टूलबार में, Gadle Files के साथ प्रोजेक्ट सिंक करें (Gradle सिंक बटन) को चुनें. यह देखने के लिए कि डिपेंडेंसी सही तरीके से काम कर रही हैं या नहीं, आप ऐप्लिकेशन को फिर से चलाएं.

4. सवालों की सूची दिखाना

इस चरण में, आपको FragmentContainerView में सवालों की सूची को रेंडर करने के लिए, स्टार्टर ऐप्लिकेशन में फ़ंक्शन जोड़ना होगा.

इस दौरान, Android Studio आपको ज़रूरी इंपोर्ट जोड़ने का सुझाव देगा:

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

पहला चरण: FragmentContainerView जोड़ना

ऐप्लिकेशन के लेआउट में FragmentContainerView जोड़ें. बाद में बनाए जाने वाले QuestionnaireFragment यहां दिखेंगे.

  1. activity_main.xml (res > लेआउट > activity_main.xml) खोलें.
  2. लेआउट एडिटर के ऊपर दाईं ओर, कोड, स्प्लिट, और डिज़ाइन व्यू के विकल्प ढूंढें.
  3. कोड व्यू चुनें. लेआउट व्यू के विकल्प
  4. आपको TextView की ज़रूरत नहीं है. इसलिए, इसे मिटा दें. <TextView से लेकर /> बंद होने तक, सब कुछ मिटाना न भूलें.
  5. ConstraintLayout में एक FragmentContainerView जोड़ें. आपकी activity_main.xml फ़ाइल इस तरह दिखेगी:
    <?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>
    

दूसरा चरण: FragmentContainerView में QuestionnaireFragment जोड़ना

QuestionnaireFragment को रेंडर करने के लिए, उसे JSON कोड में बदली गई FHIR सवालों की सूची की ज़रूरत होती है. सवालों की सूची का साइज़ छोटा (512 केबी से कम) है. इसलिए, आपको इसे Bundle तर्कों के String के तौर पर शामिल करना होगा. इनका इस्तेमाल फ़्रैगमेंट बनाने के लिए किया जाएगा. परफ़ॉर्मेंस की वजह से, बड़े सवालों की सूचियों को URI के तौर पर सबमिट किया जाना चाहिए.

आप चाहें तो questionnaire.json फ़ाइल देख सकते हैं. स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का एक फ़ायदा यह भी है कि आपको उसे रेंडर करने के लिए, FHIR सवालों की सूची (या FHIR के बारे में कुछ भी) की जानकारी की ज़रूरत नहीं है! बाद में कोडलैब में, आपको इस फ़ाइल के बारे में ज़्यादा जानकारी मिलेगी.

एक QuestionnaireFragment बनाने के लिए, इसके बिल्डर का इस्तेमाल करें और सेटर फ़ंक्शन का इस्तेमाल करके, सवालों की सूची को सेट करें. लेआउट कंटेनर में QuestionnaireFragment को दिखाने के लिए, FragmentManager का इस्तेमाल करके FragmentTransaction बनाएं.

MainActivity.kt खोलें और इस कोड को MainActivity क्लास में जोड़ें:

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

फ़्रैगमेंट इस्तेमाल करने के तरीके के बारे में ज़्यादा जानें.

Android Studio के टूलबार में चलाएं (चलाएं बटन) पर क्लिक करके, कोडलैब चलाएं. आपको इससे मिलता-जुलता कुछ दिखेगा:

एम्युलेटर में रेंडर की गई सवालों की सूची

सवालों की सूची को देखें और कुछ जवाब डालकर देखें. ऐसे कुछ अलग-अलग जवाब वाले विजेट इस्तेमाल किए जाते हैं, जिनमें बूलियन, टेक्स्ट, और तारीख शामिल हैं. इन्हें मूल FHIR सवालों की सूची में दिए गए टाइप के आधार पर अपने-आप रेंडर किया गया था.

तकनीकी रूप से, सवालों की सूची को रेंडर करने के लिए आपको बस इतना ही करना होगा! बधाई हो!

अगर आपको वे जवाब नहीं दिखते जो उपयोगकर्ता देते हैं, तो सवालाें की सूची से बहुत मदद नहीं मिलती. आइए, सवालों की सूची का जवाब पाने के अगले चरण पर चलते हैं!

5. सवालों के जवाब पाएं

पिछले चरणों में, आपने अपने ऐप्लिकेशन में FHIR के बारे में सवालों की सूची को रेंडर किया था.

इस सेक्शन में, आपको सवालों की सूची के जवाब, सवालों की सूची के जवाब के तौर पर मिलेंगे.

submitQuestionnaire() तरीका ढूंढें और यह कोड जोड़ें:

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

सवालों की सूची में जवाब पाने के लिए, पहले बनाए गए सवालों की सूची के फ़्रैगमेंट को फिर से पाएं. इसके बाद, getQuestionnaireResponse() तरीके का इस्तेमाल करें. इससे HAPI FHIR QuestionnaireResponse मिलता है, जिसे सीधे तौर पर या Android FHIR SDK टूल के दूसरे हिस्सों के साथ इस्तेमाल किया जा सकता है. यह कोडलैब, दूसरी HAPI FHIR लाइब्रेरी का इस्तेमाल करके उसे लॉग में देखने के लिए, JSON स्ट्रिंग में बदलता है.

नए बदलावों के साथ ऐप्लिकेशन को फिर से बनाने के लिए, उसे फिर से चलाएं. जवाब देने के बाद, सवालों की सूची में कुछ जानकारी डालें और सबमिट करें पर टैप करें. लॉग में, आपको एक मैसेज दिखेगा, जिसमें QuestionnaireResponse शामिल होगा. यह 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. QuestionnaireResponse से FHIR संसाधन निकालें

स्टार्टर प्रोजेक्ट में दिए गए सवालों की सूची, एक सामान्य मरीज़ रजिस्ट्रेशन फ़्लो के लिए है. इसलिए, हो सकता है कि सवालों की सूची में दिए गए जवाबों का इस्तेमाल, FHIR मरीज़ के लिए संसाधन बनाने के लिए करना पड़े. FHIR संसाधनों के लिए सवालों की सूची के जवाब से होने वाले इस बदलाव को डेटा निकालना कहा जाता है. स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की ResourceMapper क्लास की मदद से ऐसा किया जा सकता है.

डेटा निकालने के लिए, आपकी सवालों की सूची में डेटा निकालने के तरीके के बारे में जानकारी शामिल होनी चाहिए. अच्छी बात यह है कि सवालों की सूची के नमूने, परिभाषा के हिसाब से डेटा पाने के लिए पहले ही सेट अप किए जा चुके हैं.

submitQuestionnaire() तरीका ढूंढें और यह कोड जोड़ें:

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

ResourceMapper.extract() को HAPI FHIR वाले सवालों की सूची की ज़रूरत होती है. इसे बनाने के लिए, पहले दी गई सवालों की सूची की JSON स्ट्रिंग को पार्स किया जा सकता है. साथ ही, QuestionnaireResponse की जानकारी भी इकट्ठा की जा सकती है, जो हमें पहले ही मिल चुकी है. यह HAPI FHIR ट्रांज़ैक्शन बंडल के बारे में जानकारी देता है, जिसमें एक या एक से ज़्यादा एक्सट्रैक्ट किए गए संसाधन होते हैं. इस मामले में, यह एक पेशेंट रिसॉर्स है.

नए बदलावों के साथ ऐप्लिकेशन को फिर से बनाने के लिए, उसे फिर से चलाएं. इसके चलने के बाद, कुछ जानकारी डालें और सबमिट करें पर टैप करें. अब आपको लॉग में एक मैसेज extraction result दिखेगा, जिसमें एक्सट्रैक्ट किए गए FHIR बंडल का JSON फ़ॉर्मैट शामिल होगा.

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

7. बधाई!

आपने FHIR की सवालों की सूचियों और जवाबों को प्रोसेस करने के लिए, अपने ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का इस्तेमाल किया है:

  • सवालों की सूची दिखाना
  • सवालों के जवाब पाएं
  • QuestionnaireResponse से FHIR संसाधन निकालें

इसे शुरू करने और इस्तेमाल करने के लिए, आपको बस इतना ही करने की ज़रूरत है!

आगे बढ़ने पर, हो सकता है कि आप FHIR संसाधनों के साथ अपने पूरे ऐप्लिकेशन में अलग-अलग तरीकों से काम करना चाहें. अपने ऐप्लिकेशन में FHIR संसाधनों को स्थानीय रूप से सेव और मैनेज करने का तरीका जानने के लिए, Android FHIR SDK टूल की FHIR Engine लाइब्रेरी देखें. साथ ही, रिमोट FHIR सर्वर से डेटा को सिंक करने का तरीका जानें.

हमने वीडियो में क्या-क्या शामिल किया है

  • अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी जोड़ने का तरीका
  • FHIR के सवालों की सूचियों के जवाब देने के लिए, QuestionnaireFragment और ResourceMapper इस्तेमाल करने का तरीका

अगले चरण

  • स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी के दस्तावेज़ देखें
  • रेंडर की गई सवालों की सूची के लुक और स्टाइल को पसंद के मुताबिक बनाएं
  • अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का इस्तेमाल करना

ज़्यादा जानें