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

1. قبل از شروع

چیزی که خواهی ساخت

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

چیزی که یاد خواهید گرفت

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

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

این کد لبه روی کتابخانه ضبط داده های ساخت یافته متمرکز شده است. مفاهیم غیر مرتبط و بلوک‌های کد محو شده‌اند و برای شما ارائه می‌شوند تا به سادگی کپی و جای‌گذاری کنید. اگر قبلاً برنامه‌های Android ساخته نشده‌اید، می‌توانید با ساخت اولین برنامه خود شروع کنید.

2. راه اندازی شوید

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

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

پروژه شروع برای این کد لبه در codelabs/datacapture قرار دارد.

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

بیایید با وارد کردن برنامه شروع به Android Studio شروع کنیم.

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

Android Studio start screen

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

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

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

اپلیکیشن Hello World

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

3. کتابخانه Structured Data Capture را به پروژه اضافه کنید

وابستگی ها را برای کتابخانه ضبط داده های ساخت یافته اضافه کنید

وابستگی‌های Structured Data Capture Library به شما این امکان را می‌دهد که کتابخانه ضبط داده‌های ساخت‌یافته را در برنامه خود ادغام کنید. خطوط زیر را به انتهای فایل app/build.gradle.kts پروژه خود اضافه کنید:

dependencies {
    // ...

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

پروژه خود را با فایل های Gradle همگام سازی کنید

برای اطمینان از اینکه همه وابستگی ها برای برنامه شما در دسترس هستند، باید پروژه خود را با فایل های gradle در این مرحله همگام کنید.

انتخاب پروژه همگام سازی با فایل های Gradle ( Gradle syncbutton ) از نوار ابزار Android Studio. همچنین می‌توانید برنامه را دوباره اجرا کنید تا بررسی کنید وابستگی‌ها درست کار می‌کنند.

4. نمایش یک پرسشنامه

در این مرحله، عملکردی را به برنامه شروع کننده اضافه می کنید تا پرسشنامه را در FragmentContainerView ارائه کنید.

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

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

مرحله 1: یک FragmentContainerView اضافه کنید

یک FragmentContainerView به طرح‌بندی برنامه اضافه کنید. اینجا جایی است که QuestionnaireFragment که بعدا ایجاد خواهید کرد نمایش داده می شود.

  1. activity_main.xml ( res > layout > activity_main.xml ) را باز کنید.
  2. گزینه های نماهای Code، Split و Design را در سمت راست بالای Layout Editor پیدا کنید.
  3. نمای کد را انتخاب کنید. Layout view options
  4. شما به TextView نیاز ندارید، پس آن را حذف کنید. مطمئن شوید که همه چیز را از <TextView تا بسته شدن /> حذف کنید.
  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 به FragmentContainerView اضافه کنید

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

در صورت تمایل می توانید به فایل questionnaire.json نگاهی بیندازید، اما یکی از مزایای کتابخانه Structured Data Capture این است که برای ارائه آن نیازی به دانستن ساختار پرسشنامه FHIR (یا هر چیزی در مورد FHIR) ندارید. آن را این فایل را بعدا در Codelab با دقت بیشتری بررسی خواهید کرد.

یک QuestionnaireFragment با استفاده از سازنده آن ایجاد کنید و پرسشنامه را با استفاده از تابع تنظیم کننده تنظیم کنید. برای نمایش QuestionnaireFragment در ظرف layout، از 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()
    )
  }
}

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

بیایید با کلیک روی Run ( Run button ) در نوار ابزار 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() استفاده می کنید. این یک QuestionnaireResponse HAPI FHIR را برمی گرداند که می توانید مستقیماً یا با سایر بخش های 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. منابع FHIR را از پاسخ پرسشنامه استخراج کنید

پرسشنامه همراه با پروژه شروع کننده برای یک جریان ثبت نام بیمار ساده است، بنابراین ممکن است در نهایت بخواهید از پاسخ های پرسشنامه برای ایجاد یک منبع بیمار FHIR بر اساس آنها استفاده کنید. این تبدیل از پاسخ پرسشنامه به منابع FHIR استخراج داده نامیده می شود. ما می‌توانیم این کار را با کلاس ResourceMapper از Structured Data Capture Library انجام دهیم.

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

متد 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 پیام حاوی نمایش 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"}}]}

7. تبریک می گویم!

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

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

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

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

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

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

مراحل بعدی

  • اسناد مربوط به کتابخانه جمع آوری داده های ساخت یافته را کاوش کنید
  • ظاهر و احساس پرسشنامه های ارائه شده را سفارشی کنید
  • کتابخانه Structured Data Capture را در برنامه اندروید خود اعمال کنید

بیشتر بدانید