你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将数据转换为 FHIR 用于 Azure API for FHIR

重要

Azure API for FHIR 将于 2026 年 9 月 30 日停用。 按照迁移策略在该日期之前过渡到 Azure Health Data Services FHIR 服务。 由于 Azure API for FHIR 停用,在 2025 年 4 月 1 日开始前不会允许新的部署。 Azure Health Data Services FHIR 服务是 Azure API for FHIR 的演化版本,可让客户管理 FHIR、DICOM 和医疗技术服务,并集成到其他 Azure 服务。

FHIR 服务中的 $convert-data 自定义终结点用于将数据从不同的数据类型转换为 FHIR。 它使用 Liquid 模板引擎和来自 FHIR 转换器项目的模板作为默认模板。 可根据需要自定义这些转换模板。

目前,$convert-data 自定义终结点支持 four 类型的数据转换:

源数据格式 目标数据格式
C-CDA FHIR
HL7v2 FHIR
JSON FHIR
FHIR STU3 FHIR R4

注意

$convert-data 终结点可用作 ETL 管道中的组件,用于将原始医疗保健数据从旧版格式转换为 FHIR 格式。 但它本身不是 ETL 管道。 建议使用 ETL 引擎(如逻辑应用或 Azure 数据工厂)实现完整的工作流,以便准备要保存到 FHIR 服务器的 FHIR 数据。 工作流可能包括:数据读取和引入、数据验证、进行 $convert-data API 调用、数据预处理/后期处理、数据扩充和重复数据删除。

使用 $convert-data 终结点

$convert-data 操作已集成到 FHIR 服务中,以作为服务的一部分运行。 在服务器中启用 $convert-data 后,可以对服务器进行 API 调用,以将数据转换为 FHIR:https://<<FHIR service base URL>>/$convert-data

参数资源

$convert-data 会在请求正文中采用参数资源,如下表所述。 在 API 调用请求正文中,将包含以下参数:

参数名称 说明 接受的值
inputData 要转换的数据。 对于 Hl7v2:字符串
对于 Ccda:XML
对于 Json:JSON
对于 FHIR STU3:JSON
inputDataType 输入的数据类型。 HL7v2CcdaJsonFhir
templateCollectionReference Azure 容器注册表 (ACR)OCI 映像模板集合的引用。 它是包含要用于转换的 Liquid 模板的映像。 它可以是对默认模板的引用,也可以是对注册到 FHIR 服务的自定义模板映像的引用。 请查看以下信息,以了解如何自定义模板、在 ACR 上托管这些模板,以及如何注册到 FHIR 服务。 对于默认/示例模板
HL7v2 模板
microsofthealth/fhirconverter:default
microsofthealth/hl7v2templates:default
C-CDA 模板
microsofthealth/ccdatemplates:default
JSON 模板
microsofthealth/jsontemplates:default
FHIR STU3 模板
microsofthealth/stu3tor4templates:default

对于自定义模板
<RegistryServer>/<imageName>@<imageDigest>、<RegistryServer>/<imageName>:<imageTag>
rootTemplate 转换数据时要使用的根模板。 对于 HL7v2
“ADT_A01”、“ADT_A02”、“ADT_A03”、“ADT_A04”、“ADT_A05”、“ADT_A08”、“ADT_A11”、“ADT_A13”、“ADT_A14”、“ADT_A15”、“ADT_A16”、“ADT_A25”、“ADT_A26”、“ADT_A27”、“ADT_A28”、“ADT_A29”、“ADT_A31”、“ADT_A47”、“ADT_A60”、“OML_O21”、“ORU_R01”、“ORM_O01”、“VXU_V04”、“SIU_S12”、“SIU_S13”、“SIU_S14”、“SIU_S15”、“SIU_S16”、“SIU_S17”、“SIU_S26”、“MDM_T01”、“MDM_T02”

对于 C-CDA
“CCD”、“ConsultationNote”、“DischargeSummary”、“HistoryandPhysical”、“OperativeNote”、“ProcedureNote”、“ProgressNote”、“ReferralNote”、“TransferSummary”

对于 JSON
“ExamplePatient”、“Stu3ChargeItem”

FHIR STU3“:
STU3 资源名称,例如“患者”、“观察”、“组织”。

注意

FHIR STU3 到 R4 模板是“差异”Liquid 模板,它仅提供 STU3 资源与其 FHIR R4 标准中等效资源的字段差异映射。一些 STU3 资源已重命名或已从 R4 删除。 请参阅 STU3 到 R4 转换的资源差异和约束

注意

JSON 模板是要使用的示例模板,而不是遵循任何预定义 JSON 消息类型的“默认”模板。 与 HL7v2 消息或 C-CDA 文档不同,JSON 没有任何标准化的消息类型。 因此,我们提供了一些示例模板(而不是默认模板),你可以将其用作创建自己的自定义模板的起始指南。

警告

默认模板是在 MIT 许可证下发布的,不受 Microsoft 支持的支持

所提供的默认模板仅用于帮助你快速入门。 更新 Azure API for FHIR 的版本时,它们可能会更新。 因此,要在不同版本的 Azure API for FHIR 之间保持一致的数据转换行为,必须验证转换行为并在 Azure 容器注册表上托管自己的模板副本,将这些模板注册到 Azure API for FHIR,然后用于 API 调用。

示例请求

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "inputData",
            "valueString": "MSH|^~\\&|SIMHOSP|SFAC|RAPP|RFAC|20200508131015||ADT^A01|517|T|2.3|||AL||44|ASCII\nEVN|A01|20200508131015|||C005^Whittingham^Sylvia^^^Dr^^^DRNBR^D^^^ORGDR|\nPID|1|3735064194^^^SIMULATOR MRN^MRN|3735064194^^^SIMULATOR MRN^MRN~2021051528^^^NHSNBR^NHSNMBR||Kinmonth^Joanna^Chelsea^^Ms^^D||19870624000000|F|||89 Transaction House^Handmaiden Street^Wembley^^FV75 4GJ^GBR^HOME||020 3614 5541^PRN|||||||||C^White - Other^^^||||||||\nPD1|||FAMILY PRACTICE^^12345|\nPV1|1|I|OtherWard^MainRoom^Bed 183^Simulated Hospital^^BED^Main Building^4|28b|||C005^Whittingham^Sylvia^^^Dr^^^DRNBR^D^^^ORGDR|||CAR|||||||||16094728916771313876^^^^visitid||||||||||||||||||||||ARRIVED|||20200508131015||"
        },
        {
            "name": "inputDataType",
            "valueString": "Hl7v2"
        },
        {
            "name": "templateCollectionReference",
            "valueString": "microsofthealth/fhirconverter:default"
        },
        {
            "name": "rootTemplate",
            "valueString": "ADT_A01"
        }
    ]
}

示例响应

{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [
    {
      "fullUrl": "urn:uuid:9d697ec3-48c3-3e17-db6a-29a1765e22c6",
      "resource": {
        "resourceType": "Patient",
        "id": "9d697ec3-48c3-3e17-db6a-29a1765e22c6",
        ...
        ...
      "request": {
        "method": "PUT",
        "url": "Location/50becdb5-ff56-56c6-40a1-6d554dca80f0"
      }
    }
  ]
}

自定义模板

可使用 Visual Studio Code 的 FHIR 转换器扩展根据需要自定义模板。 此扩展提供交互式编辑体验,让你能够轻松地下载 Microsoft 发布的模板和示例数据。 有关更多详细信息,请参阅扩展中的文档。

注意

适用于 Visual Studio Code 的 FHIR 转换器扩展适用于 HL7v2、C-CDA 和 JSON Liquid 模板。 目前不支持 FHIR STU3 到 R4 Liquid 模板。

托管并使用模板

建议在 ACR 上托管自己的模板副本。 托管自己的模板副本和在 $convert-data 操作中使用这些模板涉及 4 个步骤:

  1. 向 Azure 容器注册表推送模板。
  2. 在 Azure API for FHIR 实例上启用托管标识。
  3. 提供 ACR 对 Azure API for FHIR 托管标识的访问权限。
  4. 在 Azure API for FHIR 中注册 ACR 服务器。
  5. (可选)配置 ACR 防火墙以进行安全访问。

向 Azure 容器注册表推送模板

创建 ACR 实例后,可以使用 FHIR 转换器扩展 中的“FHIR 转换器:推送模板”命令将自定义模板推送到 ACR。 另外,还可使用模板管理 CLI 工具来实现此目的。

在 Azure API for FHIR 上启用托管标识

在 Azure 门户中浏览到 Azure API for FHIR 服务的实例,然后选择“标识”边栏选项卡。 将状态更改为“开”,以在 Azure API for FHIR 中启用托管标识

启用托管标识的屏幕图像。

提供 ACR 对 Azure API for FHIR 的访问权限

  1. 浏览到“访问控制 (IAM)”边栏选项卡

  2. 依次选择“添加”和“添加角色分配”,以打开“添加角色分配”页

  3. 分配 AcrPull 角色。

    “添加角色分配”页的屏幕图像。

若要详细了解如何在 Azure 门户中分配角色,请参阅 Azure 内置角色

在 Azure API for FHIR 中注册 ACR 服务器

可以使用 Azure 门户或使用 CLI 注册 ACR 服务器。

使用 Azure 门户注册 ACR 服务器

浏览到 Azure API for FHIR 实例中“数据转换”下的“项目”边栏选项卡。 你将看到当前已注册的 ACR 服务器的列表。 选择“添加”,然后从下拉菜单中选择注册表服务器。 需要选择“保存”才能使注册生效。 应用更改并重启实例可能需要几分钟时间。

使用 CLI 注册 ACR 服务器

最多可在 Azure API for FHIR 中注册 20 台 ACR 服务器。

如果需要,请从 Azure PowerShell 安装 Azure Health Data Services CLI:

az extension add -n healthcareapis

按照以下示例,将 ACR 服务器注册到 Azure API for FHIR:

注册一个 ACR 服务器
az healthcareapis acr add --login-servers "fhiracr2021.azurecr.io" --resource-group fhir-test --resource-name fhirtest2021
注册多个 ACR 服务器
az healthcareapis acr add --login-servers "fhiracr2021.azurecr.io fhiracr2020.azurecr.io" --resource-group fhir-test --resource-name fhirtest2021

配置 ACR 防火墙

从门户中选择 Azure 存储帐户的“网络”边栏选项卡。

 容器注册表的屏幕图像。

选择“所选网络”。

在“防火墙”部分下面的“地址范围”框中指定 IP 地址。 添加 IP 范围,以允许从 Internet 或本地网络进行访问。

你会在下表中找到预配了 Azure API for FHIR 服务的 Azure 区域的 IP 地址。

Azure 区域 公共 IP 地址
澳大利亚东部 20.53.47.210
Brazil South 191.238.72.227
加拿大中部 20.48.197.161
印度中部 20.192.47.66
美国东部 20.62.134.242、20.62.134.244、20.62.134.245
美国东部 2 20.62.60.115、20.62.60.116、20.62.60.117
法国中部 51.138.211.19
德国北部 51.116.60.240
德国中西部 20.52.88.224
日本东部 20.191.167.146
日本西部 20.189.228.225
韩国中部 20.194.75.193
美国中北部 52.162.111.130、20.51.0.209
北欧 52.146.137.179
卡塔尔中部 20.21.36.225
南非北部 102.133.220.199
美国中南部 20.65.134.83
东南亚 20.195.67.208
瑞典中部 51.12.28.100
瑞士北部 51.107.247.97
英国南部 51.143.213.211
英国西部 51.140.210.86
美国中西部 13.71.199.119
西欧 20.61.103.243、20.61.103.244
美国西部 2 20.51.13.80、20.51.13.84、20.51.13.85
美国西部 3 20.150.245.165

注意

以上步骤类似于《如何导出 FHIR 数据》文档中所述的配置步骤。 有关详细信息,请参阅安全导出到 Azure 存储

验证

调用 $convert-data API,在 templateCollectionReference 参数中指定模板引用。

<RegistryServer>/<imageName>@<imageDigest>

后续步骤

在本文中,你已了解 Azure API for FHIR 的数据转换。 有关适用于 Azure API for FHIR 的相关 GitHub 项目的详细信息,请参阅

FHIR® 是 HL7 的注册商标,经 HL7 许可使用。