カスタム スキーマ パーサーの例

このページには、HL7v2 ストアでカスタム スキーマ パーサーを構成するタイミングと方法を示す、さまざまなユースケースの例が含まれています。 各ユースケースには、カスタム スキーマ パーサーが基になる HL7v2 メッセージが含まれています。

カスタム セグメント ターミネータとカスタム フィールド

このセクションのサンプルでは、次の方法で標準ではないサンプル メッセージを使用します。

  • サンプル メッセージのセグメント区切り文字は、標準の改行(\r)ではなく新行(\n)です。
  • サンプル メッセージには、追加のサブフィールド(URL https://example.com/healthcare-api/ を指定するカスタム フィールド)を含むソフトウェア(SFT)セグメントがあります。
MSH|^~\&|My EHR|My Test Facility||My EHR Facility|20150926140551||ORU^R01^ORU_R01|My-LOI_5.0_1.1-NG|T|2.5.1|||AL|AL|||||\n
SFT|Google^D|v1|Healthcare API|1||20190601|https://example.com/healthcare-api/\n
PID|1||PATID5421^^^My MPI^MR||Zhang^Sally^Brian^^^^L||19840611|F||2106-3^White^HL70005|123 Main Street^^Mountain Springs^CO^80439^^H||^PRN^PH^^^203^2290210|||||||||N^Not Hispanic or Latino^HL70189\n
ORC|RE|833582639|3266238193||CM||||20101234567890\n
OBR|1|833582639|3266238193|us-0005^Vital Signs^WinPath^^||20101234567890|20101234567890|||||||20101234567890||||||||20101234567890|||F||1\n
OBX|1|NM|tt-0005-07^MDC_PULS_RATE_NON_INV^MDC^^||52.31|MDC_DIM_BEAT_PER_MIN|50-200||||F|||20101234567890||\n
OBX|2|NM|tt-0005-12^PAIN LEVEL^L^^||1.71|/10|1-10||||F|||20101234567890||\n
OBX|3|NM|tt-0005-09^MDC_TEMP^MDC^^||36.22|MDC_DIM_DEGC|36-38||||F|||20101234567890||\n

カスタム セグメント ターミネータを使用して HL7v2 ストアを更新する

メッセージによって、カスタム セグメント ターミネータとカスタム フィールドで提供されるサンプル メッセージのような標準ではないターミネータが使用される場合は、セグメント ターミネータを指定する必要があります。サンプル メッセージでは、セグメント・ターミネータとして標準ではない \n を使用します。

次のサンプルは、HL7v2 ストアを作成するときに ParserConfigsegmentTerminator を構成する方法を示しています。 セグメント ターミネータが Cg== に設定されます。これは \n の base64 エンコードです。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "parserConfig": {
    "segmentTerminator": "Cg=="
  }
}

カスタム スキーマを使用して HL7v2 ストアを更新する

JSON 形式で定義されたカスタム スキーマを使用して HL7v2 ストアを更新できます。SFT セグメントに追加のフィールドを含めるカスタム スキーマを構成したら、サンプル メッセージを取り込むことができます。カスタム・フィールドの指定については、SchemaPackage をご覧ください。

このサンプルで指定された構成では次の操作が行われます。

  • SFT セグメント定義を書き換えて、7 フィールドとして URL フィールドを持ちます。
  • version フィルタは、メッセージ セグメント ヘッダー(MSH)のフィールドに基づいて、カスタム スキーマが適用される受信メッセージを決定します。version フィルタを指定しない場合、スキーマは HL7v2 ストア内のすべての HL7v2 メッセージに適用されます。このサンプルでは、送信アプリケーション フィールドに My EHR が含まれている場合に、カスタム SFT セグメントが適用されます。
  • 追加フィールドのフィールドは、仕様のその他の部分との整合性を保つために 7 という名前が付いています。わかりやすいように URL と名前を付けることもできます。

カスタム スキーマでストアを更新するには、projects.locations.datasets.hl7V2Stores.patch メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID?updateMask=parser_config.schema"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID?updateMask=parser_config.schema" | Select-Object -Expand Content
このサンプルでは、パーサーの推奨の V3 バージョンを使用します。
{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "parserConfig": {
    "segmentTerminator": "Cg==",
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

カスタム スキーマを使用して HL7v2 メッセージを取り込み、解析する

次のサンプルは、カスタム セグメント ターミネータとカスタム フィールドから base-64 でエンコードされたバージョンの HL7v2 メッセージを取り込む方法を示しています。HL7v2 メッセージを取り込むには、projects.locations.datasets.hl7V2Stores.messages.ingest メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "message": {
    "data": "TVNIfF5+XCZ8TXkgRUhSfE15IFRlc3QgRmFjaWxpdHl8fE15IEVIUiBGYWNpbGl0eXwyMDE1MDkyNjE0MDU1MXx8T1JVXlIwMV5PUlVfUjAxfE15LUxPSV81LjBfMS4xLU5HfFR8Mi41LjF8fHxBTHxBTHx8fHx8ClNGVHxHb29nbGVeRHx2MXxIZWFsdGhjYXJlIEFQSXwxfHwyMDE5MDYwMXxodHRwczovL2V4YW1wbGUuY29tL2hlYWx0aGNhcmUvClBJRHwxfDQwOTAzMzEzMjBeXl5TSU1VTEFUT1IgTVJOXk1STnw0MDkwMzMxMzIwXl5eU0lNVUxBVE9SIE1STl5NUk5+Mjg4ODUyNzE1NF5eXk5IU05CUl5OSFNOTUJSfHxEYXZpc15DaGVsc2VhXl5eTWlzc15eQ1VSUkVOVHx8MjAwOTEwMTcwMDAwMDB8Rnx8fDE4MSBUcmFuc21pc3Npb24gUm9hZF5eTG9uZG9uXl5LRzIyIDlIWF5HQlJeSE9NRXx8MDIwIDgxMjIgOTk0N15IT01FfHx8fHx8fHx8SF5Bc2lhbiBvciBBc2lhbiBCcml0aXNoIC0gSW5kaWFuXl5efHx8fHx8fHwKUFYxfDF8SXxPdGhlcldhcmReTWFpblJvb21eQmVkIDFeU2ltdWxhdGVkIEhvc3BpdGFsXl5CRUReTWFpbiBCdWlsZGluZ140fDI4Ynx8fEMwMDNeQ3VkZHleS2V2aW5eXl5Ecl5eXkRSTkJSXlBSU05MXl5eT1JHRFJ8fHxVUk98fHx8fHx8fHwxMjUxMzI0NzIzMjIzODk0ODc4M15eXl52aXNpdGlkfHx8fHx8fHx8fHx8fHx8fHx8fHx8fEFSUklWRUR8fHwyMDIwMDUwNjE3MDgyMnx8Ck9SQ3xSRXw4MzM1ODI2Mzl8MzI2NjIzODE5M3x8Q018fHx8MjAyMDA1MDYxNzA4MjIKT0JSfDF8ODMzNTgyNjM5fDMyNjYyMzgxOTN8dXMtMDAwNV5WaXRhbCBTaWduc15XaW5QYXRoXl58fDIwMjAwNTA2MTcwODIyfDIwMjAwNTA2MTcwODIyfHx8fHx8fDIwMjAwNTA2MTcwODIyfHx8fHx8fHwyMDIwMDUwNjE3MDgyMnx8fEZ8fDEKT0JYfDF8VFh8dHQtMDAwNS0xMV5PeHlnZW5EZXZeV2VsY2hBbGx5bl5efHxWZW50dXJpfHx8fHx8Rnx8fDIwMjAwNTA2MTcwODIyfHwK"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "message": {
    "data": "TVNIfF5+XCZ8TXkgRUhSfE15IFRlc3QgRmFjaWxpdHl8fE15IEVIUiBGYWNpbGl0eXwyMDE1MDkyNjE0MDU1MXx8T1JVXlIwMV5PUlVfUjAxfE15LUxPSV81LjBfMS4xLU5HfFR8Mi41LjF8fHxBTHxBTHx8fHx8ClNGVHxHb29nbGVeRHx2MXxIZWFsdGhjYXJlIEFQSXwxfHwyMDE5MDYwMXxodHRwczovL2V4YW1wbGUuY29tL2hlYWx0aGNhcmUvClBJRHwxfDQwOTAzMzEzMjBeXl5TSU1VTEFUT1IgTVJOXk1STnw0MDkwMzMxMzIwXl5eU0lNVUxBVE9SIE1STl5NUk5+Mjg4ODUyNzE1NF5eXk5IU05CUl5OSFNOTUJSfHxEYXZpc15DaGVsc2VhXl5eTWlzc15eQ1VSUkVOVHx8MjAwOTEwMTcwMDAwMDB8Rnx8fDE4MSBUcmFuc21pc3Npb24gUm9hZF5eTG9uZG9uXl5LRzIyIDlIWF5HQlJeSE9NRXx8MDIwIDgxMjIgOTk0N15IT01FfHx8fHx8fHx8SF5Bc2lhbiBvciBBc2lhbiBCcml0aXNoIC0gSW5kaWFuXl5efHx8fHx8fHwKUFYxfDF8SXxPdGhlcldhcmReTWFpblJvb21eQmVkIDFeU2ltdWxhdGVkIEhvc3BpdGFsXl5CRUReTWFpbiBCdWlsZGluZ140fDI4Ynx8fEMwMDNeQ3VkZHleS2V2aW5eXl5Ecl5eXkRSTkJSXlBSU05MXl5eT1JHRFJ8fHxVUk98fHx8fHx8fHwxMjUxMzI0NzIzMjIzODk0ODc4M15eXl52aXNpdGlkfHx8fHx8fHx8fHx8fHx8fHx8fHx8fEFSUklWRUR8fHwyMDIwMDUwNjE3MDgyMnx8Ck9SQ3xSRXw4MzM1ODI2Mzl8MzI2NjIzODE5M3x8Q018fHx8MjAyMDA1MDYxNzA4MjIKT0JSfDF8ODMzNTgyNjM5fDMyNjYyMzgxOTN8dXMtMDAwNV5WaXRhbCBTaWduc15XaW5QYXRoXl58fDIwMjAwNTA2MTcwODIyfDIwMjAwNTA2MTcwODIyfHx8fHx8fDIwMjAwNTA2MTcwODIyfHx8fHx8fHwyMDIwMDUwNjE3MDgyMnx8fEZ8fDEKT0JYfDF8VFh8dHQtMDAwNS0xMV5PeHlnZW5EZXZeV2VsY2hBbGx5bl5efHxWZW50dXJpfHx8fHx8Rnx8fDIwMjAwNTA2MTcwODIyfHwK"
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "message": {
    "data": "TVNIfF5+XCZ8TXkgRUhSfE15IFRlc3QgRmFjaWxpdHl8fE15IEVIUiBGYWNpbGl0eXwyMDE1MDkyNjE0MDU1MXx8T1JVXlIwMV5PUlVfUjAxfE15LUxPSV81LjBfMS4xLU5HfFR8Mi41LjF8fHxBTHxBTHx8fHx8ClNGVHxHb29nbGVeRHx2MXxIZWFsdGhjYXJlIEFQSXwxfHwyMDE5MDYwMXxodHRwczovL2V4YW1wbGUuY29tL2hlYWx0aGNhcmUvClBJRHwxfDQwOTAzMzEzMjBeXl5TSU1VTEFUT1IgTVJOXk1STnw0MDkwMzMxMzIwXl5eU0lNVUxBVE9SIE1STl5NUk5+Mjg4ODUyNzE1NF5eXk5IU05CUl5OSFNOTUJSfHxEYXZpc15DaGVsc2VhXl5eTWlzc15eQ1VSUkVOVHx8MjAwOTEwMTcwMDAwMDB8Rnx8fDE4MSBUcmFuc21pc3Npb24gUm9hZF5eTG9uZG9uXl5LRzIyIDlIWF5HQlJeSE9NRXx8MDIwIDgxMjIgOTk0N15IT01FfHx8fHx8fHx8SF5Bc2lhbiBvciBBc2lhbiBCcml0aXNoIC0gSW5kaWFuXl5efHx8fHx8fHwKUFYxfDF8SXxPdGhlcldhcmReTWFpblJvb21eQmVkIDFeU2ltdWxhdGVkIEhvc3BpdGFsXl5CRUReTWFpbiBCdWlsZGluZ140fDI4Ynx8fEMwMDNeQ3VkZHleS2V2aW5eXl5Ecl5eXkRSTkJSXlBSU05MXl5eT1JHRFJ8fHxVUk98fHx8fHx8fHwxMjUxMzI0NzIzMjIzODk0ODc4M15eXl52aXNpdGlkfHx8fHx8fHx8fHx8fHx8fHx8fHx8fEFSUklWRUR8fHwyMDIwMDUwNjE3MDgyMnx8Ck9SQ3xSRXw4MzM1ODI2Mzl8MzI2NjIzODE5M3x8Q018fHx8MjAyMDA1MDYxNzA4MjIKT0JSfDF8ODMzNTgyNjM5fDMyNjYyMzgxOTN8dXMtMDAwNV5WaXRhbCBTaWduc15XaW5QYXRoXl58fDIwMjAwNTA2MTcwODIyfDIwMjAwNTA2MTcwODIyfHx8fHx8fDIwMjAwNTA2MTcwODIyfHx8fHx8fHwyMDIwMDUwNjE3MDgyMnx8fEZ8fDEKT0JYfDF8VFh8dHQtMDAwNS0xMV5PeHlnZW5EZXZeV2VsY2hBbGx5bl5efHxWZW50dXJpfHx8fHx8Rnx8fDIwMjAwNTA2MTcwODIyfHwK"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

そのうえで、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content
HL7v2 メッセージのスキーマは HL7v2 ストアのスキーマと一致するため、レスポンスには ORU_R01.SFT.7 フィールドにカスタム URL を持つ JSON 文字列が含まれています。
{
  "hl7Ack": "TVNIfF5+XCZ8fE15IEVIUiBGYWNpbGl0eXxNeSBFSFJ8TXkgVGVzdCBGYWNpbGl0eXwyMDIwMDUwNjIxNDY1MXx8QUNLfDcwY2IxMjJhLTUxYzctNGFkYy04NzFkLWZlMzJjZTgxYzI5OHxUfDIuNS4xDU1TQXxBQXxNeS1MT0lfNS4wXzEuMS1ORw==",
  "message": {
    "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID",
    "data": "TVNIfF5+XCZ8TXkgRUhSfE15IFRlc3QgRmFjaWxpdHl8fE15IEVIUiBGYWNpbGl0eXwyMDE1MDkyNjE0MDU1MXx8T1JVXlIwMV5PUlVfUjAxfE15LUxPSV81LjBfMS4xLU5HfFR8Mi41LjF8fHxBTHxBTHx8fHx8ClNGVHxHb29nbGVeRHx2MXxIZWFsdGhjYXJlIEFQSXwxfHwyMDE5MDYwMXxodHRwczovL2V4YW1wbGUuY29tL2hlYWx0aGNhcmUvClBJRHwxfHxQQVRJRDU0MjFeXl5NeSBNUEleTVJ8fFpoYW5nXlNhbGx5XkJyaWFuXl5eXkx8fDE5ODQwNjExfEZ8fDIxMDYtM15XaGl0ZV5ITDcwMDA1fDEyMyBNYWluIFN0cmVldF5eTW91bnRhaW4gU3ByaW5nc15DT144MDQzOV5eSHx8XlBSTl5QSF5eXjIwM14yMjkwMjEwfHx8fHx8fHx8Tl5Ob3QgSGlzcGFuaWMgb3IgTGF0aW5vXkhMNzAxODkKT1JDfFJFfDgzMzU4MjYzOXwzMjY2MjM4MTkzfHxDTXx8fHwyMDIwMDUwNjE3MDgyMgpPQlJ8MXw4MzM1ODI2Mzl8MzI2NjIzODE5M3x1cy0wMDA1XlZpdGFsIFNpZ25zXldpblBhdGheXnx8MjAyMDA1MDYxNzA4MjJ8MjAyMDA1MDYxNzA4MjJ8fHx8fHx8MjAyMDA1MDYxNzA4MjJ8fHx8fHx8fDIwMjAwNTA2MTcwODIyfHx8Rnx8MQpPQlh8MXxOTXx0dC0wMDA1LTA3Xk1EQ19QVUxTX1JBVEVfTk9OX0lOVl5NRENeXnx8NTIuMzF8TURDX0RJTV9CRUFUX1BFUl9NSU58NTAtMjAwfHx8fEZ8fHwyMDIwMDUwNjE3MDgyMnx8Ck9CWHwyfE5NfHR0LTAwMDUtMTJeUEFJTiBMRVZFTF5MXl58fDEuNzF8LzEwfDEtMTB8fHx8Rnx8fDIwMjAwNTA2MTcwODIyfHwKT0JYfDN8Tk18dHQtMDAwNS0wOV5NRENfVEVNUF5NRENeXnx8MzYuMjJ8TURDX0RJTV9ERUdDfDM2LTM4fHx8fEZ8fHwyMDIwMDUwNjE3MDgyMnx8Cg==",
    "sendFacility": "My Test Facility",
    "sendTime": "2015-09-26T14:05:51Z",
    "messageType": "ORU",
    "createTime": "CREATE_TIME",
    "patientIds": [
      {
        "value": "PATID5421",
        "type": "MR"
      }
    ],
    "schematizedData": {
      "data": {
        \"ORU_R01\": {
          \"DSC\": null,
          \"MSH\": {
            \"0\": \"MSH\",
            \"1\": \"|\",
            \"2\": \"^~\\\\\\u0026\",
            \"3\": {
              \"1\": \"My EHR\"
            },
            \"4\": {
              \"1\": \"My Test Facility\"
            },
            \"5\": null,
            \"6\": {
              \"1\": \"My EHR Facility\"
            },
            \"7\": \"20150926140551\",
            \"8\": null,
            \"9\": {
              \"1\": \"ORU\",
              \"2\": \"R01\",
              \"3\": \"ORU_R01\"
            },
            \"10\": \"My-LOI_5.0_1.1-NG\",
            \"11\": {
              \"1\": \"T\"
            },
            \"12\": {
              \"1\": \"2.5.1\"
            },
            \"13\": null,
            \"14\": null,
            \"15\": \"AL\",
            \"16\": \"AL\",
            \"17\": null,
            \"18\": null,
            \"19\": null,
            \"20\": null,
            \"21\": null
          },
          \"PATIENT_RESULT\": [
            {
              \"ORDER_OBSERVATION\": [
                {
                  \"COMMON_ORDER\": {
                    \"ORC\": {
                      \"0\": \"ORC\",
                      \"1\": \"RE\",
                      \"2\": {
                        \"1\": \"833582639\"
                      },
                      \"3\": {
                        \"1\": \"3266238193\"
                      },
                      \"4\": null,
                      \"5\": \"CM\",
                      \"6\": null,
                      \"7\": null,
                      \"8\": null,
                      \"9\": \"CREATE_TIME\"
                    },
                    \"ORDER_DOCUMENT\": null,
                    \"PRT\": null
                  },
                  \"CTD\": null,
                  \"CTI\": null,
                  \"FT1\": null,
                  \"NTE\": null,
                  \"OBR\": {
                    \"0\": \"OBR\",
                    \"1\": \"1\",
                    \"2\": {
                      \"1\": \"833582639\"
                    },
                    \"3\": {
                      \"1\": \"3266238193\"
                    },
                    \"4\": {
                      \"1\": \"us-0005\",
                      \"2\": \"Vital Signs\",
                      \"3\": \"WinPath\",
                      \"4\": null,
                      \"5\": null
                    },
                    \"5\": null,
                    \"6\": \"CREATE_TIME\",
                    \"7\": \"CREATE_TIME\",
                    \"8\": null,
                    \"9\": null,
                    \"10\": null,
                    \"11\": null,
                    \"12\": null,
                    \"13\": null,
                    \"14\": \"CREATE_TIME\",
                    \"15\": null,
                    \"16\": null,
                    \"17\": null,
                    \"18\": null,
                    \"19\": null,
                    \"20\": null,
                    \"21\": null,
                    \"22\": \"CREATE_TIME\",
                    \"23\": null,
                    \"24\": null,
                    \"25\": \"F\",
                    \"26\": null,
                    \"27\": [
                      {
                        \"1\": {
                          \"1\": \"1\"
                        }
                      }
                    ]
                  },
                  \"OBSERVATION\": [
                    {
                      \"NTE\": null,
                      \"OBX\": {
                        \"0\": \"OBX\",
                        \"1\": \"1\",
                        \"2\": \"NM\",
                        \"3\": {
                          \"1\": \"tt-0005-07\",
                          \"2\": \"MDC_PULS_RATE_NON_INV\",
                          \"3\": \"MDC\",
                          \"4\": null,
                          \"5\": null
                        },
                        \"4\": null,
                        \"5\": [
                          {
                            \"1\": {
                              \"1\": \"52.31\"
                            }
                          }
                        ],
                        \"6\": {
                          \"1\": \"MDC_DIM_BEAT_PER_MIN\"
                        },
                        \"7\": \"50-200\",
                        \"8\": null,
                        \"9\": null,
                        \"10\": null,
                        \"11\": \"F\",
                        \"12\": null,
                        \"13\": null,
                        \"14\": \"CREATE_TIME\",
                        \"15\": null,
                        \"16\": null
                      },
                      \"PRT\": null
                    },
                    {
                      \"NTE\": null,
                      \"OBX\": {
                        \"0\": \"OBX\",
                        \"1\": \"2\",
                        \"2\": \"NM\",
                        \"3\": {
                          \"1\": \"tt-0005-12\",
                          \"2\": \"PAIN LEVEL\",
                          \"3\": \"L\",
                          \"4\": null,
                          \"5\": null
                        },
                        \"4\": null,
                        \"5\": [
                          {
                            \"1\": {
                              \"1\": \"1.71\"
                            }
                          }
                        ],
                        \"6\": {
                          \"1\": \"/10\"
                        },
                        \"7\": \"1-10\",
                        \"8\": null,
                        \"9\": null,
                        \"10\": null,
                        \"11\": \"F\",
                        \"12\": null,
                        \"13\": null,
                        \"14\": \"CREATE_TIME\",
                        \"15\": null,
                        \"16\": null
                      },
                      \"PRT\": null
                    },
                    {
                      \"NTE\": null,
                      \"OBX\": {
                        \"0\": \"OBX\",
                        \"1\": \"3\",
                        \"2\": \"NM\",
                        \"3\": {
                          \"1\": \"tt-0005-09\",
                          \"2\": \"MDC_TEMP\",
                          \"3\": \"MDC\",
                          \"4\": null,
                          \"5\": null
                        },
                        \"4\": null,
                        \"5\": [
                          {
                            \"1\": {
                              \"1\": \"36.22\"
                            }
                          }
                        ],
                        \"6\": {
                          \"1\": \"MDC_DIM_DEGC\"
                        },
                        \"7\": \"36-38\",
                        \"8\": null,
                        \"9\": null,
                        \"10\": null,
                        \"11\": \"F\",
                        \"12\": null,
                        \"13\": null,
                        \"14\": \"CREATE_TIME\",
                        \"15\": null,
                        \"16\": null
                      },
                      \"PRT\": null
                    }
                  ],
                  \"PRT\": null,
                  \"SPECIMEN\": null,
                  \"TIMING_QTY\": null
                }
              ],
              \"PATIENT\": {
                \"ARV\": null,
                \"NK1\": null,
                \"NTE\": null,
                \"PATIENT_OBSERVATION\": null,
                \"PD1\": null,
                \"PID\": {
                  \"0\": \"PID\",
                  \"1\": \"1\",
                  \"2\": null,
                  \"3\": [
                    {
                      \"1\": \"PATID5421\",
                      \"2\": null,
                      \"3\": null,
                      \"4\": {
                        \"1\": \"My MPI\"
                      },
                      \"5\": \"MR\"
                    }
                  ],
                  \"4\": null,
                  \"5\": [
                    {
                      \"1\": {
                        \"1\": \"Zhang\"
                      },
                      \"2\": \"Sally\",
                      \"3\": \"Brian\",
                      \"4\": null,
                      \"5\": null,
                      \"6\": null,
                      \"7\": \"L\"
                    }
                  ],
                  \"6\": null,
                  \"7\": \"19840611\",
                  \"8\": {
                    \"1\": \"F\"
                  },
                  \"9\": null,
                  \"10\": [
                    {
                      \"1\": \"2106-3\",
                      \"2\": \"White\",
                      \"3\": \"HL70005\"
                    }
                  ],
                  \"11\": [
                    {
                      \"1\": {
                        \"1\": \"123 Main Street\"
                      },
                      \"2\": null,
                      \"3\": \"Mountain Springs\",
                      \"4\": \"CO\",
                      \"5\": \"80439\",
                      \"6\": null,
                      \"7\": \"H\"
                    }
                  ],
                  \"12\": null,
                  \"13\": [
                    {
                      \"1\": null,
                      \"2\": \"PRN\",
                      \"3\": \"PH\",
                      \"4\": null,
                      \"5\": null,
                      \"6\": \"203\",
                      \"7\": \"2290210\"
                    }
                  ],
                  \"14\": null,
                  \"15\": null,
                  \"16\": null,
                  \"17\": null,
                  \"18\": null,
                  \"19\": null,
                  \"20\": null,
                  \"21\": null,
                  \"22\": [
                    {
                      \"1\": \"N\",
                      \"2\": \"Not Hispanic or Latino\",
                      \"3\": \"HL70189\"
                    }
                  ]
                },
                \"PRT\": null,
                \"VISIT\": null
              }
            }
          ],
          \"SFT\": [
            {
              \"0\": \"SFT\",
              \"1\": {
                \"1\": \"Google\",
                \"2\": {
                  \"1\": \"D\"
                }
              },
              \"2\": \"v1\",
              \"3\": \"Healthcare API\",
              \"4\": \"1\",
              \"5\": {
                \"1\": {
                  \"1\": \"\"
                }
              },
              \"6\": \"20190601\",
              \"7\": \"https://example.com/healthcare-api/\"
            }
          ],
          \"UAC\": null
        }
      }"
    }
  }
}

カスタム セグメントを使用したパーサーのヒューリスティクス

次のサンプルでは、HL7v2 パーサーが、ヒューリスティックを使用して、HL7v2 ストア上のマイナー構成のメッセージを解析する方法を示しています。

このサンプルでは、次の HL7v2 メッセージを使用します。

MSH|^~\&$|||||||ADT^A01|||2.1
EVN|\P\\L\\H\\N\
PID|1
ZCD|1

ZCD セグメントは HL7v2 標準で定義されていないため、HL7v2 メッセージは標準ではありません。

カスタム スキーマを使用して HL7v2 ストアを作成する

カスタム スキーマを使用して HL7v2 ストアを作成するには、projects.locations.datasets.hl7V2Stores.create メソッドを使用します。

この構成では、次の 3 つのフィールドのみが使用され、schemas または types の配列は使用されないことに留意してください。

  • "unexpectedSegmentHandling": "PARSE"
  • "ignoreMinOccurs": "true"
  • "schematizedParsingType": "HARD_FAIL"

メッセージ定義またはそのタイプについて何も指定しなければ、HL7v2 パーサーによって、メッセージが ADT_A01 メッセージであることが決定され、MSHEVNPID のセグメント、さらにカスタム ZCD セグメントが解析されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "ignoreMinOccurs": true,
      "unexpectedSegmentHandling": "PARSE"
    }
  }
}

カスタム スキーマを使用して HL7v2 メッセージを取り込み、解析する

HL7v2 メッセージの base 64 エンコード バージョンを取り込みます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "message": {
    "data": "TVNIfF5+XCYkfHx8fHx8fEFEVF5BMDF8fHwyLjENRVZOfFxQXExcSFxOXA1QSUR8MQ1aQ0R8MQ=="
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "message": {
    "data": "TVNIfF5+XCYkfHx8fHx8fEFEVF5BMDF8fHwyLjENRVZOfFxQXExcSFxOXA1QSUR8MQ1aQ0R8MQ=="
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "message": {
    "data": "TVNIfF5+XCYkfHx8fHx8fEFEVF5BMDF8fHwyLjENRVZOfFxQXExcSFxOXA1QSUR8MQ1aQ0R8MQ=="
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "hl7Ack": "TVNIfF5+XCZ8fHx8fDIwMjIwMzE0MjExMTM1fHxBQ0t8Mjk1MmMxNDctZjczNS00MzczLWFmOTktNDgzNDRlODIwODJkfHwyLjENTVNBfEFB",
  "message": {
    "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID",
    "data": "TVNIfF5+XCYkfHx8fHx8fEFEVF5BMDF8fHwyLjENRVZOfFxQXExcSFxOXA1QSUR8MQ1aQ0R8MQ==",
    "messageType": "ADT",
    "createTime": "CREATE_TIME",
    "schematizedData": {
      "data": "{\"ADT_A01\":{\"ACC\":null,\"AL1\":null,\"ARV_1\":null,\"ARV_2\":null,\"DB1\":null,\"DG1\":null,\"DRG\":null,\"EVN\":[{\"0\":\"EVN\",\"1\":\"LN\\\\\"}],\"GT1\":null,\"INSURANCE\":null,\"MSH\":{\"0\":\"MSH\",\"1\":\"|\",\"10\":null,\"11\":null,\"12\":{\"1\":\"2.1\"},\"2\":\"^~\\\\\\u0026$\",\"3\":null,\"4\":null,\"5\":null,\"6\":null,\"7\":null,\"8\":null,\"9\":{\"1\":\"ADT\",\"2\":\"A01\"}},\"NK1\":null,\"OBX\":null,\"PD1\":null,\"PDA\":null,\"PID\":[{\"0\":\"PID\",\"1\":\"1\"}],\"PROCEDURE\":null,\"PV1\":null,\"PV2\":null,\"ROL_1\":null,\"ROL_2\":null,\"SFT\":null,\"UAC\":null,\"UB1\":null,\"UB2\":null,\"ZCD\":[{\"0\":[{\"1\":{\"1\":\"ZCD\"}}],\"1\":[{\"1\":{\"1\":\"1\"}}]}]}}"
    }
  }
}

フィールドがない HL7v2 メッセージを使用しているパーサー

次のサンプルでは、タイプとグループの定義を使用してこの HL7v2 メッセージを解析する方法を示しています。

MSH|^~\&|||||20100101000000||ORM^O01^O01|23701|1|2.3||
PID|11|SMITH
PV1|11
PID|22|JOHN
PV1|22
ORC|3
OBX|4
NTE|5
NTE|6
OBX|7
NTE|8

この HL7v2 メッセージは、MSH を除くすべてのセグメントで使用されるフィールドが数個(場合によっては単一のフィールド)しかないため、標準ではありません。たとえば、HL7v2 標準では PID セグメントに患者の第一言語、住所、生年月日などのフィールドが含まれますが、サンプル メッセージの PID セグメントには、患者の ID と患者の姓または名のみが含まれます。

HL7v2 メッセージは HL7 構文に従いますが、それ以外はほぼ完全にカスタマイズされています。

カスタム スキーマを使用して HL7v2 ストアを作成する

カスタム スキーマを使用して HL7v2 ストアを作成する前に、スキーマで使用されている ParserConfig オブジェクトの次のプロパティに目を通してください。

schemas配列:

  • mshField は、メッセージの最初のセグメントの 12 番目のフィールド(パイプ | 文字で区切られる)に設定されます。フィールドの値は、2.3 です。その結果、HL7v2 ストアに指定した schema は、mshFieldvalue に対応する HL7v2 メッセージに適用されます。
  • メッセージ タイプ ORM は、次の情報を含む members 配列で指定されます。
    • ORM メッセージのセグメント タイプは、メッセージ セグメント ヘッダーまたは MSH です。
    • maxOccurs が 2 の「Patient」という名前のグループ。
      • 「Patient」グループに一致するセグメントのタイプを含む「Patient」グループの下にネストされている別の members グループ。このセグメント タイプは PID です。
      • 「Patient Visit」という名前の別のグループ。「Patient」と同様に、「Patient Visit」に一致するセグメントがあります。このセグメント タイプは PV1 です。
    • 最大限または最小限の発生がない「Order」という名前のグループ。
      • 「Order」グループに一致するセグメントのタイプを含む「Order」グループの下にネストされている別の members グループ。このセグメント タイプは ORC です。
      • 独自の members 配列を持つ「Observation」という名前の別のグループ。
        • members 配列には、「Observation」にマッピングされている 2 つのセグメント OBXNTE が含まれています。OBX には 1maxOccurs があります。

types配列:

  • schemas 配列と同様に、mshField はメッセージの最初のセグメントの 12 番目のフィールド(パイプ | 文字で区切られる)に設定されます。フィールドの値は、2.3 です。その結果、HL7v2 ストアに指定した types は、mshFieldvalue に対応する HL7v2 メッセージに適用されます。
  • ST データ型と SI データ型は STRING プリミティブとして宣言されます。STSI のみが宣言されているため、メッセージにカスタム型がないことがわかります。
  • Patient グループには、2maxOccursPID のセグメントのタイプがあるため、2 つのタイプが PID フィールドで宣言されます。どちらのタイプも SI です。
  • 残りのセグメント タイプは、関連するフィールドとタイプとともに一覧表示されます。残りのセグメントはすべて 1 回出現し、SI タイプを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
      "unexpectedSegmentHandling": "PARSE"
    },
    "version": "V3"
  }
}

カスタム スキーマを使用して HL7v2 メッセージを取り込み、解析する

HL7v2 メッセージの base64 エンコード・バージョンを取り込みます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID
  • LOCATION: 親データセットの場所
  • DATASET_ID: HL7v2 ストアの親データセット
  • HL7V2_STORE_ID: HL7v2 ストア ID

リクエストの本文(JSON):

{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxPUk1eTzAxXk8wMXwyMzcwMXwxfDIuM3x8DVBJRHwxMXxTTUlUSA1QVjF8MTENUElEfDIyfEpPSE4NUFYxfDIyDU9SQ3wzDU9CWHw0DU5URXw1DU5URXw2DU9CWHw3DU5URXw4"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxPUk1eTzAxXk8wMXwyMzcwMXwxfDIuM3x8DVBJRHwxMXxTTUlUSA1QVjF8MTENUElEfDIyfEpPSE4NUFYxfDIyDU9SQ3wzDU9CWHw0DU5URXw1DU5URXw2DU9CWHw3DU5URXw4"
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxPUk1eTzAxXk8wMXwyMzcwMXwxfDIuM3x8DVBJRHwxMXxTTUlUSA1QVjF8MTENUElEfDIyfEpPSE4NUFYxfDIyDU9SQ3wzDU9CWHw0DU5URXw1DU5URXw2DU9CWHw3DU5URXw4"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "hl7Ack": "TVNIfF5+XCZ8fHx8fDIwMjIwMzE0MjE1NzU3fHxBQ0t8NGU4NjIyMDMtZTA3OC00YjhlLWExOWYtNzA3ZjhkNTk5OTY2fDF8Mi4zDU1TQXxBQXwyMzcwMQ==",
  "message": {
    "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID",
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxPUk1eTzAxXk8wMXwyMzcwMXwxfDIuM3x8DVBJRHwxMXxTTUlUSA1QVjF8MTENUElEfDIyfEpPSE4NUFYxfDIyDU9SQ3wzDU9CWHw0DU5URXw1DU5URXw2DU9CWHw3DU5URXw4",
    "sendTime": "2010-01-01T00:00:00Z",
    "messageType": "ORM",
    "createTime": "CREATE_TIME",
    "schematizedData": {
      "data": {
        "ORM_O01": [
          {
            "MSH": [
              {
                "0": "MSH",
                "1": "|",
                "2": "^~\\\\\\u0026",
                "3": null,
                "4": null,
                "5": null,
                "6": null,
                "7": "20100101000000",
                "8": null,
                "9": {
                  "1": "ORM",
                  "2": "O01",
                  "3": "O01"
                },
                "10": "23701",
                "11": {
                  "1": "1"
                },
                "12": {
                  "1": "2.3"
                },
                "13": null,
                "14": null
              }
            ],
            "Order": [
              {
                "ORC": [
                  {
                    "0": "ORC",
                    "1": [
                      "3"
                    ]
                  }
                ],
                "Observation": [
                  {
                    "NTE": [
                      {
                        "0": "NTE",
                        "1": [
                          "5"
                        ]
                      },
                      {
                        "0": "NTE",
                        "1": [
                          "6"
                        ]
                      }
                    ],
                    "OBX": {
                      "0": "OBX",
                      "1": [
                        "4"
                      ]
                    }
                  },
                  {
                    "NTE": [
                      {
                        "0": "NTE",
                        "1": [
                          "8"
                        ]
                      }
                    ],
                    "OBX": {
                      "0": "OBX",
                      "1": [
                        "7"
                      ]
                    }
                  }
                ]
              }
            ],
            "Patient": [
              {
                "PID": [
                  {
                    "0": "PID",
                    "1": [
                      "11"
                    ],
                    "2": [
                      "SMITH"
                    ]
                  }
                ],
                "Patient Visit": [
                  {
                    "PV1": [
                      {
                        "0": "PV1",
                        "1": [
                          "11"
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "PID": [
                  {
                    "0": "PID",
                    "1": [
                      "22"
                    ],
                    "2": [
                      "JOHN"
                    ]
                  }
                ],
                "Patient Visit": [
                  {
                    "PV1": [
                      {
                        "0": "PV1",
                        "1": [
                          "22"
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

レスポンスの data フィールドの読みやすいバージョンについては、次のセクションを開きます。

{
  "data": {
    "ORM_O01": [
      {
        "MSH": [
          {
            "0": "MSH",
            "1": "|",
            "2": "^~\\\\\\u0026",
            "3": null,
            "4": null,
            "5": null,
            "6": null,
            "7": "20100101000000",
            "8": null,
            "9": {
              "1": "ORM",
              "2": "O01",
              "3": "O01"
            },
            "10": "23701",
            "11": {
              "1": "1"
            },
            "12": {
              "1": "2.3"
            },
            "13": null,
            "14": null
          }
        ],
        "Order": [
          {
            "ORC": [
              {
                "0": "ORC",
                "1": [
                  "3"
                ]
              }
            ],
            "Observation": [
              {
                "NTE": [
                  {
                    "0": "NTE",
                    "1": [
                      "5"
                    ]
                  },
                  {
                    "0": "NTE",
                    "1": [
                      "6"
                    ]
                  }
                ],
                "OBX": {
                  "0": "OBX",
                  "1": [
                    "4"
                  ]
                }
              },
              {
                "NTE": [
                  {
                    "0": "NTE",
                    "1": [
                      "8"
                    ]
                  }
                ],
                "OBX": {
                  "0": "OBX",
                  "1": [
                    "7"
                  ]
                }
              }
            ]
          }
        ],
        "Patient": [
          {
            "PID": [
              {
                "0": "PID",
                "1": [
                  "11"
                ],
                "2": [
                  "SMITH"
                ]
              }
            ],
            "Patient Visit": [
              {
                "PV1": [
                  {
                    "0": "PV1",
                    "1": [
                      "11"
                    ]
                  }
                ]
              }
            ]
          },
          {
            "PID": [
              {
                "0": "PID",
                "1": [
                  "22"
                ],
                "2": [
                  "JOHN"
                ]
              }
            ],
            "Patient Visit": [
              {
                "PV1": [
                  {
                    "0": "PV1",
                    "1": [
                      "22"
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}