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

## General Requirements

본 페이지에서는 KR Core Implementation Guide에 사용된 공통적인 주요 요구 사항을 설명한다. 이 가이드에서 사용된 적합성 관련 표현인 반드시(SHALL), 가능한 한(SHOULD), 선택적(MAY)은 FHIR 적합성 규칙(FHIR Conformance Rules)에 정의되어 있다.

### KR Core Conformance Artifacts

Profiles and Extensions 페이지는 본 KR Core Implementation Guide를 위해 정의한 KR Core Profiles를 나열하고있다. KR Core Profiles의 StructureDefinition은 Profile을 사용하기 위해 반드시(SHALL) 있어야 하는 최소한의 요소(element)와 확장(extension), 용어들(vocabularies) 그리고 용어 값 집합(value set)을 정의하고 있다.

각 Profile의 요소는 의무(Mandatory) 요소와 필수 지원(Must Support) 요소로 구성된다. 의무 요소는 최소 사용 횟수가 1인 요소를 의미한다. 기본 FHIR 명세에서는 필수 지원으로 표시된 요소의 의미를 명확하게 정의하도록 요구하고 있다(참고). Mandatory and Must Support 페이지에는 의무 또는 필수 지원에 해당하는 요소들이 요청자(Requestor)와 응답자(Responder)에 의해 어떻게 해석되어야 하는지에 대한 규칙을 정의한다.

### 누락된 데이터(Missing Data)

특정 데이터 요소에 대한 정보가 누락되었으나 시스템은 데이터가 누락된 이유를 알 수 없는 상황이 발생할 수 있다. 최소 사용 횟수가 0인 요소에 대한 데이터가 없는 경우, 해당 요소가 필수 지원(Must Support)으로 표시(S)되었다고 하더라도, 시스템은 해당 요소를 리소스 인스턴스에서 반드시(SHALL) 생략해야 한다. 데이터 요소가 의무 요소(Mandatory Element)인 경우, 즉 최소 사용 횟수가 1 이상인 경우, 시스템은 데이터가 없는 경우에도 해당 요소가 반드시(SHALL) 존재해야 한다. KR Core는 이 상황에서 수행해야 할 작업에 대한 지침을 아래와 같이 제공한다.

- 코드화된(coded) 데이터 요소가 아닌 경우, DataAbsentReason Extension을 데이터 유형 내에 사용한다.
  - `unknown` 코드 사용 - 값이 존재할 것으로 예상되나, 알 수 없는 이유로 누락.

KR Core Implementation Guide에는 위 상황에 해당하는 예시가 존재하지 않는다.

- 코드화된(coded) 데이터 요소인 경우,
  - `CodeableConcept` 또는 `Coding` 데이터유형에 `ValueSet`이 example, preferred 또는 extensible 강도로 묶여있는 경우:
    - 시스템에 텍스트는 있지만 코드화된 데이터가 없는 경우, 텍스트 요소만 사용된다.
      - `Coding` 데이터유형의 경우, 텍스트는 `display` 요소로 표현된다.
    - 텍스트나 코드화된 데이터가 모두 없는 경우:
      - 묶여있는 `ValueSet`에 적합한 “unknown” 개념의 코드가 존재한다면, 해당 코드를 사용한다.
      - 묶여있는 `ValueSet`에 적합한 “unknown” 개념의 코드가 존재하지 않는다면, DataAbsentReason Code System의 `unknown` 코드를 사용한다.
  - `CodeableConcept` 또는 `code` 데이터유형에 `ValueSet`이 required 강도로 묶여있는 경우:
    - 묶여있는 `ValueSet`에 적합한 “unknown” 개념의 코드가 존재한다면, 해당 코드를 사용한다.
    - 묶여있는 `ValueSet`에 적합한 “unknown” 개념의 코드가 존재하지 않는다면, 해당 `ValueSet`에 있는 개념 중 하나를 반드시 사용해야 하며, 그렇지 않은 경우 리소스 인스턴스가 적합성을 준수하고 있지 않다는 의미이다.

사례: KR Core DiagnosticReport Profile for Diagnostic Imaging을 준수하는 DiagnosticReport 리소스 중 code 요소로 표현할 적합한 텍스트나 코드화된 데이터가 모두 없는 경우

    <DiagnosticReport xmlns="http://hl7.org/fhir">
    	<!-- 생략 -->
    	<code>
    		<coding>
    			<system value="http://terminology.hl7.org/CodeSystem/data-absent-reason"/>
    			<code value="unknown"/>
    			<display value="unknown"/>
    		</coding>
    	</code>
    	<!-- 생략 -->
    </DiagnosticReport>

### FHIR RESTful 검색(Search) API 요구사항

FHIR RESTful Search API는 검색을 지원하는 서버는 반드시(SHALL) http POST 기반의 검색을 지원할 것은 요구한다. 이에 더하여, KR Core Implementation Guide에서 지원되는 모든 검색 상호작용에 대해, 서버는 반드시(SHALL) GET 기반의 검색도 지원해야 한다.

- `token` 유형의 검색 매개변수를 사용해 검색하는 경우(참고):
  - 클라이언트는 적어도 `code` 값을 반드시(SHALL) 제공해야 하며, 선택적(MAY)으로 `system`과 `code` 값을 모두 제공할 수 있다.
  - 서버는 반드시(SHALL) `system`과 `code` 값을 모두 지원해야 한다.
- `reference` 유형의 검색 매개변수를 사용해 검색하는 경우(참고):
  - 클라이언트는 적어도 `id` 값을 반드시(SHALL) 제공해야 하며, 선택적(MAY)으로 `Type`과 `id` 값을 모두 제공할 수 있다.
  - 서버는 반드시(SHALL) `Type`과 `id` 값을 모두 지원해야 한다.
- `date` 유형의 검색 매개변수를 사용해 검색하는 경우(참고):
  - 클라이언트는 `date` 데이터유형의 요소에 대해 반드시(SHALL) day 수준의 정확도를 가지는 값을 제공해야 하며, `dateTime` 데이터유형의 요소에 대해 second + time offset 수준의 정확도를 가지는 값을 제공해야 한다.
  - 서버는 `date` 데이터유형의 요소에 대해 반드시(SHALL) day 수준의 정확도를 가지는 값을 지원해야 하며, `dateTime` 데이터유형의 요소에 대해 second + time offset 수준의 정확도를 가지는 값을 지원해야 한다.

아래의 표는 날짜 정확도를 요약한다:

검색 매개변수 | 요소의 데이터유형 | 최소날짜 정확도 | 예
--- | --- | --- | ---
date | date | day | `GET [base]/Patient?name=김환자&birthdate=2001-01-01`
date | dateTime, Period | second + time offset | `GET [base]Observation?patient=krcore-patient-example-01&category=vital-signs&date=ge2021-01-01T00:00:00+09:00`