Como usar modelos CalculatedContent com o mapeamento de dispositivo do 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 CalculatedContent em um mapeamento de dispositivo de serviço MedTech.
Noções básicas do modelo CalculatedContent
Os modelos CalculatedContent do serviço MedTech dão suporte a duas linguagens de expressão JSON: JSONPath e JMESPath. 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: TimestampExpression, DeviceIdExpression etc.).
Observação
Se você não definir uma linguagem de expressão, os modelos de mapeamento de dispositivo do serviço MedTech usarão a linguagem de expressão padrão configurada para o modelo. O padrão é JSONPath, mas você pode substituí-lo, se necessário.
Uma expressão é definida como:
<name of expression> : {
"value" : <the expression>,
"language": <the expression language>
}
No exemplo a seguir, typeMatchExpression
é definido como:
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"typeMatchExpression": {
"value" : "$..[?(@heartRate)]",
"language": "JsonPath"
},
...
}
Os modelos CalculatedContent 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 | Exemplo de expressão JMESPath |
---|---|---|---|
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. O serviço avalia todas as expressões posteriores em relação ao valor do token extraído correspondente aqui. | $..[?(@heartRate)] |
[Body][?contains(keys(@), `heartRate`)] \| @[0] |
deviceIdExpression | A expressão para extrair o identificador do dispositivo. | $.matchedToken.deviceId |
@.matchedToken.deviceId |
timestampExpression | A expressão para extrair o valor do carimbo de data/hora para o valor da OccurrenceTimeUtc medida. |
$.matchedToken.endDate |
@.matchedToken.endDate |
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. | $.matchedToken.patientId |
@.matchedToken.patientId |
encounterIdExpression | Opcional: a expressão para extrair o identificador de encontro. | $.matchedToken.encounterId |
@.matchedToken.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. | $.matchedToken.correlationId |
@.matchedToken.correlationId |
values[].valueExpression | A expressão para extrair o valor desejado. | $.matchedToken.heartRate |
@.matchedToken.heartRate |
Observação
O tipo resolução especifica como o serviço MedTech associa dados do dispositivo aos recursos do dispositivo e aos 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 do conteúdo 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 do serviço MedTech, consulte Configurar a guia Destino.
Linguagens de expressão
Quando você está especificando o idioma a ser usado para a expressão, os seguintes valores são válidos:
Linguagem de expressão | Valor |
---|---|
JSONPath | JsonPath |
JMESPath | JmesPath |
Como JSONPath é a linguagem de expressão padrão, não é necessário incluir a linguagem de expressão em um modelo CalculatedContent.
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"typeMatchExpression": "$..[?(@heartRate)]",
...
}
Você também pode definir explicitamente a linguagem de expressão padrão para um modelo CalculatedContent usando o defaultExpressionLanguage
parâmetro :
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"defaultExpressionLanguage": "JmesPath",
"typeMatchExpression": "[Body][?contains(keys(@), `heartRate`)] | @[0]",
...
}
Dica
Para obter mais informações sobre JSONPath, consulte JSONPath – XPath para JSON. Os modelos CalculatedContent usam a implementação do .NET JSON para resolver expressões JSONPath.
Para obter mais informações sobre JMESPath, consulte Especificação JMESPath. Os modelos CalculatedContent usam a implementação do .NET JMESPath para resolver expressões JMESPath.
Funções personalizadas
Um conjunto de funções personalizadas para o serviço MedTech também está disponível. As funções personalizadas do serviço MedTech estão fora das funções fornecidas como parte da especificação JMESPath. Para obter mais informações sobre as funções personalizadas do serviço MedTech, consulte Como usar funções personalizadas com o mapeamento de dispositivo do serviço MedTech.
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 da mensagem do dispositivo. Se o typeMatchExpression
for avaliado como true, os deviceIdExpression
valores , timestampExpression
e valueExpression
serão usados para localizar e extrair os valores JSON da mensagem do dispositivo e criar uma mensagem normalizada. Neste exemplo, todas as expressões são escritas em JSONPath, no entanto, seria válido gravar todas as expressões em JMESPath. Cabe ao autor do modelo determinar qual linguagem de expressão é mais apropriada.
Dica
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 exibir e fazer 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 ficarão depois de serem processadas em mensagens normalizadas e transformadas em Observações FHIR.
Neste exemplo, estamos usando uma mensagem de dispositivo que está capturando heartRate
dados:
{
"heartRate": "78",
"endDate": "2023-03-13T22:46:01.8750000",
"deviceId": "device01"
}
O hub de eventos enriquece a mensagem do dispositivo antes que o serviço MedTech leia a mensagem do dispositivo do hub de eventos:
{
"Body": {
"heartRate": "78",
"endDate": "2023-03-13T22:46:01.8750000",
"deviceId": "device01"
}
}
Estamos usando este mapeamento de dispositivo para o estágio de normalização:
{
"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
O serviço MedTech é avaliado typeMatchExpression
em relação ao conteúdo de dados do dispositivo de entrada. Se o serviço encontrar um valor de token correspondente, ele considerará o modelo uma correspondência.
O serviço MedTech avalia todas as expressões posteriores em relação a um novo valor de token. Esse novo valor de token contém a carga de dados do dispositivo original e o valor do token extraído correspondente aqui.
Dessa forma, a carga de dados do dispositivo original e o objeto correspondente estão disponíveis para cada expressão posterior. O valor do token extraído está disponível como a propriedade 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"
}
}
A mensagem normalizada resultante terá esta aparência após o estágio de normalização:
[
{
"type": "heartrate",
"occurrenceTimeUtc": "2023-03-13T22:46:01.875Z",
"deviceId": "device01",
"properties": [
{
"name": "hr",
"value": "78"
}
]
}
]
Dica
Para obter assistência para solucionar problemas de erros de implantação do serviço MedTech, consulte Solucionar erros de implantação do serviço MedTech.
Para obter assistência para solucionar problemas de erros do serviço MedTech, consulte Solucionar erros usando os logs do serviço MedTech.
Próximas etapas
Neste artigo, você aprendeu a usar modelos CalculatedContent com o mapeamento de dispositivo do serviço MedTech.
Para saber como usar as funções personalizadas do serviço MedTech, confira
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
FHIR® é uma marca registrada da Health Level Seven International, registrada no Escritório de Marcas dos EUA, e é usada com permissão.