Come usare funzioni personalizzate con il mapping dei dispositivi del servizio MedTech
Nota
Fast Healthcare Interoperability Resources (FHIR®) è una specifica sanitaria aperta.
Molte funzioni sono disponibili quando si usa JMESPath come linguaggio di espressione. Oltre alle funzioni predefinite disponibili come parte della specifica JMESPath, è possibile usare anche molte funzioni personalizzate. Questo articolo descrive come usare le funzioni personalizzate specifiche del servizio MedTech con il mapping dei dispositivi del servizio MedTech.
Suggerimento
È possibile usare il debugger di mapping dei servizi MedTech per assistenza per la creazione, l'aggiornamento e la risoluzione dei problemi relativi ai mapping di destinazione del servizio MedTech e FHIR. Il debugger mapping consente di visualizzare e apportare facilmente modifiche inline in tempo reale, senza mai dover lasciare l'portale di Azure. Il debugger di mapping può essere usato anche per caricare i messaggi del dispositivo di test per vedere come verranno elaborati in messaggi normalizzati e trasformati in osservazioni FHIR.
Firma della funzione
Ogni funzione ha una firma che segue la specifica JMESPath. Questa firma può essere rappresentata come:
return_type function_name(type $argname)
La firma indica i tipi validi per gli argomenti. Se un tipo non valido viene passato per un argomento, si verifica un errore.
Importante
Quando vengono eseguite funzioni matematiche, il risultato finale deve essere in grado di adattarsi a un valore lungo C# . Se il risultato finale non è in grado di adattarsi a un valore lungo C#, si verificherà un errore matematico.
Come indicato in precedenza, queste funzioni possono essere usate solo quando si specifica JmesPath come linguaggio di espressione. Per impostazione predefinita, il linguaggio delle espressioni è JsonPath. Il linguaggio delle espressioni può essere modificato durante la definizione dell'espressione.
Ad esempio:
"templateType": "CalculatedContent",
"template": {
"typeName": "heartrate",
"patientIdExpression": {
"value": "insertString('123', 'patient', `0`) ",
"language": "JmesPath"
},
...
}
In questo esempio viene usata l'espressione insertString per generare l'ID patient123
paziente.
Valori letterali
I valori costanti possono essere forniti alle funzioni.
- I valori numerici devono essere racchiusi tra backticks: '
- Esempio: add('10', '10')
- I valori stringa devono essere racchiusi tra virgolette singole: '
- Esempio: insertString('mple', 'sa', '0')
Per altre informazioni, vedere la specifica JMESPath.
Gestione delle eccezioni
Le eccezioni possono verificarsi in vari punti all'interno del ciclo di vita dell'elaborazione dei dati del dispositivo. Ecco i vari punti in cui possono verificarsi eccezioni:
Azione | Se | Eccezioni che possono verificarsi durante l'analisi del mapping del dispositivo | Risultato |
---|---|---|---|
Analisi del mapping dei dispositivi | Ogni volta che viene ricevuto un nuovo batch di messaggi del dispositivo, il mapping dei dispositivi viene caricato e analizzato. | Errore di analisi del mapping del dispositivo. | Il sistema tenta di ricaricare e analizzare il mapping più recente del dispositivo fino a quando l'analisi non riesce. Nessun nuovo messaggio del dispositivo viene elaborato fino a quando l'analisi non riesce. |
Analisi del mapping dei dispositivi | Ogni volta che viene ricevuto un nuovo batch di messaggi del dispositivo, il mapping dei dispositivi viene caricato e analizzato. | Errore di analisi di qualsiasi espressione. | Il sistema tenta di ricaricare e analizzare il mapping più recente del dispositivo fino a quando l'analisi non riesce. Nessun nuovo messaggio del dispositivo viene elaborato fino a quando l'analisi non riesce. |
Esecuzione di funzioni | Ogni volta che una funzione viene eseguita sui dati del dispositivo all'interno di un messaggio del dispositivo. | I dati del dispositivo di input non corrispondono a quello della firma della funzione. | Il sistema arresta l'elaborazione del messaggio del dispositivo. Il messaggio del dispositivo non viene riprovato. |
Esecuzione di funzioni | Ogni volta che una funzione viene eseguita sui dati del dispositivo all'interno di un messaggio del dispositivo. | Tutte le altre eccezioni elencate nella descrizione della funzione. | Il sistema arresta l'elaborazione del messaggio del dispositivo. Il messaggio del dispositivo non viene riprovato. |
Funzioni matematiche
add
number add(number $left, number $right)
Restituisce il risultato dell'aggiunta dell'argomento sinistro all'argomento destro.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
n/d | add('10', '10') | 20 |
{"left": 40, "right": 50} | add(left, right) | 90 |
{"left": 0, "right": 50} | add(left, right) | 50 |
Dividere
number divide(number $left, number $right)
Restituisce il risultato della divisione dell'argomento sinistro in base all'argomento destro.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
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) | errore matematico: dividere per zero |
Moltiplicare
number multiply(number $left, number $right)
Restituisce il risultato della moltiplicazione dell'argomento sinistro con l'argomento destro.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
n/d | multiply('10', '10') | 100 |
{"left": 40, "right": 50} | multiply(left, right) | 2000 |
{"left": 0, "right": 50} | multiply(left, right) | 0 |
pow
number pow(number $left, number $right)
Restituisce il risultato dell'aumento dell'argomento sinistro alla potenza dell'argomento di destra.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
n/d | pow('10', '10') | 10000000000 |
{"left": 40, "right": 50} | pow(left, right) | errore matematico: overflow |
{"left": 0, "right": 50} | pow(left, right) | 0 |
{"left": 100, "right": 0.5} | pow(left, right) | 10 |
sottrarre
number subtract(number $left, number $right)
Restituisce il risultato della sottrazione dell'argomento destro dall'argomento sinistro.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
n/d | sottrazione('10', '10') | 0 |
{"left": 40, "right": 50} | sottrazione(sinistra, destra) | -10 |
{"left": 0, "right": 50} | sottrazione(sinistra, destra) | -50 |
Funzioni per i valori stringa
insertString
string insertString(string $original, string $toInsert, number pos)
Produce una nuova stringa inserendo il valore di toInsert
nella stringa original
. La stringa viene inserita nella posizione pos
all'interno della stringa original
.
Se l'argomento posizionale è in base zero, la posizione di zero fa riferimento al primo carattere all'interno della stringa.
Se l'argomento posizionale specificato non è compreso nell'intervallo di lunghezza di original
, si verifica un errore.
Esempi:
Dato un | Expression | Risultato |
---|---|---|
n/d | insertString('mple', 'sa', 0 ) |
"sample" |
{"original": "mple", "toInsert": "sa", "pos": 0} | insertString(original, toInsert, pos) | "sample" |
{"original": "suess", "toInsert": "cc", "pos": 2} | insertString(original, toInsert, pos) | "successo" |
{"original": "myString", "toInsert": "!!", "pos": 8} | insertString(original, toInsert, pos) | "myString!!" |
Funzioni di data
fromUnixTimestamp
string fromUnixTimestamp(number $unixTimestampInSeconds)
Produce un timestamp conforme a ISO 8061 dal timestamp Unix specificato. Il timestamp è rappresentato come numero di secondi dall'epoca (1 gennaio 1970).
Esempi:
Dato un | Expression | Risultato |
---|---|---|
{"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)
Produce un timestamp conforme a ISO 8061 dal timestamp Unix specificato. Il timestamp è rappresentato come numero di millisecondi dall'epoca (1 gennaio 1970).
Esempi:
Dato un | Expression | Risultato |
---|---|---|
{"unix": 1626799080000} | fromUnixTimestampMs(unix) | "2021-07-20T16:38:00+0" |
{"unix": 0} | fromUnixTimestampMs(unix) | "1970-01-01T00:00:00+0" |
Suggerimento
Vedere l'articolo del servizio MedTech Risolvere gli errori usando i log del servizio MedTech per assistenza nella correzione degli errori tramite i log del servizio MedTech.
Passaggi successivi
In questo articolo si è appreso come usare le funzioni personalizzate del servizio MedTech all'interno del mapping dei dispositivi.
Per una panoramica del mapping dei dispositivi del servizio MedTech, vedere
Per una panoramica del mapping di destinazione FHIR del servizio MedTech, vedere
Per una panoramica degli esempi di mapping basati sullo scenario del servizio MedTech, vedere
FHIR® è un marchio registrato di Health Level Seven International, registrato in U.S. Trademark Office e viene usato con la loro autorizzazione.