Comment utiliser des modèles IotJsonPathContent avec le mappage d’appareils du service MedTech

Notes

Fast Healthcare Interoperability Resources (FHIR®) est une spécification de soins de santé ouverte.

Cet article fournit une vue d’ensemble de l’utilisation des modèles IotJsonPathContent dans un mappage d’appareil de service MedTech.

Principes de base du modèle IotJsonPathContent

Les modèles IotJsonPathContent peuvent être utilisés lorsque le service MedTech ingère des messages d’appareil acheminés à partir d’un Azure IoT Hub. Lorsque des modèles IotJsonPathContent sont utilisés dans le mappage des appareils, le service MedTech extrait l’ID d’appareil et l’horodatage de mesure des métadonnées fournies par un hub IoT. DeviceIdExpression et TimestampExpression ne doivent pas être inclus dans les modèles IotJsonPathContent.

Les modèles IotJsonPathContent du service MedTech prennent en charge le langage d’expression JSONPath. Les expressions sont utilisées pour identifier le modèle à utiliser avec un message d’appareil JSON donné (par exemple, TypeMatchExpression) et pour extraire des valeurs spécifiques requises pour créer un message normalisé (par exemple : PatientIdExpression, ValueExpression, etc.). Les modèles IotJsonPathContent sont similaires aux modèles CalculatedContent , sauf que les modèles DeviceIdExpression et TimestampExpression ne sont pas pris en charge.

Notes

JMESPath n’est pas pris en charge par les modèles IotJsonPathContent.

Une expression est définie comme suit :

<name of expression> : <the expression>

Dans l’exemple suivant, typeMatchExpression est défini comme suit :

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

Si votre service MedTech est configuré pour ingérer des messages d’appareil à partir d’un hub IoT, vous n’êtes pas obligé d’utiliser des modèles IotJsonPathContent. Les modèles CalculatedContent peuvent être utilisés en supposant que vous définissez correctement deviceIdExpression et TimestampExpression.

Les modèles IotJsonPathContent permettent de mettre en correspondance et d’extraire les valeurs d’un message d’appareil lu à partir d’un hub d’événements Azure Event Hubs via les expressions suivantes :

Élément Description Exemple d’expression JSONPath
typeMatchExpression Expression que le service MedTech évalue par rapport à la charge utile du message de l’appareil. Si le service trouve une valeur de jeton correspondante, il considère le modèle comme une correspondance. $..[?(@heartRate)]
patientIdExpression Expression permettant d’extraire l’identificateur du patient. Obligatoire lorsque le type résolution des services MedTech est défini sur Créer et facultatif lorsque le type résolution du service MedTech est défini sur Recherche. $.SystemProperties.iothub-connection-device-id
encounterIdExpression Facultatif : expression permettant d’extraire l’identificateur de la rencontre. $.Body.encounterId
correlationIdExpression Facultatif : expression permettant d’extraire l’identificateur de corrélation. Vous pouvez utiliser cette sortie pour regrouper des valeurs en une seule observation dans le mappage de destination FHIR. $.Body.correlationId
values[].valueExpression Expression permettant d’extraire la valeur souhaitée. $.Body.heartRate

Important

Le service MedTech utilisera l’ID d’appareil défini dans IoT Hub comme identificateur d’appareil de ressource FHIR. Si le service MedTech est configuré pour utiliser un type de résolution d’identité de recherche, une ressource d’appareil avec un identificateur d’appareil correspondant doit exister dans le service FHIR, sinon une erreur se produit lorsque le message d’appareil est traité. Si le type de résolution d’identité du service MedTech est défini sur Créer, un patientIdExpression doit être inclus dans le mappage d’appareil afin qu’une ressource Patient et une ressource Appareil puissent être créées s’ils n’existent pas déjà.

Notes

Le type Résolution spécifie la façon dont le service MedTech associe les données de l’appareil aux ressources Device et Aux ressources Patient. Le service MedTech lit les ressources Appareil et Patient du service FHIR à l’aide d’identificateurs d’appareil et d’identificateurs de patient. Si un identificateur de rencontre est spécifié et extrait de la charge utile des données de l’appareil, il est lié à l’observation si une rencontre existe sur le service FHIR avec cet identificateur. Si l’identificateur de rencontre est correctement normalisé, mais qu’aucune rencontre FHIR n’existe avec cet identificateur de rencontre, une exception FhirResourceNotFound est levée. Pour plus d’informations sur la configuration du type résolution du service MedTech, consultez Configurer l’onglet Destination.

Langages d’expression

JSONPath est le langage d’expression par défaut et l’inclusion d’un langage d’expression dans un modèle IotJsonPathContent n’est pas prise en charge. Si vous tentez de spécifier le langage d’expression dans un objet expression, le modèle IotJsonPathContent contenant l’objet expression échoue.

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

Conseil

Pour plus d’informations sur JSONPath, consultez JSONPath - XPath pour JSON. Les modèles IotJsonPathContent utilisent l’implémentation JSON .NET pour résoudre les expressions JSONPath.

Exemple

Lorsque le service MedTech traite un message d’appareil, les modèles dans CollectionContent sont utilisés pour évaluer le message. typeMatchExpression est utilisé pour déterminer si le modèle doit être utilisé pour créer un message normalisé à partir du message de l’appareil. Si la typeMatchExpression valeur est true, la valueExpression valeur est utilisée pour localiser et extraire les valeurs JSON du message de l’appareil et créer un message normalisé.

Conseil

Visual Studio Code avec l’extension Azure IoT Hub est une méthode recommandée pour envoyer des messages d’appareil IoT à votre hub IoT à des fins de test et de résolution des problèmes.

Vous pouvez utiliser le débogueur de mappage du service MedTech pour obtenir de l’aide sur la création, la mise à jour et la résolution des problèmes liés à l’appareil de service MedTech et aux mappages de destination FHIR. Le débogueur de mappage vous permet d’afficher et d’effectuer facilement des ajustements inline en temps réel, sans jamais avoir à quitter le Portail Azure. Le débogueur de mappage peut également être utilisé pour charger des messages d’appareil de test afin de voir comment ils seront traités en messages normalisés et transformés en observations FHIR.

Dans cet exemple, nous utilisons un message d’appareil qui capture des heartRate données :

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

Notes

Pour éviter l’usurpation d’appareils dans les messages d’appareil à cloud (D2C), Azure IoT Hub enrichit tous les messages d’appareil avec des propriétés supplémentaires avant de les router vers le hub d’événements. Par exemple : Propriétés : iothub-creation-time-utc et SystemProperties : iothub-connection-device-id. Pour plus d’informations, consultez Propriétés anti-usurpation d’identité.

patientIdExpression est uniquement requis pour les services MedTech en mode Créer ; toutefois, si la recherche est utilisée, une ressource Appareil avec un identificateur d’appareil correspondant doit exister dans le service FHIR de destination. Ces exemples supposent que votre service MedTech est en mode Créer . Pour plus d’informations sur les propriétés Créer et Rechercherune destination, consultez Configurer l’onglet Destination.

Le hub IoT enrichit et achemine le message de l’appareil vers le hub d’événements avant que le service MedTech ne lise le message de l’appareil à partir du hub d’événements :

{
    "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"
    }
}   

Nous utilisons ce mappage d’appareil pour la phase de normalisation :

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

Le message normalisé résultant ressemblera à ceci après la phase de normalisation :

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

Conseil

Pour obtenir de l’aide pour résoudre les erreurs courantes de déploiement du service MedTech, consultez Résoudre les erreurs de déploiement du service MedTech.

Pour obtenir de l’aide pour résoudre les erreurs du service MedTech, consultez Résoudre les erreurs à l’aide des journaux du service MedTech.

Étapes suivantes

Dans cet article, vous avez appris à utiliser des modèles IotJsonPathContent avec le mappage d’appareils du service MedTech.

Pour déployer le service MedTech avec le routage des messages d’appareil activé via un Azure IoT Hub, consultez

Pour obtenir une vue d’ensemble du mappage de destination FHIR du service MedTech, consultez

Pour obtenir une vue d’ensemble des exemples de mappages basés sur des scénarios de service MedTech, consultez

FHIR® est une marque déposée de la Health Level Seven International, enregistrée auprès de l’U.S. Trademark Office et utilisée avec leur autorisation.