MedTech 서비스 디바이스 매핑과 함께 CalculatedContent 템플릿을 사용하는 방법

이 문서에서는 MedTech 서비스 디바이스 매핑 내에서 CalculatedContent 템플릿을 사용하는 방법을 간략하게 설명합니다.

CalculatedContent 템플릿 기본 사항

MedTech 서비스 CalculatedContent 템플릿은 JSONPath 및 JMESPath의 두 가지 JSON 식 언어를 지원합니다. 식은 지정된 JSON 디바이스 메시지(예: TypeMatchExpression)와 함께 사용할 템플릿을 식별하고 정규화된 메시지(예: TimestampExpression, DeviceIdExpression 등)를 만드는 데 필요한 특정 값을 추출하는 데 사용됩니다.

참고 항목

식 언어를 정의하지 않으면 MedTech 서비스 디바이스 매핑 템플릿은 해당 템플릿에 대해 구성된 기본 식 언어를 사용합니다. 기본값은 JSONPath이지만 필요한 경우 덮어쓸 수 있습니다.

식은 다음과 같이 정의됩니다.

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

다음 예에서 typeMatchExpression은 다음과 같이 정의됩니다.

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

CalculatedContent 템플릿을 사용하면 다음 식을 통해 Azure Event Hubs Event Hubs에서 읽은 디바이스 메시지에서 값을 일치시키고 추출할 수 있습니다.

요소 설명 JSONPath 식 예 JMESPath 식 예
typeMatchExpression MedTech 서비스가 디바이스 메시지 페이로드에 대해 평가하는 식입니다. 서비스가 일치하는 토큰 값을 찾으면 템플릿이 일치하는 것으로 간주합니다. 서비스는 여기서 일치한 추출된 토큰 값에 대해 모든 이후 식을 평가합니다. $..[?(@heartRate)] [Body][?contains(keys(@), `heartRate`)] \| @[0]
deviceIdExpression 디바이스 식별자를 추출하는 식입니다. $.matchedToken.deviceId @.matchedToken.deviceId
timestampExpression 측정값의 OccurrenceTimeUtc 값에 대해 타임스탬프 값을 추출하는 식입니다. $.matchedToken.endDate @.matchedToken.endDate
patientIdExpression 환자 식별자를 추출하는 식입니다. MedTech 서비스의 해결 유형만들기로 설정된 경우에는 필수이고, MedTech 서비스의 해결 유형조회로 설정된 경우 선택 사항입니다. $.matchedToken.patientId @.matchedToken.patientId
encounterIdExpression 선택 사항: 만남 식별자를 추출하는 식입니다. $.matchedToken.encounterId @.matchedToken.encounterId
correlationIdExpression 선택 사항: 상관 관계 식별자를 추출하는 식입니다. 이 출력을 사용하여 FHIR® 대상 매핑에서 값을 단일 관찰로 그룹화할 수 있습니다. $.matchedToken.correlationId @.matchedToken.correlationId
values[].valueExpression 원하는 값을 추출하는 식입니다. $.matchedToken.heartRate @.matchedToken.heartRate

참고 항목

해결 유형은 MedTech 서비스가 디바이스 리소스 및 환자 리소스와 디바이스 데이터를 연결하는 방법을 지정합니다. MedTech 서비스는 디바이스 식별자환자 ID를 사용하여 FHIR 서비스에서 디바이스 및 환자 리소스를 읽습니다. 디바이스 데이터 페이로드에서 encounter 식별자를 지정 및 추출하는 경우, 해당 식별자를 사용하여 FHIR 서비스에 encounter가 있는지 여부에 대한 관찰에 연결됩니다. encounter 식별자는 정규화되었지만 해당 encounter 식별자가 있는 FHIR encounter가 없으면 FhirResourceNotFound 예외가 발생합니다. MedTech 서비스 해결 형식 구성에 대한 자세한 내용은 대상 탭 구성을 참조하세요.

식 언어

식에 사용할 언어를 지정하는 경우 다음 값이 유효합니다.

식 언어
JSONPath JsonPath
JMESPath JmesPath

JSONPath는 기본 식 언어이므로 CalculatedContent 템플릿 내에 식 언어를 포함할 필요가 없습니다.

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

defaultExpressionLanguage 매개 변수를 사용하여 CalculatedContent 템플릿에 대한 기본 식 언어를 명시적으로 설정할 수도 있습니다.

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

JSONPath에 대한 자세한 내용은 JSONPath - JSON용 XPath를 참조하세요. CalculatedContent 템플릿은 JSONPath 식을 확인하기 위해 JSON .NET 구현을 사용합니다.

JMESPath에 대한 자세한 내용은 JMESPath 사양을 참조하세요. CalculatedContent 템플릿은 JMESPath 식을 확인하기 위해 JMESPath .NET 구현을 사용합니다.

사용자 지정 함수

MedTech 서비스에 대한 일련의 사용자 지정 함수도 사용할 수 있습니다. MedTech 서비스 사용자 지정 함수는 JMESPath 사양의 일부로 제공되는 함수 외부에 있습니다. MedTech 서비스 사용자 지정 함수에 대한 자세한 내용은 MedTech 서비스 디바이스 매핑에 사용자 지정 함수를 사용하는 방법을 참조하세요.

예시

MedTech 서비스가 디바이스 메시지를 처리할 때, CollectionContent의 템플릿을 사용하여 메시지를 평가합니다. typeMatchExpression은 디바이스 메시지에서 정규화된 메시지를 만들 때 템플릿을 사용해야 하는지 여부를 결정하는 데 사용됩니다. typeMatchExpression이 true로 평가되면 deviceIdExpression, timestampExpressionvalueExpression 값을 사용하여 디바이스 메시지에서 JSON 값을 찾아 추출하고 정규화된 메시지를 만듭니다. 이 예제에서는 모든 식이 JSONPath로 작성되지만 JMESPath에서 모든 식을 작성하는 것이 합당합니다. 가장 적합한 식 언어를 결정할 책임은 템플릿 작성자에게 있습니다.

MedTech 서비스 매핑 디버거를 사용하여 MedTech 서비스 디바이스 및 FHIR 대상 매핑을 만들고 업데이트하고 문제를 해결하도록 지원할 수 있습니다. 매핑 디버거를 사용하면 Azure Portal을 벗어나지 않고도 실시간으로 인라인을 쉽게 보고 조정할 수 있습니다. 매핑 디버거는 테스트 디바이스 메시지를 업로드하여 해당 메시지가 정규화된 메시지로 처리되고 FHIR 관찰로 변환된 후 어떻게 표시되는지 확인할 수도 있습니다.

이 예에서는 heartRate 데이터를 캡처하는 디바이스 메시지를 사용하고 있습니다.

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

이벤트 허브는 MedTech 서비스가 이벤트 허브에서 디바이스 메시지를 읽기 전에 디바이스 메시지를 보강합니다.

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

정규화 단계에서는 이 디바이스 매핑을 사용하고 있습니다.

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

MedTech 서비스는 들어오는 디바이스 데이터 페이로드에 대해 typeMatchExpression을 평가합니다. 서비스가 일치하는 토큰 값을 찾으면 템플릿이 일치하는 것으로 간주합니다.

MedTech 서비스는 새 토큰 값에 대해 이후의 모든 식을 평가합니다. 이 새 토큰 값에는 원래 디바이스 데이터 페이로드와 여기에서 일치된 추출된 토큰 값이 모두 포함됩니다.

이러한 방식으로 원래 디바이스 데이터 페이로드 및 일치된 개체는 이후의 각 식에서 사용할 수 있습니다. 추출된 토큰 값은 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"
    }
}

이 결과물인 정규화된 메시지는 정규화 단계 후 다음과 같습니다.

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

MedTech 서비스 배포 오류에 대한 해결 지원은 MedTech 서비스 배포 오류 문제 해결을 참조하세요.

MedTech 서비스 오류에 대한 해결 지원은 MedTech 서비스 로그를 사용하여 오류 문제 해결을 참조하세요.

다음 단계

MedTech 서비스 디바이스 매핑과 함께 사용자 지정 함수를 사용하는 방법

FHIR 대상 매핑 개요

MedTech 서비스 시나리오 기반 매핑 샘플 개요

참고 항목

FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.