স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি দিয়ে স্বাস্থ্য ডেটা ক্যাপচার এবং প্রক্রিয়া করুন

১. শুরু করার আগে

তুমি কী তৈরি করবে

এই কোডল্যাবে, আপনি স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি ব্যবহার করে একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে শিখবেন। আপনার অ্যাপটি FHIR প্রশ্নাবলী এবং প্রতিক্রিয়াগুলি রেন্ডার এবং প্রক্রিয়া করার জন্য স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি ব্যবহার করবে।

তুমি কি শিখবে

  • আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি কীভাবে একীভূত করবেন
  • কিভাবে একটি প্রশ্নপত্র প্রদর্শন করবেন
  • QuestionnaireResponse হিসেবে কীভাবে উত্তর পাবেন
  • QuestionnaireResponse থেকে FHIR রিসোর্স কীভাবে বের করবেন

তোমার যা লাগবে

এই কোডল্যাবটি স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরির উপর দৃষ্টি নিবদ্ধ করে। অপ্রাসঙ্গিক ধারণা এবং কোড ব্লকগুলিকে গ্লস করা হয়েছে এবং আপনাকে কেবল কপি এবং পেস্ট করার জন্য সরবরাহ করা হয়েছে। যদি আপনি আগে অ্যান্ড্রয়েড অ্যাপ তৈরি না করে থাকেন, তাহলে আপনি আপনার প্রথম অ্যাপ তৈরি করে শুরু করতে পারেন।

2. সেট আপ করুন

কোডটি ডাউনলোড করুন

এই কোডল্যাবের কোড ডাউনলোড করতে, Android FHIR SDK রেপো ক্লোন করুন: git clone https://github.com/google/android-fhir.git

এই কোডল্যাবের স্টার্টার প্রজেক্টটি codelabs/datacapture অবস্থিত।

অ্যান্ড্রয়েড স্টুডিওতে অ্যাপটি আমদানি করুন

চলুন শুরু করা যাক অ্যান্ড্রয়েড স্টুডিওতে স্টার্টার অ্যাপটি আমদানি করে।

অ্যান্ড্রয়েড স্টুডিও খুলুন, ইমপোর্ট প্রজেক্ট (গ্রেডল, ইক্লিপস এডিটি, ইত্যাদি) নির্বাচন করুন এবং আপনার আগে ডাউনলোড করা সোর্স কোড থেকে codelabs/datacapture ফোল্ডারটি নির্বাচন করুন।

Android Studio start screen

স্টার্টার অ্যাপটি চালান

এখন আপনি অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি আমদানি করেছেন, আপনি প্রথমবারের মতো অ্যাপটি চালানোর জন্য প্রস্তুত।

আপনার অ্যান্ড্রয়েড ডিভাইসটি USB এর মাধ্যমে আপনার হোস্টের সাথে সংযুক্ত করুন, অথবা অ্যান্ড্রয়েড স্টুডিও এমুলেটর শুরু করুন এবং রান ( Run button ) অ্যান্ড্রয়েড স্টুডিও টুলবারে।

হ্যালো ওয়ার্ল্ড অ্যাপ

আপনি দেখতে পাচ্ছেন যে এখানে এখনও খুব বেশি কিছু নেই, তাই আসুন আপনার অ্যাপে একটি প্রশ্নাবলী প্রদর্শন করা শুরু করি!

৩. প্রকল্পে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি যোগ করুন

স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরির জন্য নির্ভরতা যোগ করুন

স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি নির্ভরতা আপনাকে আপনার অ্যাপে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি সংহত করতে দেয়। আপনার প্রকল্পের app/build.gradle.kts ফাইলের শেষে নিম্নলিখিত লাইনগুলি যোগ করুন:

dependencies {
    // ...

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

আপনার প্রকল্পটি গ্র্যাডেল ফাইলগুলির সাথে সিঙ্ক করুন

আপনার অ্যাপে সমস্ত নির্ভরতা উপলব্ধ আছে কিনা তা নিশ্চিত করতে, এই মুহুর্তে আপনার প্রকল্পটি gradle ফাইলের সাথে সিঙ্ক করা উচিত।

গ্রেডল ফাইলের সাথে সিঙ্ক প্রজেক্ট নির্বাচন করুন ( Gradle syncbutton ) অ্যান্ড্রয়েড স্টুডিও টুলবার থেকে। নির্ভরতাগুলি সঠিকভাবে কাজ করছে কিনা তা পরীক্ষা করার জন্য আপনাকে আবার অ্যাপটি চালাতে হবে।

৪. একটি প্রশ্নপত্র প্রদর্শন করুন

এই ধাপে, আপনি FragmentContainerView এ একটি প্রশ্নাবলী রেন্ডার করার জন্য স্টার্টার অ্যাপে কার্যকারিতা যোগ করবেন।

পথে, অ্যান্ড্রয়েড স্টুডিও আপনাকে প্রয়োজনীয় আমদানি যোগ করার জন্য অনুরোধ করবে:

  • 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. কোড ভিউ নির্বাচন করুন। Layout view options
  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 KB), আপনি এটিকে একটি String হিসাবে আর্গুমেন্টের একটি Bundle অন্তর্ভুক্ত করবেন যা খণ্ডটি তৈরি করতে ব্যবহৃত হবে। কর্মক্ষমতার কারণে URI হিসাবে বড় প্রশ্নাবলী সরবরাহ করা উচিত।

আপনি চাইলে questionnaire.json ফাইলটি দেখতে পারেন, কিন্তু স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরির একটি সুবিধা হল যে এটি রেন্ডার করার জন্য আপনাকে FHIR প্রশ্নাবলীর কাঠামো (অথবা FHIR সম্পর্কে কিছু) জানার প্রয়োজন নেই! আপনি কোডল্যাবে পরে এই ফাইলটি আরও ঘনিষ্ঠভাবে দেখবেন।

একটি QuestionnaireFragment তৈরি করুন, এর বিল্ডার ব্যবহার করে এবং setter ফাংশন ব্যবহার করে প্রশ্নাবলী সেট করুন। লেআউট কন্টেইনারের মধ্যে 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()
}

টুকরোগুলো কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও জানুন।

চলুন Run এ ক্লিক করে কোডল্যাবটি রান করি ( Run button ) অ্যান্ড্রয়েড স্টুডিও টুলবারে। আপনি এর মতো কিছু দেখতে পাবেন:

এমুলেটরে প্রশ্নাবলী রেন্ডার করা হয়েছে

প্রশ্নাবলীটি ঘুরে দেখুন এবং কিছু উত্তর প্রবেশ করার চেষ্টা করুন। বুলিয়ান, টেক্সট এবং তারিখ সহ কয়েকটি ভিন্ন উত্তর উইজেট ব্যবহার করা হয়েছে, যা মূল FHIR প্রশ্নাবলীর অন্তর্নিহিত ধরণের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে রেন্ডার করা হয়েছিল।

টেকনিক্যালি, প্রশ্নপত্র তৈরি করতে আপনাকে এটুকুই করতে হবে! অভিনন্দন!

ব্যবহারকারীরা যে উত্তরগুলি ইনপুট করেন তা যদি আপনি দেখতে না পান তবে প্রশ্নাবলী খুব একটা সহায়ক নয়। প্রশ্নাবলীর উত্তর পাওয়ার পরবর্তী ধাপে যাওয়া যাক!

৫. একটি প্রশ্নাবলীর উত্তর পান

পূর্ববর্তী ধাপগুলিতে, আপনি আপনার অ্যাপে একটি 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 স্ট্রিংয়ে রূপান্তর করে লগে দেখতে পারবে।

আপনার সর্বশেষ পরিবর্তনগুলি দিয়ে এটি পুনর্নির্মাণ করতে অ্যাপটি আবার চালান। এটি চালু হয়ে গেলে, প্রশ্নাবলীতে কিছু তথ্য প্রবেশ করান এবং জমা দিন এ আলতো চাপুন। লগে, আপনি JSON হিসাবে QuestionnaireResponse সম্বলিত একটি বার্তা দেখতে পাবেন।

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"}]}]}]}]}

৬. একটি প্রশ্নাবলীর উত্তর থেকে 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"}}]}

৭. অভিনন্দন!

আপনার অ্যাপে FHIR প্রশ্নাবলী এবং উত্তরগুলি প্রক্রিয়া করার জন্য আপনি স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি ব্যবহার করেছেন:

  • একটি প্রশ্নপত্র প্রদর্শন করুন
  • একটি প্রশ্নাবলীর উত্তর পান
  • একটি QuestionnaireResponse থেকে FHIR রিসোর্স বের করুন

এটি চালু করার জন্য আপনার কেবল এটুকুই প্রয়োজন!

আপনি যখন এগিয়ে যাবেন, তখন আপনার অ্যাপ্লিকেশন জুড়ে আরও বিভিন্ন উপায়ে FHIR রিসোর্সগুলির সাথে কাজ করতে আপনার পছন্দ হতে পারে। আপনার অ্যাপ্লিকেশনে স্থানীয়ভাবে FHIR রিসোর্সগুলি কীভাবে সংরক্ষণ এবং পরিচালনা করবেন এবং একটি দূরবর্তী FHIR সার্ভারের সাথে ডেটা সিঙ্ক্রোনাইজ করবেন তা শিখতে Android FHIR SDK এর FHIR ইঞ্জিন লাইব্রেরিটি দেখুন।

আমরা যা কভার করেছি

  • আপনার অ্যান্ড্রয়েড অ্যাপে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি কীভাবে যুক্ত করবেন
  • FHIR প্রশ্নাবলীর সাথে কাজ করার জন্য QuestionnaireFragment এবং ResourceMapper কীভাবে ব্যবহার করবেন

পরবর্তী পদক্ষেপ

  • স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরির ডকুমেন্টেশন দেখুন।
  • রেন্ডার করা প্রশ্নাবলীর চেহারা এবং অনুভূতি কাস্টমাইজ করুন
  • আপনার নিজস্ব অ্যান্ড্রয়েড অ্যাপে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি প্রয়োগ করুন

আরও জানুন