FHIR 프로필 구성

FHIR 구현 가이드 및 프로필은 FHIR 저장소의 리소스가 정의된 특정 기준을 준수하도록 합니다. 구현 가이드의 몇 가지 예로는 US Core 구현 가이드 4.0.0카린 블루 버튼 구현 가이드가 있습니다.

이 페이지에서는 US Core 구현 가이드 4.0.0을 사용하여 R4 FHIR 저장소에서 구현 가이드 및 프로필을 정의, 구성, 사용하는 방법을 설명합니다.

개요

FHIR 프로필은 서로 다른 의료 시스템이 리소스를 처리하는 방식을 처리하는 기본 FHIR 사양 외에 정의된 추가 규칙 집합입니다. FHIR 저장소의 모든 리소스가 리소스 구조 및 캡처된 정보의 특정 기준을 충족하도록 FHIR 저장소에서 FHIR 프로필을 가져오고 사용 설정할 수 있습니다.

구조 정의 및 구현 가이드

하나 이상의 구현 가이드에 그룹화된 하나 이상의 구조 정의를 삽입하여 FHIR 저장소의 FHIR 프로필을 가져올 수 있습니다. 구조 정의를 사용하여 다음을 수행할 수 있습니다.

  • FHIR 리소스에서 필드의 제약조건을 정의합니다.
  • 코드 시스템 및 FHIR 리소스를 연결하는 참조 값 세트입니다.

구조 정의가 포함된 구현 가이드를 사용하여 리소스 유효성을 검사하여 타사 소프트웨어의 사용 사례에 맞춥니다.

예를 들어 서드 파티 소프트웨어가 미국의 Centers for 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 구현 가이드 레지스트리와 같은 외부 소스에서 구조 정의, 구현 가이드 또는 값 세트와 같은 프로필 유효성 검사 리소스를 다운로드해야 합니다. 외부 소스는 각 구현 가이드의 모든 값 세트, 프로필, 확장 프로그램, 페이지 목록, 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에 추가하려면 다음 명령어를 실행합니다.

    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 리소스는 사용 설정된 구현 가이드의 프로필 하나만 일치하면 됩니다.

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 배열을 구현 가이드 리소스에 수동으로 추가하기 위해 필요합니다. 이 단계를 건너뛰도록 선택한 경우 generate_global_array 플래그가 있는 FHIR 프로필 유효성 검사 리소스용 번들러 도구와 같은 다른 메서드를 사용하여 다음 단계에서 FHIR 트랜잭션 번들을 생성할 때 global 배열을 추가해야 합니다.

  3. 구현 가이드, 구조 정의, 값 집합이 포함된 프로필 유효성 검사 리소스의 FHIR 트랜잭션 번들을 만듭니다.

    FHIR 프로필 유효성 검사 리소스용 번들러 도구를 사용하여 트랜잭션 번들을 만들 수 있습니다.

  4. 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 위치
  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 프로필의 표준 URL(예: 환자 리소스의 경우 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(예: 환자 리소스의 경우 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