設定 FHIR 設定檔

FHIR 實作指南和設定檔可確保 FHIR 儲存庫中的資源符合特定定義的條件。實作指南的範例包括 美國核心實作指南 4.0.0Carin Blue Button 實作指南

本頁說明如何使用美國核心實作指南 4.0.0 在 R4 FHIR 儲存庫中定義、設定及使用實作指南和設定檔。

總覽

FHIR 設定檔是指在基本 FHIR 規格之上定義的一組額外規則,用於處理不同醫療照護系統處理資源的方式。您可以在 FHIR 儲存庫中匯入及啟用 FHIR 設定檔,確保 FHIR 儲存庫中的所有資源都符合資源結構和擷取資訊的特定條件。

結構定義和實作指南

您可以插入一或多個結構定義,並將其分組為一或多個導入指南,藉此匯入 FHIR 儲存庫的 FHIR 設定檔。使用結構定義執行下列操作:

  • 定義 FHIR 資源中欄位的限制條件。
  • 連結代碼系統和 FHIR 資源的參考值集。

您可以使用內含結構定義的實作指南,驗證資源是否符合第三方軟體的用途。

舉例來說,假設您的第三方軟體需要遵守美國Medicare & Medicaid Services (CMS) 互通性和病患存取權最終規則。您的第三方軟體必須提供符合 CARIN 設定檔的 Patient Access API。您可以在 FHIR 儲存庫中匯入並啟用 CARIN 實作指南,以便根據 CARIN 設定檔驗證資源。本頁後續章節將說明如何匯入及啟用導入指南。

匯入實作指南後,您可以在 FHIR 儲存庫中啟用該指南,以便進行 FHIR 資源驗證。當 FHIR 資源更新或新增至商店時,Cloud Healthcare API 會驗證該資源是否符合實作指南中的結構定義。如果 FHIR 資源相符,系統就會將 FHIR 資源加入儲存庫。如果 FHIR 資源不符合實作指南中的結構定義,系統會傳回錯誤訊息,並拒絕 FHIR 資源。

資料驗證強制執行

使用下列方法時,Cloud Healthcare API 會強制執行資料驗證:

設定檔驗證工作流程

下圖顯示新增或更新 FHIR 資源的驗證工作流程:

fhir-profiles

定義 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 資源的設定檔。

如要設定導入指南,請完成下列步驟:

  1. 開啟從第三方軟體供應商下載的導入指南檔案。

  2. 新增下列區段,加入結構定義,以便由導入指南驗證:

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

    更改下列內容:

    • RESOURCE_TYPE:定義導入指南適用的資源類型。
    • STRUCTURE_DEFINITION_URL:設定檔的來源結構定義網址,例如 美國核心病患檔案
  3. 儲存實作指南檔案。

    以下範例顯示為美國核心實作指南啟用的患者和機構設定檔:

    "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 設定檔未使用的所有檔案。

    舉例來說,如果您要實作美國核心導入指南,可以刪除下列檔案:

    • .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 提供的長時間運作作業的 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_IDLOCATIONDATASET_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_IDLOCATIONDATASET_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 欄位設為實作指南資源的路徑

以下範例顯示使用 curlPATCH 要求。

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

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 交易套件時新增 global 陣列,例如使用 generate_global_array 標記的 FHIR 設定檔驗證資源套件製作工具

  3. 建立設定檔驗證資源的 FHIR 交易套件,其中包含實作指南、結構定義和值集。

    您可以使用FHIR 設定檔驗證資源的 Bundler 工具建立交易套件。

  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 資源是否符合其他設定檔。

如要驗證 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-patientFHIR_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-patientFHIR_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"
}

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