Compartir vía


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 deviceIdExpressionvalores , timestampExpressiony 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.