FHIR 実装ガイドとプロファイルでは、FHIR ストア内のリソースが具体的に定義された基準に準拠するようにします。実装ガイドの例には、US Core 実装ガイド 4.0.0 と Carin 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 では、次のメソッドの使用時にデータ検証が適用されます。
projects.locations.datasets.fhirStores.fhir.create
projects.locations.datasets.fhirStores.fhir.update
projects.locations.datasets.fhirStores.fhir.patch
projects.locations.datasets.fhirStores.executeBundle
プロファイル検証のワークフロー
次の図は、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 リソースを検証するために使用するプロファイルを追加する必要があります。
実装ガイドを構成するには、次の手順を行います。
サードパーティ ソフトウェア プロバイダからダウンロードした実装ガイドファイルを開きます。
次のセクションを追加して、実装ガイドで検証される構造定義を含めます。
{ "resourceType": "ImplementationGuide", ... "global": [ { "type": "RESOURCE_TYPE", "profile": "STRUCTURE_DEFINITION_URL" } ] ... }
次のように置き換えます。
- RESOURCE_TYPE: 実装ガイドを適用できるリソースタイプを定義します。
- STRUCTURE_DEFINITION_URL: プロファイルのソース構造定義の URL です。例: US Core の患者プロファイル
実装ガイドファイルを保存します。
次の例は、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 にアップロードするには、次の手順を行います。
Cloud Healthcare API の FHIR プロファイルで使用されていない実装ガイドからすべてのファイルを削除します。
たとえば、US Core 実装ガイドを実装している場合、次のファイルを削除できます。
.DS_Store
ig-r4.json
openapi/.index.json
package.json
実装ガイド、構造定義、値のセットを Cloud Storage に追加するには、次のコマンドを実行します。
gsutil cp -r \ PATH_TO_IMPLEMENTATION_GUIDE \ gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY
次のように置き換えます。
- 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_ID、LOCATION、DATASET_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_ID、LOCATION、DATASET_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_ID、LOCATION、DATASET_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:実装ガイドリソースの
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:実装ガイドリソースの
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
Google Cloud コンソールを使用して実装ガイドを有効にする
Google Cloud コンソールを使用して FHIR ストアを作成または編集すると、次の操作を行えます。
- Cloud Healthcare API が提供するデフォルトの実装ガイドを選択する
- Cloud Storage から FHIR ストアにカスタム実装ガイドをインポートする
カスタム実装ガイドをインポートするには、次の手順を行います。
省略可: 実装ガイドを構成します。
この手順は、
global
配列を実装ガイドリソースに手動で追加するために必要です。この手順を省略する場合は、その次の手順で FHIR トランザクション バンドルを作成するときに、別の方法(generate_global_array
フラグを使用した FHIR プロファイル検証リソース用バンドラー ツールなどの別のメソッドを使用してglobal
配列を追加する必要があります。プロファイル検証リソースの FHIR トランザクション バンドルを作成します。これには、実装ガイド、構造定義、値のセットが含まれます。
トランザクション バンドルを作成するには、FHIR プロファイル検証リソース用バンドラー ツールを使用します。
FHIR プロファイル検証バンドルを Cloud Storage のロケーションにアップロードします。
gsutil cp -r \ PATH_TO_PROFILE_VALIDATION_BUNDLE \ gs://BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY
次のように置き換えます。
- PATH_TO_PROFILE_VALIDATION_BUNDLE: ローカルマシン上のプロファイル検証バンドルへのパス
- BUCKET/IMPLEMENTATION_GUIDE_DIRECTORY: バンドルを保存する Cloud Storage のロケーション
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" }