FHIR プロファイルを構成する

FHIR 実装ガイドとプロファイルでは、FHIR ストア内のリソースが具体的に定義された基準に準拠するようにします。実装ガイドの例には、US Core 実装ガイド 4.0.0Carin Blue Button 実装ガイドなどがあります。

このページでは、US Core 実装ガイド 4.0.0 を使用して、R4 FHIR ストアで実装ガイドとプロファイルを定義、構成、使用する方法について説明します。

概要

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

構造定義と実装ガイド

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

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

実装ガイドを構造定義とともに使用して、サードパーティ ソフトウェアのユースケースに合致するリソースを検証してください。

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

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

データ検証の適用

Cloud Healthcare API では、次のメソッドの使用時にデータ検証が適用されます。

には適用されません。

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

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

fhir プロファイル

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

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

プロファイル検証リソースをダウンロードする

構造定義が信頼できるソースと一致していることを確認するには、構造定義、実装ガイド、値セットなどのプロファイル検証リソースを、FHIR.org の実装ガイドのレジストリなどの外部ソースからダウンロードする必要があります。外部ソースには、すべての値のセット、プロファイル、拡張機能、ページのリスト、各実装ガイドの URL を含むパッケージが用意されています。

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

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

  • slicing。次のディスクリミネータをサポートしています。
    • value
    • pattern
    • profile
  • min/max
  • type
  • fixed
  • pattern
  • minValue
  • maxValue
  • maxLength
  • binding、ただし、以下のルールは除きます。
    • ValueSet.compose.include.filter
    • ValueSet.compose.exclude

実装ガイドを構成する

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

実装ガイドを構成する手順は次のとおりです。

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

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

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

    以下を置き換えます。

    • RESOURCE_TYPE: 実装ガイドが適用されるリソースタイプを定義します。
    • STRUCTURE_DEFINITION_URL: プロファイルのソース構造定義の URL です。例: US Core の患者プロファイル
  3. 実装ガイドファイルを保存します。

    次の例は、US Core 実装ガイドで有効になっている患者と組織のプロファイルを示しています。

    "global":[
      {
        "type":"Patient",
        "profile":"https://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"
      },
      {
        "type":"Organization",
        "profile":"https://hl7.org/fhir/us/core/StructureDefinition/us-core-organization"
      },
      ...
    ]
    

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

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

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

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

実装ガイドを Cloud Storage にアップロードするには、次の手順を行います。

  1. Cloud Healthcare API の FHIR プロファイルで使用されていないファイルを実装ガイドからすべて削除します。

    たとえば、US Core 実装ガイドを実装している場合、次のファイルを削除できます。

    • .DS_Store
    • ig-r4.json
    • openapi/.index.json
    • package.json
  2. 実装ガイド、構造定義、値のセットを Cloud Storage に追加するには、次のコマンドを実行します。

    gcloud storage cp \
       PATH_TO_IMPLEMENTATION_GUIDE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY \
       --recursive

    以下を置き換えます。

    • PATH_TO_IMPLEMENTATION_GUIDE: ローカルマシンの実装ガイドのパス
    • BUCKET / IMPLEMENTATION_GUIDE_DIRECTORY: 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/IMPLEMENTATION_GUIDE_DIRECTORY/*' \
  --content-structure=resource-pretty

以下を置き換えます。

  • FHIR_STORE_ID: FHIR ストア ID
  • DATASET_ID: データセット ID
  • BUCKET/IMPLEMENTATION_GUIDE_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/IMPLEMENTATION_GUIDE_DIRECTORY/*"
      }
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import"

以下を置き換えます。

  • BUCKET/IMPLEMENTATION_GUIDE_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/query/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/IMPLEMENTATION_GUIDE_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/IMPLEMENTATION_GUIDE_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/query/CLOUD_LOGGING_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse",
  }
}

実装の依存関係をアップロードしてインポートする

実装ガイドを有効にする前に、ガイドのすべての依存関係がアップロードされ、インポートされていることを確認する必要があります。依存関係は、実装ガイドの dependsOn パラメータで次のように定義されます。

"dependsOn":[
  {
    "id":"hl7_fhir_uv_bulkdata",
    "uri":"http://hl7.org/fhir/uv/bulkdata/ImplementationGuide/hl7.fhir.uv.bulkdata",
    "packageId":"hl7.fhir.uv.bulkdata",
    "version":"1.0.1"
  },
  {
    "id":"vsac",
    "uri":"http://fhir.org/packages/us.nlm.vsac/ImplementationGuide/us.nlm.vsac",
    "packageId":"us.nlm.vsac",
    "version":"0.3.0"
  }
]

依存関係をアップロードしてインポートするには、実装ガイドを Cloud Storage にアップロードする実装ガイドをインポートするの手順を行います。

実装ガイドの有効化

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

Cloud Healthcare API は、実装ガイドを有効にした場合にのみ検証します。実装ガイドを変更して再度有効にすると、Cloud Healthcare API は変更された実装ガイドを検証します。

有効にした実装ガイドを削除すると、その実装ガイドは適用されなくなります。

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

curl

実装ガイドを有効にするには、PATCH リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • FHIR ストアの名前
  • 実装ガイドリソースへのパスに設定された enabledImplementationGuides フィールド

次のサンプルは、curlを使用した PATCH リクエストを示しています。

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"],
          "disableProfileValidation": false
      }
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig"

以下を置き換えます。

  • IMPLEMENTATION_GUIDE_URL: ImplementationGuide リソースの url プロパティで定義された URL(例: http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core)。
  • 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

実装ガイドを有効にするには、PATCH リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • FHIR ストアの名前
  • 実装ガイドリソースへのパスに設定された enabledImplementationGuides フィールド

次のサンプルは、Windows PowerShell を使用した PATCH リクエストを示しています。

$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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID?updateMask=validationConfig" | Select-Object -Expand Content

以下を置き換えます。

  • IMPLEMENTATION_GUIDE_URL: ImplementationGuide リソースの url プロパティで定義された URL(例: http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core)。
  • 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"],
  },
}

Python

def enable_implementation_guide(
    project_id,
    location,
    dataset_id,
    fhir_store_id,
    implementation_guide_url,
):
    """
    Patches an existing FHIR store to enable an ImplementationGuide resource
    that exists in the FHIR store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Instantiates an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the dataset's location
    # dataset_id = 'my-dataset'  # replace with your dataset ID
    # fhir_store_id = 'my-fhir-store'  # replace with the FHIR store's ID
    # implementation_guide_url =
    # 'http://hl7.org/fhir/us/core/ImplementationGuide/hl7.fhir.us.core'  #
    # replace with the 'url' property in the ImplementationGuide resource
    fhir_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    fhir_store_name = f"{fhir_store_parent}/fhirStores/{fhir_store_id}"

    validation_config = {
        "validationConfig": {"enabledImplementationGuides": [implementation_guide_url]}
    }

    request = (
        client.projects()
        .locations()
        .datasets()
        .fhirStores()
        .patch(
            name=fhir_store_name, updateMask="validationConfig", body=validation_config
        )
    )

    response = request.execute()
    print(
        "Enabled ImplementationGuide with URL {} on FHIR store {}".format(
            implementation_guide_url, fhir_store_id
        )
    )

    return response

Google Cloud コンソールを使用して実装ガイドを有効にする

Google Cloud コンソールを使用して FHIR ストアを作成または編集する場合は、次のことができます。

  • Cloud Healthcare API から提供されるデフォルトの実装ガイドを選択します。
  • Cloud Storage から FHIR ストアにカスタム実装ガイドをインポートする

カスタム実装ガイドをインポートする手順は次のとおりです。

  1. プロフィール検証リソースをダウンロードします

  2. 省略可: 実装ガイドを構成します

    この手順は、実装ガイド リソースに global 配列を手動で追加するために必要です。この手順を省略する場合は、その次の手順で FHIR トランザクション バンドルを作成するときに別のメソッド(generate_global_array フラグを使用した FHIR プロファイル検証リソース用バンドラツールなど)を使用して global 配列を追加する必要があります。

  3. 実装ガイド、構造定義、値セットを含むプロファイル検証リソースの FHIR トランザクション バンドルを作成します。

    トランザクション バンドルを作成するには、FHIR プロファイル検証リソース用バンドラツールを使用します。

  4. FHIR プロファイル検証バンドルを Cloud Storage のロケーションにアップロードします。

    gcloud storage cp \
       PATH_TO_PROFILE_VALIDATION_BUNDLE \
       gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY \
       --recursive

    以下を置き換えます。

    • PATH_TO_PROFILE_VALIDATION_BUNDLE: ローカルマシン上のプロファイル検証バンドルのパス
    • BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: バンドルを保存する Cloud Storage のロケーション
  5. FHIR ストアを作成または編集するときに、Cloud Storage のロケーションからカスタム実装ガイドをインポートします。

特定のプロファイルに対してリソースを検証する

以下のサンプルは、特定のプロファイルまたは FHIR ストアに定義されたすべてのプロファイルの FHIR リソースを検証する方法を示しています。FHIR リソースを検証すると、FHIR リソースがもう 1 つのプロファイルに準拠しているかどうかを判断できます。

FHIR リソースを検証するには、fhir.Resource-validate メソッドを使用します。

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data @RESOURCE_FILE \
    'https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/RESOURCE_TYPE/$validate?profile=PROFILE_URL'

以下を置き換えます。

  • RESOURCE_FILE: リソースを含むファイルの場所
  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID
  • PROFILE_URL: FHIR プロファイルの正規 URL。たとえば、Patient リソースの場合は http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient です。FHIR_STORE_ID に、この URL を持つ StructureDefinition リソースが必要です。ストアですでに有効になっているプロファイルに対してリソースを検証する場合は、このクエリ パラメータを指定しないでください。
  • RESOURCE_TYPE: リソースタイプ

リソースがプロファイルに準拠している場合、次のようなレスポンスが返されます。

{
  "issue": [
    {
      "code": "informational",
      "details": {
        "text": "success"
      },
      "diagnostics": "success",
      "severity": "information"
    }
  ],
  "resourceType": "OperationOutcome"
}

リソースがプロファイルに準拠していない場合、レスポンスで次のようなエラーが返されます。

{
    "issue": [
        {
            "code": "processing",
            "diagnostics": "Profile http://hl7.org/fhir/StructureDefinition/AuditEvent, Element 'AuditEvent.agent.requestor': minimum required = 1, but only found 0",
            "location": [
                "AuditEvent.agent"
            ],
            "severity": "error"
        }
    ],
    "resourceType": "OperationOutcome"
}

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 '@RESOURCE_FILE' `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/RESOURCE_TYPE/$validate?profile=PROFILE_URL" | Select-Object -Expand Content

以下を置き換えます。

  • RESOURCE_FILE: リソースを含むファイルの場所
  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: データセット ID
  • FHIR_STORE_ID: FHIR ストア ID
  • PROFILE_URL: FHIR プロファイルの正規 URL。たとえば、Patient リソースの場合は http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient です。FHIR_STORE_ID に、この URL を持つ StructureDefinition リソースが必要です。ストアですでに有効になっているプロファイルに対してリソースを検証する場合は、このクエリ パラメータを指定しないでください。
  • RESOURCE_TYPE: リソースタイプ

リソースがプロファイルに対して検証される場合、次のようなレスポンスが返されます。

{
  "issue": [
    {
      "code": "informational",
      "details": {
        "text": "success"
      },
      "diagnostics": "success",
      "severity": "information"
    }
  ],
  "resourceType": "OperationOutcome"
}

リソースがプロファイルに対して検証されない場合、レスポンスで次のようなエラーが返されます。

{
    "issue": [
        {
            "code": "processing",
            "diagnostics": "Profile http://hl7.org/fhir/StructureDefinition/AuditEvent, Element 'AuditEvent.agent.requestor': minimum required = 1, but only found 0",
            "location": [
                "AuditEvent.agent"
            ],
            "severity": "error"
        }
    ],
    "resourceType": "OperationOutcome"
}

Python

def validate_resource_profile_url(
    project_id, location, dataset_id, fhir_store_id, resource_type, profile_url
):
    """Validates an input FHIR resource's conformance to a profile URL. The
    profile StructureDefinition resource must exist in the FHIR store before
    performing validation against the URL.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir
    before running the sample."""
    # Imports Python's built-in "os" module
    import os

    # Imports the google.auth.transport.requests transport
    from google.auth.transport import requests

    # Imports a module to allow authentication using a service account
    from google.oauth2 import service_account

    # Gets credentials from the environment.
    credentials = service_account.Credentials.from_service_account_file(
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"]
    )
    scoped_credentials = credentials.with_scopes(
        ["https://www.googleapis.com/auth/cloud-platform"]
    )
    # Creates a requests Session object with the credentials.
    session = requests.AuthorizedSession(scoped_credentials)

    # URL to the Cloud Healthcare API endpoint and version
    base_url = "https://healthcare.googleapis.com/v1"

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the parent dataset's location
    # dataset_id = 'my-dataset'  # replace with the parent dataset's ID
    # fhir_store_id = 'my-fhir-store' # replace with the FHIR store ID
    # resource_type = 'Patient'  # replace with the FHIR resource type
    # profile_url = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'  # replace with the profile URL
    url = f"{base_url}/projects/{project_id}/locations/{location}"

    resource_path = "{}/datasets/{}/fhirStores/{}/fhir/{}".format(
        url, dataset_id, fhir_store_id, resource_type
    )

    resource_path += "/$validate"
    params = {"profile": profile_url}

    # The body shown works with a Patient resource and is not guaranteed
    # to work with other types of FHIR resources. If necessary,
    # supply a new body with data that corresponds to the resource you
    # are validating and supply a new resource_type.
    body = {
        "name": [{"use": "official", "family": "Smith", "given": ["Darcy"]}],
        "gender": "female",
        "birthDate": "1970-01-01",
        "resourceType": "Patient",
    }

    # Sets required application/fhir+json header on the request
    headers = {"Content-Type": "application/fhir+json;charset=utf-8"}

    response = session.post(resource_path, headers=headers, json=body, params=params)
    response.raise_for_status()

    resource = response.json()

    print(json.dumps(resource))

    return resource