Uso de plantillas de IotJsonPathContent con la asignación de dispositivos del servicio MedTech

Nota

Fast Healthcare Interoperability Resources (FHIR®) es una especificación de asistencia sanitaria abierta.

En este artículo se proporciona información general sobre cómo usar plantillas de IotJsonPathContent dentro de una asignación de dispositivos del servicio MedTech.

Conceptos básicos de la plantilla IotJsonPathContent

Las plantillas IotJsonPathContent se pueden usar cuando el servicio MedTech ingiere mensajes de dispositivo enrutados desde un Azure IoT Hub. Cuando se usan plantillas IotJsonPathContent dentro de la asignación de dispositivos, el servicio MedTech extrae el identificador de dispositivo y la marca de tiempo de medición de los metadatos proporcionados por un centro de IoT. DeviceIdExpression y TimestampExpression no deben incluirse en las plantillas IotJsonPathContent.

Las plantillas IotJsonPathContent del servicio MedTech admiten el lenguaje de expresión JSON JSONPath. 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: PatientIdExpression, ValueExpression, etc.). Las plantillas IotJsonPathContent son similares a las plantillas CalculatedContent , excepto deviceIdExpression y TimestampExpression no se admiten.

Nota

JMESPath no es compatible con plantillas de IotJsonPathContent.

Una expresión se define como:

<name of expression> : <the expression>

En el ejemplo siguiente, typeMatchExpression se define como:

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

Si el servicio MedTech está configurado para ingerir mensajes de dispositivo desde un centro de IoT, no es necesario usar plantillas de IotJsonPathContent. Las plantillas CalculatedContent se pueden usar suponiendo que defina correctamente DeviceIdExpression y TimestampExpression.

Las plantillas IotJsonPathContent 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 siguientes expresiones:

Elemento Descripción Ejemplo de expresión JSONPath
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. $..[?(@heartRate)]
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 Búsqueda. $.SystemProperties.iothub-connection-device-id
encounterIdExpression Opcional: expresión para extraer el identificador de encuentro. $.Body.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. $.Body.correlationId
values[].valueExpression Expresión que se va a extraer el valor deseado. $.Body.heartRate

Importante

El servicio MedTech usará el identificador de dispositivo definido en IoT Hub como identificador de dispositivo de recursos de FHIR. Si el servicio MedTech está configurado para usar un tipo de resolución de identidad de Lookup, debe existir un recurso device con un identificador de dispositivo coincidente en el servicio FHIR o se producirá un error cuando se procese el mensaje del dispositivo. Si el tipo de resolución de identidad del servicio MedTech está establecido en Crear, patientIdExpression debe incluirse en la asignación de dispositivos para que se pueda crear un nuevo recurso paciente y un recurso de dispositivo si aún no existen.

Nota

El tipo de resolución especifica cómo el servicio MedTech asocia los datos del dispositivo con los recursos del dispositivo y 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 expresión

JSONPath es el lenguaje de expresión predeterminado y no se admite la inclusión de un lenguaje de expresión dentro de una plantilla IotJsonPathContent. Si intenta especificar el lenguaje de expresión en un objeto de expresión, se produce un error en la plantilla IotJsonPathContent que contiene el objeto de expresión.

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

Sugerencia

Para obtener más información sobre JSONPath, consulte JSONPath - XPath para JSON. Las plantillas IotJsonPathContent usan la implementación de .NET json para resolver expresiones JSONPath.

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 se debe usar o no la plantilla para crear un mensaje normalizado a partir del mensaje del dispositivo. Si se typeMatchExpression evalúa como true, el valueExpression valor se usa para buscar y extraer los valores JSON del mensaje del dispositivo y crear un mensaje normalizado.

Sugerencia

Visual Studio Code con la extensión Azure IoT Hub es un método recomendado para enviar mensajes de dispositivo IoT al centro de IoT para probar y solucionar problemas.

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 del servicio MedTech y FHIR. El depurador de asignaciones permite ver y realizar fácilmente ajustes insertados en tiempo real, sin tener que salir de la Azure Portal. El depurador de asignaciones también se puede usar para cargar mensajes de dispositivo de prueba para ver cómo se examinarán después de procesarse en mensajes normalizados y transformarse en observaciones de FHIR.

En este ejemplo, se usa un mensaje de dispositivo que captura heartRate datos:

{
    "PatientId": "patient1",
    "HeartRate" : "78"
}

Nota

Para evitar la suplantación de identidad de dispositivos en mensajes de dispositivo a nube (D2C), Azure IoT Hub enriquece todos los mensajes de dispositivo con propiedades adicionales antes de enrutarlos al centro de eventos. Por ejemplo: Propiedades: iothub-creation-time-utc y SystemProperties: iothub-connection-device-id. Para obtener más información, vea Propiedades contra suplantación de identidad.

patientIdExpression solo es necesario para los servicios MedTech en el modo De creación ; sin embargo, si se usa Lookup , debe existir un recurso Device con un identificador de dispositivo coincidente en el servicio FHIR de destino. En estos ejemplos se supone que el servicio MedTech está en el modo Crear . Para obtener más información sobre las propiedades Crear y buscardestino, vea Configurar la pestaña Destino.

El centro de IoT enriquece y enruta el mensaje del dispositivo al centro de eventos antes de que el servicio MedTech lea el mensaje del dispositivo desde el centro de eventos:

{
    "Body": {
        "PatientId": "patient1",
        "HeartRate": "78"
    },
    "SystemProperties": {
        "iothub-enqueuedtime": "2023-07-25T20:41:26.046Z",
        "iothub-connection-device-id": "sampleDeviceId"
    },
    "Properties": {
        "iothub-creation-time-utc": "2023-07-25T20:41:26.046Z"
    }
}   

Usamos esta asignación de dispositivos para la fase de normalización:

{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "IotJsonPathContent",
            "template": {
                "typeName": "HeartRate",
                "typeMatchExpression": "$..[?(@Body.HeartRate)]",
                "patientIdExpression": "$.Body.PatientId",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.Body.HeartRate",
                        "valueName": "HeartRate"
                    }
                ]
            }
        }
    ]    
}

El mensaje normalizado resultante tendrá este aspecto después de la fase de normalización:

{
    "type": "HeartRate",
    "occurrenceTimeUtc": "2023-07-25T20:41:26.046Z",
    "deviceId": "sampleDeviceId",
    "patientId": "patient1",
    "properties": [
        {
            "name": "HeartRate",
            "value": "78"
        }
    ]
}

Sugerencia

Para obtener ayuda para corregir errores comunes de implementación del servicio MedTech, consulte Solución de errores de implementación del servicio MedTech.

Para obtener ayuda para corregir los 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 de IotJsonPathContent con la asignación de dispositivos del servicio MedTech.

Para implementar el servicio MedTech con el enrutamiento de mensajes de dispositivo habilitado a través de una Azure IoT Hub, consulte

Para obtener información general sobre la asignación de destino de FHIR del servicio MedTech, consulte

Para obtener información general sobre los ejemplos de asignaciones basadas en escenarios del servicio MedTech, consulte

FHIR® es una marca registrada de Health Level Seven International, registrada en la Oficina de Patentes y Marcas Registradas de Estados Unidos, y se usa con su permiso.