FHIR 리소스 참조

이 페이지에서는 Cloud Healthcare API가 FHIR 리소스 참조를 지원하는 방법을 설명합니다.

개요

FHIR 리소스 참조는 소스 리소스에서 대상 리소스로의 방향 연결입니다. FHIR 리소스 참조를 사용하여 리소스를 연결할 수 있습니다. 예를 들어 FHIR 리소스 유형 Observation에는 참조 유형의 subject 필드가 있으며 관찰 대상으로 Patient 리소스에 연결하는 데 사용할 수 있습니다.

FHIR 리소스 참조도 순환될 수 있습니다. 예를 들어 FHIR 리소스 유형 CarePlan에는 다른 CarePlan을 가리킬 수 있는 replaces 필드가 있습니다.

FHIR 참조 구조의 가장 중요한 요소는 참조입니다. displayidentifier과 같은 다른 요소는 Cloud Healthcare API에 있는 것처럼 유지됩니다.

Cloud Healthcare API에서 지원되는 Reference.reference 형식은 다음과 같습니다.

로컬 리소스 참조

리소스 참조는 RESOURCE_TYPE/RESOURCE_ID로 정의됩니다. 또한 Cloud Healthcare API는 전체 FHIR 저장소 이름을 RESOURCE_TYPE/RESOURCE_ID 앞에 추가하는 것을 지원합니다. 예를 들면 FHIR_STORE_NAME/RESOURCE_TYPE/RESOURCE_ID입니다. 이 형식을 사용하는 경우 매장 이름은 요청의 FHIR 저장소와 일치해야 합니다. 그렇지 않은 경우 로컬이 아닌 참조로 인해 요청이 거부됩니다.

저장 구성 옵션 FhirStore.disableReferentialIntegrity는 기본적으로 사용 설정되는 로컬 참조 유효성 검사의 참조 무결성을 제어합니다. 참조 무결성 확인에 대한 자세한 내용은 FHIR 참조 무결성을 참조하세요.

버전이 지정된 참조

Cloud Healthcare API는 대상 리소스의 특정 버전에 대한 참조를 지원합니다. 대상 리소스의 특정 버전으로 연결하려면 로컬 참조에서 RESOURCE_ID/_history/VERSION_ID] 형식을 사용합니다.

참조 무결성 검사가 사용 설정되면 서버는 FHIR 저장소에 이전 버전이 있는지 확인합니다. Resource-purge 메서드는 참조 여부와 상관없이 이전 버전을 삭제합니다.

조건부 참조

대상 리소스 ID를 명시적으로 지정하는 대신 executeBundle은 요청 시 대상 리소스 ID로 확인되는 대상 리소스의 조건부 참조 검색어를 허용합니다. 예를 들면 Patient?identifier=abc입니다.

검색어가 대상 리소스로 확인되지 않거나 두 개 이상의 대상 리소스로 확인되는 경우 참조 무결성 검사가 사용 설정되었는지 여부와 관계없이 서버가 요청을 거부합니다.

urn:uuid 또는 urn:oid로 시작하는 URI

트랜잭션 번들과 함께 executeBundle 메서드를 사용하는 경우 범용 고유 식별자(UUID) 또는 객체 식별자(OID) 참조를 사용하여 동일한 번들에서 생성되거나 업데이트되는 다른 리소스에 대한 참조를 확인할 수 있습니다. 자세한 내용은 FHIR 번들 관리 가이드를 참조하세요.

전체 외부 URL

http://www.example.com/abc와 같은 전체 외부 URL은 참조 필드에 수정되지 않은 상태로 저장됩니다. Cloud Healthcare API는 URL을 확인하지 않거나 유효성 검사를 시도하지 않습니다.

전체 외부 URL이 요청의 FHIR 저장소 전체 URL과 일치하면 참조는 로컬 리소스 참조로 간주됩니다.

프래그먼트 참조

프래그먼트 참조는 리소스에서 인라인 처리된 포함된 리소스를 가리킵니다. 예를 들어 관찰 레코드에 일반 실무자가 언급되지만 관리된 실무자 디렉터리가 없는 경우 전체 실무자 리소스를 만들 수 없습니다. 일반 실무자는 관찰 레코드에 포함된 리소스입니다. 리소스의 참조 필드는 #[INLINE_RESOURCE_ID] 형식을 사용하는 인라인 처리된 리소스를 가리킬 수 있습니다.

다음 FHIR R4 샘플에서 p1p2#p1#p2로 참조되는 인라인 리소스 ID입니다.

{
  "resourceType": "Observation",
  "contained": [
    {
      "resourceType":"Patient",
      "id": "p1",
      "generalPractitioner": {"reference": "#p2"}
    },
    {
      "resourceType":"Practitioner",
      "id": "p2"
    }
  ],
  "status": "final",
  "subject": {"reference": "#p1"},
  "performer": [{"reference": "#p2"}]
}

[INLINE_RESOURCE_ID]는 리소스 내에 포함된 리소스로 존재해야 하며 그렇지 않으면 서버가 요청을 거부합니다. 포함된 리소스는 컨테이너 또는 동일한 컨테이너 내에 있는 다른 포함된 리소스에 의해서만 참조될 수 있습니다.