透過 OHS 和 Google Cloud 管理 Android 應用程式中的 FHIR 資料

1. 簡介

在本程式碼研究室中,我們會瞭解如何使用 OHS (Open Health Stack) 和 Google Cloud Healthcare API,打造兼具安全性、擴充性和法規遵循的創新醫療照護解決方案。這些強大的工具結合後,醫護人員和開發人員就能建立資料導向解決方案,大幅改善病患照護品質和成果。

我們打算在採用 Android-FHIR SDK 的行動應用程式中,運用 Open Health Stack 和 Google Cloud Healthcare API 的強大功能,讓使用者在 Google Cloud 中管理 FHIR 病患記錄。

現在來看看導入步驟。

建構項目

在這個實作中

  • 我們會使用結構化資料擷取程式庫產生問卷,並透過 FHIR Engine 程式庫儲存回應的 FHIR 內容
  • 系統會利用 Cloud Healthcare API 將資料上傳至 Cloud FHIR 儲存庫
  • 上傳之前,我們會先使用 Firebase 來驗證自己

8514f90f016ecfc0.png

上圖代表流程。如需各個元件的詳細說明,請參閱這篇網誌

2. 需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 已啟用計費功能的 Google Cloud 專案
  • 最新版 Android Studio
  • Android Emulator 設定完成 (您也可以使用實體 Android 裝置)

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 Google Cloud 專案
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用帳單功能
  3. 啟用必要的 API (BigQuery、Healthcare API)

啟用 Cloud Shell

  1. 您將使用 Cloud Shell,這是在 Google Cloud 中執行的指令列環境,已預先載入 bq

在 Cloud 控制台中,按一下右上角的「啟用 Cloud Shell」:

51622c00acec2fa.png

  1. 連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為您的專案 ID。如果專案未設定,請使用下列指令進行設定:
gcloud config set project <YOUR_PROJECT_ID>

如要查看 gcloud 指令和使用方式,請參閱說明文件

3. Healthcare API 設定

  1. 確認已啟用 Healthcare API:前往 Google Cloud 控制台 API 程式庫,搜尋「Healthcare API」,然後按一下「啟用」,該 API 就會建立 API,並將 Healthcare 服務帳戶新增至專案
  2. 將 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,詳情請參閱文件

建立醫療照護資料集

在 Cloud Shell 中執行下列指令,建立 Healthcare 資料集:

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

將「location」設為區域。

建立 FHIR Datastore

在 Cloud Shell 中執行下列指令,建立 FHIR 資料儲存庫:

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

將「location」設為區域。

4. BigQuery 設定和串流

這包括將 FHIR 儲存庫資料儲存在 BigQuery 資料集,以便利用 BigQuery 和 BQML 的強大功能進行查詢、設定及分析。

建立 BigQuery 資料集

BigQuery 資料集是一組資料表,資料集中的所有資料表會儲存在相同的資料位置中。您也可以附加自訂存取權控管,限制存取資料集及其資料表。

在 Cloud Shell 中執行下列指令:

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

將「location」設為區域。

建立 BigQuery 串流

每次在 FHIR 儲存庫中建立、更新、修補或刪除 FHIR 資源時,都必須啟用串流,才能將資源變更匯出至 BigQuery。每個儲存庫最多可以存放 10 項串流設定。

  1. 前往 Google Cloud Healthcare 控制台的瀏覽器頁面
  2. 點選新建立的資料集
  3. 按一下新建立的 DataStore「7acaa364337086aa.png
  4. 點選「新增直播設定」

caa2cc881d3406aa.png

  1. 從清單中選取新建立的 BigQuery 資料集,「結構定義類型」為「Analytics V2」以及資源類型「Patient」(可選擇多種資源類型),然後按一下「完成」

1e038c694fcca1ef.png

就是這麼簡單!您現在可以儲存 FHIR 儲存庫資料,並將資料串流至 BigQuery。

5. Cloud Functions (使用 Healthcare API 將 R4 資料寫入 FHIR Datastore)

Cloud Functions 可讓您以無伺服器的方式輕鬆編寫程式碼,然後部署至雲端。可擴充、即付即用、事件導向,且提供技術和語言支援。如需更多功能,請參閱說明文件

我們會編寫函式,運用 Cloud Healthcare API 驗證 FHIR R4 格式的資料,並寫入 FHIR 資料儲存庫。如要建立 Cloud 函式,請按照下列指示操作:

  1. 前往 Cloud 函式,然後按一下「建立 FUNCTION」
  2. 將名稱設為 fhir-datastore-proxy,將區域設為 us-central1,驗證選項則設為「Require Authentication」
  3. 展開執行階段、建構作業、連線和安全性設定。您將新增五個執行階段環境變數:

名稱: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 Store ID

  1. 按 [下一步] 即可前往下一頁,我們會在該頁面加入程式碼
  2. 系統現在應會顯示內嵌編輯器,選取 Java 17 做為語言,然後前往 HelloHttpFunction.java 類別。重新命名為 FhirDatastoreProxy.java。別忘了一併將進入點重新命名為 gcfv2.FhirDatastoreProxy
  3. 複製存放區中的程式碼,並貼到內嵌編輯器中
  4. 前往 pom.xml 檔案,然後將存放區中的 pom 檔案複製到內嵌編輯器中。
  5. 按一下「部署」,系統就會盡快建立並執行函式

注意:

  1. 這個函式所用的 Cloud Healthcare API 使用應用程式預設憑證來驗證傳送至 Healthcare API 的要求
  2. 請儲存已部署的函式網址,以便從 Android 應用程式叫用。截至目前為止,我們已建立所有必要步驟,讓 Android 應用程式能夠單獨使用 Healthcare API 將 FHIR 資料寫入 BigQuery。現在,請確認所有部分都已連結,並在提交問卷時叫用 API。

6. Android 專案和 Firebase 設定

我們將使用最新版本的 Android Studio,並設定 Android Emulator (您也可以使用實體 Android 裝置)。準備就緒後,請按照下列步驟操作:

  1. 複製 FHIR 應用程式範例存放區:https://github.com/google/fhir-app-examples
  2. 開啟 Android Studio,選取「Import Project」(匯入專案) (Gradle、Eclipse ADT 等),然後從先前下載的原始碼中選擇 cloudfunction/ 資料夾。開啟 app/google-services.json。空白,需要填寫。

使用 ./gradlew signReport 產生 SHA-1 金鑰,並記下偵錯變化版本下方的 SHA1 欄位

Firebase 控制台使用 Firebase 控制台,按照步驟 1 和 2 將應用程式新增至 Firebase。在「Debug Signing certificate SHA-1」(偵錯簽署憑證 SHA-1) 中] 欄位,填入上一步

下載 google-services.json,並將 Firebase 中的內容取代在應用程式資料夾中的空白檔案

建構 Gradle 檔案已新增 Firebase SDK

  1. 開啟 FhirApplication.kt,並將 baseUrl 欄位設為 Cloud 函式的網址
  2. 選取「將專案與 Gradle 檔案同步處理」透過 Android Studio 工具列

我們現已完成導入作業的設定與依附元件納入部分。

7. 問卷設定與回應

我們已在存放區中設置問卷。但現在我們來複習程式碼:

  1. 確認 FragmentContainerView 位於 app/src/main/res/layout/activity_main.xml 檔案的 ConstraintLayout 中
  2. 請確認 QuestionnaireFragment 含有 JSON 編碼的 FHIR 問卷來轉譯片段

在這個範例中,我們會使用 JSONnew-patient-registration-paginated.json&quot;轉譯片段檢查 MainActivity.ktAddPatientFragment.ktAddPatientViewModel.kt 檔案

我們現在已經驗證片段、JSON 和模型,請繼續執行應用程式,並嘗試在問卷中的欄位輸入答案

系統會驗證字串、日期、數值欄位和其他條件

您可以執行應用程式,查看記錄以查看建立的記錄

9e1bb440074f1a88.png

如要進一步瞭解如何使用片段,請按這裡。這在問捲片段與回應設定就很類似了。

8. FHIRStore 和 BigQuery 資料集結果顯示

完成設定和更新後,請按一下「Sync Project with Gradle Files」。完成後

  1. 在 Android Emulator 上執行應用程式,並監控問卷載入情形
  2. 回答問題,然後按一下頂端的「提交」
  3. 您應該會看到「已儲存病患」的訊息應用程式

查看 FHIR 儲存庫結果

前往 Google Cloud Healthcare FHIRViewer 控制台

1064f03b4e1e45f5.png

選取 FHIR 儲存庫、查詢並按下「RUN SEARCH」,搜尋結果應會隨即顯示。37a070480a06362c.png

查看 BigQuery 資料集結果

前往 Google Cloud BigQuery 控制台,在「Explorer」窗格中,前往您為這項專案建立的資料集。

7c483ec6d578b8cd.png

點選「預覽」,您應該會看到數量和產生的資料,與您在 BigQuery 資料集 Healthcare FHIR 儲存庫中的資料相同。

faafeae4a837a41c.png

您現在可以針對剛儲存至雲端資料集的 FHIR 資料,執行 BigQuery SQL、Analytics 和機器學習。

9. 搜尋和離線功能

為確保支援 OHS 的 Android FHIR SDK 應用程式具備離線功能,請務必遵循本文討論的實作方式,在實作時啟用啟用的設計指南

用於搜尋 FHIR 資源的方式有兩種:

  1. Google Cloud 控制台中的 FHIR 檢視器
  2. 使用 GET 或 POST 要求的 FHIR 搜尋方法

10. 應用程式示範

應用程式開發完畢後,我們來玩看看,然後在雲端上查看結果。

11. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本文中所用資源的費用,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台中的「管理資源」頁面。
  2. 在專案清單中,選取要刪除的專案,然後按一下 [刪除]
  3. 在對話方塊中輸入專案 ID,然後按一下「關閉」以刪除專案

12. 恭喜

恭喜!在這項專案中,我們已成功建立 Android 應用程式,只需 7 個步驟,即可在雲端醫療照護 FHIR 商店和 BigQuery 資料集內儲存及查詢病患 FHIR 資料:

  1. 設定 Android 應用程式
  2. 設定 Google Cloud Healthcare API
  3. 已建立 Healthcare 資料集和 FHIR Datastore
  4. 已建立 BigQuery 資料集
  5. 設定 BigQuery 串流,將 FHIR Datastore 資料寫入 BigQuery 資料集
  6. 已部署 Cloud 函式,以便將 R4 資料寫入 FHIR Datastore
  7. 透過問卷回覆內容觸發 Android 應用程式觸發的 Cloud Functions

現在所有步驟都已清楚顯示,您可以嘗試按照相同的步驟,將病患 FHIR 編輯功能同步到雲端。