Uso de plantillas CalculatedContent con la asignación de dispositivos del servicio MedTech
Nota
Fast Healthcare Interoperability Resources (FHIR®) es una especificación sanitaria abierta.
En este artículo se proporciona información general sobre cómo usar plantillas CalculatedContent dentro de una asignación de dispositivos de servicio MedTech.
Conceptos básicos de la plantilla CalculatedContent
Las plantillas CalculatedContent del servicio MedTech admiten dos lenguajes de expresiones JSON: JSONPath y JMESPath. Las expresiones se usan para identificar qué plantilla usar con un mensaje de dispositivo JSON determinado (por ejemplo: TypeMatchExpression) y para extraer valores específicos necesarios para crear un mensaje normalizado (por ejemplo: TimestampExpression, DeviceIdExpression, etc.).
Nota
Si no define un lenguaje de expresión, las plantillas de asignación de dispositivos del servicio MedTech usan el lenguaje de expresión predeterminado configurado para la plantilla. El valor predeterminado es JSONPath, pero puede sobrescribirlo si es necesario.
Una expresión se define como:
<name of expression> : {
"value" : <the expression>,
"language": <the expression language>
}
En el ejemplo siguiente, typeMatchExpression
se define como:
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"typeMatchExpression": {
"value" : "$..[?(@heartRate)]",
"language": "JsonPath"
},
...
}
Las plantillas CalculatedContent permiten buscar coincidencias y extraer valores de un mensaje de dispositivo leídos desde un centro de eventos de Azure Event Hubs a través de las expresiones siguientes:
Elemento | Descripción | Ejemplo de expresión JSONPath | Ejemplo de expresión JMESPath |
---|---|---|---|
typeMatchExpression | Expresión que el servicio MedTech evalúa con respecto a la carga del mensaje del dispositivo. Si el servicio encuentra un valor de token coincidente, considera que la plantilla coincide. El servicio evalúa todas las expresiones posteriores con el valor del token extraído coinciden aquí. | $..[?(@heartRate)] |
[Body][?contains(keys(@), `heartRate`)] \| @[0] |
deviceIdExpression | Expresión que se va a extraer el identificador del dispositivo. | $.matchedToken.deviceId |
@.matchedToken.deviceId |
timestampExpression | Expresión que se va a extraer el valor de marca de tiempo del valor de OccurrenceTimeUtc la medida. |
$.matchedToken.endDate |
@.matchedToken.endDate |
patientIdExpression | Expresión que se va a extraer el identificador del paciente. Obligatorio cuando el tipo de resolución de los servicios MedTech se establece en Crear y opcional cuando el tipo de resolución del servicio MedTech está establecido en Lookup. | $.matchedToken.patientId |
@.matchedToken.patientId |
encounterIdExpression | Opcional: expresión para extraer el identificador de encuentro. | $.matchedToken.encounterId |
@.matchedToken.encounterId |
correlationIdExpression | Opcional: expresión para extraer el identificador de correlación. Puede usar esta salida para agrupar valores en una sola observación en la asignación de destino de FHIR. | $.matchedToken.correlationId |
@.matchedToken.correlationId |
values[].valueExpression | Expresión que se va a extraer el valor deseado. | $.matchedToken.heartRate |
@.matchedToken.heartRate |
Nota
El tipo de resolución especifica cómo el servicio MedTech asocia los datos del dispositivo a los recursos del dispositivo y a los recursos del paciente. El servicio MedTech lee los recursos de dispositivo y paciente del servicio FHIR mediante identificadores de dispositivo e identificadores de pacientes. Si se especifica y extrae un identificador de encuentro de la carga de datos del dispositivo, se vincula a la observación si existe un encuentro en el servicio FHIR con ese identificador. Si el identificador de encuentro se normaliza correctamente, pero no existe ningún encuentro de FHIR con ese identificador de encuentro, se produce una excepción FhirResourceNotFound . Para obtener más información sobre cómo configurar el tipo de resolución del servicio MedTech, vea Configurar la pestaña Destino.
Lenguajes de expresiones
Cuando se especifica el lenguaje que se va a usar para la expresión, los valores siguientes son válidos:
Lenguaje de expresiones | Value |
---|---|
JSONPath | JsonPath |
JMESPath | JmesPath |
Dado que JSONPath es el lenguaje de expresiones predeterminado, no es necesario incluir el lenguaje de expresión dentro de una plantilla CalculatedContent.
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"typeMatchExpression": "$..[?(@heartRate)]",
...
}
También puede establecer explícitamente el lenguaje de expresiones predeterminado para una plantilla CalculatedContent mediante el defaultExpressionLanguage
parámetro :
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"defaultExpressionLanguage": "JmesPath",
"typeMatchExpression": "[Body][?contains(keys(@), `heartRate`)] | @[0]",
...
}
Sugerencia
Para más información sobre JSONPath, consulte JSONPath : XPath para JSON. Las plantillas CalculatedContent usan la implementación de .NET JSON para resolver expresiones JSONPath.
Para obtener más información sobre JMESPath, vea Especificación de JMESPath. Las plantillas CalculatedContent usan la implementación de .NET de JMESPath para resolver expresiones de JMESPath.
Funciones personalizadas
También hay disponible un conjunto de funciones personalizadas para el servicio MedTech. Las funciones personalizadas del servicio MedTech están fuera de las funciones proporcionadas como parte de la especificación JMESPath. Para obtener más información sobre las funciones personalizadas del servicio MedTech, consulte Uso de funciones personalizadas con la asignación de dispositivos del servicio MedTech.
Ejemplo
Cuando el servicio MedTech está procesando un mensaje de dispositivo, las plantillas de CollectionContent se usan para evaluar el mensaje.
typeMatchExpression
se usa para determinar si la plantilla se debe usar o no para crear un mensaje normalizado a partir del mensaje del dispositivo. Si se typeMatchExpression
evalúa como true, los deviceIdExpression
valores , timestampExpression
y valueExpression
se usan para buscar y extraer los valores JSON del mensaje del dispositivo y crear un mensaje normalizado. En este ejemplo, todas las expresiones se escriben en JSONPath; sin embargo, sería válido escribir todas las expresiones en JMESPath. Es el autor de la plantilla para determinar qué lenguaje de expresión es más adecuado.
Sugerencia
Puede usar el depurador de asignación de servicios MedTech para obtener ayuda para crear, actualizar y solucionar problemas de las asignaciones de destino del dispositivo de servicio MedTech y FHIR. El depurador de asignación le permite ver y realizar fácilmente ajustes en línea en tiempo real, sin tener que salir de la Azure Portal. El depurador de asignación también se puede usar para cargar mensajes de dispositivo de prueba para ver cómo se procesarán después de procesarse en mensajes normalizados y transformarlos en observaciones de FHIR.
En este ejemplo, se usa un mensaje de dispositivo que captura heartRate
datos:
{
"heartRate": "78",
"endDate": "2023-03-13T22:46:01.8750000",
"deviceId": "device01"
}
El centro de eventos enriquece el mensaje del dispositivo antes de que el servicio MedTech lea el mensaje del dispositivo del centro de eventos:
{
"Body": {
"heartRate": "78",
"endDate": "2023-03-13T22:46:01.8750000",
"deviceId": "device01"
}
}
Usamos esta asignación de dispositivos para la fase de normalización:
{
"templateType": "CollectionContent",
"template": [
{
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"typeMatchExpression": "$..[?(@heartRate)]",
"deviceIdExpression": "$.matchedToken.deviceId",
"timestampExpression": "$.matchedToken.endDate",
"values": [
{
"required": true,
"valueExpression": "$.matchedToken.heartRate",
"valueName": "hr"
}
]
}
}
]
}
Importante
El servicio MedTech se typeMatchExpression
evalúa con respecto a la carga de datos de dispositivo entrante. Si el servicio encuentra un valor de token coincidente, considera que la plantilla coincide.
El servicio MedTech evalúa todas las expresiones posteriores con un nuevo valor de token. Este nuevo valor de token contiene la carga de datos del dispositivo original y el valor del token extraído coinciden aquí.
De este modo, la carga de datos del dispositivo original y el objeto coincidente están disponibles para cada expresión posterior. El valor del token extraído está disponible como la propiedad 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"
}
}
El mensaje normalizado resultante tendrá este aspecto después de la fase de normalización:
[
{
"type": "heartrate",
"occurrenceTimeUtc": "2023-03-13T22:46:01.875Z",
"deviceId": "device01",
"properties": [
{
"name": "hr",
"value": "78"
}
]
}
]
Sugerencia
Para obtener ayuda para solucionar errores de implementación del servicio MedTech, consulte Solución de errores de implementación del servicio MedTech.
Para obtener ayuda para solucionar errores del servicio MedTech, consulte Solución de errores mediante los registros del servicio MedTech.
Pasos siguientes
En este artículo, ha aprendido a usar plantillas CalculatedContent con la asignación de dispositivos del servicio MedTech.
Para obtener información sobre cómo usar las funciones personalizadas del servicio MedTech, consulte
Para obtener información general sobre la asignación de destino de FHIR del servicio MedTech, consulte
Para obtener información general sobre las asignaciones basadas en escenarios del servicio MedTech, consulte
FHIR® es una marca comercial registrada de Health Level Seven International, registrada en la Oficina de Marcas comerciales estadounidense, y se utiliza con permiso.