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

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 驗證身分

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,並將 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,請參閱文件瞭解如何識別。

建立 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 項串流設定。

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

caa2cc881d3406aa.png

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

1e038c694fcca1ef.png

就是這麼簡單!您已完成所有設定,可以儲存 FHIR 存放區資料並串流至 BigQuery。

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

Cloud Functions 可讓您輕鬆撰寫程式碼,並以無伺服器方式部署至雲端。這項服務可擴充、即付即用、事件驅動,且在技術和語言支援方面都相當開放。如要瞭解更多功能,請參閱說明文件

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

  1. 前往 Cloud Functions,然後按一下「CREATE FUNCTION」(建立函式)。
  2. 將名稱設為 fhir-datastore-proxy,區域設為 us-central1,驗證選項設為「需要驗證」
  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 儲存庫 ID

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

注意:

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

6. Android 專案和 Firebase 設定

我們會使用最新版 Android Studio 和已設定的 Android 模擬器 (您也可以使用實體 Android 裝置)。準備就緒後,請按照下列步驟操作:

  1. 複製 FHIR 應用程式範例存放區:https://github.com/google/fhir-app-examples
  2. 開啟 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 檔案中新增

  1. 開啟 FhirApplication.kt,並將 baseUrl 欄位設為 Cloud Function 的網址
  2. 從 Android Studio 工具列選取「Sync your project with Gradle files」

我們已完成實作的設定和依附元件納入部分。

7. 問卷設定和回覆

我們已在存放區中設定問卷調查。但我們先來看看程式碼:

  1. 確認 FragmentContainerView 位於應用程式/src/main/res/layout/activity_main.xml 檔案的 ConstraintLayout 內
  2. 確認 QuestionnaireFragment 含有 JSON 編碼的 FHIR 問卷,可轉譯片段

在本例中,我們將使用 json - " new-patient-registration-paginated.json" 算繪片段。檢查 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 儲存庫、查詢並按下「執行搜尋」,搜尋結果應會顯示在下方。37a070480a06362c.png

查看 BigQuery 資料集結果

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

7c483ec6d578b8cd.png

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

faafeae4a837a41c.png

現在,您可以在剛儲存到雲端資料集的 FHIR 資料上執行 BigQuery SQL、Analytics 和 ML。

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 個步驟,即可使用 Cloud Healthcare API,在 Cloud Healthcare FHIR 儲存庫和 BigQuery 資料集中儲存及查詢病患 FHIR 資料:

  1. 設定 Android 應用程式
  2. 設定 Google Cloud Healthcare API
  3. 已建立 Healthcare 資料集和 FHIR 資料儲存庫
  4. 已建立 BigQuery 資料集
  5. 已設定 BigQuery Stream,將 FHIR Datastore 資料寫入 BigQuery 資料集
  6. 部署 Cloud Function,將 R4 資料寫入 FHIR Datastore
  7. 在問卷調查回覆提交時,從 Android 應用程式觸發 Cloud Functions

步驟說明完畢,請隨意試試,對病患 FHIR 編輯內容執行同步處理至雲端。