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

如何将 CalculatedContent 模板与 MedTech 服务设备映射配合使用

注意

快速医疗保健互操作性资源 (FHIR®) 是一个开放的医疗保健规范。

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

CalculatedContent 模板基础知识

MedTech 服务 CalculatedContent 模板支持两种 JSON 表达式语言:JSONPath 和 JMESPath。 表达式用于标识哪个模板与给定的 JSON 设备消息一起使用, (例如:TypeMatchExpression) ,以及提取创建规范化消息所需的特定值, (例如:TimestampExpression、DeviceIdExpression 等 ) 。

注意

如果未定义表达式语言,则 MedTech 服务设备映射模板将使用为模板配置的默认表达式语言。 默认值为 JSONPath,但可以根据需要覆盖它。

表达式定义为:

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

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

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

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

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

注意

解析类型指定 MedTech 服务如何将设备数据与设备资源和患者资源相关联。 MedTech 服务使用设备标识符和患者标识符从 FHIR 服务读取设备和患者资源。 如果指定 了一个遇到标识符 并从设备数据有效负载中提取,则如果具有该标识符的 FHIR 服务上存在遇到,则将其链接到观察值。 如果成功规范化 了遇到标识符 ,但不存在具有该遭遇标识符的 FHIR 遭遇,则会引发 FhirResourceNotFound 异常。 有关配置 MedTech 服务 解析类型的详细信息,请参阅 配置目标选项卡

表达式语言

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

表达式语言
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 表达式。

自定义函数

还提供了一组适用于 MedTech 服务的自定义函数。 MedTech 服务自定义函数位于 JMESPath 规范中提供的函数之外。 有关 MedTech 服务自定义函数的详细信息,请参阅 如何将自定义函数与 MedTech 服务设备映射配合使用

示例

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

提示

可以使用 MedTech 服务 映射调试器 帮助创建、更新 MedTech 服务设备和 FHIR 目标映射并对其进行故障排除。 映射调试器使你可以轻松地实时查看和进行内联调整,而无需离开Azure 门户。 映射调试器还可用于上传测试设备消息,以查看它们被处理为规范化消息并转换为 FHIR 观察结果后的外观。

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

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

在 MedTech 服务从事件中心读取设备消息之前,事件中心会扩充设备消息:

{
    "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"
                    }
                ]
            }
        }
    ]
}

重要

MedTech 服务根据传入的设备数据有效负载进行评估 typeMatchExpression 。 如果服务找到匹配的令牌值,它会将该模板视为匹配项。

MedTech 服务针对新令牌值计算所有后续表达式。 此新令牌值包含原始设备数据有效负载和此处匹配的提取令牌值。

这样,原始设备数据有效负载和匹配的对象可供每个后续表达式使用。 提取的令牌值可用作 属性 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"
            }
        ]
    }
]

提示

有关排查 MedTech 服务部署错误的帮助,请参阅 排查 MedTech 服务部署错误

有关排查 MedTech 服务错误的帮助,请参阅 使用 MedTech 服务日志排查错误

后续步骤

本文介绍了如何将 CalculatedContent 模板与 MedTech 服务设备映射配合使用。

若要了解如何使用 MedTech 服务自定义函数,请参阅

有关 MedTech 服务 FHIR 目标映射的概述,请参阅

有关基于 MedTech 服务方案的映射示例的概述,请参阅

FHIR® 是健康七级国际的注册商标,在美国商标局注册,经许可使用。