**FHIR에서 수면 데이터(Sleep Data) 표현 방법** FHIR은 수면 데이터를 직접 저장하기 위한 전용 리소스가 없지만, **Observation** 리소스를 중심으로 표준화된 방식으로 표현합니다. 특히 웨어러블(Apple Watch, Oura, Fitbit 등)이나 수면다원검사(PSG) 결과, 수면 일지 등을 다룰 때 널리 사용됩니다. ### 1. 주요 리소스 및 접근 방식 | 리소스 | 용도 | 비고 | |---------------------|-------------------------------------------|------| | **Observation** | 수면 지속시간, 수면 단계, 수면 효율, AHI 등 | 가장 핵심. LOINC/SNOMED 코드 사용 | | **Device** | 데이터 출처 기기 (웨어러블, PSG 장비) | manufacturer, model 등 기록 | | **Procedure** | 수면다원검사(Polysomnography) 수행 | Clinical sleep study | | **DiagnosticReport**| 수면 검사 보고서 전체 | 여러 Observation을 묶음 | | **Patient** / **Encounter** | 환자 및 검사 맥락 | 필수 | ### 2. 주요 표준 코드 (LOINC + SNOMED) #### 수면 지속시간 관련 (LOINC) - **93832-4**: Sleep duration (총 수면 시간) - **93831-6**: Deep sleep duration (깊은 수면 시간) - **93830-8**: Light sleep duration (얕은 수면 시간) - **93829-0**: REM sleep duration (REM 수면 시간) #### 수면 단계 (Sleep Stage) - **SNOMED CT**: - `248220008` — Asleep (finding) - `248218005` — Awake (finding) - `60984000` — Non-rapid eye movement sleep - `89129007` — Rapid eye movement sleep (REM) #### 기타 유용한 코드 - Polysomnography study: **LOINC 28633-6** - Apnea-Hypopnea Index (AHI): 별도 LOINC 코드 사용 (예: 59460-6 계열 또는 custom) - Sleep efficiency, Sleep latency 등은 추가 Observation으로 표현 ### 3. 실제 구현 패턴 #### 패턴 1: 전체 수면 에피소드 (가장 일반적) 하나의 **Observation**으로 수면 세션 전체를 표현하고, `component`로 단계별 상세를 넣는 방식이 추천됩니다. ```json { "resourceType": "Observation", "meta": { "profile": ["http://hl7.org/fhir/uv/phr/StructureDefinition/pcd-sleep-observation"] }, "status": "final", "category": [{ "coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-sign"}] }], "code": { "coding": [{ "system": "http://loinc.org", "code": "93832-4", "display": "Sleep duration" }] }, "subject": {"reference": "Patient/123"}, "effectivePeriod": { "start": "2026-06-28T23:15:00+09:00", "end": "2026-06-29T07:30:00+09:00" }, "valueQuantity": { "value": 7.5, "unit": "h", "system": "http://unitsofmeasure.org", "code": "h" }, "component": [ { "code": {"coding": [{"system": "http://loinc.org", "code": "93831-6", "display": "Deep sleep duration"}]}, "valueQuantity": {"value": 2.1, "unit": "h"} }, { "code": {"coding": [{"system": "http://loinc.org", "code": "93829-0", "display": "REM sleep duration"}]}, "valueQuantity": {"value": 1.8, "unit": "h"} } ], "device": {"reference": "Device/oura-ring-001"} } ``` #### 패턴 2: 수면 단계별 별도 Observation 각 단계(Awake, Light, Deep, REM)를 별도의 Observation으로 기록 (시간대별 상세 분석에 유리). #### 패턴 3: 임상 수면 검사 (PSG) - **Procedure** 리소스로 검사 자체를 기록 (`code` = LOINC 28633-6) - 결과는 여러 **Observation** + **DiagnosticReport**으로 구성 ### 4. 관련 Implementation Guide (IG) - **HL7 FHIR Personal Health Records (PHR) IG** (가장 관련성 높음) - `PCD Sleep Observation` 프로파일 - `PGHD Sleep Episode Profile` - LOINC + SNOMED 조합으로 수면 데이터를 표준화 - **US Core** 또는 **KR Core** 기반으로 확장 가능 - 웨어러블 데이터 연동 시 **Device** + **Observation** 조합이 표준 ### 5. 실무 팁 | 상황 | 추천 방식 | 비고 | |-------------------------|----------------------------------------|------| | 웨어러블 (Oura, Fitbit, Apple Watch) | Observation + Device + LOINC 코드 | 가장 흔한 패턴 | | 수면다원검사(PSG) 결과 | Procedure + DiagnosticReport + Observation | Clinical | | 수면 단계 상세 분석 | component 사용 또는 별도 Observation | 시간대별 가능 | | 대용량 원시 데이터 (EEG 등) | DocumentReference로 링크 | FHIR에 직접 넣지 않음 | | 한국 시스템 연동 | LOINC + SNOMED 필수 사용 + KR Core 확장 | 상호운용성 확보 | ### 요약 - **기본**: `Observation` + LOINC 코드 (93832-4 등) - **단계 표현**: SNOMED CT 코드 또는 component - **출처 기기**: `Device` 리소스 연계 - **표준 IG**: Personal Health Records IG의 Sleep 관련 프로파일 활용 권장 특정 상황(예: Oura 데이터 매핑, PSG 보고서 전체 구조, AHI/산소포화도 포함 등)에 맞춰 더 구체적인 JSON 예시나 프로파일을 만들어 드릴 수 있습니다. 어떤 형태의 수면 데이터를 주로 다루시는지 알려주세요!