১. ভূমিকা
এই কোডল্যাবে আমরা শিখব কীভাবে OHS (ওপেন হেলথ স্ট্যাক) এবং গুগল ক্লাউড হেলথকেয়ার এপিআই ব্যবহার করে নিরাপদ, পরিবর্ধনযোগ্য এবং নিয়মসম্মত উদ্ভাবনী স্বাস্থ্যসেবা সমাধান তৈরি করা যায়। এই শক্তিশালী টুলগুলোর সমন্বয় স্বাস্থ্যকর্মী এবং ডেভেলপারদের ডেটা-নির্ভর সমাধান তৈরি করার ক্ষমতা দেয়, যা রোগীর সেবা এবং তার ফলাফলকে উল্লেখযোগ্যভাবে উন্নত করতে পারে।
আমরা অ্যান্ড্রয়েড-এফএইচআইআর এসডিকে ব্যবহার করে এমন একটি মোবাইল অ্যাপ তৈরি করতে চাই, যা ব্যবহারকারীদের গুগল ক্লাউডে এফএইচআইআর রোগীর রেকর্ড পরিচালনা করতে সক্ষম করবে এবং এর জন্য আমরা ওপেন হেলথ স্ট্যাক ও গুগল ক্লাউড হেলথকেয়ার এপিআই-এর শক্তিকে কাজে লাগাতে চাই।
চলুন বাস্তবায়নের ধাপগুলো জেনে নেওয়া যাক।
আপনি যা তৈরি করবেন
এই বাস্তবায়নে,
- আমরা একটি প্রশ্নমালা তৈরি করতে স্ট্রাকচার্ড ডেটা ক্যাপচার লাইব্রেরি এবং উত্তরের FHIR কন্টেন্ট সংরক্ষণ করতে FHIR ইঞ্জিন লাইব্রেরি ব্যবহার করব।
- এরপর ক্লাউড হেলথকেয়ার এপিআই ব্যবহার করে ডেটা ক্লাউড এফএইচআইআর স্টোরে আপলোড করা হবে।
- আপলোড করার আগে আমরা প্রথমে ফায়ারবেস ব্যবহার করে নিজেদের প্রমাণীকরণ করব।

উপরের চিত্রটি প্রবাহটি উপস্থাপন করে। প্রতিটি উপাদানের বিস্তারিত ব্যাখ্যার জন্য ব্লগটি পড়ুন।
২. প্রয়োজনীয়তা
- ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- অ্যান্ড্রয়েড স্টুডিওর একটি সাম্প্রতিক সংস্করণ
- একটি অ্যান্ড্রয়েড এমুলেটর সেট আপ করা আছে (আপনি আপনার আসল অ্যান্ড্রয়েড ডিভাইসটিও ব্যবহার করতে পারেন)
আপনার প্রকল্প তৈরি করুন
- গুগল ক্লাউড কনসোলের প্রজেক্ট সিলেক্টর পেজে, একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন বা তৈরি করুন।
- আপনার ক্লাউড প্রোজেক্টের জন্য বিলিং চালু আছে কিনা তা নিশ্চিত করুন। কোনো প্রোজেক্টে বিলিং চালু আছে কিনা তা কীভাবে পরীক্ষা করবেন, তা জেনে নিন।
- প্রয়োজনীয় এপিআইগুলো (বিগকোয়েরি, হেলথকেয়ার এপিআই) সক্রিয় করুন ।
ক্লাউড শেল সক্রিয় করুন
- আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ এবং এতে bq আগে থেকেই লোড করা থাকে।
ক্লাউড কনসোল থেকে, উপরের ডান কোণায় থাকা ‘Activate Cloud Shell’-এ ক্লিক করুন:

- ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে। যদি আপনার প্রজেক্ট সেট করা না থাকে, তবে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <YOUR_PROJECT_ID>
gcloud কমান্ড এবং এর ব্যবহার সম্পর্কে জানতে ডকুমেন্টেশন দেখুন।
৩. স্বাস্থ্যসেবা এপিআই সেটআপ
- হেলথকেয়ার এপিআই (Healthcare API) সক্রিয় আছে কিনা তা নিশ্চিত করুন: গুগল ক্লাউড কনসোল এপিআই লাইব্রেরিতে (Google Cloud Console API library) যান, হেলথকেয়ার এপিআই (Healthcare API) অনুসন্ধান করুন, ‘এনাবল’ (ENABLE) এ ক্লিক করুন এবং এটি এপিআই (API) সক্রিয় করবে এবং প্রজেক্টে হেলথকেয়ার সার্ভিস অ্যাকাউন্ট (Healthcare Service Account) যুক্ত করবে।
- সার্ভিস অ্যাকাউন্টে BigQuery অ্যাডমিন অনুমতি প্রদান করতে, ক্লাউড শেল টার্মিনালে নিচের gcloud কমান্ডটি চালান:
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 খুঁজে নিতে পারেন, শনাক্তকরণের জন্য ডকুমেন্টেশন দেখুন।
স্বাস্থ্যসেবা ডেটাসেট তৈরি করুন
ক্লাউড শেলে, হেলথকেয়ার ডেটাসেট তৈরি করতে নিচের কমান্ডটি চালান:
gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1
অবস্থানটি একটি অঞ্চলে নির্ধারণ করুন।
FHIR ডেটাস্টোর তৈরি করুন
ক্লাউড শেলে, FHIR ডেটাস্টোর তৈরি করতে নিচের কমান্ডটি চালান:
gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
--dataset=<<DATASET_ID>> --location=us-central1 --version=r4
অবস্থানটি একটি অঞ্চলে নির্ধারণ করুন।
৪. বিগকোয়েরি সেটআপ এবং স্ট্রিমিং
এর মধ্যে রয়েছে FHIR স্টোরের ডেটা BigQuery ডেটাসেটে সংরক্ষণ করা, যাতে BigQuery এবং BQML-এর শক্তিকে কাজে লাগিয়ে সেই ডেটা কোয়েরি, প্রোগ্রাম এবং বিশ্লেষণ করা যায়।
BigQuery ডেটাসেট তৈরি করুন
BigQuery ডেটাসেট হলো কতগুলো টেবিলের সমষ্টি। একটি ডেটাসেটের সমস্ত টেবিল একই ডেটা লোকেশনে সংরক্ষিত থাকে। আপনি একটি ডেটাসেট এবং এর টেবিলগুলোতে অ্যাক্সেস সীমিত করার জন্য কাস্টম অ্যাক্সেস কন্ট্রোলও যুক্ত করতে পারেন।
ক্লাউড শেলে, নিচের কমান্ডটি চালান:
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
অবস্থানটি একটি অঞ্চলে নির্ধারণ করুন।
BigQuery স্ট্রিমিং তৈরি করুন
একটি FHIR স্টোরে যখনই কোনো FHIR রিসোর্স তৈরি, আপডেট, প্যাচ বা ডিলিট করা হয়, তখন সেই রিসোর্সের পরিবর্তনগুলো BigQuery-তে এক্সপোর্ট করার জন্য স্ট্রিমিং প্রয়োজন হয়। প্রতিটি স্টোরে সর্বোচ্চ ১০টি স্ট্রিমিং কনফিগ থাকতে পারে।
- গুগল ক্লাউড হেলথকেয়ার কনসোল, ব্রাউজার পৃষ্ঠায় যান
- নতুন তৈরি করা ডেটাসেটটিতে ক্লিক করুন।
- নতুন তৈরি করা ডেটা স্টোরে ক্লিক করুন

- নতুন স্ট্রিমিং কনফিগারেশন যোগ করুন-এ ক্লিক করুন

- তালিকা থেকে নতুন তৈরি করা BigQuery ডেটাসেটটি, স্কিমা টাইপ হিসেবে "Analytics V2" এবং রিসোর্স টাইপ হিসেবে "Patient" নির্বাচন করুন (আপনি যত খুশি রিসোর্স টাইপ বেছে নিতে পারেন) এবং Done-এ ক্লিক করুন।

ব্যাস, হয়ে গেল। আপনি এখন FHIR স্টোরের ডেটা সংরক্ষণ করতে এবং BigQuery-তে তা স্ট্রিম করতে সম্পূর্ণ প্রস্তুত।
৫. ক্লাউড ফাংশন (হেলথকেয়ার এপিআই ব্যবহার করে R4 ডেটা FHIR ডেটাস্টোরে লেখা)
ক্লাউড ফাংশনস আপনাকে সুবিধাজনকভাবে আপনার কোড লিখতে এবং সার্ভারবিহীন পদ্ধতিতে ক্লাউডে তা স্থাপন করতে দেয়। এটি স্কেলেবল, পে-অ্যাজ-ইউ-গো, ইভেন্ট-ড্রাইভেন এবং প্রযুক্তি ও ভাষা সমর্থনের দিক থেকে উন্মুক্ত। আরও বৈশিষ্ট্যের জন্য ডকুমেন্টেশন দেখুন।
আমরা যে ফাংশনটি লিখব তার উদ্দেশ্য হলো ক্লাউড হেলথকেয়ার এপিআই ব্যবহার করে FHIR R4 ফরম্যাটে আসা ডেটাকে প্রমাণীকরণ করা এবং FHIR ডেটা স্টোরে লেখা। ক্লাউড ফাংশনটি তৈরি করতে:
- ক্লাউড ফাংশন- এ যান এবং ফাংশন তৈরি করুন-এ ক্লিক করুন।
- নামটি fhir-datastore-proxy, অঞ্চলটি us-central1 এবং প্রমাণীকরণ বিকল্পটি "Require Authentication"-এ সেট করুন।
- রানটাইম, বিল্ড, কানেকশন এবং সিকিউরিটি সেটিংস প্রসারিত করুন। আপনাকে পাঁচটি রানটাইম এনভায়রনমেন্ট ভেরিয়েবল যোগ করতে হবে:
নাম: CLOUD_FUNCTIONS_ENDPOINT | মান: ফাংশনের URL এন্ডপয়েন্ট। আপনি এটি উপরের Authentication ব্লকে দেখতে পাবেন এবং এটি এই ফর্ম্যাটে থাকবে: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy
নাম: প্রজেক্ট_আইডি | মান: আপনার প্রজেক্ট আইডি
নাম: ডেটাসেটের অবস্থান | মান: আপনার FHIR ডেটাস্টোরের অবস্থান
নাম: ডেটাসেট আইডি | মান: হেলথকেয়ার ডেটাস্টোর আইডি
নাম: FHIR_STORE_ID | মান: FHIR স্টোর আইডি
- পরবর্তী পৃষ্ঠায় যেতে Next চাপুন, যেখানে আমরা আমাদের কোড যোগ করব।
- এখন একটি ইনলাইন এডিটর প্রদর্শিত হবে, ভাষা হিসেবে Java 17 নির্বাচন করুন এবং HelloHttpFunction.java ক্লাসে যান। এটির নাম পরিবর্তন করে FhirDatastoreProxy.java রাখুন। এন্ট্রি পয়েন্টটির নামও পরিবর্তন করে gcfv2.FhirDatastoreProxy করতে ভুলবেন না।
- রিপো থেকে কোডটি কপি করে ইনলাইন এডিটরে পেস্ট করুন।
- pom.xml ফাইলে যান এবং রিপো থেকে pom ফাইলটি ইনলাইন এডিটরে কপি করুন।
- DEPLOY-তে ক্লিক করুন, এবং আপনার ফাংশনটি শীঘ্রই তৈরি হয়ে চালু হয়ে যাবে।
দ্রষ্টব্য:
- এই ফাংশনে ব্যবহৃত ক্লাউড হেলথকেয়ার এপিআই, হেলথকেয়ার এপিআই-তে আসা অনুরোধগুলোকে প্রমাণীকরণের জন্য অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে।
- অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে কল করার জন্য ডেপ্লয় করা ফাংশনের URL-টি সেভ করে রাখুন। এখন পর্যন্ত আমরা অ্যান্ড্রয়েড অ্যাপের জন্য হেলথকেয়ার এপিআই ব্যবহার করে স্বাধীনভাবে BigQuery-তে FHIR ডেটা লেখার জন্য প্রয়োজনীয় সমস্ত অংশ তৈরি করেছি। এখন চলুন নিশ্চিত করা যাক যে সমস্ত অংশ সংযুক্ত আছে এবং একটি প্রশ্নপত্র জমা দেওয়ার পর এপিআইটি কল করা হচ্ছে।
৬. অ্যান্ড্রয়েড প্রজেক্ট এবং ফায়ারবেস সেটআপ
আমরা অ্যান্ড্রয়েড স্টুডিও -র একটি সাম্প্রতিক সংস্করণ এবং একটি অ্যান্ড্রয়েড এমুলেটর সেটআপ ব্যবহার করব (আপনি আপনার আসল অ্যান্ড্রয়েড ডিভাইসও ব্যবহার করতে পারেন)। এটি প্রস্তুত হয়ে গেলে নিচের ধাপগুলো অনুসরণ করুন:
- FHIR অ্যাপের উদাহরণগুলির রিপোটি ক্লোন করুন: https://github.com/google/fhir-app-examples
- অ্যান্ড্রয়েড স্টুডিও খুলুন, 'Import Project (Gradle, Eclipse ADT, etc.)' নির্বাচন করুন এবং আপনার পূর্বে ডাউনলোড করা সোর্স কোড থেকে 'cloudfunction/' ফোল্ডারটি বেছে নিন। 'app/google-services.json' ফাইলটি খুলুন। এটি খালি আছে এবং এটি পূরণ করতে হবে।
./gradlew signingReport ব্যবহার করে একটি SHA-1 কী তৈরি করুন, এবং ডিবাগ ভ্যারিয়েন্টের অধীনে থাকা SHA1 ফিল্ডটি নোট করে রাখুন।
Firebase Console ব্যবহার করে অ্যাপটি Firebase-এ যোগ করুন (ধাপ ১ এবং ২ অনুসরণ করুন)। "Debug signing certificate SHA-1" ফিল্ডে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত মানটি পূরণ করুন।
google-services.json ফাইলটি ডাউনলোড করুন এবং Firebase থেকে এর কন্টেন্টগুলো app ফোল্ডারের খালি ফাইলটিতে প্রতিস্থাপন করুন।
ফায়ারবেস এসডিকে ইতিমধ্যেই বিল্ড গ্রেডল ফাইলগুলিতে যুক্ত করা হয়েছে।
- FhirApplication.kt ফাইলটি খুলুন এবং baseUrl ফিল্ডটিতে আপনার ক্লাউড ফাংশনের URL সেট করুন।
- অ্যান্ড্রয়েড স্টুডিও টুলবার থেকে 'আপনার প্রজেক্টকে গ্রেডল ফাইলের সাথে সিঙ্ক করুন' বিকল্পটি নির্বাচন করুন।
আমরা এখন বাস্তবায়নের সেট আপ এবং নির্ভরতা অন্তর্ভুক্তিকরণ পর্বটি সম্পন্ন করেছি।
৭. প্রশ্নমালা গঠন এবং উত্তর প্রদান
রিপোটিতে প্রশ্নাবলীটি ইতিমধ্যেই তৈরি করা আছে। কিন্তু চলুন কোডটি দেখে নেওয়া যাক:
- নিশ্চিত করুন যে app/src/main/res/layout/activity_main.xml ফাইলের ConstraintLayout-এর ভিতরে FragmentContainerView-টি রয়েছে।
- ফ্র্যাগমেন্টটি রেন্ডার করার জন্য নিশ্চিত করুন যে QuestionnaireFragment-টিতে একটি JSON এনকোডেড FHIR Questionnaire রয়েছে।
এই ক্ষেত্রে আমরা ফ্র্যাগমেন্টটি রেন্ডার করার জন্য " new-patient-registration-paginated.json " json ফাইলটি ব্যবহার করব। MainActivity.kt , AddPatientFragment.kt এবং AddPatientViewModel.kt ফাইলগুলো দেখুন।
এখন যেহেতু আমরা fragment, json এবং model যাচাই করে নিয়েছি, অ্যাপটি রান করুন এবং প্রশ্নমালার ফিল্ডগুলোতে উত্তর দিয়ে চেষ্টা করে দেখুন।
আপনি স্ট্রিং, তারিখ, সংখ্যাসূচক ফিল্ড এবং অন্যান্য শর্তের যাচাইকরণ লক্ষ্য করবেন।
আপনার তৈরি হওয়া রেকর্ডটি দেখতে আপনি অ্যাপটি চালিয়ে লগটি পরীক্ষা করতে পারেন।

আপনি এখানে ফ্র্যাগমেন্ট ব্যবহার সম্পর্কে আরও জানতে পারবেন। প্রশ্নমালার ফ্র্যাগমেন্ট এবং প্রতিক্রিয়া সেটআপের জন্য এটুকুই যথেষ্ট।
৮. FHIRStore এবং BigQuery ডেটাসেটের ফলাফল প্রদর্শন
এখন যেহেতু আমরা সেটআপ এবং আপডেটগুলো সম্পন্ন করেছি, 'Sync Project with Gradle Files'-এ ক্লিক করুন। এটি সম্পন্ন হলে,
- অ্যান্ড্রয়েড এমুলেটরে অ্যাপটি চালান এবং আপনার প্রশ্নাবলী লোড হতে দেখুন।
- প্রশ্নগুলোর উত্তর দিন এবং উপরে থাকা সাবমিট বাটনে ক্লিক করুন।
- অ্যাপে আপনি "রোগী সংরক্ষিত হয়েছে" বার্তাটি দেখতে পাবেন।
FHIR স্টোরের ফলাফল দেখুন
Google Cloud Healthcare FHIRViewer কনসোলে যান

আপনার FHIR স্টোর নির্বাচন করুন, কোয়েরি করুন এবং রান সার্চ-এ ক্লিক করুন, তাহলেই আপনি ঠিক নিচে অনুসন্ধানের ফলাফল দেখতে পাবেন। 
BigQuery ডেটাসেটের ফলাফল দেখুন
Google Cloud BigQuery কনসোলে যান এবং এক্সপ্লোরার প্যানে, এই প্রজেক্টের জন্য আপনার তৈরি করা ডেটাসেটটিতে যান।

প্রিভিউ-তে ক্লিক করলে, আপনি বিগকোয়েরি ডেটাসেট-এর মধ্যে হেলথকেয়ার এফএইচআইআর স্টোর-এ পাওয়া একই সংখ্যা এবং ফলাফল ডেটা দেখতে পাবেন।

আপনি এখন ক্লাউড ডেটাসেটে সেভ করা FHIR ডেটার উপর BigQuery SQL, Analytics এবং ML প্রয়োগ করতে পারবেন।
৯. অনুসন্ধান এবং অফলাইন সক্ষমতা
OHS চালিত অ্যান্ড্রয়েড FHIR SDK অ্যাপে অফলাইন সক্ষমতা নিশ্চিত করতে, আমরা এখানে যে বাস্তবায়ন নিয়ে আলোচনা করছি তাতে সক্রিয় করার জন্য প্রয়োজনীয় ডিজাইন নির্দেশিকা অনুসরণ করতে ভুলবেন না।
FHIR রিসোর্স অনুসন্ধানের জন্য আমাদের কাছে দুটি উপায় রয়েছে:
- গুগল ক্লাউড কনসোলে FHIR ভিউয়ার
- GET বা POST অনুরোধ ব্যবহার করে FHIR অনুসন্ধান পদ্ধতি
১০. অ্যাপ ডেমো
এখন যেহেতু আমাদের অ্যাপটি তৈরি হয়ে গেছে, চলুন এটি নিয়ে কাজ করি এবং ক্লাউডে এর ফলাফল দেখি।
১১. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলো অনুসরণ করুন:
- Google Cloud কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
- প্রজেক্ট তালিকা থেকে আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট-এ ক্লিক করুন।
- ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন, এবং তারপর প্রজেক্টটি ডিলিট করতে শাট ডাউন-এ ক্লিক করুন।
১২. অভিনন্দন
অভিনন্দন! এই প্রকল্পে, আমরা মাত্র ৭টি ধাপে ক্লাউড হেলথকেয়ার এপিআই ব্যবহার করে ক্লাউড হেলথকেয়ার FHIR স্টোর এবং BigQuery ডেটাসেটে রোগীর FHIR ডেটা সংরক্ষণ ও কোয়েরি করার জন্য একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন সফলভাবে তৈরি করেছি।
- অ্যান্ড্রয়েড অ্যাপটি সেটআপ করুন
- গুগল ক্লাউড হেলথকেয়ার এপিআই সেট আপ করুন
- হেলথকেয়ার ডেটাসেট এবং FHIR ডেটাস্টোর তৈরি করা হয়েছে
- BigQuery ডেটাসেট তৈরি করা হয়েছে
- FHIR ডেটাস্টোরের ডেটা BigQuery ডেটাসেটে লেখার জন্য একটি BigQuery স্ট্রিম কনফিগার করা হয়েছে।
- FHIR ডেটাস্টোরে R4 ডেটা লেখার জন্য একটি ক্লাউড ফাংশন স্থাপন করা হয়েছে।
- প্রশ্নাবলীর উত্তর জমা দেওয়ার পর অ্যান্ড্রয়েড অ্যাপ থেকে ক্লাউড ফাংশন সক্রিয় করা হয়।
এখন যেহেতু ধাপগুলো পরিষ্কার, নির্দ্বিধায় রোগীর FHIR সম্পাদনা ক্লাউডে সিঙ্ক করার জন্য একই ধাপগুলো চেষ্টা করে দেখুন।