1. 簡介
在本程式碼研究室中,我們將瞭解如何使用 OHS (Open Health Stack) 和 Google Cloud Healthcare API,建立安全、可擴充且符合法規的創新醫療保健解決方案。醫療照護人員和開發人員可結合這些強大工具,打造以資料為依據的解決方案,大幅提升病患照護品質和成效。
我們打算在行動應用程式中運用 Open Health Stack 和 Google Cloud Healthcare API 的強大功能,並使用 Android-FHIR SDK,讓使用者在 Google Cloud 中管理 FHIR 病患記錄。
接著來瞭解實作步驟。
建構項目
在這個實作方式中,
- 我們會使用結構化資料擷取程式庫來算繪問卷,並使用 FHIR 引擎程式庫儲存回應的 FHIR 內容
- 接著,系統會使用 Cloud Healthcare API 將資料上傳至 Cloud FHIR 儲存庫
- 上傳前,我們會先使用 Firebase 驗證身分

上圖代表流程。如需各個元件的詳細說明,請參閱這篇網誌。
2. 需求條件
- Chrome 或 Firefox 瀏覽器
- 已啟用計費功能的 Google Cloud 雲端專案
- 最新版 Android Studio
- 已設定 Android Emulator (您也可以使用實體 Android 裝置)
建立專案
- 在 Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案。
- 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
- 啟用必要的 API (BigQuery、Healthcare API)
啟用 Cloud Shell
- 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境,已預先載入 bq:
在 Cloud 控制台,按一下右上角的「啟用 Cloud Shell」:

- 連至 Cloud Shell 後,您應該會看到驗證已完成,專案也已設為獲派的專案 ID。如果專案尚未設定,請使用下列指令設定:
gcloud config set project <YOUR_PROJECT_ID>
如要瞭解 gcloud 指令和用法,請參閱說明文件。
3. 設定 Healthcare API
- 確認已啟用 Healthcare API:前往 Google Cloud 控制台 API 程式庫,搜尋 Healthcare API,然後按一下「啟用」,系統就會啟用 API,並將 Healthcare 服務帳戶新增至專案
- 授予服務帳戶 BigQuery 管理員權限 在 Cloud Shell 終端機中執行下列 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,請參閱文件瞭解如何識別。
建立 Healthcare 資料集
在 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 儲存庫資料儲存在 BigQuery 資料集中,以便運用 BigQuery 和 BQML 的強大功能查詢、程式設計及分析資料。
建立 BigQuery 資料集
BigQuery 資料集是資料表的集合,資料集中的所有資料表都儲存在同一個資料位置。您也可以附加自訂存取權控管,限制資料集及其資料表的存取權。
在 Cloud Shell 中執行下列指令:
bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>
將位置設為區域。
建立 BigQuery 串流
如要在 FHIR 儲存庫中建立、更新、修補或刪除 FHIR 資源時,一律將資源變更匯出至 BigQuery,就必須使用串流功能。每個儲存庫最多可以存放 10 項串流設定。

- 從清單中選取新建立的 BigQuery 資料集,將「結構定義類型」設為「Analytics V2」,並從清單中選取「病患」做為「資源類型」(您可以選擇多個資源類型),然後按一下「完成」

就是這麼簡單!您已完成所有設定,可以儲存 FHIR 存放區資料並串流至 BigQuery。
5. Cloud Functions (使用 Healthcare API 將 R4 資料寫入 FHIR Datastore)
Cloud Functions 可讓您輕鬆撰寫程式碼,並以無伺服器方式部署至雲端。這項服務可擴充、即付即用、事件驅動,且在技術和語言支援方面都相當開放。如要瞭解更多功能,請參閱說明文件。
我們將編寫的函式,目的是要使用 Cloud Healthcare API 驗證資料,並將 FHIR R4 格式的資料寫入 FHIR 資料儲存庫。如要建立 Cloud 函式,請按照下列指示操作:
- 前往 Cloud Functions,然後按一下「CREATE FUNCTION」(建立函式)。
- 將名稱設為 fhir-datastore-proxy,區域設為 us-central1,驗證選項設為「需要驗證」
- 展開「執行階段、建構作業、連線和安全性設定」。您將新增五個執行階段環境變數:
名稱:CLOUD_FUNCTIONS_ENDPOINT | 值:函式的網址端點。您會在上方「驗證」區塊中看到這個值,格式為:https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy
名稱:PROJECT_ID | 值:您的專案 ID
名稱:DATASET_LOCATION | 值:FHIR Datastore 的位置
名稱:DATASET_ID | 值:Healthcare Datastore ID
名稱:FHIR_STORE_ID | 值:FHIR 儲存庫 ID
- 按「下一步」前往下一個頁面,我們將在該頁面中新增程式碼
- 現在應該會顯示內嵌編輯器,請選取 Java 17 做為語言,然後前往 HelloHttpFunction.java 類別。並重新命名為 FhirDatastoreProxy.java。別忘了將進入點重新命名為 gcfv2.FhirDatastoreProxy
- 從 存放區複製程式碼,然後貼到內嵌編輯器中
- 前往 pom.xml 檔案,然後將存放區中的 pom 檔案複製到內嵌編輯器
- 按一下「DEPLOY」,系統就會建立並執行函式
注意:
- 這個函式使用的 Cloud Healthcare API 會使用應用程式預設憑證,驗證傳送至 Healthcare API 的要求
- 儲存已部署的函式網址,以便從 Android 應用程式叫用。到目前為止,我們已建立 Android 應用程式所需的所有項目,可獨立使用 Healthcare API 將 FHIR 資料寫入 BigQuery。現在請確認所有部分都已連結,且 API 會在問卷提交時叫用。
6. Android 專案和 Firebase 設定
我們會使用最新版 Android Studio 和已設定的 Android 模擬器 (您也可以使用實體 Android 裝置)。準備就緒後,請按照下列步驟操作:
- 複製 FHIR 應用程式範例存放區:https://github.com/google/fhir-app-examples
- 開啟 Android Studio,選取「Import Project (Gradle, Eclipse ADT, etc.)」,然後從先前下載的原始碼中選擇 cloudfunction/ 資料夾。開啟 app/google-services.json。內容為空白,需要填入。
使用 ./gradlew signingReport 產生 SHA-1 金鑰,並記下偵錯變體下方的 SHA1 欄位
使用 Firebase 控制台將應用程式新增至 Firebase (請按照步驟 1 和 2 操作)。在「Debug signing certificate SHA-1」欄位中,填入上一個步驟的值
下載 google-services.json,然後將 Firebase 的內容取代應用程式資料夾中空白檔案的內容
Firebase SDK 已在建構 Gradle 檔案中新增
- 開啟 FhirApplication.kt,並將 baseUrl 欄位設為 Cloud Function 的網址
- 從 Android Studio 工具列選取「Sync your project with Gradle files」
我們已完成實作的設定和依附元件納入部分。
7. 問卷設定和回覆
我們已在存放區中設定問卷調查。但我們先來看看程式碼:
- 確認 FragmentContainerView 位於應用程式/src/main/res/layout/activity_main.xml 檔案的 ConstraintLayout 內
- 確認 QuestionnaireFragment 含有 JSON 編碼的 FHIR 問卷,可轉譯片段
在本例中,我們將使用 json - " new-patient-registration-paginated.json" 算繪片段。檢查 MainActivity.kt、AddPatientFragment.kt 和 AddPatientViewModel.kt 檔案
現在我們已驗證片段、JSON 和模型,請繼續執行應用程式,並嘗試在問卷調查中輸入欄位的答案
您會發現系統會驗證字串、日期、數值欄位和其他條件
您可以執行應用程式並查看記錄,確認是否已建立記錄

如要進一步瞭解如何使用片段,請參閱這篇文章。問卷表單片段和回覆設定大致就是這樣。
8. FHIRStore 和 BigQuery 資料集結果顯示
設定和更新完成後,請點選「Sync Project with Gradle Files」。完成後,
- 在 Android Emulator 上執行應用程式,並觀察問卷載入情形
- 回答問題,然後按一下頂端的「提交」
- 應用程式應會顯示「已儲存病患」訊息
查看 FHIR 存放區結果
前往 Google Cloud Healthcare FHIRViewer 控制台

選取 FHIR 儲存庫、查詢並按下「執行搜尋」,搜尋結果應會顯示在下方。
查看 BigQuery 資料集結果
前往 Google Cloud BigQuery 控制台,然後在「Explorer」窗格中,前往您為這個專案建立的資料集。

按一下「預覽」,您應該會看到與 Healthcare FHIR Store 中相同的數字和結果資料。

現在,您可以在剛儲存到雲端資料集的 FHIR 資料上執行 BigQuery SQL、Analytics 和 ML。
9. 搜尋和離線功能
如要確保 OHS 支援的 Android FHIR SDK 應用程式具備離線功能,請務必遵循設計指南,並在我們討論的實作方式中啟用該功能。
如要搜尋 FHIR 資源,有兩種方法:
- Google Cloud 控制台中的 FHIR 檢視器
- 使用 GET 或 POST 要求的 FHIR 搜尋方法
10. 應用程式試用版
應用程式開發完成後,請試用應用程式,並在雲端查看結果。
11. 清理
如要避免系統向您的 Google Cloud 帳戶收取本文章所用資源的費用,請按照下列步驟操作:
12. 恭喜
恭喜!在本專案中,我們已成功建立 Android 應用程式,只需 7 個步驟,即可使用 Cloud Healthcare API,在 Cloud Healthcare FHIR 儲存庫和 BigQuery 資料集中儲存及查詢病患 FHIR 資料:
- 設定 Android 應用程式
- 設定 Google Cloud Healthcare API
- 已建立 Healthcare 資料集和 FHIR 資料儲存庫
- 已建立 BigQuery 資料集
- 已設定 BigQuery Stream,將 FHIR Datastore 資料寫入 BigQuery 資料集
- 部署 Cloud Function,將 R4 資料寫入 FHIR Datastore
- 在問卷調查回覆提交時,從 Android 應用程式觸發 Cloud Functions
步驟說明完畢,請隨意試試,對病患 FHIR 編輯內容執行同步處理至雲端。
