Como utilizar modelos IotJsonPathContent com o mapeamento de dispositivos do serviço MedTech

Nota

Fast Healthcare Interoperability Resources (FHIR®) é uma especificação de cuidados de saúde aberta.

Este artigo fornece uma descrição geral de como utilizar modelos IotJsonPathContent num mapeamento de dispositivos do serviço MedTech.

Noções básicas do modelo IotJsonPathContent

Os modelos IotJsonPathContent podem ser utilizados quando o serviço MedTech ingere mensagens de dispositivo encaminhadas a partir de um Hub IoT do Azure. Quando os modelos IotJsonPathContent são utilizados no mapeamento do dispositivo, o serviço MedTech extrai o ID do dispositivo e o carimbo de data/hora de medição dos metadados fornecidos por um hub IoT. O DeviceIdExpression e o TimestampExpression não devem ser incluídos nos modelos IotJsonPathContent.

Os modelos IotJsonPathContent do serviço MedTech suportam a linguagem JSON Expression JSONPath. As expressões são utilizadas para identificar que modelo utilizar com uma determinada mensagem de dispositivo JSON (por exemplo: TypeMatchExpression) e extrair valores específicos necessários para criar uma mensagem normalizada (por exemplo: PatientIdExpression, ValueExpression, etc.). Os modelos IotJsonPathContent são semelhantes aos modelos CalculatedContent , exceto deviceIdExpression e TimestampExpression não são suportados.

Nota

O JMESPath não é suportado por modelos IotJsonPathContent.

Uma expressão é definida como:

<name of expression> : <the expression>

No exemplo seguinte, typeMatchExpression é definido como:

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

Se o seu serviço MedTech estiver configurado para ingerir mensagens de dispositivo a partir de um hub IoT, não terá de utilizar modelos IotJsonPathContent. Os modelos CalculatedContent podem ser utilizados partindo do princípio de que define corretamente DeviceIdExpression e TimestampExpression.

Os modelos IotJsonPathContent permitem a correspondência e a extração de valores de uma mensagem de dispositivo lida a partir de um hub de eventos Hubs de Eventos do Azure através das seguintes expressões:

Elemento Descrição Exemplo de expressão JSONPath
typeMatchExpression A expressão que o serviço MedTech avalia em relação ao payload da mensagem do dispositivo. Se o serviço encontrar um valor de token correspondente, considera o modelo uma correspondência. $..[?(@heartRate)]
patientIdExpression A expressão para extrair o identificador do paciente. Necessário quando o tipo de Resolução dos serviços MedTech está definido como Criar e opcional quando o tipo de Resolução do serviço MedTech está definido como Pesquisa. $.SystemProperties.iothub-connection-device-id
encounterIdExpression Opcional: a expressão para extrair o identificador de encontro. $.Body.encounterId
correlationIdExpression Opcional: a expressão para extrair o identificador de correlação. Pode utilizar esta saída para agrupar valores numa única observação no mapeamento de destino FHIR. $.Body.correlationId
values[].valueExpression A expressão para extrair o valor pretendido. $.Body.heartRate

Importante

O serviço MedTech utilizará o ID do dispositivo definido no hub IoT como o identificador do dispositivo de recurso FHIR. Se o serviço MedTech estiver configurado para utilizar um tipo de resolução de identidade de Pesquisa, tem de existir um recurso do Dispositivo com um identificador de dispositivo correspondente no serviço FHIR ou ocorrerá um erro quando a mensagem do dispositivo for processada. Se o tipo de resolução de identidade do serviço MedTech estiver definido como Criar, tem de patientIdExpression ser incluído no mapeamento do dispositivo para que possa ser criado um novo recurso do Paciente e o Recurso do dispositivo, caso ainda não existam.

Nota

O tipo de Resolução especifica a forma como o serviço MedTech associa os dados do dispositivo aos recursos do dispositivo e aos recursos do Paciente. O serviço MedTech lê os recursos Dispositivo e Paciente do serviço FHIR com identificadores de dispositivos e identificadores de pacientes. Se for especificado um identificador de encontro e extraído do payload de dados do dispositivo, este será associado à observação se existir um encontro no serviço FHIR com esse identificador. Se o identificador de encontro for normalizado com êxito, mas não existir nenhum Encontro FHIR com esse identificador de encontro, é emitida uma exceção FhirResourceNotFound . Para obter mais informações sobre como configurar o tipo de Resolução do serviço MedTech, veja Configurar o separador Destino.

Idiomas de expressão

JSONPath é a linguagem de expressão predefinida e a inclusão de uma linguagem de expressão num modelo IotJsonPathContent não é suportada. Se tentar especificar a linguagem de expressão num objeto de expressão, o modelo IotJsonPathContent que contém o objeto de expressão falha.

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

Dica

Para obter mais informações sobre o JSONPath, consulte JSONPath – XPath para JSON. Os modelos IotJsonPathContent utilizam a implementação JSON .NET para resolver expressões JSONPath.

Exemplo

Quando o serviço MedTech está a processar uma mensagem de dispositivo, os modelos no CollectionContent são utilizados para avaliar a mensagem. O typeMatchExpression é utilizado para determinar se o modelo deve ou não ser utilizado para criar uma mensagem normalizada a partir da mensagem do dispositivo. Se a avaliação typeMatchExpression for verdadeira, o valueExpression valor é utilizado para localizar e extrair os valores JSON da mensagem do dispositivo e criar uma mensagem normalizada.

Dica

O Visual Studio Code com a extensão Hub IoT do Azure é um método recomendado para enviar mensagens de dispositivo IoT para o seu hub IoT para testes e resolução de problemas.

Pode utilizar o depurador de Mapeamento do serviço MedTech para obter assistência na criação, atualização e resolução de problemas do dispositivo de serviço MedTech e mapeamentos de destino FHIR. O depurador mapeamento permite-lhe ver e fazer ajustes inline facilmente em tempo real, sem nunca ter de sair do portal do Azure. O depurador de Mapeamento também pode ser utilizado para carregar mensagens de dispositivos de teste para ver como serão processadas em mensagens normalizadas e transformadas em Observações FHIR.

Neste exemplo, estamos a utilizar uma mensagem de dispositivo que está a heartRate capturar dados:

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

Nota

Para evitar spoofing de dispositivos em mensagens do dispositivo para a cloud (D2C), Hub IoT do Azure melhora todas as mensagens do dispositivo com propriedades adicionais antes de encaminhá-las para o hub de eventos. Por exemplo: Propriedades: iothub-creation-time-utc e SystemProperties: iothub-connection-device-id. Para obter mais informações, veja Propriedades anti-spoofing.

patientIdExpression só é necessário para os serviços MedTech no modo Criar ; no entanto, se a Pesquisa estiver a ser utilizada, tem de existir um recurso do Dispositivo com um identificador de dispositivo correspondente no serviço FHIR de destino. Estes exemplos partem do princípio de que o seu serviço MedTech está no modo Criar . Para obter mais informações sobre as propriedadesCriar e Procurar Destino, veja Configurar o separador Destino.

O hub IoT melhora e encaminha a mensagem do dispositivo para o hub de eventos antes de o serviço MedTech ler a mensagem do dispositivo a partir do hub 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"
    }
}   

Estamos a utilizar este mapeamento de dispositivos para a fase de normalização:

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

A mensagem normalizada resultante terá o seguinte aspeto após a fase de normalização:

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

Dica

Para obter assistência para corrigir erros comuns de implementação do serviço MedTech, veja Resolver erros de implementação do serviço MedTech.

Para obter assistência para corrigir erros do serviço MedTech, veja Resolver erros com os registos do serviço MedTech.

Passos seguintes

Neste artigo, aprendeu a utilizar modelos IotJsonPathContent com o mapeamento de dispositivos do serviço MedTech.

Para implementar o serviço MedTech com o encaminhamento de mensagens do dispositivo ativado através de um Hub IoT do Azure, consulte

Para obter uma descrição geral do mapeamento de destino FHIR do serviço MedTech, consulte

Para obter uma descrição geral dos exemplos de mapeamentos baseados em cenários do serviço MedTech, consulte

A FHIR® é uma marca registada do Health Level Seven International, registada no Escritório de Marcas Registadas dos EUA e é utilizada com a sua permissão.