Come usare i modelli IotJsonPathContent con il mapping dei dispositivi del servizio MedTech

Nota

Fast Healthcare Interoperability Resources (FHIR®) è una specifica sanitaria aperta.

Questo articolo offre una panoramica dell'uso dei modelli IotJsonPathContent all'interno di un mapping dei dispositivi del servizio MedTech.

Nozioni di base sul modello IotJsonPathContent

IotJsonPathContent modelli possono essere usati quando il servizio MedTech inserisce i messaggi del dispositivo indirizzati da un hub IoT di Azure. Quando i modelli IotJsonPathContent vengono usati nel mapping dei dispositivi, il servizio MedTech estrae l'ID dispositivo e il timestamp di misurazione dai metadati forniti da un hub IoT. DeviceIdExpression e TimestampExpression non devono essere inclusi nei modelli IotJsonPathContent.

I modelli IotJsonPathContent del servizio MedTech supportano JSON Expression Language JSONPath. Le espressioni vengono usate per identificare il modello da usare con un determinato messaggio di dispositivo JSON (ad esempio TypeMatchExpression) e per estrarre valori specifici necessari per creare un messaggio normalizzato, ad esempio PatientIdExpression, ValueExpression e così via. I modelli IotJsonPathContent sono simili ai modelli CalculatedContent , ad eccezione dei modelli DeviceIdExpression e TimestampExpression non sono supportati.

Nota

JMESPath non è supportato dai modelli IotJsonPathContent.

Un'espressione è definita come:

<name of expression> : <the expression>

Nell'esempio seguente viene typeMatchExpression definito come:

"templateType": "IotJsonPathContent",
"template": {
   "typeName": "heartrate",
   "typeMatchExpression": "$..[?(@heartRate)]",
...
}

Se il servizio MedTech è configurato per inserire i messaggi dei dispositivi da un hub IoT, non è necessario usare i modelli IotJsonPathContent. I modelli CalculatedContent possono essere usati presupponendo che si definiscano correttamente DeviceIdExpression e TimestampExpression.

I modelli IotJsonPathContent consentono la corrispondenza e l'estrazione di valori da un messaggio del dispositivo letti da un hub eventi di Hub eventi di Azure tramite le espressioni seguenti:

Elemento Descrizione Esempio di espressione JSONPath
typeMatchExpression Espressione valutata dal servizio MedTech rispetto al payload del messaggio del dispositivo. Se il servizio trova un valore di token corrispondente, considera il modello una corrispondenza. $..[?(@heartRate)]
patientIdExpression Espressione da estrarre l'identificatore del paziente. Obbligatorio quando il tipo di risoluzione dei servizi MedTech è impostato su Crea e facoltativo quando il tipo di risoluzione del servizio MedTech è impostato su Ricerca. $.SystemProperties.iothub-connection-device-id
encounterIdExpression Facoltativo: espressione per estrarre l'identificatore di incontro. $.Body.encounterId
correlationIdExpression Facoltativo: espressione per estrarre l'identificatore di correlazione. È possibile usare questo output per raggruppare i valori in una singola osservazione nel mapping di destinazione FHIR. $.Body.correlationId
valori[].valueExpression Espressione da estrarre il valore desiderato. $.Body.heartRate

Importante

Il servizio MedTech userà l'ID dispositivo definito nell'hub IoT come identificatore del dispositivo di risorsa FHIR. Se il servizio MedTech è configurato per usare un tipo di risoluzione delle identità di Ricerca, una risorsa dispositivo con un identificatore di dispositivo corrispondente deve esistere nel servizio FHIR o si verificherà un errore quando viene elaborato il messaggio del dispositivo. Se il tipo di risoluzione delle identità del servizio MedTech è impostato su Crea, deve essere incluso nel mapping dei dispositivi in patientIdExpression modo che sia possibile creare una nuova risorsa paziente e una risorsa Dispositivo se non esistono già.

Nota

Il tipo Di risoluzione specifica in che modo il servizio MedTech associa i dati del dispositivo alle risorse del dispositivo e alle risorse del paziente. Il servizio MedTech legge le risorse dispositivo e paziente dal servizio FHIR usando identificatori di dispositivo e identificatori dei pazienti. Se un identificatore di verifica viene specificato ed estratto dal payload dei dati del dispositivo, viene collegato all'osservazione se esiste un incontro nel servizio FHIR con tale identificatore. Se l'identificatore di verifica è stato normalizzato correttamente, ma non esiste un'eccezione FHIR Encounter con tale identificatore, viene generata un'eccezione FhirResourceNotFound . Per altre informazioni sulla configurazione del tipo di risoluzione del servizio MedTech, vedere Configurare la scheda Destinazione.

Linguaggi di espressione

JSONPath è il linguaggio di espressione predefinito e l'inclusione di un linguaggio di espressione all'interno di un modello IotJsonPathContent non è supportato. Se si tenta di specificare il linguaggio dell'espressione in un oggetto expression, il modello IotJsonPathContent contenente l'oggetto expression ha esito negativo.

"templateType": "IotJsonPathContent",
   "template": {
      "typeName": "heartrate",
      "typeMatchExpression": "$..[?(@heartRate)]",
...
}

Suggerimento

Per altre informazioni su JSONPath, vedere JSONPath - XPath per JSON. I modelli IotJsonPathContent usano l'implementazione JSON .NET per la risoluzione delle espressioni JSONPath.

Esempio

Quando il servizio MedTech elabora un messaggio di dispositivo, i modelli in CollectionContent vengono usati per valutare il messaggio. Viene typeMatchExpression usato per determinare se il modello deve essere usato per creare un messaggio normalizzato dal messaggio del dispositivo. Se restituisce typeMatchExpression true, il valueExpression valore viene usato per individuare ed estrarre i valori JSON dal messaggio del dispositivo e creare un messaggio normalizzato.

Suggerimento

Visual Studio Code con l'estensione hub IoT di Azure è un metodo consigliato per l'invio di messaggi di dispositivo IoT all'hub IoT per il test e la risoluzione dei problemi.

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

In questo esempio viene usato un messaggio del dispositivo che acquisisce heartRate i dati:

{
    "PatientId": "patient1",
    "HeartRate" : "78"
}

Nota

Per evitare lo spoofing dei dispositivi nei messaggi D2C (device-to-cloud), hub IoT di Azure arricchire tutti i messaggi del dispositivo con proprietà aggiuntive prima di instradarli all'hub eventi. Ad esempio: Proprietà: iothub-creation-time-utc e SystemProperties: iothub-connection-device-id. Per altre informazioni, vedere Proprietà anti-spoofing.

patientIdExpression è obbligatorio solo per i servizi MedTech nella modalità Crea ; Tuttavia, se viene usata ricerca , una risorsa dispositivo con un identificatore di dispositivo corrispondente deve esistere nel servizio FHIR di destinazione. Questi esempi presuppongono che il servizio MedTech sia in modalità Crea . Per altre informazioni sulle proprietà Crea e Ricercadestinazione, vedere Configurare la scheda Destinazione.

L'hub IoT arricchisce e indirizza il messaggio del dispositivo all'hub eventi prima che il servizio MedTech legge il messaggio del dispositivo dall'hub eventi:

{
    "Body": {
        "PatientId": "patient1",
        "HeartRate": "78"
    },
    "SystemProperties": {
        "iothub-enqueuedtime": "2023-07-25T20:41:26.046Z",
        "iothub-connection-device-id": "sampleDeviceId"
    },
    "Properties": {
        "iothub-creation-time-utc": "2023-07-25T20:41:26.046Z"
    }
}   

Questo mapping dei dispositivi viene usato per la fase di normalizzazione:

{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "IotJsonPathContent",
            "template": {
                "typeName": "HeartRate",
                "typeMatchExpression": "$..[?(@Body.HeartRate)]",
                "patientIdExpression": "$.Body.PatientId",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.Body.HeartRate",
                        "valueName": "HeartRate"
                    }
                ]
            }
        }
    ]    
}

Il messaggio normalizzato risultante avrà un aspetto simile al seguente dopo la fase di normalizzazione:

{
    "type": "HeartRate",
    "occurrenceTimeUtc": "2023-07-25T20:41:26.046Z",
    "deviceId": "sampleDeviceId",
    "patientId": "patient1",
    "properties": [
        {
            "name": "HeartRate",
            "value": "78"
        }
    ]
}

Suggerimento

Per assistenza nella correzione degli errori comuni di distribuzione del servizio MedTech, vedere Risolvere gli errori di distribuzione del servizio MedTech.

Per assistenza sulla correzione degli errori del servizio MedTech, vedere Risolvere gli errori usando i log del servizio MedTech.

Passaggi successivi

In questo articolo si è appreso come usare i modelli IotJsonPathContent con il mapping dei dispositivi del servizio MedTech.

Per distribuire il servizio MedTech con il routing dei messaggi del dispositivo abilitato tramite un hub IoT di Azure, vedere

Per una panoramica del mapping di destinazione del servizio MedTech FHIR, vedere

Per una panoramica degli esempi di mapping basati su scenari di servizio MedTech, vedere

FHIR® è un marchio registrato di Health Level Seven International, registrato in U.S. Trademark Office e viene usato con l'autorizzazione.