إدارة بيانات FHIR من تطبيق Android باستخدام OHS وGoogle Cloud

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، سنتعلم كيفية استخدام OHS (Open Health Stack) وGoogle Cloud Healthcare API لإنشاء حلول مبتكرة للرعاية الصحية تكون آمنة وقابلة للتطوّر ومتوافقة. من خلال الجمع بين هذه الأدوات الفعّالة، سيتمكّن العاملون في مجال الرعاية الصحية والمطوّرين من إنشاء حلول قائمة على البيانات تساهم بشكل كبير في تحسين نتائج الرعاية الصحية للمرضى.

نعتزم الاستفادة من مزايا Open Health Stack وGoogle Cloud Healthcare API في تطبيق للأجهزة الجوّالة يستخدم حزمة Android-FHIR SDK من أجل السماح للمستخدمين بإدارة سجلّات المرضى من خلال FHIR في Google Cloud.

لنطّلِع على خطوات التنفيذ.

ما الذي ستقوم ببنائه

في هذا التنفيذ،

  • سنستخدم مكتبة التقاط البيانات المنظَّمة لعرض استبيان ومكتبة FHIR Engine لتخزين محتوى FHIR الخاص بالردّ.
  • سيتم بعد ذلك تحميل البيانات إلى Cloud FHIR Store باستخدام Cloud Healthcare API.
  • قبل التحميل، سنبدأ أولاً بالمصادقة على أنفسنا باستخدام Firebase.

8514f90f016ecfc0.png

يمثل الرسم التخطيطي أعلاه التدفق. اقرأ المدونة للحصول على شرح تفصيلي لكل مكوّن.

2. المتطلبات

  • متصفح، مثل Chrome أو Firefox
  • مشروع على Google Cloud تم تفعيل الفوترة فيه
  • إصدار حديث من "استوديو Android"
  • إعداد محاكي Android (يمكنك أيضًا استخدام جهاز Android الفعلي)

إنشاء مشروعك

  1. في Google Cloud Console، ضمن صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
  3. تفعيل واجهات برمجة التطبيقات اللازمة (BigQuery وHealthcare API)

تفعيل Cloud Shell

  1. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud وتكون محمَّلة مسبقًا بـ bq:

من Cloud Console، انقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة:

51622c00acec2fa.png

  1. بعد الربط بخدمة Cloud Shell، من المفترَض أن يظهر لك أنّه سبق أن تمت مصادقتك وأنّ المشروع قد تم ضبطه على رقم تعريف مشروعك. إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>

يمكنك الرجوع إلى المستندات حول أوامر gcloud واستخدامها.

3- عملية إعداد Healthcare API

  1. التأكّد من تفعيل واجهة Healthcare API: يجب الانتقال إلى مكتبة Google Cloud Console API، والبحث عن Healthcare API، والنقر على "تفعيل"، وستتم إضافة واجهة برمجة التطبيقات هذه وإضافة حساب خدمة الرعاية الصحية إلى المشروع.
  2. منح أذونات مشرف BigQuery لحساب الخدمة، يمكنك تنفيذ أمر gcloud أدناه في الوحدة الطرفية Cloud Shell لمنح الإذن:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

ملاحظة: يمكنك العثور على PROJECT_ID وPROJECT_NUMBER من وحدة التحكم. راجع doc لتحديد الهوية.

إنشاء مجموعة بيانات خاصة بالرعاية الصحية

في Cloud Shell، شغِّل الأمر التالي لإنشاء مجموعة بيانات الرعاية الصحية:

gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1

اضبط الموقع الجغرافي على منطقة محدّدة.

إنشاء مخزن بيانات FHIR

في Cloud Shell، شغّل الأمر أدناه لإنشاء مخزن بيانات FHIR:

gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
  --dataset=<<DATASET_ID>> --location=us-central1 --version=r4

اضبط الموقع الجغرافي على منطقة محدّدة.

4. إعداد وتدفق BigQuery

يتناول هذا حفظ بيانات FHIR Store في مجموعة بيانات BigQuery بحيث يمكن الاستعلام عنها وبرمجتها وتحليلها باستخدام قوة BigQuery وBQML.

إنشاء مجموعة بيانات BigQuery

مجموعة بيانات BigQuery هي مجموعة من الجداول. يتم تخزين جميع الجداول في مجموعة بيانات في موقع البيانات نفسه. يمكنك أيضًا إرفاق عناصر تحكّم مخصّصة في الوصول لفرض قيود على الوصول إلى مجموعة بيانات وجداولها.

في Cloud Shell، شغِّل الأمر التالي:

bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>

اضبط الموقع الجغرافي على منطقة محدّدة.

إنشاء بث BigQuery

ويكون البث مطلوبًا لتصدير تغييرات الموارد إلى BigQuery في كل مرة يتم فيها إنشاء مورد FHIR أو تحديثه أو تصحيحه أو حذفه في متجر FHIR. يُسمح لكل متجر بضبط ما يصل إلى 10 إعدادات للبث.

  1. الانتقال إلى صفحة المتصفّح ضمن "وحدة التحكّم في الرعاية الصحية في Google Cloud"
  2. انقر فوق مجموعة DATASET التي تم إنشاؤها حديثًا
  3. انقر على رمز "متجر البيانات" 7acaa364337086aa.png الذي تم إنشاؤه حديثًا.
  4. انقر على "إضافة إعداد جديد للبث".

caa2cc881d3406aa.png

  1. اختَر مجموعة بيانات BigQuery التي تم إنشاؤها حديثًا من القائمة، ونوع المخطط "Analytics V2". ونوع المرجع "مريض" من القائمة (يمكنك اختيار أكبر عدد ممكن من أنواع الموارد) وانقر على "تم"

1e038c694fcca1ef.png

ما مِن إجراءات أخرى مطلوبة. أنت جاهز لحفظ بيانات تخزين FHIR وبثها إلى BigQuery.

5- دوال السحابة (كتابة بيانات R4 في مخزن بيانات FHIR باستخدام Healthcare API)

تتيح لك دوال السحابة الإلكترونية كتابة الرمز البرمجي الخاص بك ونشره على السحابة الإلكترونية بدون خادم. فهو قابل للتطوير وادفع حسب الاستخدام ومستندًا إلى الأحداث ومفتوحًا من حيث الدعم التقني واللغة. يُرجى الاطّلاع على المستندات لمزيد من الميزات.

تهدف الدالة التي سنكتبها إلى مصادقة وكتابة البيانات الواردة بتنسيق FHIR R4 في مخزن بيانات FHIR باستخدام Cloud Healthcare API. لإنشاء دالة السحابة الإلكترونية، اتّبِع الخطوات التالية:

  1. انتقِل إلى دوال السحابة الإلكترونية وانقر على "إنشاء وظيفة"
  2. عيِّن الاسم على fhir-datastore-proxy، والمنطقة على us-central1، وخيار "المصادقة" على "طلب المصادقة"
  3. توسيع إعدادات الأمان والإنشاء والاتصالات وبيئة التشغيل عليك إضافة خمسة متغيّرات لبيئة وقت التشغيل:

الاسم: CLOUD_FUNCTIONS_ENDPOINT | القيمة: نقطة نهاية عنوان URL للدالة، ستظهر لك هذه العلامة في كتلة المصادقة أعلاه وستكون بالشكل التالي: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

الاسم: PROJECT_ID | القيمة: رقم تعريف مشروعك

الاسم: DATASET_LOCATION | القيمة: موقع مخزن بيانات FHIR

الاسم: DATASET_ID | القيمة: رقم تعريف مخزن بيانات الرعاية الصحية

الاسم: FHIR_STORE_ID | القيمة: رقم تعريف متجر FHIR

  1. اضغط على التالي للانتقال إلى الصفحة التالية، حيث سنضيف الرمز
  2. من المفترض أن يتم الآن عرض محرر مضمّن، وحدد Java 17 كلغة، ثم انتقل إلى الفئة HelloHttpFunction.java. أعد تسميته إلى FhirDatastoreProxy.java. لا تنسَ أيضًا إعادة تسمية نقطة الدخول إلى gcfv2.FhirDatastoreProxy
  3. انسخ الرمز من repo والصقه في المحرِّر المضمّن.
  4. انتقِل إلى ملف pom.xml، وانسخ ملف pom في المستودع الإعلاني إلى المحرِّر المضمَّن.
  5. انقر على DEPLOY، وسيتم إنشاء الدالة وتشغيلها قريبًا

ملاحظة:

  1. إنّ Cloud Healthcare API المستخدَمة في هذه الدالة تستخدم "بيانات الاعتماد التلقائية" للتطبيق لمصادقة الطلبات الواردة إلى Healthcare API.
  2. احفظ عنوان URL الخاص بالدالة التي تم نشرها لتتمكّن من استدعائها من تطبيق Android. لقد أنشأنا حتى الآن جميع الأجزاء المطلوبة لتطبيق Android لكتابة بيانات FHIR في BigQuery باستخدام واجهة برمجة تطبيقات Healthcare API بشكل مستقل. والآن، هيا نتأكد من أن جميع الأجزاء متصلة وتم استدعاء واجهة برمجة التطبيقات عند إرسال استبيان.

6- مشروع Android وإعداد Firebase

سنستخدم إصدارًا حديثًا من استوديو Android وإعداد محاكي Android (يمكنك استخدام جهاز Android فعلي أيضًا). بعد اكتمال العملية، يُرجى اتّباع الخطوات التالية:

  1. استنسِخ مستودع أمثلة تطبيقات FHIR: https://github.com/google/fhir-app-examples
  2. افتح "استوديو Android" واختَر "استيراد مشروع" (Gradle أو Eclipse ADT أو غير ذلك) واختَر مجلّد السحابة الإلكترونية أو مجلد السحابة الإلكترونية من رمز المصدر الذي سبق لك تنزيله. افتح التطبيق/google-services.json. إنها فارغة ويجب ملؤها.

أنشئ مفتاح SHA-1 باستخدام ./gradlewsignReport، ودوِّن حقل SHA1 ضمن صيغة تصحيح الأخطاء

أضف التطبيق إلى Firebase باستخدام وحدة تحكم Firebase (اتبع الخطوتين 1 و2) باستخدام وحدة تحكم Firebase. في "شهادة توقيع تصحيح الأخطاء SHA-1" فقم بملء القيمة من الخطوة السابقة

نزِّل ملف google-services.json واستبدِل المحتوى من Firebase في الملف الفارغ في مجلد التطبيق.

سبق أن تمت إضافة حزمة تطوير البرامج (SDK) لمنصّة Firebase في ملفات Gradle للإنشاء

  1. افتح FhirApplication.kt، واضبط حقل baseUrl على عنوان URL لدالة السحابة الإلكترونية
  2. اختَر "مزامنة مشروعك باستخدام ملفات Gradle" من شريط أدوات "استوديو Android"

لقد أكملنا الآن جزء الإعداد وتضمين الاعتمادية من عملية التنفيذ.

7. إعداد الاستبيان والرد عليه

سبق أن تم إعداد Questionnaire في المستودع. لكن هيا ننتقل إلى التعليمات البرمجية:

  1. تأكد من وجود FragmentContainerView داخل ConstraintLayout في ملف app/src/main/res/layout/activity_main.xml
  2. تأكَّد من أنّ QuestionnaireFragment يتضمّن استبيان FHIR بترميز JSON لعرض الجزء.

في هذه الحالة سنستخدم json - " new-patient-registration-paginated.json&quot; لعرض الجزء. تحقَّق من الملفات MainActivity.kt وAddPatientFragment.kt وAddPatientViewModel.kt.

الآن بعد أن تم التحقق من الجزء وjson والنموذج، شغِّل التطبيق وجرِّب إدخال إجابات للحقول في الاستبيان.

ستلاحظ التحقق من صحة السلسلة والتاريخ والحقول الرقمية والشروط الأخرى

يمكنك تشغيل التطبيق والتحقّق من السجلّ للاطّلاع على السجلّ الذي تم إنشاؤه.

9e1bb440074f1a88.png

يمكنك معرفة المزيد حول استخدام الأجزاء هنا. وهذا كل شيء بالنسبة إلى جزء الاستبيان وإعداد الرد.

8. عرض نتيجة مجموعة بيانات BigQuery وFHIRStore

الآن وبعد أن اكتمل الإعداد والتحديثات، انقر على "مزامنة المشروع مع ملفات Gradle". بمجرد الانتهاء،

  1. شغِّل التطبيق على محاكي Android وشاهد تحميل الاستبيان.
  2. أجب عن الأسئلة وانقر على "إرسال" في الأعلى
  3. من المفترض أن تظهر لك رسالة "تم حفظ المريض". في التطبيق

عرض نتيجة متجر FHIR

الانتقال إلى وحدة تحكّم Google Cloud Healthcare FHIRViewer

1064f03b4e1e45f5.png

حدد متجر FHIR ثم طلب البحث واضغط على "تشغيل البحث" وسترى نتائج البحث في الأسفل مباشرةً. 37a070480a06362c.png

عرض نتيجة مجموعة بيانات BigQuery

انتقِل إلى وحدة تحكُّم Google Cloud في BigQuery، وفي لوحة "المستكشف"، انتقِل إلى مجموعة البيانات التي أنشأتها لهذا المشروع.

7c483ec6d578b8cd.png

انقر على "معاينة" وسيظهر لك الرقم نفسه والبيانات الناتجة التي عثرت عليها في "متجر FHIR للرعاية الصحية" في مجموعة بيانات BigQuery.

faafeae4a837a41c.png

يمكنك الآن تنفيذ BigQuery SQL و"إحصاءات Google" وتعلُّم الآلة على بيانات FHIR التي حفظتها للتو في مجموعة بيانات السحابة الإلكترونية.

9. إمكانية البحث وبلا إنترنت

لضمان إمكانية التشغيل بلا اتصال بالإنترنت على تطبيق Android FHIR SDK الذي يعمل بنظام التشغيل OHS، احرص على اتّباع إرشادات التصميم التي يجب تفعيلها في عملية التنفيذ التي نناقشها هنا.

بالنسبة إلى البحث عن موارد FHIR، لدينا طريقتان:

  1. عارض FHIR في Google Cloud Console
  2. طريقة بحث FHIR باستخدام طلبات GET أو POST

10. عرض توضيحي للتطبيق

الآن وبعد أن تم تطوير تطبيقنا، دعنا نجربه ونرى النتيجة في السحابة.

11. تَنظيم

لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذه المشاركة، يُرجى اتّباع الخطوات التالية:

  1. في وحدة التحكّم في Google Cloud، انتقِل إلى صفحة إدارة الموارد.
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على "حذف".
  3. في مربّع الحوار، اكتب معرّف المشروع، ثم انقر على "إيقاف التشغيل" لحذف المشروع.

12. تهانينا

تهانينا! في هذا المشروع، أنشأنا بنجاح تطبيقًا لنظام التشغيل Android لتخزين بيانات Patient FHIR وإجراء طلبات بحث عنها على FHIR Store ومجموعة بيانات BigQuery للرعاية الصحية السحابية باستخدام Cloud Healthcare API في 7 خطوات فقط:

  1. إعداد تطبيق Android
  2. عملية إعداد Google Cloud Healthcare API
  3. إنشاء مجموعة بيانات الرعاية الصحية ومخزن بيانات FHIR
  4. تم إنشاء مجموعة بيانات BigQuery
  5. تم ضبط مصدر بيانات في BigQuery لكتابة بيانات تخزين بيانات FHIR في مجموعة بيانات BigQuery.
  6. تم نشر دالة سحابية لكتابة بيانات R4 في مخزن بيانات FHIR.
  7. دوال السحابة الإلكترونية التي تم تشغيلها من تطبيق Android عند إرسال الردّ على الاستبيان

وبعد أن أصبحت الخطوات واضحة، يمكنك تجربة الخطوات نفسها لمزامنة تعديل بيانات FHIR الخاصة بالمريض مع السحابة الإلكترونية.