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

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

आपको क्या बनाना है

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

आपको क्या सीखने को मिलेगा

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

आपको किन चीज़ों की ज़रूरत होगी

  • Android Studio (v4.1.2+) का नया वर्शन
  • Android एमुलेटर या कोई Android डिवाइस
  • सैंपल कोड
  • Kotlin में Android डेवलपमेंट की बुनियादी जानकारी

इस कोडलैब में, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी पर फ़ोकस किया गया है. काम के नहीं लगने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, उन्हें कॉपी करके चिपकाया जा सकता है. अगर आपने पहले कभी 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.2.0")
    implementation("androidx.fragment:fragment-ktx:1.6.0")
}

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

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

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

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 > layout > 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>
    

दूसरा चरण: 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")

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

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

लेआउट कंटेनर में QuestionnaireFragment दिखाने के लिए, FragmentManager का इस्तेमाल करके FragmentTransaction बनाएं. FragmentManager, पहले से बनाए गए questionnaireParams का इस्तेमाल करके इंस्टैंशिएशन को मैनेज करता है.

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

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

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

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

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

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

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

5. सवालों की सूची का जवाब पाना

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

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

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 के अन्य हिस्सों के साथ किया जा सकता है. यह कोडलैब, लॉग में देखने के लिए, इसे JSON स्ट्रिंग में बदलने के लिए, अन्य HAPI FHIR लाइब्रेरी का इस्तेमाल करता है.

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

हमने क्या-क्या कवर किया है

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

अगले चरण

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

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