Использование шаблонов CalculatedContent с сопоставлением устройств службы MedTech

Примечание

Ресурсы быстрого взаимодействия в сфере здравоохранения (FHIR®) — это открытая спецификация для здравоохранения.

В этой статье представлен обзор использования шаблонов CalculatedContent в сопоставлении устройств службы MedTech.

Основы шаблона CalculatedContent

Шаблоны CalculatedContent службы MedTech поддерживают два языка выражений 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 Encounter, возникает исключение FhirResourceNotFound . Дополнительные сведения о настройке типа разрешения службы MedTech см. в разделе Настройка вкладки Назначения.

Языки выражений

При указании языка, который будет использоваться для выражения, допустимы следующие значения:

Язык выражений Значение
JSONPath JsonPath
JMESPath JmesPath

Так как JSONPath является языком выражений по умолчанию, включать язык выражений в шаблон CalculatedContent не требуется.

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

Можно также явно задать язык выражений по умолчанию для шаблона CalculatedContent с помощью defaultExpressionLanguage параметра :

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

Совет

Дополнительные сведения о JSONPath см. в статье JSONPath — XPath для JSON. Шаблоны CalculatedContent используют реализацию JSON .NET для разрешения выражений JSONPath.

Дополнительные сведения о JMESPath см. в разделе Спецификация JMESPath. Шаблоны CalculatedContent используют реализацию JMESPath .NET для разрешения выражений JMESPath.

Пользовательские функции

Также доступен набор пользовательских функций для службы MedTech. Пользовательские функции службы MedTech выходят за рамки функций, предоставляемых в рамках спецификации JMESPath. Дополнительные сведения о пользовательских функциях службы MedTech см. в статье Использование пользовательских функций с сопоставлением устройств службы MedTech.

Пример

Когда служба MedTech обрабатывает сообщение устройства, для оценки сообщения используются шаблоны в CollectionContent. Используется typeMatchExpression для определения того, следует ли использовать шаблон для создания нормализованного сообщения из сообщения устройства. typeMatchExpression Если возвращает значение true, то deviceIdExpressionзначения , timestampExpressionи valueExpression используются для поиска и извлечения значений 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 см. в разделе

Общие сведения о сопоставлении назначения FHIR службы MedTech см. в разделе

Общие сведения о примерах сопоставлений на основе сценариев службы MedTech см. в разделе

FHIR® является зарегистрированным товарным знаком Health Level Seven International, зарегистрированным в Управлении по товарным знакам США и используемым с разрешения.