۱. مقدمه
در این آزمایشگاه کد، یاد خواهیم گرفت که چگونه از OHS (Open Health Stack) و Google Cloud Healthcare API برای ایجاد راهحلهای نوآورانه مراقبتهای بهداشتی که ایمن، مقیاسپذیر و سازگار هستند، استفاده کنیم. ترکیب این ابزارهای قدرتمند، به کارکنان و توسعهدهندگان مراقبتهای بهداشتی این امکان را میدهد که راهحلهای مبتنی بر داده ایجاد کنند که میتواند مراقبت از بیمار و نتایج آن را به طور قابل توجهی بهبود بخشد.
ما قصد داریم از قدرت Open Health Stack و Google Cloud Healthcare API در یک اپلیکیشن موبایل که از Android-FHIR SDK استفاده میکند، بهره ببریم تا کاربران بتوانند سوابق بیماران FHIR را در Google Cloud مدیریت کنند.
بیایید به مراحل پیادهسازی بپردازیم.
آنچه خواهید ساخت
در این پیادهسازی،
- ما از کتابخانه Structured Data Capture برای رندر کردن پرسشنامه و از کتابخانه FHIR Engine برای ذخیره محتوای FHIR پاسخ استفاده خواهیم کرد.
- سپس دادهها با استفاده از رابط برنامهنویسی کاربردی مراقبتهای بهداشتی ابری (Cloud Healthcare API) در فروشگاه ابری FHIR بارگذاری میشوند.
- قبل از آپلود، ابتدا خودمان را با استفاده از Firebase احراز هویت میکنیم.

نمودار بالا جریان را نشان میدهد. برای توضیح دقیق هر جزء ، وبلاگ را مطالعه کنید.
۲. الزامات
- یک مرورگر، مانند کروم یا فایرفاکس
- یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب
- نسخه جدید اندروید استودیو
- یک شبیهساز اندروید راهاندازی شده (میتوانید از دستگاه اندروید فیزیکی خود نیز استفاده کنید)
پروژه خود را ایجاد کنید
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
- فعال کردن APIهای لازم (BigQuery، Healthcare API)
فعال کردن پوسته ابری
- شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد:
از کنسول ابری، روی فعال کردن پوسته ابری در گوشه بالا سمت راست کلیک کنید:

- پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شدهاید و پروژه از قبل روی شناسه پروژه شما تنظیم شده است، اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
برای دستورات و نحوهی استفاده از gcloud به مستندات مراجعه کنید.
۳. راهاندازی API مراقبتهای بهداشتی
- مطمئن شوید که Healthcare API فعال است: به کتابخانه API کنسول ابری گوگل بروید، Healthcare API را جستجو کنید، روی ENABLE کلیک کنید تا API فعال شود و حساب خدمات درمانی به پروژه اضافه شود.
- اعطای مجوزهای ادمین 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
در Cloud Shell، دستور زیر را برای ایجاد پایگاه داده FHIR اجرا کنید:
gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
--dataset=<<DATASET_ID>> --location=us-central1 --version=r4
مکان را روی یک منطقه تنظیم کنید.
۴. راهاندازی و استریم BigQuery
این شامل ذخیره دادههای فروشگاه FHIR در BigQuery Dataset میشود تا بتوان با استفاده از قدرت BigQuery و BQML، روی آنها پرسوجو، برنامهنویسی و تجزیه و تحلیل انجام داد.
ایجاد مجموعه داده BigQuery
یک مجموعه داده BigQuery مجموعهای از جداول است. تمام جداول موجود در یک مجموعه داده در یک مکان داده ذخیره میشوند. همچنین میتوانید کنترلهای دسترسی سفارشی را برای محدود کردن دسترسی به یک مجموعه داده و جداول آن پیوست کنید.
در Cloud Shell، دستور زیر را اجرا کنید:
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
مکان را روی یک منطقه تنظیم کنید.
ایجاد جریان BigQuery
برای ارسال تغییرات منابع به BigQuery در هر بار ایجاد، بهروزرسانی، وصلهبندی یا حذف یک منبع FHIR در یک فروشگاه FHIR، به استریمینگ نیاز است. هر فروشگاه مجاز به داشتن حداکثر 10 پیکربندی استریمینگ است.
- به کنسول Google Cloud Healthcare، صفحه مرورگر بروید
- روی DATASET تازه ایجاد شده کلیک کنید
- روی DATA STORE که تازه ایجاد شده کلیک کنید

- روی افزودن پیکربندی جدید پخش جریانی کلیک کنید

- مجموعه داده BigQuery تازه ایجاد شده را از لیست انتخاب کنید، نوع Schema را "Analytics V2" و نوع منبع را "Patient" از لیست انتخاب کنید (میتوانید هر تعداد نوع منبع را انتخاب کنید) و روی "Done" کلیک کنید.

همین. شما آمادهاید تا دادههای فروشگاه FHIR را ذخیره کرده و آنها را به BigQuery منتقل کنید.
۵. توابع ابری (نوشتن دادههای R4 در FHIR Datastore با استفاده از Healthcare API)
توابع ابری به شما امکان میدهد تا به راحتی کد خود را بنویسید و به صورت بدون سرور در فضای ابری مستقر کنید. این سیستم مقیاسپذیر، پرداخت به ازای استفاده، رویدادمحور و از نظر فناوری و پشتیبانی زبان، متنباز است. برای ویژگیهای بیشتر به مستندات مراجعه کنید.
تابعی که خواهیم نوشت، قصد دارد دادههایی را که با فرمت FHIR R4 میآیند، با استفاده از API Cloud Healthcare در مخزن داده FHIR احراز هویت و بنویسد. برای ایجاد تابع Cloud:
- به توابع ابری بروید و روی ایجاد تابع کلیک کنید
- نام را روی fhir-datastore-proxy، منطقه را روی us-central1 و گزینه Authentication را روی "Require Authentication" تنظیم کنید.
- تنظیمات Runtime، build، connections و security را باز کنید. پنج متغیر محیطی Runtime اضافه خواهید کرد:
نام: 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
- برای رفتن به صفحه بعد، جایی که کد خود را اضافه خواهیم کرد، روی Next کلیک کنید.
- اکنون باید یک ویرایشگر درونخطی نمایش داده شود، جاوا ۱۷ را به عنوان زبان انتخاب کنید و به کلاس HelloHttpFunction.java بروید. نام آن را به FhirDatastoreProxy.java تغییر دهید. فراموش نکنید که نقطه ورود را نیز به gcfv2.FhirDatastoreProxy تغییر دهید.
- کد را از مخزن کپی کرده و در ویرایشگر درونخطی جایگذاری کنید
- به فایل pom.xml بروید و فایل pom موجود در مخزن را در ویرایشگر درونخطی کپی کنید.
- روی DEPLOY کلیک کنید، و تابع شما به زودی ایجاد و اجرا خواهد شد.
توجه:
- API ابری مراقبتهای بهداشتی که در این تابع استفاده میشود، از اعتبارنامه پیشفرض برنامه برای تأیید اعتبار درخواستهای ارسالی به API مراقبتهای بهداشتی استفاده میکند.
- URL تابع پیادهسازیشده را ذخیره کنید تا بتوانید از برنامه اندروید آن را فراخوانی کنید. تاکنون تمام قطعات مورد نیاز برای نوشتن دادههای FHIR در BigQuery توسط برنامه اندروید با استفاده از Healthcare API به صورت مستقل را ایجاد کردهایم. اکنون باید مطمئن شویم که تمام قطعات به هم متصل هستند و API با ارسال پرسشنامه فراخوانی میشود.
۶. پروژه اندروید و تنظیمات فایربیس
ما از یک نسخه جدید اندروید استودیو و یک شبیهساز اندروید نصبشده استفاده خواهیم کرد (میتوانید از دستگاه اندروید فیزیکی خود نیز استفاده کنید). پس از آماده شدن، مراحل زیر را دنبال کنید:
- مخزن FHIR App Examples را کلون کنید: https://github.com/google/fhir-app-examples
- اندروید استودیو را باز کنید، گزینه Import Project (Gradle، Eclipse ADT و غیره) را انتخاب کنید و پوشه cloudfunction/ را از کد منبعی که قبلاً دانلود کردهاید، انتخاب کنید. app/google-services.json را باز کنید. خالی است و باید پر شود.
با استفاده از ./gradlew signingReport یک کلید SHA-1 ایجاد کنید و به فیلد SHA1 در زیر گزینه debug توجه کنید.
برنامه را با استفاده از کنسول Firebase (مراحل 1 و 2 را دنبال کنید) به Firebase اضافه کنید. در فیلد "Debug signing certificate SHA-1"، مقدار مرحله قبل را وارد کنید.
فایل google-services.json را دانلود کنید و محتوای موجود در Firebase را در فایل خالی موجود در پوشه app جایگزین کنید.
Firebase SDK قبلاً در فایلهای Gradle build اضافه شده است.
- فایل FhirApplication.kt را باز کنید و فیلد baseUrl را روی URL تابع ابری خود تنظیم کنید.
- از نوار ابزار اندروید استودیو، گزینه «همگامسازی پروژه با فایلهای Gradle» را انتخاب کنید.
اکنون بخش راهاندازی و گنجاندن وابستگیها در پیادهسازی را تکمیل کردهایم.
۷. تنظیم پرسشنامه و پاسخ
ما قبلاً تنظیمات پرسشنامه را در مخزن انجام دادهایم. اما بیایید کد را بررسی کنیم:
- مطمئن شوید که 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 را بررسی کنید.
حالا که fragment، json و مدل را تأیید کردهایم، برنامه را اجرا کنید و سعی کنید پاسخها را برای فیلدهای پرسشنامه وارد کنید.
متوجه اعتبارسنجی فیلدهای رشتهای، تاریخ، عددی و سایر شرایط خواهید شد.
میتوانید برنامه را اجرا کنید و گزارش را بررسی کنید تا ببینید رکورد شما ایجاد شده است یا خیر.

میتوانید اطلاعات بیشتری در مورد استفاده از قطعات را اینجا بیاموزید. تقریباً همین بود که برای تنظیم قطعه پرسشنامه و پاسخ استفاده کردیم.
۸. نمایش نتایج مجموعه دادههای FHIRStore و BigQuery
حالا که تنظیمات و بهروزرسانیها را انجام دادیم، روی «همگامسازی پروژه با فایلهای Gradle» کلیک کنید. پس از اتمام،
- برنامه را روی شبیهساز اندروید اجرا کنید و بارگذاری پرسشنامه خود را تماشا کنید.
- به سوالات پاسخ دهید و در بالای صفحه روی ارسال کلیک کنید
- شما باید پیام "بیمار ذخیره شد" را در برنامه ببینید.
مشاهده نتایج فروشگاه FHIR
به کنسول Google Cloud Healthcare FHIRViewer بروید

فروشگاه FHIR خود را انتخاب کنید، عبارت مورد نظر را جستجو کنید و روی RUN SEARCH کلیک کنید. در این صورت نتایج جستجو را درست در زیر مشاهده خواهید کرد. 
مشاهده نتیجه مجموعه داده BigQuery
به کنسول Google Cloud BigQuery بروید و در پنل Explorer، به مجموعه دادهای که برای این پروژه ایجاد کردهاید، بروید.

روی پیشنمایش کلیک کنید تا همان عدد و دادههای حاصل از آن را که در فروشگاه Healthcare FHIR پیدا کردید، در مجموعه داده BigQuery مشاهده کنید.

اکنون میتوانید عملیات SQL، Analytics و ML را در BigQuery روی دادههای FHIR که در مجموعه دادههای ابری ذخیره کردهاید، انجام دهید.
۹. قابلیت جستجو و آفلاین
برای اطمینان از قابلیت آفلاین در برنامه اندروید FHIR SDK مبتنی بر OHS، حتماً دستورالعمل طراحی را که باید در پیادهسازی مورد بحث ما فعال شود، دنبال کنید.
برای جستجوی منابع FHIR ، دو روش داریم:
- نمایشگر FHIR در کنسول ابری گوگل
- روش جستجوی FHIR با استفاده از درخواستهای GET یا POST
۱۰. نسخه آزمایشی اپلیکیشن
حالا که اپلیکیشن ما توسعه داده شده است، بیایید با آن کار کنیم و نتیجه را در فضای ابری ببینیم.
۱۱. تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:
- در کنسول گوگل کلود، به صفحه مدیریت منابع بروید
- در لیست پروژهها، پروژهای را که میخواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
- در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.
۱۲. تبریک
تبریک! در این پروژه، ما با موفقیت یک برنامه اندروید برای ذخیره و جستجوی دادههای FHIR بیمار در فروشگاه ابری مراقبتهای بهداشتی FHIR و مجموعه دادههای BigQuery با استفاده از API Cloud Healthcare تنها در 7 مرحله ایجاد کردیم:
- راه اندازی برنامه اندروید
- راهاندازی API خدمات درمانی ابری گوگل
- مجموعه داده مراقبتهای بهداشتی و پایگاه داده FHIR ایجاد شده
- مجموعه داده BigQuery ایجاد شده
- یک BigQuery Stream برای نوشتن دادههای FHIR Datastore در BigQuery Dataset پیکربندی شد.
- یک تابع ابری برای نوشتن دادههای R4 در FHIR Datastore مستقر شد.
- فعالسازی توابع ابری از طریق اپلیکیشن اندروید هنگام ارسال پاسخ پرسشنامه
حالا که مراحل واضح هستند، میتوانید همین مراحل را برای همگامسازی ویرایش FHIR بیمار با فضای ابری امتحان کنید.