Comment utiliser des modèles CalculatedContent 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 CalculatedContent dans un mappage d’appareil de service MedTech.

Notions de base du modèle CalculatedContent

Les modèles CalculatedContent du service MedTech prennent en charge deux langages d’expression JSON : JSONPath et JMESPath. 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 : TimestampExpression, DeviceIdExpression, etc.).

Notes

Si vous ne définissez pas de langue d’expression, les modèles de mappage d’appareils de service MedTech utilisent le langage d’expression par défaut configuré pour le modèle. La valeur par défaut est JSONPath, mais vous pouvez le remplacer si nécessaire.

Une expression est définie comme suit :

<name of expression> : {
   "value" : <the expression>,
   "language": <the expression language>
}

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

"templateType": "CalculatedContent",
"template": {
   "typeName": "heartrate",
   "typeMatchExpression": {
      "value" : "$..[?(@heartRate)]",
      "language": "JsonPath"
   },
...
}

Les modèles CalculatedContent permettent de mettre en correspondance et d’extraire des 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 Exemple d’expression JMESPath
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. Le service évalue toutes les expressions ultérieures par rapport à la valeur du jeton extrait correspondant ici. $..[?(@heartRate)] [Body][?contains(keys(@), `heartRate`)] \| @[0]
deviceIdExpression Expression permettant d’extraire l’identificateur d’appareil. $.matchedToken.deviceId @.matchedToken.deviceId
timestampExpression Expression permettant d’extraire la valeur d’horodatage de la valeur de la OccurrenceTimeUtc mesure. $.matchedToken.endDate @.matchedToken.endDate
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. $.matchedToken.patientId @.matchedToken.patientId
encounterIdExpression Facultatif : expression permettant d’extraire l’identificateur de la rencontre. $.matchedToken.encounterId @.matchedToken.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. $.matchedToken.correlationId @.matchedToken.correlationId
values[].valueExpression Expression permettant d’extraire la valeur souhaitée. $.matchedToken.heartRate @.matchedToken.heartRate

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

Lorsque vous spécifiez la langue à utiliser pour l’expression, les valeurs suivantes sont valides :

Langage d’expression Valeur
JSONPath JsonPath
JMESPath JmesPath

Étant donné que JSONPath est le langage d’expression par défaut, il n’est pas nécessaire d’inclure le langage d’expression dans un modèle CalculatedContent.

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

Vous pouvez également définir explicitement la langue d’expression par défaut pour un modèle CalculatedContent à l’aide du defaultExpressionLanguage paramètre :

"templateType": "CalculatedContent",
   "template": {
      "typeName": "heartrate",
      "defaultExpressionLanguage": "JmesPath",
      "typeMatchExpression": "[Body][?contains(keys(@), `heartRate`)] | @[0]",
...
}

Conseil

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

Pour plus d’informations sur JMESPath, consultez Spécification JMESPath. Les modèles CalculatedContent utilisent l’implémentation JMESPath .NET pour résoudre les expressions JMESPath.

Fonctions personnalisées

Un ensemble de fonctions personnalisées pour le service MedTech est également disponible. Les fonctions personnalisées du service MedTech se trouvent en dehors des fonctions fournies dans le cadre de la spécification JMESPath. Pour plus d’informations sur les fonctions personnalisées du service MedTech, consultez Utilisation des fonctions personnalisées avec le mappage d’appareils de service MedTech.

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, les deviceIdExpressionvaleurs , timestampExpressionet valueExpression sont utilisées pour localiser et extraire les valeurs JSON du message de l’appareil et créer un message normalisé. Dans cet exemple, toutes les expressions sont écrites dans JSONPath. Toutefois, il serait valide d’écrire toutes les expressions dans JMESPath. Il appartient à l’auteur du modèle de déterminer le langage d’expression le plus approprié.

Conseil

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 :

{
    "heartRate": "78",
    "endDate": "2023-03-13T22:46:01.8750000",
    "deviceId": "device01"
}

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

{
    "Body": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    }
}

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

{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "CalculatedContent",
            "template": {
                "typeName": "heartrate",
                "typeMatchExpression": "$..[?(@heartRate)]",
                "deviceIdExpression": "$.matchedToken.deviceId",
                "timestampExpression": "$.matchedToken.endDate",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.matchedToken.heartRate",
                        "valueName": "hr"
                    }
                ]
            }
        }
    ]
}

Important

Le service MedTech évalue par typeMatchExpression rapport à la charge utile des données d’appareil entrantes. Si le service trouve une valeur de jeton correspondante, il considère le modèle comme une correspondance.

Le service MedTech évalue toutes les expressions ultérieures par rapport à une nouvelle valeur de jeton. Cette nouvelle valeur de jeton contient à la fois la charge utile des données d’appareil d’origine et la valeur du jeton extrait correspondant ici.

De cette façon, la charge utile des données d’appareil d’origine et l’objet mis en correspondance sont disponibles pour chaque expression ultérieure. La valeur du jeton extrait est disponible en tant que propriété matchedToken.

{
    "Body": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    },
    "matchedToken": {
        "heartRate": "78",
        "endDate": "2023-03-13T22:46:01.8750000",
        "deviceId": "device01"
    }
}

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

[
    {
        "type": "heartrate",
        "occurrenceTimeUtc": "2023-03-13T22:46:01.875Z",
        "deviceId": "device01",
        "properties": [
            {
                "name": "hr",
                "value": "78"
            }
        ]
    }
]

Conseil

Pour obtenir de l’aide pour résoudre les erreurs 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 CalculatedContent avec le mappage d’appareils du service MedTech.

Pour savoir comment utiliser les fonctions personnalisées du service MedTech, 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 Health Level Seven International, enregistrée auprès de l’Office américain des marques, et est utilisée avec autorisation.