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 patient123paziente.

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.