Dela via


Så här använder du CalculatedContent-mallar med Enhetsmappning för MedTech-tjänsten

Anteckning

FHIR® (Fast Healthcare Interoperability Resources) är en öppen hälsospecifikation.

Den här artikeln innehåller en översikt över hur du använder CalculatedContent-mallar i en Enhetsmappning för MedTech-tjänsten.

Grundläggande om CalculatedContent-mall

MedTech-tjänstens CalculatedContent-mallar stöder två JSON-uttrycksspråk: JSONPath och JMESPath. Uttryck används för att identifiera vilken mall som ska användas med ett visst JSON-enhetsmeddelande (till exempel TypeMatchExpression) och för att extrahera specifika värden som krävs för att skapa ett normaliserat meddelande (till exempel TimestampExpression, DeviceIdExpression osv.).

Anteckning

Om du inte definierar ett uttrycksspråk använder enhetsmappningsmallarna för MedTech-tjänsten det standarduttrycksspråk som har konfigurerats för mallen. Standardvärdet är JSONPath, men du kan skriva över det om det behövs.

Ett uttryck definieras som:

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

I följande exempel typeMatchExpression definieras som:

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

Med CalculatedContent-mallarna kan du matcha och extrahera värden från ett enhetsmeddelande som lästs från en Azure Event Hubs händelsehubb via följande uttryck:

Element Beskrivning JSONPath-uttrycksexempel Exempel på JMESPath-uttryck
typeMatchExpression Uttrycket som MedTech-tjänsten utvärderar mot nyttolasten för enhetsmeddelanden. Om tjänsten hittar ett matchande tokenvärde anser den att mallen är en matchning. Tjänsten utvärderar alla senare uttryck mot det extraherade tokenvärdet som matchas här. $..[?(@heartRate)] [Body][?contains(keys(@), `heartRate`)] \| @[0]
deviceIdExpression Uttrycket för att extrahera enhetsidentifieraren. $.matchedToken.deviceId @.matchedToken.deviceId
timestampExpression Uttrycket för att extrahera tidsstämpelvärdet för måttets OccurrenceTimeUtc värde. $.matchedToken.endDate @.matchedToken.endDate
patientIdExpression Uttrycket för att extrahera patientidentifieraren. Krävs när MedTech-tjänsternas lösningstyp är inställd på Skapa och valfritt när MedTech-tjänstens lösningstyp är inställd på Lookup. $.matchedToken.patientId @.matchedToken.patientId
encounterIdExpression Valfritt: Uttrycket för att extrahera identifieringsidentifieraren för påträffa. $.matchedToken.encounterId @.matchedToken.encounterId
correlationIdExpression Valfritt: Uttrycket för att extrahera korrelationsidentifieraren. Du kan använda dessa utdata för att gruppera värden i en enda observation i FHIR-målmappningen. $.matchedToken.correlationId @.matchedToken.correlationId
values[].valueExpression Uttrycket för att extrahera det önskade värdet. $.matchedToken.heartRate @.matchedToken.heartRate

Anteckning

Lösningstypen anger hur MedTech-tjänsten associerar enhetsdata med enhetsresurser och patientresurser. MedTech-tjänsten läser enhets- och patientresurser från FHIR-tjänsten med enhetsidentifierare och patientidentifierare. Om en identifierare för påträffas har angetts och extraherats från nyttolasten för enhetsdata länkas den till observationen om det finns ett påträff på FHIR-tjänsten med den identifieraren. Om påträffingsidentifieraren har normaliserats, men det inte finns något FHIR-möte med den mötesidentifieraren, utlöses ett FhirResourceNotFound-undantag . Mer information om hur du konfigurerar Lösningstypen för MedTech-tjänsten finns på fliken Konfigurera mål.

Uttrycksspråk

När du anger vilket språk som ska användas för uttrycket är följande värden giltiga:

Uttrycksspråk Värde
JSONPath JsonPath
JMESPath JmesPath

Eftersom JSONPath är standarduttrycksspråket behöver du inte inkludera uttrycksspråket i en CalculatedContent-mall.

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

Du kan också uttryckligen ange standarduttrycksspråket för en CalculatedContent-mall med hjälp av parametern defaultExpressionLanguage :

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

Tips

Mer information om JSONPath finns i JSONPath – XPath för JSON. CalculatedContent-mallar använder JSON .NET-implementeringen för att matcha JSONPath-uttryck.

Mer information om JMESPath finns i JMESPath Specification. CalculatedContent-mallar använder JMESPath .NET-implementeringen för att matcha JMESPath-uttryck.

Anpassade funktioner

Det finns också en uppsättning anpassade funktioner för MedTech-tjänsten. MedTech-tjänstens anpassade funktioner ligger utanför de funktioner som tillhandahålls som en del av JMESPath-specifikationen. Mer information om anpassade Funktioner för MedTech-tjänsten finns i Så här använder du anpassade funktioner med Enhetsmappning för MedTech-tjänsten.

Exempel

När MedTech-tjänsten bearbetar ett enhetsmeddelande används mallarna i CollectionContent för att utvärdera meddelandet. typeMatchExpression Används för att avgöra om mallen ska användas för att skapa ett normaliserat meddelande från enhetsmeddelandet. typeMatchExpression Om värdet utvärderas till true deviceIdExpressionanvänds värdena , timestampExpressionoch valueExpression för att hitta och extrahera JSON-värdena från enhetsmeddelandet och skapa ett normaliserat meddelande. I det här exemplet skrivs alla uttryck i JSONPath, men det skulle vara giltigt att skriva alla uttryck i JMESPath. Det är upp till mallförfattaren att avgöra vilket uttrycksspråk som passar bäst.

Tips

Du kan använda Felsökningsprogrammet för MedTech-tjänstmappning för att få hjälp med att skapa, uppdatera och felsöka MedTech-tjänstenheten och FHIR-målmappningarna. Med felsökningsprogrammet Mappning kan du enkelt visa och göra infogade justeringar i realtid, utan att behöva lämna Azure Portal. Mappningsfelsökaren kan också användas för att ladda upp testenhetsmeddelanden för att se hur de ska se ut efter att ha bearbetats till normaliserade meddelanden och omvandlats till FHIR-observationer.

I det här exemplet använder vi ett enhetsmeddelande som samlar heartRate in data:

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

Händelsehubben berikar enhetsmeddelandet innan MedTech-tjänsten läser enhetsmeddelandet från händelsehubben:

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

Vi använder den här enhetsmappningen för normaliseringssteget:

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

Viktigt

MedTech-tjänsten utvärderas typeMatchExpression mot nyttolasten för inkommande enhetsdata. Om tjänsten hittar ett matchande tokenvärde anser den att mallen är en matchning.

MedTech-tjänsten utvärderar alla senare uttryck mot ett nytt tokenvärde. Det här nya tokenvärdet innehåller både den ursprungliga nyttolasten för enhetsdata och det extraherade tokenvärdet som matchas här.

På så sätt är den ursprungliga nyttolasten för enhetsdata och det matchade objektet tillgängliga för varje senare uttryck. Det extraherade tokenvärdet är tillgängligt som egenskapen 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"
    }
}

Det resulterande normaliserade meddelandet ser ut så här efter normaliseringssteget:

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

Tips

Mer information om hur du felsöker distributionsfel för MedTech-tjänsten finns i Felsöka distributionsfel för MedTech-tjänsten.

Mer information om hur du felsöker MedTech-tjänstfel finns i Felsöka fel med hjälp av MedTech-tjänstloggarna.

Nästa steg

I den här artikeln har du lärt dig hur du använder CalculatedContent-mallar med enhetsmappningen för MedTech-tjänsten.

Mer information om hur du använder anpassade Funktioner för MedTech-tjänsten finns i

En översikt över FHIR-målmappningen för MedTech-tjänsten finns i

En översikt över scenariobaserade mappningsexempel för MedTech-tjänsten finns i

FHIR® är ett registrerat varumärke som tillhör Health Level Seven International, registrerat i U.S. Trademark Office, och används med tillstånd.