Compartilhar via


Como usar funções personalizadas 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.

Muitas funções estão disponíveis ao usar JMESPath como a linguagem de expressão. Além das funções internas disponíveis como parte da especificação JMESPath, muitas outras funções personalizadas também podem ser usadas. Este artigo descreve como usar as funções personalizadas específicas do serviço MedTech com o mapeamento de dispositivo do serviço MedTech.

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.

Assinatura de função

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

return_type function_name(type $argname)

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

Importante

Quando as funções relacionadas à matemática são feitas, o resultado final deve ser capaz de se ajustar a um valor longo em C #. Se o resultado final não conseguir se ajustar a um valor longo do C#, ocorrerá um erro matemático.

Conforme mencionado anteriormente, essas funções só podem ser usadas ao especificar JmesPath como a linguagem de expressão. Por padrã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 usa a expressão insertString para gerar a ID patient123do paciente .

Valores literais

Valores constantes podem ser fornecidos para funções.

  • Os valores numéricos devem ser colocados dentro de backticks: '
    • Exemplo: add('10', '10')
  • Os valores de cadeia de caracteres devem ser colocados entre aspas simples: '
    • Exemplo: insertString('mple', 'sa', '0')

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

Tratamento de exceções

Exceções podem ocorrer em vários pontos dentro do ciclo de vida de processamento de dados do dispositivo. Aqui estão os vários pontos em que as exceções podem ocorrer:

Ação Quando Exceções que podem ocorrer durante a análise do mapeamento de dispositivo Resultado
Análise de mapeamento de dispositivo Sempre que um novo lote de mensagens de dispositivo é recebido, o mapeamento de dispositivo é carregado e analisado. Falha ao analisar o mapeamento de dispositivo. O sistema tenta recarregar e analisar o mapeamento de dispositivo mais recente até que a análise seja bem-sucedida. Nenhuma nova mensagem de dispositivo é processada até que a análise seja bem-sucedida.
Análise de mapeamento de dispositivo Sempre que um novo lote de mensagens de dispositivo é recebido, o mapeamento de dispositivo é carregado e analisado. Falha ao analisar qualquer expressão. O sistema tenta recarregar e analisar o mapeamento de dispositivo mais recente até que a análise seja bem-sucedida. Nenhuma nova mensagem de dispositivo é processada até que a análise seja bem-sucedida.
Execução de função Cada vez que uma função é executada nos dados do dispositivo em uma mensagem de dispositivo. Os dados do dispositivo de entrada não correspondem aos da assinatura da função. O sistema para de processar a mensagem do dispositivo. A mensagem do dispositivo não é repetida.
Execução de função Cada vez que uma função é executada nos dados do dispositivo em uma mensagem de dispositivo. Quaisquer outras exceções listadas na descrição da função. O sistema para de processar a mensagem do dispositivo. A mensagem do dispositivo não é repetida.

Funções matemáticas

add

number add(number $left, number $right)

Retorna o resultado da adição do argumento left ao argumento right.

Exemplos:

Fornecido Expressão Result
n/d add('10', '10') 20
{"left": 40, "right": 50} add(left, right) 90
{"left": 0, "right": 50} add(left, right) 50

divide

number divide(number $left, number $right)

Retorna o resultado da divisão do argumento left pelo argumento right.

Exemplos:

Fornecido Expressão Result
n/d divide('10', '10') 1
{"left": 40, "right": 50} divide(left, right) 0,8
{"left": 0, "right": 50} divide(left, right) 0
{"left": 50, "right": 0} divide(left, right) erro matemático: dividir por zero

multiply

number multiply(number $left, number $right)

Retorna o resultado da multiplicação do argumento left pelo argumento right.

Exemplos:

Fornecido Expressão Result
n/d multiplique('10', '10') 100
{"left": 40, "right": 50} multiplique(esquerda, direita) 2000
{"left": 0, "right": 50} multiplique(esquerda, direita) 0

pow

number pow(number $left, number $right)

Retorna o resultado de elevar o argumento à esquerda para o poder do argumento à direita.

Exemplos:

Fornecido Expressão Result
n/d pow('10', '10') 10000000000
{"left": 40, "right": 50} pow(esquerda, direita) erro matemático: estouro
{"left": 0, "right": 50} pow(esquerda, direita) 0
{"left": 100, "right": 0.5} pow(esquerda, direita) 10

subtrair

number subtract(number $left, number $right)

Retorna o resultado da subtração do argumento à direita do argumento esquerdo.

Exemplos:

Fornecido Expressão Result
n/d subtrair('10', '10') 0
{"left": 40, "right": 50} subtrair(esquerda, direita) -10
{"left": 0, "right": 50} subtrair(esquerda, direita) -50

Funções de cadeia de caracteres

insertString

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

Produz uma nova cadeia de caracteres inserindo o valor de na cadeia de toInsert caracteres original. A cadeia de caracteres é inserida na posição pos dentro da cadeia de caracteres original.

Se o argumento posicional for baseado em zero, a posição de zero se referirá ao primeiro caractere dentro da cadeia de caracteres.

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

Exemplos:

Fornecido Expressão Result
n/d 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) "sucesso"
{"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 compatível com ISO 8061 do carimbo de data/hora do Unix fornecido. O carimbo de data/hora é representado como o número de segundos desde a Época (1º de janeiro de 1970).

Exemplos:

Fornecido Expressão Result
{"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 compatível com ISO 8061 do carimbo de data/hora do Unix fornecido. O carimbo de data/hora é representado como o número de milissegundos desde a Época (1º de janeiro de 1970).

Exemplos:

Fornecido Expressão Result
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

Dica

Confira o artigo Serviço MedTech Solucionar erros usando os logs de serviço MedTech para obter assistência para corrigir erros usando os logs de serviço MedTech.

Próximas etapas

Neste artigo, você aprendeu a usar as funções personalizadas do serviço MedTech dentro do mapeamento de dispositivo.

Para obter uma visão geral do mapeamento do dispositivo de serviço MedTech, 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.