FHIR 實作指南和設定檔可確保 FHIR 儲存庫中的資源符合特定定義的條件。實作指南的例子包括美國核心實作指南 4.0.0 和 Carin Blue Button 實作指南。
本頁說明如何使用 US Core 實作指南 4.0.0,在 R4 FHIR 儲存庫中定義、設定及使用實作指南和設定檔。
總覽
FHIR 設定檔是一組額外規則,定義於基本 FHIR 規格之上,用於處理不同醫療照護系統處理資源的方式。您可以在 FHIR 儲存庫中匯入及啟用 FHIR 設定檔,確保 FHIR 儲存庫中的所有資源都符合資源結構和擷取資訊的特定條件。
結構定義和實作指南
如要匯入 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 的實作指南登錄) 下載設定檔驗證資源,例如結構定義、實作指南或值集。外部來源會提供套件,其中包含所有值集、設定檔、擴充功能、頁面清單,以及各實作指南的網址。
舉例來說,如果您的系統使用 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:設定檔來源結構定義的網址,例如美國核心病患設定檔。
儲存實作指南檔案。
以下範例顯示為美國核心實作指南啟用的病患和機構設定檔:
"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 設定檔未使用的所有檔案。
舉例來說,如果您要實作美國核心實作指南,可以刪除下列檔案:
.DS_Store
ig-r4.json
openapi/.index.json
package.json
如要將實作指南、結構定義和值集新增至 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_ID、LOCATION、DATASET_ID:您在方法呼叫中提供的值
- OPERATION_ID:Cloud Healthcare API 提供的長時間作業 ID
如要查看作業的詳細資料,請執行 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 提供的長時間作業 ID
如要追蹤作業狀態,請使用 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 提供的長時間作業 ID
如要追蹤作業狀態,請使用 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 資源只要符合其中一個設定檔即可。
只有在啟用實作指南時,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
屬性中定義的網址,例如: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
屬性中定義的網址,例如: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
陣列新增至導入指南資源。如果選擇略過這個步驟,您必須在下一個步驟中,使用generate_global_array
旗標搭配 Bundler for FHIR profile validation resources 工具等其他方法建立 FHIR 交易套件時,新增global
陣列。建立設定檔驗證資源的 FHIR 交易套件,包括實作指南、結構定義和值集。
您可以使用「Bundler for FHIR profile validation resources」工具建立交易套件。
將 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 位置
根據特定設定檔驗證資源
下列範例說明如何驗證特定設定檔的 FHIR 資源,或驗證 FHIR 存放區定義的所有設定檔。驗證 FHIR 資源可讓您判斷 FHIR 資源是否符合一或多個設定檔。
如要驗證 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 設定檔的標準網址,例如 Patient 資源的
http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient
。FHIR_STORE_ID 中必須有具有這個網址的 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 設定檔的標準網址,例如 Patient 資源的
http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient
。FHIR_STORE_ID 中必須有具有這個網址的 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" }