使用 OHS 和 Google Cloud 管理 Android 应用中的 FHIR 数据

1. 简介

在此 Codelab 中,我们将学习如何使用 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

上图显示了此流程。如需详细了解每个组件,请参阅博客

2. 要求

  • 一个浏览器,例如 ChromeFirefox
  • 启用了结算功能的 Google Cloud 项目
  • 最新版本的 Android Studio
  • Android 模拟器设置(您也可以使用实体 Android 设备)

创建项目

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 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 Console 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,如需识别,请参阅文档

创建医疗保健数据集

在 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 设置和流式传输

介绍如何在 BigQuery 数据集中保存 FHIR 存储区数据,以便利用 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
  4. 点击“添加新的直播配置”

caa2cc881d3406aa.png

  1. 从列表中选择新创建的 BigQuery 数据集,“架构类型”为“Analytics V2”资源类型“患者”(您可以选择任意数量的资源类型),然后点击“完成”

1e038c694fcca1ef

大功告成。您已准备好保存 FHIR 存储区数据,并将其流式传输到 BigQuery。

5. Cloud Functions(使用 Healthcare API 将 R4 数据写入 FHIR Datastore)

Cloud Functions 可让您方便地编写代码,并以无服务器方式部署到云端。它采用可扩展、随用随付、事件驱动型,在技术和语言支持方面开放。如需了解更多功能,请参阅此文档

我们要编写的函数旨在进行身份验证,并使用 Cloud Healthcare API 将 FHIR R4 格式的数据写入 FHIR 数据存储区。如需创建 Cloud Functions 函数,请执行以下操作:

  1. 转到 Cloud Functions,然后点击“创建函数”
  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 数据存储区的位置

名称: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. 点击“部署”,您的函数很快就会创建并运行

注意:

  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 等),然后从您之前下载的源代码中选择“cloudfunction/”文件夹。打开 app/google-services.json。此处是空的,需要填充。

使用 ./gradlew signingReport 生成 SHA-1 密钥,并记下调试变体下的 SHA1 字段

使用 Firebase 控制台将应用添加到 Firebase(按照第 1 步和第 2 步操作),使用 Firebase 控制台进行添加。在“调试签名证书 SHA-1”字段中,填入上一步中的值

下载 google-services.json 并将 Firebase 中的内容替换到应用文件夹的空文件中

此 Firebase SDK 已添加到 build Gradle 文件中

  1. 打开 FhirApplication.kt,并将 baseUrl 字段设置为您的 Cloud Functions 函数的网址
  2. 选择“Sync your project with Gradle files”从 Android Studio 工具栏中

现在,我们已完成实现的设置和依赖项包含部分。

7. 调查问卷设置和回答

我们已经在代码库中设置了调查问卷。我们来看一下代码:

  1. 确保 FragmentContainerView 位于 app/src/main/res/layout/activity_main.xml 文件的 ConstraintLayout 中
  2. 请确保 QuestionnaireFragment 具有 JSON 编码的 FHIR 调查问卷,以便呈现该 fragment

在本例中,我们将使用 JSON - "new-patient-registration-paginated.json&quot;来渲染 fragment。检查文件 MainActivity.ktAddPatientFragment.ktAddPatientViewModel.kt

现在,我们已经验证了 fragment、json 和模型,接下来运行应用,并尝试为调查问卷中的字段输入答案

您会发现系统对字符串、日期、数字字段和其他条件进行了验证,

您可以运行应用并检查日志,以查看您创建的记录

9e1bb440074f1a88

如需详细了解如何使用 fragment,请点击此处。以上就是调查问卷片段和回答设置的全部内容。

8. FHIRStore 和 BigQuery 数据集结果显示

现在,设置和更新都已完成,请点击“Sync Project with Gradle Files”。完成后

  1. 在 Android 模拟器上运行应用,并观察调查问卷加载情况
  2. 回答问题,然后点击顶部的“提交”
  3. 您应该会看到“患者已保存”消息在应用中

查看 FHIR 存储结果

导航到 Google Cloud Healthcare FHIRViewer 控制台

1064f03b4e1e45f5

选择您的 FHIR 存储区、查询并点击“运行搜索”,您应该会在正下方看到搜索结果。37a070480a06362c

查看 BigQuery 数据集结果

转到 Google Cloud BigQuery 控制台,在“探索器”窗格中,转到您为此项目创建的数据集。

7c483ec6d578b8cd.png

点击“预览”,您应该会看到与在 BigQuery 数据集内的 Healthcare FHIR Store 中找到的相同数量和结果数据。

faafeae4a837a41c.png

您现在可以对刚刚保存到云端数据集的 FHIR 数据执行 BigQuery SQL、Analytics 和机器学习。

9. 搜索和离线功能

为确保由 OHS 提供支持的 Android FHIR SDK 应用具备离线功能,请务必遵循我们在本文讨论的实现中启用的设计指南

对于搜索 FHIR 资源,我们有两种方法:

  1. Google Cloud Console 中的 FHIR 查看器
  2. 使用 GET 或 POST 请求的 FHIR 搜索方法

10. 应用演示

我们的应用现已开发完毕,接下来我们试用一下,并在云端查看结果。

11. 清理

为避免系统因本博文中使用的资源向您的 Google Cloud 账号收取费用,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,进入管理资源页面
  2. 在项目列表中,选择要删除的项目,然后点击“删除”
  3. 在对话框中输入项目 ID,然后点击“关停”以删除项目

12. 恭喜

恭喜!在此项目中,我们成功地创建了一个 Android 应用,只需 7 个步骤即可使用 Cloud Healthcare FHIR 存储区和 BigQuery 数据集存储和查询患者 FHIR 数据:

  1. 设置 Android 应用
  2. 设置 Google Cloud Healthcare API
  3. 已创建 Healthcare 数据集和 FHIR 数据存储区
  4. 已创建 BigQuery 数据集
  5. 已配置 BigQuery 流以将 FHIR Datastore 数据写入 BigQuery 数据集
  6. 部署了 Cloud Functions 函数以将 R4 数据写入 FHIR Datastore
  7. 在提交调查问卷回复时,通过 Android 应用触发 Cloud Functions 函数

至此,我们已经了解了相关步骤,接下来可随意尝试相同的步骤,将患者的 FHIR 修改内容同步到云端。