KR Core Implementation Guide
1.0.2 - STU1

KR Core Implementation Guide - Local Development build (v1.0.2) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

## Mandatory and Must Support

### 의무 요소(Mandatory Element)

어떤 요소(element)가 최소 1회 이상 사용 되어야 할 때 이를 의무 요소(Mandatory Element) 라고 하며, 의무 요소는 리소스 인스턴스에서 반드시 나타나야 한다. 의무 요소의 예는 Figure 1에서 보이듯이, `Observation.status`가 있다.

Figure 1: Observation.status

드물게 의무 요소의 값이 존재하지 않고 누락된 데이터(Missing Data)에 대한 사유가 제공될 수 있다.

### 필수 지원 요소(Must Support Element)

필수 지원(Must Support)에 대한 정의는 기본 FHIR 명세에 포함되어 있지 않으며, 필수 지원 요소(Must Support Element)를 사용한 Profile에서 명확하게 정의할 것을 명시하고 있다(참고).
이에 따라, KR Core Profile들에서 필수 지원으로 표시(S)된 요소들은 반드시(SHALL) 다음과 같이 해석하도록 정의한다.

- KR Core 응답자1는 KR Core Server Capability Statement에 명시된 조회 결과의 일부로 반드시(SHALL) 모든 필수 지원 요소를 채울 수 있어야 한다.
- KR Core 요청자2는 반드시(SHALL) 오류를 발생시키거나 응용 프로그램을 실패시키지 않고 필수 지원 요소를 포함하는 리소스 인스턴스를 처리할 수 있어야 한다.
- KR Core 요청자는 가능한 한(SHOULD) 모든 필수 지원 요소를 사용자가 사용할 수 있도록 표시하거나 다른 목적으로 저장할 수 있어야 한다.
- 특정 필수 지원 요소가 존재하지 않고 부재의 이유를 알 수 없는 경우, KR Core 응답자는 반드시(SHALL) 조회 결과의 일부로 반환되는 리소스 인스턴스에 존재하지 않는 필수 지원 요소를 포함하지 않아야 한다.
- KR Core 요청자는 반드시(SHALL) KR Core 응답자에 질의로 반환된 리소스 인스턴스 내의 누락된 데이터 중 필수 지원 요소를, KR Core 응답자의 시스템에 존재하지 않는 데이터로 해석해야 한다.
- 특정 필수 지원 요소에 대한 정보가 누락되거나 억제된 경우, 각각 누락된 데이터(Missing Data) 및 숨겨진 데이터(Suppressed Data)에 대한 지침을 참조.
- 특정 필수 지원 요소에 대한 정보가 누락되고 KR Core 응답자가 누락된 정확한 이유를 알고 있는 경우, KR Core 응답자는 가능한 한(SHOULD) 누락된 정보에 대한 이유를 전송해야 한다. 이 과정은 누락된 데이터(Missing Data)에 설명된 것과 동일한 방법론을 따르지만, `unknown` 코드 대신 적합한 이유 코드를 사용한다.
- KR Core 요청자는 반드시(SHALL) 누락된 정보를 명시한(assertion) S 데이터 요소를 포함한 리소스 인스턴스를 처리할 수 있어야 한다.

KR Core 요구사항을 구현하기에 앞서 FHIR Data Types, FHIR Search, FHIR Resource 양식과 FHIR Terminology 요구사항, HTTP 프로토콜에 기반한 FHIR RESTful API을 숙지하는 것을 권장.
테스트와 분석 시 편의성을 제공하기 위한 목적으로 KR Core Implementation Guide에 포함된 모든 Profile들의 정보를 CSV 파일과 Excel 파일로 제공한다. 해당 파일들은 아래에서 내려받을 수 있다.

- CSVs
- Excels

#### Must Support - Primitive Element

기본 요소(primitive element)는 기본 데이터유형의 값을 가지는 단일 요소. 필수 지원으로 표시(S)된 경우, 서버는 필수 지원 요건을 충족하기 위해 요소의 값을 반드시(SHALL) 제공할 수 있어야 한다.

예를 들면, Figure 2에서 보이듯이, KR Core Patient Profile의 `birthDate` 요소가 있다. `birthDate` 요소는 기본 데이터유형인 `date` 값을 가지는 단일 요소이다. 이 Profile을 준수하는 경우,

- KR Core 응답자는 반드시(SHALL) `Patient.birthDate`의 값을 제공할 수 있어야 한다.
- KR Core 요청자는 반드시(SHALL) `Patient.birthDate`의 값을 처리할 수 있어야 한다.

Figure 2: Patient.birthDate

#### Must Support - Complex Element

복합 요소(complex element)는 원시 또는 다른 복합 요소로 구성된다.

필수 지원으로 표시(S)된 모든 복합 요소에 대해 서버는 반드시(SHALL) 하위 요소 값 중 적어도 하나를 제공할 수 있어야 한다. 하위 요소가 필수 지원으로 표시(S)된 경우에는 필수 지원 요구 사항을 충족해야 하며, 상위 요소에 대한 필수 지원 요구 사항도 충족해야 한다.

예를 들면, Figure 3에서 보이듯이, KR Core Observation Profile for Laboratory Result의 `value[x]` 요소는 필수 지원으로 표시(S)되어 있고 하위 필수 지원 요소를 가지고 있지 않다. 이 Profile을 준수하는 경우,

- KR Core 응답자는 반드시(SHALL) `Observation.value[x]`의 하위 요소들의 값을 제공할 수 있어야 한다.
- KR Core 요청자는 반드시(SHALL) `Observation.value[x]`의 값을 처리할 수 있어야 한다.

Figure 3: Observation.value[x]

다른 예로, Figure 4에서 보이듯이, KR Core Patient Profile의 `identifier` 요소는 필수 지원으로 표시(S)되어 있고 하위 필수 지원 요소로 “system”과 “value”를 가지고 있다. 이 Profile을 준수하는 경우,

- KR Core 응답자는 반드시(SHALL) `Patient.identifier.system`과 `Patient.identifier.value`의 값을 제공할 수 있어야 한다.
- KR Core 요청자는 반드시(SHALL) `Patient.identifier.system`과 `Patient.identifier.value`의 값을 처리할 수 있어야 한다.

Figure 4: Patient.identifier

반면에, 하위 요소가 필수 지원으로 표시(S)되어 있고 상위 요소는 필수 지원으로 표시(S)되어 있지 않은 경우에는, 상위 요소를 반드시 지원할 필요는 없다. 그러나 상위 요소가 리소스 인스턴스 내에 존재하는 경우, 필수 지원으로 표시(S)된 하위 요소를 반드시 지원해야 한다.

예를 들면, Figure 5에서 보이듯이, KR Core Healthcare Organization Profile의 `telecom` 및 `telecom:Phone`, `telecom:Fax` slicing 요소는 필수 지원 요소가 아니지만, 그 하위 요소인 “system”와 “value”는 필수 지원으로 표시(S)되어 있다. 이 Profile을 준수하는 경우,

- KR Core 응답자는 선택적(MAY)으로 `Organization.telecom:Phone`의 값을 제공할 수 있고, `Organization.telecom:Phone`의 값을 제공하는 경우 반드시(SHALL) `Organization.telecom.system`과 `Organization.telecom.value`의 값을 제공할 수 있어야 한다.
- KR Core 요청자는 선택적(MAY)으로 `Organization.telecom:Phone`의 값을 처리할 수 있고, `Organization.telecom:Phone`의 값을 처리하는 경우 반드시(SHALL) `Organization.telecom.system`과 `Organization.telecom.value`의 값을 처리할 수 있어야 한다.

Figure 5: Organization.telecom

### 의무 요소 및 필수 지원 요소 지정 규칙

KR Core Implementation Guide에서는 Table 1과 같은 규칙에 따라 의무 요소와 필수 지원 요소를 지정하고 있다.
Table 1: Mandatory 및 Must Support 지정 규칙

요소 유형 | Mandatory | Must Support
--- | --- | ---
KR CDI R(Required) 요소 | ◯ | ◯
KR CDI R2(Required if exists) 요소 | ✕ | ◯
KR CDI O(Optional) 요소 | ✕ | ✕
HL7 FHIR R4 Required 요소, KR Core 자체 Required 요소 | ◯ | ✕
HL7 FHIR R4 Optional 요소, KR Core 자체 Optional 요소 | ✕ | ✕

[1]: KR Core 응답자는 일반적으로 KR Core Implementation Guide를 따르는 서버를 의미한다.
[2]: KR Core 요청자는 일반적으로 KR Core Implementation Guide를 따르는 클라이언트를 의미한다.