1. مقدمة
في هذا الدرس التطبيقي حول الترميز، سنتعرّف على كيفية استخدام OHS (Open Health Stack) وGoogle Cloud Healthcare API لإنشاء حلول مبتكرة للرعاية الصحية تكون آمنة وقابلة للتوسّع ومتوافقة مع المعايير. يوفّر الجمع بين هذه الأدوات الفعّالة لموظفي الرعاية الصحية والمطوّرين إمكانية إنشاء حلول مستنِدة إلى البيانات يمكن أن تحسّن بشكل كبير رعاية المرضى ونتائجهم.
نعتزم الاستفادة من إمكانات Open Health Stack وGoogle Cloud Healthcare API في تطبيق متوافق مع الأجهزة الجوّالة يستخدم حزمة Android-FHIR SDK لتمكين المستخدمين من إدارة سجلات المرضى بتنسيق FHIR في Google Cloud.
لنتعرّف على خطوات التنفيذ.
ما ستنشئه
في هذا التنفيذ،
- سنستخدم مكتبة Structured Data Capture Library لعرض استبيان، ومكتبة FHIR Engine لتخزين محتوى FHIR الخاص بالرد.
- سيتم بعد ذلك تحميل البيانات إلى Cloud FHIR Store باستخدام Cloud Healthcare API.
- قبل التحميل، سنثبت أولاً صحة هويتنا باستخدام Firebase

يوضّح الرسم البياني أعلاه مسار العمل. يمكنك قراءة المدوّنة للحصول على شرح تفصيلي لكل مكوّن.
2. المتطلبات
- متصفّح، مثل Chrome أو Firefox
- مشروع Google Cloud تم تفعيل الفوترة فيه
- إصدار حديث من "استوديو Android"
- إعداد "محاكي Android" (يمكنك أيضًا استخدام جهاز Android الفعلي)
إنشاء مشروعك
- في Google Cloud Console، ضمن صفحة اختيار المشروع، اختَر مشروعًا على Google Cloud أو أنشِئه.
- تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- فعِّل واجهات برمجة التطبيقات اللازمة (BigQuery وHealthcare API).
تفعيل Cloud Shell
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq:
من Cloud Console، انقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة:

- بعد الاتصال بـ Cloud Shell، من المفترض أن تلاحظ أنّه تم إثبات هويتك وأنّ المشروع تم ضبطه مسبقًا على رقم تعريف مشروعك. وإذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
راجِع المستندات لمعرفة أوامر gcloud وطريقة استخدامها.
3- إعداد Healthcare API
- تأكَّد من تفعيل Healthcare API: انتقِل إلى مكتبة واجهات برمجة التطبيقات في Google Cloud Console، وابحث عن Healthcare API، ثم انقر على "تفعيل"، وسيتم تفعيل واجهة برمجة التطبيقات وإضافة حساب خدمة Healthcare إلى المشروع.
- منح أذونات المشرف في 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 من وحدة التحكّم، راجِع المستند للتعرّف على كيفية ذلك.
إنشاء مجموعة بيانات الرعاية الصحية
في Cloud Shell، نفِّذ الأمر أدناه لإنشاء مجموعة بيانات Healthcare:
gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1
اضبط الموقع الجغرافي على منطقة.
إنشاء FHIR Datastore
في 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 إعدادات بث كحد أقصى.
- انتقِل إلى صفحة المتصفّح في وحدة تحكّم Google Cloud Healthcare
- انقر على مجموعة البيانات التي تم إنشاؤها حديثًا.
- انقر على "مخزن البيانات" الذي تم إنشاؤه حديثًا
. - انقر على "إضافة إعدادات بث جديدة".

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

انتهيت! أنت الآن جاهز لحفظ بيانات متجر FHIR وبثّها إلى BigQuery.
5- Cloud Functions (كتابة بيانات R4 إلى FHIR Datastore باستخدام Healthcare API)
تتيح لك Cloud Functions كتابة الرمز البرمجي ونشره على السحابة الإلكترونية بطريقة سهلة وبدون خادم. وهي قابلة للتوسّع، وتتيح الدفع حسب الاستخدام، وتستند إلى الأحداث، كما أنّها مفتوحة من حيث التكنولوجيا واللغات المتوافقة. يُرجى الرجوع إلى المستندات للاطّلاع على المزيد من الميزات.
تهدف الدالة التي سنكتبها إلى المصادقة وكتابة البيانات الواردة بتنسيق FHIR R4 في FHIR Data Store باستخدام Cloud Healthcare API. لإنشاء Cloud Function، اتّبِع الخطوات التالية:
- انتقِل إلى الوظائف Cloud وانقر على CREATE FUNCTION
- اضبط الاسم على fhir-datastore-proxy والمنطقة على us-central1 وخيار المصادقة على "طلب المصادقة".
- وسِّع إعدادات وقت التشغيل والإنشاء وعمليات الربط والأمان. ستضيف خمسة متغيرات لبيئة التشغيل:
الاسم: CLOUD_FUNCTIONS_ENDPOINT | القيمة: نقطة نهاية عنوان URL للدالة. سيظهر لك ذلك في قسم "المصادقة" أعلاه وسيكون بالتنسيق التالي: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy
الاسم: PROJECT_ID | القيمة: رقم تعريف مشروعك
الاسم: DATASET_LOCATION | القيمة: الموقع الجغرافي لخدمة FHIR Datastore
الاسم: DATASET_ID | القيمة: رقم تعريف Healthcare Datastore
الاسم: FHIR_STORE_ID | القيمة: معرّف FHIR Store
- انقر على "التالي" للانتقال إلى الصفحة التالية، حيث سنضيف الرمز
- من المفترض أن يظهر الآن محرّر مضمّن، اختَر Java 17 كلغة، وانتقِل إلى فئة HelloHttpFunction.java. أعِد تسميته إلى FhirDatastoreProxy.java. لا تنسَ أيضًا إعادة تسمية نقطة الدخول إلى gcfv2.FhirDatastoreProxy
- انسخ الرمز من المستودع والصقه في المحرّر المضمّن
- انتقِل إلى ملف pom.xml، وانسخ ملف pom في المستودع إلى المحرّر المضمّن.
- انقر على DEPLOY، وسيتم إنشاء الدالة وتشغيلها قريبًا
ملاحظة:
- تستخدم واجهة Cloud Healthcare API المستخدَمة في هذه الوظيفة بيانات الاعتماد التلقائية للتطبيق لمصادقة الطلبات الواردة إلى Healthcare API.
- احفظ عنوان URL للدالة التي تم نشرها لتتمكّن من استدعائها من تطبيق Android. حتى الآن، أنشأنا جميع الأجزاء المطلوبة لتطبيق Android من أجل كتابة بيانات FHIR إلى BigQuery باستخدام Healthcare API بشكل مستقل. الآن، لنحرص على ربط جميع الأجزاء واستدعاء واجهة برمجة التطبيقات عند إرسال استبيان.
6. إعداد مشروع Android وFirebase
سنستخدم إصدارًا حديثًا من استوديو Android ومحاكي Android تم إعداده (يمكنك أيضًا استخدام جهاز Android الفعلي). عندما تصبح الإضافة جاهزة، اتّبِع الخطوات أدناه:
- استنسِخ مستودع FHIR App Examples: https://github.com/google/fhir-app-examples
- افتح "استوديو Android"، واختَر "استيراد المشروع" (Gradle وEclipse ADT وما إلى ذلك)، ثم اختَر مجلد cloudfunction/ من الرمز المصدري الذي نزّلته سابقًا. افتح app/google-services.json. يكون هذا الحقل فارغًا ويجب ملؤه.
إنشاء مفتاح SHA-1 باستخدام ./gradlew signingReport، وتدوين قيمة حقل SHA1 ضمن صيغة تصحيح الأخطاء
أضِف التطبيق إلى Firebase باستخدام وحدة تحكّم Firebase (اتّبِع الخطوتَين 1 و2) باستخدام وحدة تحكّم Firebase. في الحقل "شهادة توقيع تصحيح الأخطاء SHA-1 "، املأ القيمة من الخطوة السابقة.
نزِّل ملف google-services.json واستبدِل المحتوى من Firebase بالمحتوى في الملف الفارغ في مجلد التطبيق.
تمت إضافة Firebase SDK في ملفات Gradle الخاصة بالإصدار
- افتح الملف FhirApplication.kt، واضبط حقل baseUrl على عنوان URL الخاص بـ Cloud Function
- اختَر "مزامنة مشروعك مع ملفات Gradle" من شريط أدوات "استوديو Android".
لقد انتهينا الآن من عملية الإعداد وتضمين التبعيات في عملية التنفيذ.
7. إعداد الاستبيان والإجابة عنه
لقد أعددنا مسبقًا عملية إعداد الاستبيان في المستودع. ولكن دعنا نراجع الرمز:
- تأكَّد من توفُّر FragmentContainerView داخل ConstraintLayout في الملف app/src/main/res/layout/activity_main.xml
- تأكَّد من أنّ QuestionnaireFragment يحتوي على استبيان FHIR بترميز JSON لعرض الجزء.
في هذه الحالة، سنستخدم ملف json - " new-patient-registration-paginated.json" لعرض الجزء. تحقَّق من الملفات MainActivity.kt و AddPatientFragment.kt و AddPatientViewModel.kt
بعد أن تحقّقنا من الجزء وjson والنموذج، يمكنك تشغيل التطبيق ومحاولة إدخال إجابات للحقول في الاستبيان.
ستلاحظ التحقّق من صحة الحقول النصية والتاريخية والرقمية والشروط الأخرى
يمكنك تشغيل التطبيق والاطّلاع على السجلّ لمعرفة السجلّ الذي تم إنشاؤه

يمكنك الاطّلاع على مزيد من المعلومات حول استخدام المقاطع هنا. هذا كل ما يتعلق بإعداد جزء الاستبيان والرد.
8. عرض نتائج مجموعة بيانات FHIRStore وBigQuery
بعد الانتهاء من عملية الإعداد والتحديثات، انقر على "مزامنة المشروع مع ملفات Gradle". بعد اكتمال عملية النقل،
- تشغيل التطبيق على Android Emulator ومشاهدة تحميل الاستبيان
- أجِب عن الأسئلة وانقر على "إرسال" في أعلى الصفحة
- من المفترض أن تظهر لك الرسالة "تم حفظ المريض" في التطبيق
عرض نتيجة "متجر FHIR"
انتقِل إلى وحدة تحكّم FHIRViewer في Google Cloud Healthcare

اختَر FHIR Store، وأدخِل طلب البحث، ثم انقر على "تشغيل البحث" (RUN SEARCH)، وستظهر لك نتائج البحث أسفل ذلك مباشرةً. 
عرض نتيجة مجموعة بيانات BigQuery
انتقِل إلى وحدة تحكّم Google Cloud BigQuery، وفي جزء "المستكشف"، انتقِل إلى مجموعة البيانات التي أنشأتها لهذا المشروع.

انقر على "معاينة" (Preview)، وسيظهر لك الرقم نفسه والبيانات الناتجة التي عثرت عليها في Healthcare FHIR Store في مجموعة بيانات BigQuery.

يمكنك الآن تنفيذ استعلامات SQL و"إحصاءات Google" وBigQuery ML على بيانات FHIR التي حفظتها للتو في مجموعة البيانات على السحابة الإلكترونية.
9- إمكانية البحث واستخدام التطبيق بلا إنترنت
لضمان إمكانية استخدام تطبيق حزمة تطوير البرامج (SDK) لنظام Android المتوافق مع معيار FHIR من OHS بلا اتصال بالإنترنت، احرص على اتّباع إرشادات التصميم التي يجب تفعيلها في عملية التنفيذ التي نتناولها هنا.
للبحث عن موارد FHIR، لدينا طريقتان:
- أداة FHIR Viewer في Google Cloud Console
- طريقة البحث في FHIR باستخدام طلبات GET أو POST
10. عرض توضيحي للتطبيق
بعد تطوير تطبيقنا، لنستكشفه ونرى النتيجة في السحابة الإلكترونية.
11. تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذه المشاركة، اتّبِع الخطوات التالية:
- في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على "حذف".
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على "إيقاف" لحذف المشروع.
12. تهانينا
تهانينا! في هذا المشروع، أنشأنا بنجاح تطبيق Android لتخزين بيانات FHIR الخاصة بالمرضى والاستعلام عنها في Cloud Healthcare FHIR Store ومجموعة بيانات BigQuery باستخدام Cloud Healthcare API في 7 خطوات فقط:
- إعداد تطبيق Android
- إعداد Google Cloud Healthcare API
- إنشاء مجموعة بيانات الرعاية الصحية وFHIR Datastore
- مجموعة بيانات BigQuery التي تم إنشاؤها
- تم إعداد BigQuery Stream لكتابة بيانات FHIR Datastore إلى مجموعة بيانات BigQuery
- تم نشر Cloud Function لكتابة بيانات R4 إلى FHIR Datastore
- تفعيل وظائف Cloud Functions من تطبيق Android عند إرسال ردّ على استبيان
بعد أن أصبحت الخطوات واضحة، يمكنك تجربة الخطوات نفسها لمزامنة تعديل Patient FHIR مع السحابة الإلكترونية.