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 patient123
do 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.