FHIR プロファイルの有効化

このページでは、FHIR ストア内の FHIR 実装ガイドとプロファイルをインポートして有効にする方法について説明します。

FHIR ストア内のすべての FHIR リソースが、キャプチャされたリソース構造と情報の特定の基準を満たすように、FHIR 実装ガイドとプロファイルを使用してください。FHIR リソースがプロファイルで指定されたルールを満たしている場合、FHIR リソースはプロファイルに準拠しています。

概要

FHIR プロファイルは、さまざまな医療システムがリソースを処理する方法を扱う基本 FHIR 仕様を基に定義された一連の追加ルールです。FHIR ストア内の FHIR プロファイルをインポートして有効化すると、FHIR ストア内のすべてのリソースが確実にリソース構造と取得した情報の特定条件を満たすようにすることができます。

構造定義と実装ガイド

1 つ以上の実装ガイドにグループ化された 1 つ以上の構造定義を挿入することで、FHIR ストアの FHIR プロファイルをインポートできます。構造定義を使用して、次のことを行います。

  • FHIR リソース内のフィールドの制約を定義します。
  • コードシステムと FHIR リソースをリンクするリファレンス値セット。

構造定義を含む実装ガイドを使用して、サードパーティ ソフトウェアのユースケースに合わせてリソースを検証します。

たとえば、サードパーティ ソフトウェアが米国のメディケア メディケイド サービス センター(CMS)の相互運用性と患者アクセスの最終ルールを遵守する必要があるとします。サードパーティ ソフトウェアは、CARIN プロファイルに準拠する Patient Access API を提供する必要があります。FHIR ストアに CARIN 実装ガイドをインポートして有効化し、CARIN プロファイルに照らしてリソースを検証できます。実装ガイドのインポートと有効化については、このページの後続のセクションで説明します。

実装ガイドをインポートしたら、FHIR ストアでこれを有効にしてリソースを検証できます。FHIR リソースが更新またはストアに追加されると、Cloud Healthcare API は、実装ガイドの構造定義と一致するかどうかを確認します。FHIR リソースが一致する場合、FHIR リソースがストアに追加されます。FHIR リソースが実装ガイドの構造定義に対応していない場合、エラー メッセージが表示され、FHIR リソースが拒否されます。

データ検証の適用

Cloud Healthcare API は、次のメソッドを使用する場合にデータ検証を適用します。

には適用されません。

プロファイル検証のワークフロー

次の図は、FHIR リソースを追加または更新するための検証ワークフローを示しています。

fhir プロファイル

FHIR プロファイルを定義する

次のセクションでは、サードパーティ ソフトウェアから構造定義をダウンロードして、実装ガイドを構成する方法について説明します。

構造定義をダウンロードする

構造定義が信頼できるソースと一致するようにするには、サードパーティ ソフトウェア プロバイダから構造定義、実装ガイド、値セットをダウンロードします。

たとえば、システムが Blue Button の患者プロファイルを使用している場合は、Blue Button で使用する構造定義と実装ガイドをダウンロードできます。

Cloud Healthcare API では、次の構造定義ルールを検証できます。

  • slicingvalue 型または pattern 型)
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding

実装ガイドを構成する

構造定義、実装ガイド、値セットをダウンロードしたら、実装ガイドが FHIR リソースの検証に使用するプロファイルを追加する必要があります。

FHIR ストアに実装ガイドを追加するには、次の手順を行います。

  1. サードパーティ ソフトウェア プロバイダからダウンロードした実装ガイドファイルを開きます。

  2. 次のセクションを追加して、実装ガイドで検証される構造定義を含めます。

    {
        "resourceType": "ImplementationGuide",
        ...
        "global": [
            {
            "type": "RESOURCE_TYPE",
            "profile": "STRUCTURE_DEFINITION_URL"
            }
        ]
        ...
    }
    

    次のように置き換えます。

    • RESOURCE_TYPE: FHIR リソースタイプ
    • STRUCTURE_DEFINITION_URL: プロファイルのソース構造定義の URL
  3. 実装ガイドファイルを保存します。

Cloud Storage に実装ガイドをアップロードする

実装ガイドを編集したら、次のファイルを Cloud Storage にアップロードする必要があります。

  • 実装ガイド
  • 構造定義
  • 値セット

アップロード後、これらのファイルを使用して FHIR ストア内のリソースを検証できます。

実装ガイド、構造定義、値のセットを Cloud Storage に追加するには、次のコマンドを実行します。

gsutil cp -r \
   PATH_TO_IMPLEMENTATION_GUIDE \
   gs://BUCKET/IMPLEMENTATION_GUIDE

次のように置き換えます。

  • PATH_TO_IMPLEMENTATION_GUIDE: ローカルマシン上の実装ガイドへのパス
  • BUCKET/IMPLEMENTATION_GUIDE: Cloud Storage の実装ガイドを保存するバケットとディレクトリ

実装ガイドのインポート

実装ガイドを使用して FHIR ストアのプロファイルを検証するには、FHIR リソースとして FHIR ストアにインポートします。

次のサンプルは、実装ガイドを FHIR ストアにインポートする方法を示しています。

gcloud

FHIR ストアにリソースとして実装ガイドを追加するには、gcloud healthcare fhir-stores import gcs コマンドを実行します。

gcloud healthcare fhir-stores import gcs FHIR_STORE_ID \
  --dataset=DATASET_ID \
  --gcs-uri=gs://BUCKET/DIRECTORY

次のように置き換えます。

  • FHIR_STORE_ID: FHIR ストア ID
  • DATASET_ID: データセット ID
  • BUCKET/DIRECTORY: Cloud Storage バケット内の実装ガイドの場所

次のような出力が表示されます。

Request issued for: [FHIR_STORE_ID]
Waiting for operation [OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

この出力で:

  • PROJECT_IDLOCATIONDATASET_ID: メソッド呼び出しで指定した値
  • OPERATION_ID: Cloud Healthcare API によって指定される長時間実行オペレーションの識別子

オペレーションの詳細を表示するには、gcloud healthcare operations describe コマンドを実行して、レスポンスから OPERATION_ID を指定します。

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

次のとおり出力されます。レスポンスに done: true が含まれている場合、オペレーションは終了です。表示されない場合は、オペレーションがまだ実行中です。数秒待ってから、もう一度 gcloud healthcare operations describe コマンドを実行してください。

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.fhir.FhirService.ImportResources
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
response:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse
  fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

API

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
      "contentStructure": "RESOURCE_PRETTY",
      "gcsSource": {
        "uri": "gs://BUCKET/DIRECTORY"
      }
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import"

次のように置き換えます。

  • BUCKET/DIRECTORY: Cloud Storage バケット内の実装ガイドの場所
  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID

レスポンスは次のとおりです。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

この出力で:

  • PROJECT_IDLOCATIONDATASET_ID: メソッド呼び出しで指定した値
  • OPERATION_ID: Cloud Healthcare API によって指定される長時間実行オペレーションの識別子

オペレーションのステータスを追跡するには、operations.get メソッドを使用します。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID
  • OPERATION_ID: 長時間実行オペレーションから返された ID

次のとおり出力されます。レスポンスに "done": true が含まれている場合、オペレーションは終了です。存在しない場合、オペレーションはまだ実行中です。数秒待ってから、再度 operations.get メソッドを呼び出します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse",
  }
}

PowerShell

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body '{
    "contentStructure": "RESOURCE_PRETTY",
    "gcsSource": {
      "uri": "gs://BUCKET/DIRECTORY"
    }
  }' `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import" | Select-Object -Expand Content

次のように置き換えます。

  • BUCKET/DIRECTORY: Cloud Storage バケット内の実装ガイドの場所
  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID

レスポンスは次のとおりです。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

この出力で:

  • PROJECT_IDLOCATIONDATASET_ID: メソッド呼び出しで指定した値
  • OPERATION_ID: Cloud Healthcare API によって指定される長時間実行オペレーションの識別子

オペレーションのステータスを追跡するには、operations.get メソッドを使用します。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID
  • OPERATION_ID: 長時間実行オペレーションから返された ID

次のとおり出力されます。レスポンスに "done": true が含まれている場合、オペレーションは終了です。存在しない場合、オペレーションはまだ実行中です。数秒待ってから、再度 operations.get メソッドを呼び出します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse",
  }
}

実装ガイドの有効化

実装ガイドリソースを使用してプロファイルを検証するには、実装ガイドを有効にする必要があります。複数の実装ガイドを有効にすると、両方の実装ガイドが有効になります。FHIR リソースは、有効な実装ガイドの 1 つのプロファイルと一致する必要があります。

次のサンプルは、既存の FHIR ストアでプロファイル検証の実装ガイドを有効にする方法を示しています。

curl

curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/fhir+json; charset=utf-8" \
    --data '{
      "validationConfig": {
          "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
      }
    }' "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig"

次のように置き換えます。

  • IMPLEMENTATION_GUIDE_URL: 実装ガイド リソースへのパス
  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID

レスポンスは次のとおりです。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  "validationConfig": {
    "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
  }
}

PowerShell

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

Invoke-WebRequest `
  -Method Patch `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body '{
      "validationConfig": {
          "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
      }
  }' `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig" | Select-Object -Expand Content

次のように置き換えます。

  • IMPLEMENTATION_GUIDE_URL: 実装ガイド リソースへのパス
  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID

レスポンスは次のとおりです。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID",
  "validationConfig": {
    "enabledImplementationGuides": ["IMPLEMENTATION_GUIDE_URL"]
  },
}