FHIR

FHIR 프로필 및 확장 설명: 구현 가이드가 리소스를 제약하는 방법 및 유효성 검사 방법

FHIR 프로필은 기본 리소스를 좁히는 StructureDefinition입니다: 필수 요소, 반드시 지원해야 하는 항목, 고정 코드, 슬라이싱, 바인딩, 불변식. 확장은 기본에서 누락된 부분을 추가합니다. 프로필 게시 방법, meta.profile의 의미, 유효성 검사기가 프로필을 확인하는 방법, 각 항목에 대한 이해하기 쉬운 예시를 제공합니다.

작성자 게시일 3분 소요

간단한 답변: 기본 FHIR 리소스는 의도적으로 느슨하게 설계되었습니다. 거의 모든 것이 선택 사항이며 대부분의 코드는 예시일 뿐이므로 하나의 표준으로 모든 국가에 적용할 수 있습니다. 프로파일은 특정 용도에 맞게 리소스를 더 엄격하게 정의하는 StructureDefinition입니다. 예를 들어, 이 맥락에서는 Patient 리소스에 특정 유형의 식별자가 있어야 하고, Observation.code는 이 목록의 LOINC 코드여야 하며, 이 요소는 지원되어야 하고, 저 요소는 나타나지 않을 수 있습니다. **확장(extension)**은 기본 리소스에 없는 요소를 추가하는 것으로, URL로 식별되며 자체 StructureDefinition으로 정의됩니다. 구현 가이드(US Core, IPS, 국가별 가이드)는 프로파일, 확장, 값 세트 및 예제의 모음입니다. 리소스는 meta.profile에서 어떤 프로파일을 준수한다고 주장하는지 명시하며, 검증기가 이를 확인합니다.

프로파일이 변경할 수 있는 것

FHIR 프로파일은 리소스를 좁혀서만 변경할 수 있습니다. 즉, 카디널리티를 강화하거나, 요소를 반드시 지원해야 한다고 표시하거나, 값을 고정하거나 패턴을 적용하거나, 요소들을 특정 강도로 값 집합에 바인딩하거나, 목록을 명명된 부분으로 분할하거나, 선택 유형을 제한하거나, FHIRPath 불변식을 추가하거나, 참조 대상을 제한하는 것입니다. 프로파일은 요소를 추가하거나, 이름을 변경하거나, 기본 사양을 완화할 수 없습니다.

제약 조건 기능 예시
카디널리티(Cardinality) 선택적 요소를 필수 요소로 만들거나 금지 Patient.identifier 1..*; Patient.photo 0..0
필수 지원(Must support) 수신자는 요소가 전송되면 이를 저장하고 표시할 수 있어야 함 US Core는 birthDate를 필수 지원으로 표시
고정 값 또는 패턴 요소를 하나의 값으로 고정 Observation.category를 vital-signs로 고정
바인딩(Binding) 요소에 강도(strength)가 있는 값 세트(value set)를 연결 Observation.code를 vital signs 목록에 바인딩, 필수
슬라이싱(Slicing) 목록을 자체 규칙을 가진 명명된 부분으로 분할 혈압: 구성 요소를 수축기 및 이완기로 슬라이싱
유형 제한 선택 사항 제한 value[x]를 valueQuantity로 제한
불변식(Invariant) 반드시 충족되어야 하는 FHIRPath 규칙 "effective[x]는 반드시 존재해야 함" 또는 "value 또는 dataAbsentReason"
참조 대상(Reference target) 참조가 가리킬 수 있는 대상을 제한 subject는 환자만 가능하며, 이 프로파일을 준수하는 환자만 가능

프로파일은 축소만 할 수 있습니다. 요소를 추가하거나(이는 확장의 역할입니다), 이름을 변경하거나, 기본 사양을 완화할 수는 없습니다.

바인딩 강도

FHIR은 네 가지 바인딩 강도를 정의합니다. required: 코드는 반드시 값 집합에서 와야 합니다. extensible: 개념이 맞으면 값 집합을 사용하고, 그렇지 않으면 다른 코드가 허용됩니다. preferred: 권장 사항이며 강제되지 않습니다. example: 예시일 뿐이며, 대부분의 기본 리소스가 이렇습니다. extensible을 required로 잘못 읽는 것은 잘못된 유효성 검사 오류의 흔한 원인입니다.

읽기 쉬운 프로파일 발췌

FHIR 프로파일은 StructureDefinition이며, 차등 목록에는 기본 리소스와 다른 제약 조건만 나열되고, 스냅샷 목록에는 모든 요소가 나열됩니다. 아래의 읽기 쉬운 발췌 부분은 관찰(Observation)을 가정 혈압으로 제약합니다. 코드는 LOINC 85354-9로 고정되고, 구성 요소는 정확히 하나의 수축기 부분과 하나의 이완기 부분으로 분할됩니다.

프로파일의 **차등(differential)**은 기본 사양에서 변경된 내용만 나열하고, **스냅샷(snapshot)**은 모든 것을 나열합니다. 이 차등은 혈압 Observation이 LOINC 85354-9와 정확히 두 개의 구성 요소를 포함해야 함을 나타냅니다.

{
  "resourceType": "StructureDefinition",
  "url": "https://example.org/fhir/StructureDefinition/bp-home",
  "name": "HomeBloodPressure",
  "status": "active",
  "kind": "resource",
  "abstract": false,
  "type": "Observation",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
  "derivation": "constraint",
  "differential": {"element": [
    {"id": "Observation.code", "path": "Observation.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "85354-9"}]}},
    {"id": "Observation.component", "path": "Observation.component", "min": 2, "max": "2",
     "slicing": {"discriminator": [{"type": "pattern", "path": "code"}], "rules": "closed"}},
    {"id": "Observation.component:systolic", "path": "Observation.component", "sliceName": "systolic", "min": 1, "max": "1"},
    {"id": "Observation.component:systolic.code", "path": "Observation.component.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]}},
    {"id": "Observation.component:diastolic", "path": "Observation.component", "sliceName": "diastolic", "min": 1, "max": "1"},
    {"id": "Observation.component:diastolic.code", "path": "Observation.component.code",
     "patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]}}
  ]}
}

프로파일은 수동으로 작성되는 경우가 드물며, 작성자는 SUSHI와 함께 FHIR Shorthand(FSH)를 사용하거나 Forge 및 Simplifier와 같은 도구를 사용하고, HL7 IG Publisher를 통해 게시합니다. 가이드는 검증기 및 서버가 로드하는 패키지(hl7.fhir.us.core#6.1.0, hl7.fhir.uv.ips#1.1.0)로 배포됩니다.

확장(Extensions)

확장은 extension(또는 리소스의 의미를 변경하고 무시해서는 안 되는 경우 modifierExtension)에 배치되는 키-값 요소입니다. url은 해당 StructureDefinition의 표준 URL이며, 값은 형식화된 value[x] 또는 중첩된 확장입니다. 출생지는 Patient에 대한 HL7 정의 확장입니다.

{
  "resourceType": "Patient",
  "id": "example",
  "extension": [{
    "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
    "valueAddress": {"city": "Lyon", "country": "FR"}
  }],
  "name": [{"family": "Doe", "given": ["Jane"]}]
}

좋은 실천 규칙: 확장 정의 전에 기존 확장(HL7 레지스트리 및 국가별 가이드)을 찾으십시오. 제어하는 도메인 아래에 URL을 지정하십시오. 다른 사람이 검증할 수 있도록 StructureDefinition으로 정의하십시오. 기본 요소가 이미 다루는 내용에 대해 확장을 사용하지 마십시오.

meta.profile 및 검증

meta.profile은 FHIR 리소스가 준수한다고 주장하는 표준 URL 목록이며, 주장하는 것이 증명하는 것은 아닙니다. 유효성 검사기는 기본 사양과 각 주장된 프로파일에 대해 리소스를 확인하거나, 사용자가 지정한 프로파일에 대해 확인합니다. HL7 참조 유효성 검사기는 패키지를 사용하여 로컬에서 실행되며, FHIR 서버는 프로파일 매개변수를 허용하는 $validate 연산을 제공합니다.

meta.profile은 리소스가 준수한다고 주장하는 표준 URL 목록입니다. 주장하는 것이 증명하는 것은 아닙니다. 검증기는 리소스를 기본 사양과 주장된 모든 프로파일(또는 사용하도록 요청한 프로파일)에 대해 확인합니다. HL7 참조 검증기(validator_cli.jar)는 로컬에서 실행되고 패키지를 로드합니다. 서버는 POST /Observation/$validate?profile=…를 제공합니다. IG Publisher는 가이드의 모든 예제를 검증합니다. 리소스는 서로 모순되지 않는 한 여러 프로파일(국가별 Patient 프로파일 및 IPS Patient)을 동시에 준수할 수 있습니다.

두 가지 실용적인 규칙: CapabilityStatement에서 프로파일을 선언하는 서버는 이를 실패하는 리소스를 거부해야 합니다. 리소스를 수신하는 클라이언트는 프로파일이 금지하지 않은 알 수 없는 확장 또는 추가 요소를 거부해서는 안 됩니다. 기본 사양이 이를 허용하기 때문입니다.

Anpheros에서

Anpheros Platform은 관찰에는 LOINC, 약물에는 ATC, 해당되는 경우 SNOMED CT를 사용하는 FHIR R4 서버이며, 리소스 구조를 FHIR R4에 대해 확인하는 무료 유효성 검사기를 제공합니다. 병원에서 meta.profile이 국가 또는 IPS 프로파일로 설정된 리소스를 보내면, 해당 주장이 유지되어 다운스트림 시스템에서 이를 검증할 수 있습니다.

무료 유효성 검사기는 개발자 사이트(free validator)에 있습니다. 가이드 자체는 FHIR 구현 가이드 설명에서 확인할 수 있습니다.

관련 페이지

출처

자주 묻는 질문

프로파일이 리소스에 새 요소를 추가할 수 있나요?

아니요. 프로파일은 제약만 합니다. 새 데이터는 확장으로 들어가며, 프로파일은 다른 요소와 마찬가지로 이를 요구하거나 금지할 수 있습니다.

must-support는 실제로 무엇을 요구하나요?

구현 가이드에서 정의합니다. 일반적으로 발신자는 데이터가 있을 때 해당 요소를 채우고 수신자는 이를 저장하고 표시할 수 있어야 합니다. 요소를 필수로 만들지는 않습니다.

리소스에 meta.profile이 없으면 유효하지 않은 건가요?

아니요. meta.profile은 요구 사항이 아니라 주장입니다. 서버 또는 가이드에서 이를 요구할 수 있지만, 기본 사양은 그렇지 않습니다. 검증기는 리소스가 선언하지 않은 프로파일에 대해 확인할 수 있습니다.

내 나라에서 어떤 프로파일을 사용해야 하는지 어떻게 알 수 있나요?

각 국가별 FHIR 커뮤니티는 핵심 가이드(US Core, UK Core, nl-core, 독일 Basisprofile 등)를 게시합니다. 구현 가이드 페이지에서 찾는 방법을 설명합니다. 국경 간 요약은 IPS를 사용합니다.

Anpheros Platform

샌드박스에서 무료로 사용해 보세요

5분 만에 첫 FHIR 호출. 환자의 동의가 내장된 HL7 FHIR R4 API: 샌드박스에서 먼저 사용해보고, 자체 앱 또는 병원 시스템을 연결하세요.

무료 · 합성 환자 30명 · 카드 불필요

이 가이드는 정보 제공 목적으로 의료 조언을 대체하지 않습니다. 건강 관련 결정은 의사와 상담하십시오. 응급 상황에서는 현지 응급 번호(유럽은 112)로 전화하세요.
작성자
Anpheros 팀

Anpheros는 환자가 직접 관리하고 어떤 병원과도 공유할 수 있는 의료 기록을 EU 기반의 HL7 FHIR R4 플랫폼에서 구축합니다. 이 가이드들은 건강 정보를 이해하고 정리하는 데 도움을 드리며, 의사의 진료를 대체하지 않습니다.

Anpheros 소개 →