配置 FHIR 配置文件

FHIR 实现指南和配置文件可确保 FHIR 存储区中的资源符合特定的定义条件。一些实现指南示例包括 US Core 实现指南 4.0.0Carin 蓝色按钮实现指南

本页面介绍了如何使用 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 资源或添加 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 资源的配置文件。

要将实现指南添加到 FHIR 存储区,请完成以下步骤:

  1. 打开您从第三方软件提供商下载的实现指南文件。

  2. 添加以下部分,以包含要由实现指南验证的结构定义:

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

    替换以下内容:

    • RESOURCE_TYPE:定义实现指南适用的资源类型。
    • STRUCTURE_DEFINITION_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,请运行以下命令:

    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_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 资源只需要匹配任何已启用的实现指南中的一个配置文件。

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

针对特定配置文件验证资源

以下示例展示了如何针对为 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 配置文件的规范网址,例如 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 配置文件的规范网址,例如 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"
}

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