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

JMESPath를 식 언어로 사용할 때 많은 함수를 사용할 수 있습니다. JMESPath 사양의 일부로 사용할 수 있는 기본 제공 함수 외에도 더 많은 사용자 지정 함수를 사용할 수 있습니다. 이 문서에서는 MedTech 서비스 디바이스 매핑과 함께 MedTech 서비스 관련 사용자 지정 함수를 사용하는 방법을 설명합니다.

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

함수 시그니처

각 함수에는 JMESPath 사양을 따르는 시그니처가 있습니다. 이 시그니처는 다음과 같이 나타낼 수 있습니다.

return_type function_name(type $argname)

시그니처는 인수에 유효한 형식을 나타냅니다. 인수에 잘못된 형식이 전달되면 오류가 발생합니다.

Important

수학 관련 함수가 완료되면 최종 결과가 C# long 값 크기에 맞습니다. 최종 결과가 C# long 값 크기에 맞지 않으면 수학 오류가 발생합니다.

앞에서 설명한 대로 이러한 함수는 JmesPath를 식 언어로 지정할 때만 사용할 수 있습니다. 기본적으로 식 언어는 JsonPath입니다. 식을 정의할 때 식 언어를 변경할 수 있습니다.

예시:

"templateType": "CalculatedContent",
    "template": {
        "typeName": "heartrate",
        "patientIdExpression": {
            "value": "insertString('123', 'patient', `0`) ",
            "language": "JmesPath"
        },
        ...
    }

이 예제에서는 insertString 식을 사용하여 환자 ID patient123을 생성합니다.

리터럴 값

상수 값을 함수에 제공할 수 있습니다.

  • 숫자 값은 백틱(`)으로 묶어야 합니다.
    • 예: add(`10`, `10`)
  • 문자열 값은 작은따옴표(')로 묶어야 합니다.
    • 예: insertString('mple', 'sa', `0`)

자세한 내용은 JMESPath 사양을 참조하세요.

예외 처리

예외는 디바이스 데이터 처리 수명 주기 내의 다양한 시점에서 발생할 수 있습니다. 예외가 발생할 수 있는 다양한 시점은 다음과 같습니다.

작업 When 디바이스 매핑을 구문 분석하는 동안 발생할 수 있는 예외 결과
디바이스 매핑 구문 분석 디바이스 메시지의 새 일괄 처리가 수신될 때마다 디바이스 매핑이 로드되고 구문 분석됩니다. 디바이스 매핑을 구문 분석하지 못했습니다. 시스템은 구문 분석이 성공할 때까지 최신 디바이스 매핑을 다시 로드하고 구문 분석하려고 시도합니다. 구문 분석이 성공할 때까지 새 디바이스 메시지는 처리되지 않습니다.
디바이스 매핑 구문 분석 디바이스 메시지의 새 일괄 처리가 수신될 때마다 디바이스 매핑이 로드되고 구문 분석됩니다. 식을 구문 분석하지 못했습니다. 시스템은 구문 분석이 성공할 때까지 최신 디바이스 매핑을 다시 로드하고 구문 분석하려고 시도합니다. 구문 분석이 성공할 때까지 새 디바이스 메시지는 처리되지 않습니다.
함수 실행 디바이스 메시지 내의 디바이스 데이터에 대해 함수가 실행될 때마다 입력 디바이스 데이터는 함수 시그니처의 데이터와 일치하지 않습니다. 시스템에서 해당 디바이스 메시지의 처리를 중지합니다. 디바이스 메시지가 다시 시도되지 않습니다.
함수 실행 디바이스 메시지 내의 디바이스 데이터에 대해 함수가 실행될 때마다 함수 설명에 나열된 다른 예외입니다. 시스템에서 해당 디바이스 메시지의 처리를 중지합니다. 디바이스 메시지가 다시 시도되지 않습니다.

수학 함수

추가

number add(number $left, number $right)

오른쪽 인수에 왼쪽 인수를 추가한 결과를 반환합니다.

예:

조건 결과
해당 없음 add(`10`, `10`) 20
{"left": 40, "right": 50} add(left, right) 90
{"left": 0, "right": 50} add(left, right) 50

divide

number divide(number $left, number $right)

왼쪽 인수를 오른쪽 인수로 나눈 결과를 반환합니다.

예:

조건 결과
해당 없음 divide(`10`, `10`) 1
{"left": 40, "right": 50} divide(left, right) 0.8
{"left": 0, "right": 50} divide(left, right) 0
{"left": 50, "right": 0} divide(left, right) 수학 오류: 0으로 나누기

multiply

number multiply(number $left, number $right)

왼쪽 인수에 오른쪽 인수를 곱한 결과를 반환합니다.

예:

조건 결과
해당 없음 multiply(`10`, `10`) 100
{"left": 40, "right": 50} multiply(left, right) 2000
{"left": 0, "right": 50} multiply(left, right) 0

pow

number pow(number $left, number $right)

왼쪽 인수의 오른쪽 인수 거듭제곱 값을 구한 결과를 반환합니다.

예:

조건 결과
해당 없음 pow(`10`, `10`) 10000000000
{"left": 40, "right": 50} pow(left, right) 수학 오류: 오버플로
{"left": 0, "right": 50} pow(left, right) 0
{"left": 100, "right": 0.5} pow(left, right) 10

subtract

number subtract(number $left, number $right)

왼쪽 인수에서 오른쪽 인수를 뺀 결과를 반환합니다.

예:

조건 결과
해당 없음 subtract(`10`, `10`) 0
{"left": 40, "right": 50} subtract(left, right) -10
{"left": 0, "right": 50} subtract(left, right) -50

문자열 함수

insertString

string insertString(string $original, string $toInsert, number pos)

문자열 originaltoInsert 값을 삽입하여 새 문자열을 생성합니다. 이 문자열은 문자열 original 내의 위치 pos에 삽입됩니다.

위치 인수가 0부터 시작하는 경우 0의 위치는 문자열 내의 첫 번째 문자를 나타냅니다.

제공된 위치 인수가 original의 길이 범위를 벗어나면 오류가 발생합니다.

예:

조건 결과
해당 없음 insertString('mple', 'sa', 0) "sample"
{"original": "mple", "toInsert": "sa", "pos": 0} insertString(original, toInsert, pos) "sample"
{"original": "suess", "toInsert": "cc", "pos": 2} insertString(original, toInsert, pos) "success"
{"original": "myString", "toInsert": "!!", "pos": 8} insertString(original, toInsert, pos) "myString!!"

날짜 함수

fromUnixTimestamp

string fromUnixTimestamp(number $unixTimestampInSeconds)

지정된 Unix 타임스탬프에서 ISO 8061 호환 타임스탬프를 생성합니다. 타임스탬프는 Epoch(1970년 1월 1일) 이후부터의 초 수로 표시됩니다.

예:

조건 결과
{"unix": 1625677200} fromUnixTimestamp(unix) "2021-07-07T17:00:00+0"
{"unix": 0} fromUnixTimestamp(unix) "1970-01-01T00:00:00+0"

fromUnixTimestampMs

string fromUnixTimestampMs(number $unixTimestampInMs)

지정된 Unix 타임스탬프에서 ISO 8061 호환 타임스탬프를 생성합니다. 타임스탬프는 Epoch(1970년 1월 1일) 이후부터의 밀리초 수로 표시됩니다.

예:

조건 결과
{"unix": 1626799080000} fromUnixTimestampMs(unix) "2021-07-20T16:38:00+0"
{"unix": 0} fromUnixTimestampMs(unix) "1970-01-01T00:00:00+0"

MedTech 서비스 로그를 사용하여 오류를 수정하는 데 도움을 받으려면 MedTech 서비스 문서 MedTech 서비스 로그를 사용하여 오류 해결을 참조하세요.

다음 단계

MedTech 서비스 디바이스 매핑 개요

MedTech 서비스 FHIR 대상 매핑 개요

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

참고 항목

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