با کتابخانه ضبط داده های ساختاریافته، داده های سلامت را ضبط و پردازش کنید

۱. قبل از شروع

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یاد خواهید گرفت که چگونه یک برنامه اندروید با کتابخانه Structured Data Capture بسازید. برنامه شما از کتابخانه Structured Data Capture برای رندر و پردازش پرسشنامه‌ها و پاسخ‌های FHIR استفاده خواهد کرد.

آنچه یاد خواهید گرفت

  • چگونه کتابخانه ثبت داده‌های ساختاریافته را در برنامه اندروید خود ادغام کنیم؟
  • نحوه نمایش پرسشنامه
  • چگونه پاسخ‌ها را به صورت QuestionnaireResponse دریافت کنیم؟
  • نحوه استخراج منابع FHIR از یک QuestionnaireResponse

آنچه نیاز دارید

این آزمایشگاه کد بر روی کتابخانه ثبت داده‌های ساختاریافته (Structured Data Capture Library ) تمرکز دارد. مفاهیم و بلوک‌های کد نامرتبط، حذف شده‌اند و برای کپی و پیست ساده در اختیار شما قرار گرفته‌اند. اگر قبلاً برنامه‌های اندروید نساخته‌اید، می‌توانید با ساخت اولین برنامه خود شروع کنید.

۲. آماده شوید

کد را دانلود کنید

برای دانلود کد این آزمایشگاه کد، مخزن Android FHIR SDK را کلون کنید: git clone https://github.com/google/android-fhir.git

پروژه اولیه این codelab در codelabs/datacapture قرار دارد.

وارد کردن برنامه به اندروید استودیو

بیایید با وارد کردن برنامه اولیه به اندروید استودیو شروع کنیم.

اندروید استودیو را باز کنید، گزینه‌ی Import Project (Gradle، Eclipse ADT و غیره) را انتخاب کنید و پوشه‌ی codelabs/datacapture را از کد منبعی که قبلاً دانلود کرده‌اید، انتخاب کنید.

Android Studio start screen

برنامه شروع کننده را اجرا کنید

حالا که پروژه را به اندروید استودیو وارد کرده‌اید، آماده‌اید تا برای اولین بار برنامه را اجرا کنید.

دستگاه اندروید خود را از طریق USB به هاست خود وصل کنید، یا شبیه‌ساز اندروید استودیو را اجرا کنید و روی Run () کلیک کنید. Run button ) در نوار ابزار اندروید استودیو.

برنامه سلام دنیا

همانطور که می‌بینید هنوز چیز زیادی اینجا وجود ندارد، پس بیایید مستقیماً به نمایش پرسشنامه در برنامه خود بپردازیم!

۳. کتابخانه‌ی ثبت داده‌های ساختاریافته را به پروژه اضافه کنید

وابستگی‌های کتابخانه‌ی Structured Data Capture را اضافه کنید

وابستگی‌های کتابخانه‌ی ثبت داده‌های ساختاریافته (Structured Data Capture Library) به شما امکان می‌دهند کتابخانه‌ی ثبت داده‌های ساختاریافته را در برنامه‌ی خود ادغام کنید. خطوط زیر را به انتهای فایل 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 همگام‌سازی کنید.

پروژه همگام‌سازی با فایل‌های 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. گزینه‌های مربوط به نماهای Code، Split و Design را در سمت راست بالای ویرایشگر Layout پیدا کنید.
  3. نمای کد را انتخاب کنید. Layout view options
  4. شما به TextView نیازی ندارید، پس آن را حذف کنید. حتماً همه چیز را از <TextView تا closure /> حذف کنید.
  5. یک FragmentContainerView درون ConstraintLayout اضافه کنید. فایل 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>
    

مرحله 2: پیکربندی یک QuestionnaireFragment

QuestionnaireFragment برای رندر شدن به یک پرسشنامه FHIR کدگذاری شده با JSON نیاز دارد. از آنجایی که پرسشنامه کوچک است (کمتر از ۵۱۲ کیلوبایت)، آن را به عنوان یک String در یک Bundle از آرگومان‌ها که برای ایجاد قطعه استفاده می‌شوند، قرار خواهید داد. پرسشنامه‌های بزرگتر باید به دلایل عملکردی به عنوان یک URI ارائه شوند.

اگر بخواهید می‌توانید فایل questionnaire.json را بررسی کنید، اما یکی از مزایای کتابخانه‌ی ثبت داده‌های ساختاریافته این است که برای رندر کردن پرسشنامه‌ی FHIR نیازی به دانستن ساختار آن (یا هر چیز دیگری در مورد FHIR) ندارید! بعداً در آزمایشگاه کد، این فایل را با دقت بیشتری بررسی خواهید کرد.

با استفاده از سازنده‌ی QuestionnaireFragment، یک QuestionnaireFragment ایجاد کنید و با استفاده از تابع setter، پرسشنامه را تنظیم کنید. برای نمایش QuestionnaireFragment در داخل layout container، از FragmentManager برای ایجاد یک FragmentTransaction استفاده کنید.

MainActivity.kt را باز کنید و کد زیر را به کلاس MainActivity اضافه کنید:

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

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

مرحله 3: افزودن QuestionnaireFragment به FragmentContainerView

برای نمایش 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()
}

درباره نحوه استفاده از قطعات بیشتر بدانید.

بیایید codelab را با کلیک روی Run ( اجرا کنیم. Run button ) را در نوار ابزار اندروید استودیو انتخاب کنید. باید چیزی شبیه به این را ببینید:

پرسشنامه در شبیه‌ساز رندر شد

در پرسشنامه حرکت کنید و سعی کنید چند پاسخ وارد کنید. از چندین ابزارک پاسخ مختلف استفاده شده است، از جمله مقادیر بولی، متن و تاریخ، که به طور خودکار بر اساس نوع داده اصلی در پرسشنامه اصلی FHIR رندر شده‌اند.

از نظر فنی، این تمام کاری است که برای رندر کردن یک پرسشنامه باید انجام دهید! تبریک!

اگر نتوانید پاسخ‌هایی که کاربران وارد می‌کنند را ببینید، پرسشنامه خیلی مفید نخواهد بود. بیایید به مرحله بعدی یعنی دریافت پاسخ پرسشنامه برویم!

۵. پاسخ پرسشنامه را دریافت کنید

در مراحل قبلی، شما یک پرسشنامه 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 از آن استفاده کنید. این codelab از سایر کتابخانه‌های HAPI FHIR برای تبدیل آن به یک رشته JSON برای مشاهده در لاگ استفاده می‌کند.

برنامه را دوباره اجرا کنید تا با آخرین تغییرات خود آن را بازسازی کنید. پس از اجرا، اطلاعاتی را در پرسشنامه وارد کنید و روی ارسال (Submit) ضربه بزنید. در گزارش، باید پیامی حاوی 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"}]}]}]}]}

۶. استخراج منابع 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 را برمی‌گرداند که شامل یک یا چند منبع استخراج شده است - در این مورد یک منبع Patient.

برنامه را دوباره اجرا کنید تا با آخرین تغییرات خود آن را بازسازی کنید. پس از اجرا، اطلاعاتی را وارد کنید و روی ارسال (Submit) ضربه بزنید. در گزارش، اکنون باید extraction result پیام حاوی نمایش JSON از بسته FHIR استخراج شده را مشاهده کنید.

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

۷. تبریک می‌گویم!

شما از کتابخانه‌ی ثبت داده‌های ساختاریافته برای پردازش پرسشنامه‌ها و پاسخ‌های FHIR در برنامه‌ی خود استفاده کرده‌اید:

  • نمایش پرسشنامه
  • دریافت پاسخنامه پرسشنامه
  • استخراج منابع FHIR از QuestionnaireResponse

این تمام چیزی است که برای راه‌اندازی و اجرای آن نیاز دارید!

با ادامه‌ی کار، ممکن است بخواهید با منابع FHIR به روش‌های بیشتری در سراسر برنامه‌ی خود کار کنید. برای یادگیری نحوه‌ی ذخیره و مدیریت منابع FHIR به صورت محلی در برنامه‌ی خود و همگام‌سازی داده‌ها با یک سرور FHIR از راه دور، به کتابخانه‌ی موتور FHIR در Android FHIR SDK مراجعه کنید.

آنچه ما پوشش داده‌ایم

  • نحوه اضافه کردن کتابخانه ضبط داده‌های ساختاریافته به برنامه اندروید شما
  • نحوه استفاده از QuestionnaireFragment و ResourceMapper برای کار با پرسشنامه‌های FHIR

مراحل بعدی

  • مستندات کتابخانه ثبت داده‌های ساختاریافته را بررسی کنید
  • ظاهر و حس پرسشنامه‌های رندر شده را سفارشی کنید
  • کتابخانه‌ی ثبت داده‌های ساختاریافته را در برنامه‌ی اندروید خود اعمال کنید

اطلاعات بیشتر