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

如何将 CalculatedContent 模板与医疗技术服务设备映射配合使用

重要

医疗技术服务的弃用已于 2025 年 5 月 3 日启动。 如果使用 MedTech 服务不再是优先级,请取消预配实例,可在 此处找到该实例。 以下区域中的活动实例的支持将于 2028 年 5 月 3 日结束:美国西部 2、英国南部、西欧、美国东部、澳大利亚东部、美国东部 2、印度中部、北欧。 可在 此处找到 MedTech 服务的开放源代码版本。

本文概述了如何在医疗技术服务设备映射中使用 CalculatedContent 模板。

CalculatedContent 模板基本信息

医疗技术服务 CalculatedContent 模板支持两种 JSON 表达式语言:JSONPath 和 JMESPath。 表达式用于标识在给定的 JSON 设备消息中应使用哪个模板(例如:TypeMatchExpression),以及提取生成规范化消息所需的特定值(例如:TimestampExpression、DeviceIdExpression 等)。

注释

如果未定义表达式语言,则医疗技术服务设备映射模板使用为模板配置的默认表达式语言。 默认值为 JSONPath,但可以按需覆盖。

表达式定义为:

<name of expression> : {
   "value" : <the expression>,
   "language": <the expression language>
}

在以下示例中,typeMatchExpression 定义为:

"templateType": "CalculatedContent",
"template": {
   "typeName": "heartrate",
   "typeMatchExpression": {
      "value" : "$..[?(@heartRate)]",
      "language": "JsonPath"
   },
...
}

CalculatedContent 模板允许通过以下表达式从从 Azure 事件中心事件中心读取的设备消息中匹配和提取值:

元素 Description JSONPath 表达式示例 JMESPath 表达式示例
typeMatchExpression MedTech 服务针对设备消息有效负载计算的表达式。 如果服务找到匹配的令牌值,则会将模板视为匹配项。 该服务根据此处匹配的提取令牌值评估所有后续表达式。 $..[?(@heartRate)] [Body][?contains(keys(@), `heartRate`)] \| @[0]
deviceIdExpression 用于提取设备标识符的表达式。 $.matchedToken.deviceId @.matchedToken.deviceId
timestampExpression 用于提取度量 OccurrenceTimeUtc 值的时间戳值的表达式。 $.matchedToken.endDate @.matchedToken.endDate
patientIdExpression 用于提取患者标识符的表达式。 当医疗技术服务的“解决方案类型”设置为“创建”时为必要项;当医疗技术服务的“解决方案类型”设置为“查找”时为可选项 $.matchedToken.patientId @.matchedToken.patientId
encounterIdExpression 可选:用于提取就诊标识符的表达式。 $.matchedToken.encounterId @.matchedToken.encounterId
correlationIdExpression 可选:用于提取关联标识符的表达式。 可以使用此输出将值分组到 FHIR® 目标映射中的单个观察值中。 $.matchedToken.correlationId @.matchedToken.correlationId
values[].valueExpression 用于提取所需值的表达式。 $.matchedToken.heartRate @.matchedToken.heartRate

注释

“解决方案类型”指定医疗技术服务如何将设备数据与设备资源和患者资源相关联。 医疗技术服务使用设备标识符患者标识符从 FHIR 服务读取设备和患者资源。 如果指定了 encounter 标识符并从设备数据有效负载中提取它,则在 FHIR 服务上存在具有该标识符的 encounter 的情况下,该标识符会链接到观察。 如果 encounter 标识符已成功规范化,但不存在具有该 encounter 标识符的 FHIR Encounter,则会引发 FhirResourceNotFound 异常。 若要详细了解如何配置医疗技术服务解决方案类型,请参阅配置“目标”选项卡

表达式语言

指定要用于表达式的语言时,以下值有效:

表达式语言 价值
JSONPath JsonPath
JMESPath JmesPath

由于 JSONPath 是默认表达式语言,因此不需要在 CalculatedContent 模板中包含表达式语言。

"templateType": "CalculatedContent",
   "template": {
      "typeName": "heartrate",
      "typeMatchExpression": "$..[?(@heartRate)]",
...
}

还可以使用 defaultExpressionLanguage 参数显式设置 CalculatedContent 模板的默认表达式语言:

"templateType": "CalculatedContent",
   "template": {
      "typeName": "heartrate",
      "defaultExpressionLanguage": "JmesPath",
      "typeMatchExpression": "[Body][?contains(keys(@), `heartRate`)] | @[0]",
...
}

小窍门

有关 JSONPath 的详细信息,请参阅 JSONPath - XPath for JSON。 CalculatedContent 模板使用 JSON .NET 实现解析 JSONPath 表达式。

有关 JMESPath 的更多信息,请参阅 JMESPath 规范。 CalculatedContent 模板使用 JMESPath .NET 实现解析 JMESPath 表达式。

自定义函数

还提供一组针对医疗技术服务的自定义函数。 医疗技术服务自定义函数不在 JMESPath 规范中提供的函数之外。 有关医疗技术服务自定义函数的详细信息,请参阅如何将自定义函数与医疗技术服务设备映射配合使用

Example

当医疗技术服务处理设备消息时,CollectionContent 中的模板用于评估消息。 typeMatchExpression 用于确定是否应使用模板从设备消息创建规范化消息。 如果 typeMatchExpression 的计算结果为 true,则使用 deviceIdExpressiontimestampExpressionvalueExpression 值从设备消息中查找和提取 JSON 值并创建规范化消息。 在此示例中,所有表达式都写入 JSONPath,但是,将所有表达式写入 JMESPath 也是有效的。 由模板作者决定哪种表达语言最合适。

小窍门

可以使用医疗技术服务映射调试程序帮助创建、更新和排查医疗技术服务设备和 FHIR 目标映射问题。 利用映射调试程序,可以轻松实时查看和进行内联调整,而无需离开 Azure 门户。 映射调试程序还可用于上传测试设备消息,以查看在处理成规范化消息并转换为 FHIR 观察后的外观。

在此示例中,我们使用捕获 heartRate 数据的设备消息:

{
    "heartRate": "78",
    "endDate": "2023-03-13T22:46:01.8750000",
    "deviceId": "device01"
}

在医疗技术服务从事件中心读取设备消息之前,事件中心会对设备消息进行补充完善:

{
    "Body": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    }
}

我们将此设备映射用于规范化阶段:

{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "CalculatedContent",
            "template": {
                "typeName": "heartrate",
                "typeMatchExpression": "$..[?(@heartRate)]",
                "deviceIdExpression": "$.matchedToken.deviceId",
                "timestampExpression": "$.matchedToken.endDate",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.matchedToken.heartRate",
                        "valueName": "hr"
                    }
                ]
            }
        }
    ]
}

重要

医疗技术服务会根据传入的设备数据有效负载评估 typeMatchExpression。 如果服务找到匹配的令牌值,则会将模板视为匹配项。

医疗技术服务根据新的令牌值评估所有后续表达式。 此新令牌值包含原始设备数据有效负载和此处匹配的提取令牌值。

这样一来,原始设备数据有效负载和匹配的对象可供以后的每个表达式使用。 提取的令牌值可用作属性 matchedToken

{
    "Body": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    },
    "matchedToken": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    }
}

在规范化阶段之后,生成的规范化消息将如下所示:

[
    {
        "type": "heartrate",
        "occurrenceTimeUtc": "2023-03-13T22:46:01.875Z",
        "deviceId": "device01",
        "properties": [
            {
                "name": "hr",
                "value": "78"
            }
        ]
    }
]

小窍门

如需排查医疗技术服务部署错误方面的帮助,请参阅排查医疗技术服务部署错误

如需排查医疗技术服务错误方面的帮助,请参阅使用医疗技术服务日志排查错误

后续步骤

如何将自定义函数与医疗技术服务设备映射配合使用

FHIR 目标映射概述

基于医疗技术服务方案的映射示例概述

注释

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