MedTech サービス デバイス マッピングでカスタム関数を使用する方法
注意
Fast Healthcare Interoperability Resources (FHIR®) は、オープンな医療仕様です。
JMESPath を式言語として使用する場合、多くの関数を使用できます。 JMESPath 仕様の一部として使用できる組み込み関数に加えて、さらに多くのカスタム関数を使用することもできます。 この記事では、MedTech サービス デバイス マッピングで MedTech サービス固有のカスタム関数を使用する方法について説明します。
ヒント
MedTech サービス マッピング デバッガー を使用して、MedTech サービス デバイスと FHIR 宛先マッピングの作成、更新、トラブルシューティングを支援できます。 マッピング デバッガーを使用すると、Azure portalを離れることなく、リアルタイムで簡単にインライン調整を表示および行うことができます。 マッピング デバッガーは、テスト デバイス メッセージをアップロードするためにも使用して、正規化されたメッセージに処理され、FHIR Observations に変換された後にどのように見えるかを確認できます。
関数シグネチャ
各関数には、JMESPath 仕様に従うシグネチャがあります。 この署名は、次のように表すことができます。
return_type function_name(type $argname)
シグネチャは、引数の有効な型を示します。 引数に無効な型が渡されると、エラーが発生します。
重要
数学関連の関数を実行する場合、最終的な結果は C# の長い 値に収まる必要があります。 最終的な結果が C# の長い値に収まらない場合は、数学的エラーが発生します。
前述のように、これらの関数は、式言語として 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 の仕様に関するページを参照してください。
例外処理
例外は、デバイス データ処理ライフサイクル内のさまざまな時点で発生する可能性があります。 例外が発生する可能性があるさまざまなポイントを次に示します。
アクション | タイミング | デバイス マッピングの解析中に発生する可能性がある例外 | 結果 |
---|---|---|---|
デバイス マッピングの解析 | デバイス メッセージの新しいバッチを受信するたびに、デバイス マッピングが読み込まれて解析されます。 | デバイス マッピングの解析に失敗しました。 | システムは、解析が成功するまで、最新のデバイス マッピングの再読み込みと解析を試みます。 解析が成功するまで、新しいデバイス メッセージは処理されません。 |
デバイス マッピングの解析 | デバイス メッセージの新しいバッチを受信するたびに、デバイス マッピングが読み込まれて解析されます。 | 式の解析に失敗しました。 | システムは、解析が成功するまで、最新のデバイス マッピングの再読み込みと解析を試みます。 解析が成功するまで、新しいデバイス メッセージは処理されません。 |
関数の実行 | デバイス メッセージ内のデバイス データに対して関数が実行されるたびに。 | 入力デバイスデータが関数シグネチャのデータと一致しません。 | システムは、そのデバイス メッセージの処理を停止します。 デバイス メッセージは再試行されません。 |
関数の実行 | デバイス メッセージ内のデバイス データに対して関数が実行されるたびに。 | 関数の説明に記載されているその他の例外。 | システムは、そのデバイス メッセージの処理を停止します。 デバイス メッセージは再試行されません。 |
数学関数
add
number add(number $left, number $right)
左引数を右引数に追加した結果を返します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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)
左引数を右引数で除算した結果を返します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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)
左引数と右引数を乗算した結果を返します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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)
左引数を右引数の累乗に引き上げた結果を返します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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)
左引数から右引数を減算した結果を返します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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)
の値 toInsert
を文字列 に挿入して、新しい文字列を生成します original
。 文字列は、文字列 original
内の位置pos
に挿入されます。
位置引数が 0 から始まる場合、0 の位置は文字列内の最初の文字を参照します。
指定された位置引数が の長さの original
範囲外の場合は、エラーが発生します。
例:
種類 | 正規表現 | 結果 |
---|---|---|
N/A | 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 準拠のタイム スタンプを生成します。 タイムスタンプは、エポック (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 準拠のタイム スタンプを生成します。 タイムスタンプは、エポック (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 サービス デバイス マッピングの概要については、次を参照してください。
MedTech サービス FHIR 変換先マッピングの概要については、次を参照してください。
MedTech サービスのシナリオ ベースのマッピング のサンプルの概要については、次を参照してください。
FHIR®は、米国商標庁に登録されている Health Level Seven International の登録商標であり、その許可を得て使用しています。