Share via


MedTech サービス デバイス マッピングで IotJsonPathContent テンプレートを使用する方法

注意

Fast Healthcare Interoperability Resources (FHIR®) は、オープンな医療仕様です。

この記事では、MedTech サービス デバイス マッピング内で IotJsonPathContent テンプレートを使用する方法の概要について説明します。

IotJsonPathContent テンプレートの基本

IotJsonPathContent テンプレートは、MedTech サービスがAzure IoT Hubからルーティングされたデバイス メッセージを取り込むときに使用できます。 デバイス マッピング内で IotJsonPathContent テンプレートを使用すると、MedTech サービスは IoT ハブによって提供されるメタデータからデバイス ID と測定タイムスタンプを抽出します。 DeviceIdExpression と TimestampExpression は、IotJsonPathContent テンプレートに含めることはできません。

MedTech サービス IotJsonPathContent テンプレートでは、JSON 式言語 JSONPath がサポートされています。 式は、特定の JSON デバイス メッセージで使用するテンプレート (TypeMatchExpression など) を識別し、正規化されたメッセージを作成するために必要な特定の値 (PatientIdExpression、ValueExpression など) を抽出するために使用されます。 IotJsonPathContent テンプレートは、DeviceIdExpression と TimestampExpression がサポートされていない点を除き、 CalculatedContent テンプレート と似ています。

注意

JMESPath は、IotJsonPathContent テンプレートではサポートされていません。

式は次のように定義されます。

<name of expression> : <the expression>

次の例では、 typeMatchExpression は として定義されています。

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

MedTech サービスが IoT ハブからデバイス メッセージを取り込むよう設定されている場合は、IotJsonPathContent テンプレートを使用する必要はありません。 CalculatedContent テンプレートは、DeviceIdExpression と TimestampExpression を正しく定義すると仮定して使用できます。

IotJsonPathContent テンプレートを使用すると、次の式を使用して、Azure Event Hubs イベント ハブから読み取られたデバイス メッセージに対して値を照合したり、デバイス メッセージから値を抽出したりできます。

要素 説明 JSONPath 式の例
typeMatchExpression MedTech サービスがデバイス メッセージ ペイロードに対して評価する式。 サービスが一致するトークン値を見つけた場合、テンプレートは一致と見なされます。 $..[?(@heartRate)]
patientIdExpression 患者識別子を抽出する式。 MedTech サービスの解像度の種類[作成] に設定されている場合は必須、MedTech サービスの解決の種類Lookup に設定されている場合は省略可能です。 $.SystemProperties.iothub-connection-device-id
encounterIdExpression 省略可能: 検出識別子を抽出する式。 $.Body.encounterId
correlationIdExpression 省略可能: 関連付け識別子を抽出する式。 この出力を使用して、FHIR 変換先マッピングで値を 1 つの観測値にグループ化できます。 $.Body.correlationId
values[].valueExpression 必要な値を抽出する式。 $.Body.heartRate

重要

MedTech サービスは、IoT ハブで定義されているデバイス ID を FHIR リソース デバイス識別子として使用します。 MedTech サービスが LOOKUP の ID 解決の種類を使用するように設定されている 場合、デバイス識別子が一致するデバイス リソースが FHIR サービスに存在 する必要があります 。または、デバイス メッセージの処理時にエラーが発生します。 MedTech サービスの ID 解決の種類が [作成] に設定されている場合は、 patientIdExpression 新しい Patient リソースと Device リソースがまだ存在しない場合に作成できるように、 をデバイス マッピングに含める必要があります。

注意

解決策の種類は、MedTech サービスがデバイス データをデバイス リソースと Patient リソースに関連付ける方法を指定します。 MedTech サービスは、デバイス識別子と患者識別子を使用して、FHIR サービスから Device リソースと Patient リソースを読み取ります。 検出識別子が指定され、デバイス データ ペイロードから抽出された場合、その識別子を持つ FHIR サービスに遭遇が存在する場合、その識別子は監視にリンクされます。 検出識別子が正常に正規化されていても、その検出識別子と共に FHIR 検出が存在しない場合は、FhirResourceNotFound 例外がスローされます。 MedTech サービス の解決の種類の構成の詳細については、「 宛先タブを構成する」を参照してください。

式の言語

JSONPath は既定の式言語であり、IotJsonPathContent テンプレート内に式言語を含めることはサポートされていません。 式オブジェクトで式言語を指定しようとすると、式オブジェクトを含む IotJsonPathContent テンプレートは失敗します。

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

ヒント

JSONPath の詳細については、「 JSONPath - JSON 用 XPath」を参照してください。 IotJsonPathContent テンプレートは、JSONPath 式を解決するために JSON .NET 実装 を使用します。

MedTech サービスがデバイス メッセージを処理している場合、CollectionContent 内のテンプレートを使用してメッセージを評価します。 typeMatchExpressionは、デバイス メッセージから正規化されたメッセージを作成するためにテンプレートを使用する必要があるかどうかを判断するために使用されます。 が typeMatchExpression true に評価された場合、値を valueExpression 使用してデバイス メッセージから JSON 値を検索して抽出し、正規化されたメッセージを作成します。

ヒント

Azure IoT Hub拡張機能を備えた Visual Studio Code は、テストとトラブルシューティングのために IoT デバイス メッセージを IoT ハブに送信するための推奨される方法です。

MedTech サービス マッピング デバッガー を使用して、MedTech サービス デバイスと FHIR 宛先マッピングの作成、更新、トラブルシューティングを支援できます。 マッピング デバッガーを使用すると、Azure portalを離れることなく、リアルタイムで簡単にインライン調整を表示および行うことができます。 マッピング デバッガーは、テスト デバイス メッセージをアップロードするためにも使用して、正規化されたメッセージに処理され、FHIR Observations に変換された後にどのように見えるかを確認できます。

この例では、データをキャプチャしているデバイス メッセージを heartRate 使用しています。

{
    "PatientId": "patient1",
    "HeartRate" : "78"
}

注意

device-to-cloud (D2C) メッセージでのデバイス スプーフィングを回避するために、イベント ハブにルーティングする前に、すべてのデバイス メッセージを追加のプロパティでエンリッチAzure IoT Hub。 例: プロパティ: iothub-creation-time-utc および SystemProperties: iothub-connection-device-id。 詳細については、「 スプーフィング対策のプロパティ」を参照してください。

patientIdExpression は、 作成 モードの MedTech サービスにのみ必要です。ただし、 Lookup が 使用されている場合は、一致するデバイス識別子を持つデバイス リソースが宛先 FHIR サービスに存在する必要があります。 これらの例では、MedTech サービスが 作成 モードであることを前提としています。 [ 作成 ] プロパティと [ 参照先] プロパティの詳細については、「 [変換先] タブを構成する」を参照してください。

IoT ハブは、MedTech サービスがイベント ハブからデバイス メッセージを読み取る前に、デバイス メッセージをエンリッチしてイベント ハブにルーティングします。

{
    "Body": {
        "PatientId": "patient1",
        "HeartRate": "78"
    },
    "SystemProperties": {
        "iothub-enqueuedtime": "2023-07-25T20:41:26.046Z",
        "iothub-connection-device-id": "sampleDeviceId"
    },
    "Properties": {
        "iothub-creation-time-utc": "2023-07-25T20:41:26.046Z"
    }
}   

正規化ステージでは、次のデバイス マッピングを使用しています。

{
    "templateType": "CollectionContent",
    "template": [
        {
            "templateType": "IotJsonPathContent",
            "template": {
                "typeName": "HeartRate",
                "typeMatchExpression": "$..[?(@Body.HeartRate)]",
                "patientIdExpression": "$.Body.PatientId",
                "values": [
                    {
                        "required": true,
                        "valueExpression": "$.Body.HeartRate",
                        "valueName": "HeartRate"
                    }
                ]
            }
        }
    ]    
}

正規化されたメッセージは、正規化ステージの後に次のようになります。

{
    "type": "HeartRate",
    "occurrenceTimeUtc": "2023-07-25T20:41:26.046Z",
    "deviceId": "sampleDeviceId",
    "patientId": "patient1",
    "properties": [
        {
            "name": "HeartRate",
            "value": "78"
        }
    ]
}

ヒント

一般的な MedTech サービスのデプロイ エラーの修正については、「 MedTech サービスのデプロイ エラーのトラブルシューティング」を参照してください。

MedTech サービス エラーの修正については、「 MedTech サービス ログを使用したエラーのトラブルシューティング」を参照してください。

次のステップ

この記事では、MedTech サービス デバイス マッピングで IotJsonPathContent テンプレートを使用する方法について説明しました。

Azure IoT Hub経由でデバイス メッセージ ルーティングが有効になっている MedTech サービスをデプロイするには、次を参照してください。

MedTech サービス FHIR 変換先マッピングの概要については、次を参照してください。

MedTech サービスのシナリオ ベースのマッピングのサンプルの概要については、次を参照してください。

FHIR®は、米国商標庁に登録されている Health Level Seven International の登録商標であり、その許可を得て使用しています。