文章
· 六月 5 阅读大约需 7 分钟

发布使用 IRIS for Health 的 SMART on FHIR EHR

在过去的几个月里,我一直在从事 SMART on FHIR EHR Launch 的工作,使用 CSIRO 的两个开源应用程序:SMART-EHR-Launcher 和 SMART 表单应用程序来测试 IRIS for Health 的功能。这段旅程非常有趣,我非常感谢能有机会参与这项任务并探索 IRIS for Health 的更多潜力。

在 HL7 AU FHIR Connectathon 上成功演示了多个外部 SMART 应用程序的无缝启动后,我很高兴能与社区分享我的心得。我希望我的见解能帮助其他人更快地开始类似的项目。

这项任务涉及使用 SMART-EHR-Launcher 作为 EHR 来启动 SMART 表单应用程序。同时,IRIS for Health 被用作 EHR 的 FHIR 资源库,其 OAuth2 服务器被用作授权服务器。

在进入激动人心的时刻之前,让我们先仔细了解一下 SMART on FHIR 和 SMART on FHIR EHR 启动仪式。让我们问问我们的好朋友 ChatGPT 和 豆包。

什么是 SMART on FHIR?

SMART on FHIR 是一种用于开发医疗保健应用程序的平台,旨在实现医疗保健系统之间的互操作性、安全性和可扩展性。以下是其详细介绍:

  • 含义:SMART 代表可替代医疗应用程序和可重用技术(Substitutable Medical Applications, Reusable Technologies),FHIR 指快速医疗互操作性资源(Fast Healthcare Interoperability Resources),由健康级别七国际(HL7)组织开发。SMART on FHIR 就是基于 FHIR 标准的可替代医疗应用程序和可重用技术框架,它将两者的优势结合起来,为构建和部署医疗保健应用程序提供了强大而灵活的平台

什么是 SMART on FHIR EHR Launch?

SMART on FHIR EHR Launch 是一种在电子健康记录(EHR)系统中启动基于 SMART on FHIR 应用程序的流程和机制,

作用和意义

  • 实现互操作性:让不同的 EHR 系统和基于 SMART on FHIR 的应用程序能够以标准化的方式进行交互和集成,打破信息孤岛,使得医疗数据可以在不同的系统和应用之间流动,为医疗服务提供者和患者提供更全面、便捷的服务。
  • 提升医疗服务效率和质量:医护人员可以在 EHR 系统中快速启动各种专业的医疗应用程序,获取更多的临床信息和决策支持,有助于更准确地诊断和治疗患者。例如,通过启动特定的疼痛管理摘要应用程序,医护人员可以快速获取患者的疼痛相关信息,为疼痛管理提供更好的方案。
  • 增强患者参与度:患者也可能通过 EHR 系统启动一些与自身健康管理相关的应用程序,如查看自己的健康数据、预约挂号等,从而更好地参与到自己的医疗保健过程中

从 SMART App Launch 网站 (https://build.fhir.org/ig/HL7/smart-app-launch/app-launch.html) 我们可以找到 SMART App Launch 的详细信息。

现在游戏开始啦!

应用程序部署和配置
 

SMART-EHR-Launcher: 按照 GitHub repository 存储库中的步骤部署 SMART-EHR-Launcher. 确保通过将VITE_FHIR_SERVER_URL
设置为 IRIS for Health FHIR server endpoint 来配置应用程序的 .env 文件。

部署完成后,打开应用程序,点击从practitioner旁边的箭头。

接下来,点击 patient 旁边的箭头。

最后,我们可以启动 launch 按钮。

让我们仔细看看Launch Button URL: https://localhost:5173/launch?iss=https%3A%2F%2Fmyfhirserver%2Fr4&launch=xyz123

从电子病历启动 SMART 应用程序,需要两个参数 iss and launch.

  • iss 指的是 EHR 的 FHIR 端点,应用程序可使用该端点获取 EHR 的其他详细信息,包括其授权 URL。
  • Launch 指的是一个不透明标识符,用于标识此特定启动和与之相关的任何电子健康记录上下文。该参数必须在授权时通过传递一个启动参数传回 EHR。

SMART Forms: 按照 GitHub repository 的步骤来部署 SMART Forms. 确保网络服务器支持 HTTP (SSL/TLS ) 以启用安全通信,例如 https://localhost:5173

  • 更新 scope 配置: 检查 .env 文件,确保其中包含 user/Practitioner.rs. I如果缺少该文件,请将其添加到 scope 中.
  • Library 的使用:此应用程序使用 fhirclient.js 库管理 FHIR 进程上的 SMART。有关详细信息,请访问 fhirclient.js documentation.

IRIS OAuth2 配置

FHIR 上的 SMART 使用 OAuth 2.0 进行安全授权。让我们来探讨如何在 IRIS for Health 上配置 OAuth 2.0。要深入了解 IRIS 上的 OAuth 2.0,有很多出色的文章和视频可供参考。如果您感兴趣,请随时查看这篇文章和这段视频。

在本文中,我将重点关注在 IRIS 上配置 OAuth 2.0 以支持 SMART 应用启动框架。

在本例中,IRIS 是授权服务器和资源服务器。SMART 表单是客户端应用程序,它将在 IRIA OAuth2 客户端注册中注册。

IRIS OAuth2 Authorization Server 配置

点开并找到 IRIS for Health Management 管理界面 -> 系统管理 -> 安全 -> OAuth 2.0 -> Server

  • 输入 OAuth server 的描述.
  • 配置Issuer Endpoint, 允许授权服务器引用自身的端点。生成的 URL 将在稍后的客户端配置过程中使用。
  • 在公共客户端启用 PKCE(代码交换证明密钥)
  • 选择适当的Grant Types。对于 SMART App Launch,确保Authorization Code 授予类型。
  • 设置 SSL/TLS configuration 并确保选择安全的通信线路 .

 

找到并打开 Scopes 页 并添加与项目相关的scopes

找到并打开 JWT 并进行设置选项。选择默认签名算法。如果未指定客户端设置,将使用服务器端配置。
 

找到并打开 Customization tab.

  • Authentication Class:定义了登录屏幕,可以根据组织的需要进行定制。(由于这不是我的主要关注点,所以我保持原样)
  • Validate User Class: 该类验证用户的用户名和密码以及作用域和令牌信息。(同样,用户身份验证和自定义作用域验证也不是我的主要关注点,所以我没有对它们进行改动)。对于您的项目,您应该实现适当的逻辑以满足您的特定要求)

不过,为了确保令牌包含用于SMART on FHIR 的正确信息的发布,我们需要创建一个自定义验证类 (例如 MyOAuth2.Server.Validate).

这个 class 需要:

  • 扩展 %OAuth2.Server.Validate
  • 覆盖 the class method ValidateUser
  • 添加实现所需的附加声明

代码示例:


// Get the launch_id
Set launch = $get(%request.Data("launch",1))


// Using the opaque launch_id, 
// getting patient and practitioner ids according to the individual systems' implementations
<<Logic to get patient and practitioner ids>>


//  Add claims for the tokens
Do properties.SetClaimValue("profile","Practitioner/"_practitioner,"string")

Do properties.SetClaimValue("fhirUser","Practitioner/"_practitioner,"string")

Do properties.SetClaimValue("patient",patient,"string")

Set claim=##class(%OAuth2.Server.Claim).%New()

If (properties.IDTokenClaims) {

  Do properties.IDTokenClaims.SetAt(claim,"profile")

}

Do properties.ResponseProperties.SetAt(patient,"patient")

 

  • 升级 Generate Token Class to %OAuth2.Server.JWT  

IRIS OAuth2 客户端配置

找到并打开 IRIS for Health 管理界面 -> 系统管理 -> 安全 -> OAuth 2.0 -> 客户端

  • 点击 Create Server Description.
  • 在 OAuth2 Server 配置并通过 Issuer Endpoint 录入创建 form . (Open the OAuth2 Server configuration and copy the endpoint.)
  • 选择 the appropriate SSL/TLS configuration.
  • 点击 Discover and Save.
  • 所有的 endpoints 将被展示.

 

找到并打开上一个界面并点击 Client Configuration. 接下来, 我们将创建一个 public client.

 

创建一个 public client:

  • 输入 Application Name, Client Name, and Description.
  • 启用 the client
  • 选择 Client Type 类型为 "Public".
  • 选择适当的 SSL/TLS 配置.
  • 输入 Host Name.
  • 所需授权类型为 "Authorization Code"
  • 选择 “form encoded body” 为 验证类型.
  • 在 JWT Settings, 选择 Access token algorithm.
  • 点击 Dynamic Registration 并保存.
  • 生成一个 Client ID . (Note: There is no secret for a public client.)
  • 找到并打开 IRIS for Health Management Portal -> System Administration -> Security -> OAuth 2.0 -> Server.
  • 点击 Client Description 并打开一个 public client.
  • 添加 https://localhost:5173/  到 Redirect URLs.
  • 点击保存.

IRIS OAuth2 Resource Server 配置

找到并打开 to IRIS for Health Management Portal -> System Administration -> Security -> OAuth 2.0 ->Client.

和之前一样点击 Client Configuration. 这次,我们将创建一个资源服务器(客户端)

  • 输入 Application Name, Client Name, 以及 Description.
  • 启用 the client.
  • 客户端类型选择 Resource Server.
  • 选择合适的 SSL/TLS Configuration.
  • 将 Authentication Type 设置为 basic.
  • 点击 Dynamic Registration 并保存
  • 一个 Client ID 和 Client Secret 就创建好了

配置 the FHIR Server

打开并找到  IRIS for Health Management Portal: Health → Namespace → FHIR Configuration → Server Configuration.

输入 the OAuth Client Name 如下图所示,并保存更改

 

发布!

完成所有配置后,就可以单击电子病历中的启动按钮了

通用 IRIS 验证屏幕打开.

单击 “登录 ”后,将显示scopes 列表。
 

 

选择 “接受 ”授予访问权限后,会出现问卷调查页面。SMART 表单应用程序成功地从 EHR FHIR 资源库中检索并显示了患者和从业者数据。


 

感谢您阅读本指南,了解如何使用 IRIS for Health 启动 SMART on FHIR EHR。希望它能为您提供开始自己项目的知识和工具。祝您好运,并尽情探索各种可能性!

讨论 (0)1
登录或注册以继续