Compartilhar via


Como usar modelos IotJsonPathContent com o mapeamento de dispositivo de serviço MedTech

Observação

O FHIR® (Fast Healthcare Interoperability Resources) é uma especificação de serviços de saúde abertos.

Este artigo fornece uma visão geral de como usar modelos IotJsonPathContent em um mapeamento de dispositivo de serviço MedTech.

Noções básicas do modelo IotJsonPathContent

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

Os modelos IotJsonPathContent do serviço MedTech dão suporte à linguagem de expressão JSON JSONPath. As expressões são usadas para identificar qual modelo usar com uma determinada mensagem de dispositivo JSON (por exemplo: TypeMatchExpression) e para 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.

Observação

O JMESPath não é compatível com modelos IotJsonPathContent.

Uma expressão é definida como:

<name of expression> : <the expression>

No exemplo a seguir, typeMatchExpression é definido como:

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

Se o serviço MedTech estiver configurado para ingerir mensagens de dispositivo de um hub IoT, você não precisará usar modelos IotJsonPathContent. Os modelos CalculatedContent podem ser usados supondo que você defina corretamente DeviceIdExpression e TimestampExpression.

Os modelos IotJsonPathContent permitem a correspondência e a extração de valores de uma mensagem de dispositivo lida de um hub de eventos Hubs de Eventos do Azure por meio 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 conteúdo da mensagem do dispositivo. Se o serviço encontrar um valor de token correspondente, ele considerará 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 é definido como Criar e opcional quando o tipo de Resolução do serviço MedTech é 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. Você pode usar essa saída para agrupar valores em uma única observação no mapeamento de destino FHIR. $.Body.correlationId
values[].valueExpression A expressão para extrair o valor desejado. $.Body.heartRate

Importante

O serviço MedTech usará a ID do dispositivo definida no Hub IoT como o identificador de dispositivo de recurso FHIR. Se o serviço MedTech estiver configurado para usar um tipo de resolução de identidade de Pesquisa, um recurso dispositivo com um identificador de dispositivo correspondente deverá existir 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, um patientIdExpression deverá ser incluído no mapeamento de dispositivo para que um novo recurso do Paciente e o recurso dispositivo possam ser criados se eles ainda não existirem.

Observação

O tipo resolução especifica como o serviço MedTech associa dados do dispositivo a recursos de dispositivo e recursos do paciente. O serviço MedTech lê recursos de Dispositivo e Paciente do serviço FHIR usando identificadores de dispositivo e identificadores de pacientes. Se um identificador de encontro for especificado e extraído da carga de dados do dispositivo, ele será vinculado à observação se houver um encontro no serviço FHIR com esse identificador. Se o identificador de encontro for normalizado com êxito, mas nenhum Encontro FHIR existir com esse identificador de encontro, uma exceção FhirResourceNotFound será gerada. Para obter mais informações sobre como configurar o tipo de resolução de serviço MedTech, consulte Configurar a guia Destino.

Idiomas de expressão

JSONPath é a linguagem de expressão padrão e não há suporte para a inclusão de uma linguagem de expressão em um modelo IotJsonPathContent. Se você tentar especificar a linguagem de expressão em um objeto de expressão, o modelo IotJsonPathContent que contém o objeto expression falhará.

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

Dica

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

Exemplo

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

Dica

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

Você pode usar o depurador de mapeamento do serviço MedTech para obter assistência para criar, atualizar e solucionar problemas do dispositivo de serviço MedTech e mapeamentos de destino FHIR. O depurador de mapeamento permite que você exiba e faça ajustes embutidos facilmente em tempo real, sem precisar sair do portal do Azure. O depurador de mapeamento também pode ser usado para carregar mensagens de dispositivo de teste para ver como elas serão processadas em mensagens normalizadas e transformadas em observações FHIR.

Neste exemplo, estamos usando uma mensagem de dispositivo que está capturando heartRate dados:

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

Observação

Para evitar a falsificação de dispositivo em mensagens D2C (dispositivo para nuvem), Hub IoT do Azure enriquece todas as mensagens do dispositivo com propriedades adicionais antes de roteá-las para o hub de eventos. Por exemplo: Propriedades: iothub-creation-time-utc e SystemProperties: iothub-connection-device-id. Para obter mais informações, consulte Propriedades antifalsificação.

patientIdExpression só é necessário para serviços MedTech no modo Criar ; no entanto, se a Pesquisa estiver sendo usada, um recurso dispositivo com um identificador de dispositivo correspondente deverá existir no serviço FHIR de destino. Esses exemplos pressupõem que o serviço MedTech esteja no modo Criar . Para obter mais informações sobre as propriedades Criar e PesquisarDestino, consulte Configurar a guia Destino.

O hub IoT enriquece e roteia a mensagem do dispositivo para o hub de eventos antes que o serviço MedTech leia a mensagem do dispositivo 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 usando esse mapeamento de dispositivo para o estágio 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á esta aparência após o estágio 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 implantação de serviço MedTech, confira Solucionar problemas de erros de implantação do serviço MedTech.

Para obter assistência para corrigir erros de serviço MedTech, consulte Solucionar erros usando os logs de serviço MedTech.

Próximas etapas

Neste artigo, você aprendeu a usar modelos IotJsonPathContent com o mapeamento de dispositivo de serviço MedTech.

Para implantar o serviço MedTech com o roteamento de mensagens do dispositivo habilitado por meio de um Hub IoT do Azure, consulte

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

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

O FHIR® é uma marca registrada da Health Level Seven International, registrada no Escritório de Marcas Registradas dos EUA e é usada com a respectiva permissão.