Partilhar via


Como utilizar funções personalizadas com o mapeamento de dispositivos do serviço MedTech

Nota

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

Muitas funções estão disponíveis ao utilizar JMESPath como linguagem de expressão. Além das funções incorporadas disponíveis como parte da especificação JMESPath, também podem ser utilizadas muitas mais funções personalizadas. Este artigo descreve como utilizar as funções personalizadas específicas do serviço MedTech com o mapeamento de dispositivos do serviço MedTech.

Dica

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.

Assinatura de função

Cada função tem uma assinatura que segue a especificação JMESPath. Esta assinatura pode ser representada como:

return_type function_name(type $argname)

A assinatura indica os tipos válidos para os argumentos. Se for transmitido um tipo inválido para um argumento, ocorre um erro.

Importante

Quando as funções relacionadas com a matemática são concluídas, o resultado final tem de ser capaz de se ajustar dentro de um valor C# longo . Se o resultado final não conseguir caber num valor C# longo, ocorrerá um erro matemático.

Conforme indicado anteriormente, estas funções só podem ser utilizadas ao especificar JmesPath como a linguagem de expressão. Por predefinição, a linguagem de expressão é JsonPath. A linguagem de expressão pode ser alterada ao definir a expressão.

Por exemplo:

"templateType": "CalculatedContent",
    "template": {
        "typeName": "heartrate",
        "patientIdExpression": {
            "value": "insertString('123', 'patient', `0`) ",
            "language": "JmesPath"
        },
        ...
    }

Este exemplo utiliza a expressão insertString para gerar o ID patient123do paciente .

Valores literais

Os valores constantes podem ser fornecidos às funções.

  • Os valores numéricos devem ser colocados entre acentos anteriores: "
    • Exemplo: add('10', '10')
  • Os valores das cadeias de carateres devem estar entre plicas: "
    • Exemplo: insertString('mple', 'sa', '0')

Para obter mais informações, veja a especificação JMESPath.

Processamento de exceções

Podem ocorrer exceções em vários pontos do ciclo de vida de processamento de dados do dispositivo. Eis os vários pontos em que podem ocorrer exceções:

Ação Quando Exceções que podem ocorrer durante a análise do mapeamento do dispositivo Resultado
Análise do mapeamento de dispositivos Sempre que é recebido um novo lote de mensagens do dispositivo, o mapeamento do dispositivo é carregado e analisado. Falha ao analisar o mapeamento do dispositivo. O sistema tenta recarregar e analisar o mapeamento de dispositivos mais recente até que a análise seja bem-sucedida. Não são processadas novas mensagens de dispositivo até que a análise seja efetuada com êxito.
Análise do mapeamento de dispositivos Sempre que é recebido um novo lote de mensagens do dispositivo, o mapeamento do dispositivo é carregado e analisado. Falha ao analisar quaisquer expressões. O sistema tenta recarregar e analisar o mapeamento de dispositivos mais recente até que a análise seja bem-sucedida. Não são processadas novas mensagens de dispositivo até que a análise seja efetuada com êxito.
Execução da função Sempre que uma função é executada em dados do dispositivo numa mensagem de dispositivo. Os dados do dispositivo de entrada não correspondem aos da assinatura da função. O sistema deixa de processar essa mensagem do dispositivo. A mensagem do dispositivo não é repetida.
Execução da função Sempre que uma função é executada em dados do dispositivo numa mensagem de dispositivo. Quaisquer outras exceções listadas na descrição da função. O sistema deixa de processar essa mensagem do dispositivo. A mensagem do dispositivo não é repetida.

Funções matemáticas

adicionar

number add(number $left, number $right)

Devolve o resultado da adição do argumento esquerdo ao argumento da direita.

Exemplos:

Dado Expression Resultado
n/a add('10', '10') 20
{"left": 40, "right": 50} add(left, right) 90
{"left": 0, "right": 50} add(left, right) 50

dividir

number divide(number $left, number $right)

Devolve o resultado da divisão do argumento esquerdo pelo argumento direito.

Exemplos:

Dado Expression Resultado
n/a dividir('10', '10') 1
{"left": 40, "right": 50} dividir(esquerda, direita) 0.8
{"left": 0, "right": 50} dividir(esquerda, direita) 0
{"left": 50, "right": 0} dividir(esquerda, direita) erro matemático: dividir por zero

multiplicar

number multiply(number $left, number $right)

Devolve o resultado da multiplicação do argumento esquerdo com o argumento direito.

Exemplos:

Dado Expression Resultado
n/a multiplicar('10', '10') 100
{"left": 40, "right": 50} multiplicar(esquerda, direita) 2000
{"left": 0, "right": 50} multiplicar(esquerda, direita) 0

pow

number pow(number $left, number $right)

Devolve o resultado de elevar o argumento à esquerda para o poder do argumento direito.

Exemplos:

Dado Expression Resultado
n/a pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(esquerda, direita) erro matemático: capacidade excedida
{"left": 0, "right": 50} pow(esquerda, direita) 0
{"left": 100, "right": 0.5} pow(esquerda, direita) 10

subtrair

number subtract(number $left, number $right)

Devolve o resultado da subtração do argumento direito do argumento esquerdo.

Exemplos:

Dado Expression Resultado
n/a subtrair('10', '10') 0
{"left": 40, "right": 50} subtrair(esquerda, direita) -10
{"left": 0, "right": 50} subtrair(esquerda, direita) -50

Funções de cadeia

insertString

string insertString(string $original, string $toInsert, number pos)

Produz uma nova cadeia ao inserir o valor de toInsert na cadeia original. A cadeia é inserida na posição pos na cadeia original.

Se o argumento posicional for baseado em zero, a posição de zero refere-se ao primeiro caráter dentro da cadeia.

Se o argumento posicional fornecido estiver fora do intervalo do comprimento de original, ocorrerá um erro.

Exemplos:

Dado Expression Resultado
n/a insertString('mple', 'sa', 0) "exemplo"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(original, toInsert, pos) "exemplo"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(original, toInsert, pos) "êxito"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(original, toInsert, pos) "myString!!"

Funções de data

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

Produz um carimbo de data/hora em conformidade com ISO 8061 a partir do carimbo de data/hora Unix especificado. O carimbo de data/hora é representado como o número de segundos desde a Época (1 de janeiro de 1970).

Exemplos:

Dado Expression Resultado
{"unix": 1625677200} fromUnixTimestamp(unix) "2021-07-07T17:00:00+0"
{"unix": 0} fromUnixTimestamp(unix) "1970-01-01T00:00:00+0"

fromUnixTimestampMs

string fromUnixTimestampMs(number $unixTimestampInMs)

Produz um carimbo de data/hora em conformidade com ISO 8061 a partir do carimbo de data/hora Unix especificado. O carimbo de data/hora é representado como o número de milissegundos desde a Época (1 de janeiro de 1970).

Exemplos:

Dado Expression Resultado
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

Dica

Veja o artigo do serviço MedTech Resolver erros com os registos do serviço MedTech para obter assistência para corrigir erros com os registos do serviço MedTech.

Passos seguintes

Neste artigo, aprendeu a utilizar as funções personalizadas do serviço MedTech no mapeamento do dispositivo.

Para obter uma descrição geral do mapeamento de dispositivos do serviço MedTech, veja

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

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

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.