본문으로 건너뛰기

ePA Export 데이터 명세

문서 정보
  • 상태: 초안
  • 최종 갱신: 2026-06-08
  • 담당: pibi@weltcorp.com
  • 근거 코드: dta-wide-api — libs/feature/health-data-export (구현 코드 기준)
  • 작성 근거: BfArM 신고 시트 diga_WELT_verarbeitete_daten-KO.xlsx (Datenstruktur 시트) 및 fbeta 제공 MIO 샘플 — 8. 참고 자료 참조
  • 참고: Google Drive 폴더
  • 원본: Confluence "ePA Export 데이터 명세서" 를 이관한 문서다.
아직 배포 전인 항목

이 명세에는 코드 구현은 끝났으나 아직 외부 배포/확정 전인 항목이 포함되어 있다.

0. 변경 이력

버전날짜변경 요약담당
v0.12026-06-04초안 작성pibi@weltcorp.com
v0.22026-06-0810. 데이터 보관 및 삭제 정책 추가 (BSI O.Data_5/O.Data_6 매핑 포함)pibi@weltcorp.com

1. 개요

이 문서는 WELT Insomnia DiGA 앱에서 ePA(elektronische Patientenakte, 전자환자기록)로 전송되는 데이터의 종류와 형식을 정의한다.

  • 전송 형식: FHIR Bundle XML (KBV_PR_MIO_DIGA_Bundle v1.1.0)
  • 명시적 제외 항목: 일부 항목은 데이터 최소화 정책에 의해 의도적으로 번들에서 제외된다(각 영역 표의 "미포함" 표기 참조).

2. Bundle 구조 개요

ePA 로 보내는 데이터는 하나의 FHIR Bundle document 로 묶인다. Bundle 내 Composition 은 아래 4개 섹션으로 구성된다.

Bundle (KBV_PR_MIO_DIGA_Bundle v1.1.0)
├─ Fragebögen → WIS 주간 인터뷰 (설문 정의 + 회차별 응답)
├─ Ziele → 수면 목표 (주차별)
├─ Befunde → 수면일지 (일별) + 학습 진도
└─ Beurteilungen → 설문 점수 (PHQ-9 / ISI / DBAS16 / GAD7 / PSS)

Bundle 최상위에는 환자(Patient), 기기(Device, DeviceDefinition), 제조사(Organization) 리소스가 항상 포함된다.

3. 데이터 영역별 명세

3.1 환자 (Patient) — 1건

항목타입내용비고
RI 식별자string무작위 UUID (매 export 새로 생성)환자 직접 식별 불가한 내부 참조 ID
KVNR (건강보험번호)stringeID 인증에서 수신 (예: X123456789)ePA export 필수. local export 는 생략 가능
이름미포함데이터 최소화 정책
생년월일미포함데이터 최소화 정책
성별미포함데이터 최소화 정책

3.2 제조사·기기 (Organization / Device / DeviceDefinition) — 각 1건

항목타입내용비고
회사명stringWELT Corp
홈페이지stringhttps://www.weltcorp.com/index.html
주소string132, Teheran-ro, Seoul, 06235, ROK, 14Ffbeta 04-15 샘플 기준 확정 — 8절 ③ 참조
기기명stringWELT Insomnia
VE-IDstringde000113331실제 등재 값
PZNstringplaceholder (100001)⚠️ 6절 참조 — PU 전 실값 교체 필요
소프트웨어 버전 (Softwareversion)stringplaceholder (1.0.0)⚠️ 6절 참조 — PU 전 실값 교체 필요

3.3 설문 (Assessments) — 치료 기간 중 회차별 각 1건

5종 설문의 회차별 총점과 응답 시점을 전송한다. 개별 문항 응답은 미포함 — 총점만 전송(BfArM 신고 기준 일치).

항목 (xlsx)타입FHIR 코드코드 시스템
설문 - PHQ-9integer44261-6LOINC 2.81
설문 - ISIinteger762989006SNOMED CT 20250201
설문 - DBAS16decimal89196-0LOINC 2.81
설문 - GAD7integer69737-5LOINC 2.81
설문 - PSSinteger106875-8LOINC 2.81
설문 응답 시점dateTime

3.4 수면 목표 (Sleep Goals) — 주차당 3건

항목 (xlsx)타입단위비고
목표 - 소등 시각 (Lights out time)string{hh:mm}
목표 - 기상 시각 (Wake-up time)string{hh:mm}
목표 - 침대에 있는 시간 (Time in bed)codeh
목표 유효 기간date주 시작일 ~ 종료일
목표 달성boolean소등·기상·침대시간 3종 각각

3.5 수면 일지 (Sleep Diary) — 일별 각 2건 (QuestionnaireResponse + Observation)

하루 수면 기록 1건당 QuestionnaireResponse(응답 14항목) + Observation(달성 여부·메타) 2개 리소스가 생성된다.

항목 (xlsx)타입단위비고
수면 일지 – 항목 작성 시점dateTime
수면 일지 질문 - 환자가 수면을 취했는지booleantrue 이면 이하 수면 항목 absent 처리
수면 일지 질문 - 소등 시각time
수면 일지 질문 - 기상 시각time
수면 일지 질문 - 수면 시간(총)decimalh
수면 일지 질문 - 수면 효율decimal%
수면 일지 질문 - 입면 잠복기decimalmin
수면 일지 질문 - 입면 후 각성 시간decimalh
수면 일지 질문 - 수면제 복용 여부boolean
수면 일지 질문 - 낮잠 시간decimalmin
수면 일지 질문 - 수면의 질code1~5 단계, LOINC LA 코드 매핑
수면 일지 질문 - 긍정적 요인code일부 Simplifier 미배포 — 5절 참조
수면 일지 질문 - 부정적 요인code
수면 일지 질문 - 긍정적 요인 자유 입력string사용자 직접 입력 텍스트
수면 일지 질문 - 부정적 요인 자유 입력string사용자 직접 입력 텍스트
목표 달성 — 소등boolean목표 소등 시각 달성 여부 (Observation component)
목표 달성 — 기상boolean목표 기상 시각 달성 여부 (Observation component)
목표 달성 — 침대시간boolean소등 + 기상 동시 달성 시 true, 파생값 (Observation component)

수면 영향 요인 코드 상세

긍정적 요인

항목코드코드 시스템Simplifier 상태
없음260413007SNOMED CT
야외 운동 (exerciseInFreshAir)fresh-air-exerciseWELT MIO🟡 배포 대기
좋은 기분good-moodWELT MIO
낮 햇빛sunlightWELT MIO
이완 운동relaxation-exercisesWELT MIO
편안한 저녁 루틴relaxed-routineWELT MIO

부정적 요인

항목코드코드 시스템Simplifier 상태
없음260413007SNOMED CT
스트레스/걱정stress-or-worryWELT MIO
장시간 근무long-working-hoursWELT MIO
저녁 카페인·알코올caffeine-or-alcoholWELT MIO
통증·불편pain-or-discomfortWELT MIO
수면 방해 환경disturbed-sleep-environmentWELT MIO

3.6 WIS (WELT Insomnia Scale) 설문 — 정의 1건 + 회차별 응답

치료 사이클 중 매주 수행하는 WELT Insomnia Scale 설문. FHIR Questionnaire 정의 1건과 회차별 QuestionnaireResponse 로 전송된다.

항목 (xlsx)타입비고
WIS 질문 - 수면제 복용string선택 + 자유입력
WIS 질문 - 혼자 잠을 자는지string
WIS 질문 - 침실 소음 수준string
WIS 질문 - 침실 온도string
WIS 질문 - 침실 조도string
WIS 질문 - 이상적인 취침 시각string
WIS 질문 - 이상적인 기상 시각string
WIS 질문 - 일과 리듬string
WIS 질문 - 피로감string

3.7 학습 진도 — 0~1건

항목 (xlsx)타입단위비고
학습 진도decimal%유효 범위(0~100) 밖이면 번들에 미포함

4. 코드 체계

코드 시스템사용 영역관리 주체
LOINC 2.81설문 (PHQ-9, DBAS16, GAD7, PSS), 수면일지 항목, 학습 진도외부 표준
SNOMED CT 20250201설문 (ISI), 수면 영향 요인 "없음"외부 표준
WELT MIO CodeSystem수면 영향 요인 긍정적/부정적 선택지WELT — Simplifier(welt-sleepq) 관리

5. Simplifier 배포 대기 항목

아래 항목은 코드 구현은 완료되었으나 Simplifier(welt-sleepq) 공개 배포가 아직 이루어지지 않은 사항이다.

항목변경 유형내용현재 상태
긍정적 요인 exerciseInFreshAirCodeSystem + ValueSet 신규 추가앱 실사용 중(운영 DB 80건+)이나 WELT MIO CodeSystem 에 누락되어 있던 항목. 추가 코드명: fresh-air-exercise. ValueSet XML 및 BfArM 신고 시트에 로컬 반영 완료. — 8절 ④ 수정본 참조🟡 배포 대기
부정적 요인 라벨 오류 수정BfArM 신고 시트 수정pain-or-discomfortdisturbed-sleep-environment 라벨-코드 swap 오류 및 철자 오류(enviroment). XML/코드 구현은 이미 정확. 신고 문서만 재제출 필요. — 8절 ④ 수정본 참조🟡 배포 대기

6. PU(운영 환경) 전 미확정 항목

현재 placeholder 값으로 구현되어 있으며 실값 교체가 필요하다.

항목현재 값필요 조치
PZN (의약품 고유번호)100001 (placeholder)BfArM/IFA 등록 후 실값 교체
소프트웨어 버전 (Softwareversion)1.0.0 (placeholder)DiGA 릴리스 버전 확정 후 교체

7. 외부 링크

8. 참고 자료 및 첨부 파일

아래 파일들이 이 문서의 작성 근거다. 원본(바이너리)은 Google Drive 에 보관한다.

#파일명설명날짜링크
diga_WELT_verarbeitete_daten-KO.xlsxBfArM 신고 데이터 구조 시트. 이 문서의 항목명·타입·단위 기준.Drive
WELT MIO 샘플 v1 (04/02)fbeta 제공 첫 번째 MIO 참고 샘플.2026-04-02Drive
WELT MIO 샘플 v2 (04/15)fbeta 제공 두 번째 MIO 참고 샘플. Organization 주소가 서울 본사로 갱신됨. 현재 구현의 기준 샘플.2026-04-15Drive
WELT MIO 수정본 (미배포)WELT 자체 수정본. fresh-air-exercise 긍정적 요인 추가 + 부정적 요인 라벨 오류 수정 반영. Simplifier 배포 대기 중(5절 참조).2026-06-04Drive
diga_WELT_verarbeitete_daten-KO.xlsx 수정본WELT 자체 수정본. fresh-air-exercise 추가 + 라벨 오류 수정 반영. Simplifier 배포 대기 중(5절 참조).2026-06-04Drive

9. 출력 예시 (최종 export 형태)

아래는 dev 환경 데이터 기준으로 생성된 실제 export 결과물이다. 데이터 품질은 참고용이며 실제 운영 데이터와 다르다. 운영 환경 구현 후 갱신될 예정이다.

형식설명다운로드
XML (FHIR Bundle)local export 실행 결과. FHIR Bundle 전체 구조 및 실제 데이터 형태.health-export-sample.xml
PDFlocal export 실행 결과. 사용자에게 제공되는 PDF 뷰.health-export-sample.pdf

다음은 XML(FHIR Bundle)의 머리 부분 발췌다 — Bundle(MIO 프로파일) + Composition(4개 섹션 중 Fragebögen) 구조를 보여준다. 전체는 위 다운로드 링크 참조.

<Bundle xmlns="http://hl7.org/fhir">
<id value="fbb3fb01-d89b-413c-a0dc-3753fb6dda77"/>
<meta>
<lastUpdated value="2026-06-04T05:17:59.597Z"/>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_MIO_DIGA_Bundle|1.1.0"/>
</meta>
<identifier>
<type>
<coding>
<system value="http://terminology.hl7.org/CodeSystem/v2-0203"/>
<code value="RI"/>
<display value="Resource identifier"/>
</coding>
</type>
<system value="urn:ietf:rfc:3986"/>
<value value="urn:uuid:fbb3fb01-d89b-413c-a0dc-3753fb6dda77"/>
</identifier>
<type value="document"/>
<timestamp value="2026-06-04T05:17:59.597Z"/>
<entry>
<resource>
<Composition>
<meta>
<profile value="https://fhir.kbv.de/StructureDefinition/KBV_PR_MIO_DIGA_Composition|1.1.0"/>
</meta>
<extension url="https://fhir.kbv.de/StructureDefinition/KBV_EX_MIO_DIGA_Betrachtungszeitraum">
<valuePeriod>
<start value="2026-05-28"/>
<end value="2026-06-04"/>
</valuePeriod>
</extension>
<status value="final"/>
<type>
<coding>
<system value="http://loinc.org"/>
<code value="53576-5"/>
<display value="Personal health monitoring report Document"/>
</coding>
</type>
<title value="DiGA-Export"/>
<section>
<title value="Fragebögen"/>
<entry><reference value="Questionnaire/8c153299-..."/></entry>
<entry><reference value="QuestionnaireResponse/daf34fbf-..."/></entry>
</section>
<!-- Ziele / Befunde / Beurteilungen 섹션 생략 -->
</Composition>
</resource>
</entry>
<!-- Patient / Device / DeviceDefinition / Organization / Observation / Goal ... entry 생략 -->
</Bundle>

10. 데이터 보관 및 삭제 정책

local export 산출물(FHIR Bundle XML, PDF)은 사용자 다운로드를 위해 GCS 버킷에 임시 저장된 뒤 lifecycle 규칙으로 자동 삭제된다. 데이터 최소화 정책에 따라 보관 기간을 GCS 최소 단위로 둔다.

10.1 저장 위치

항목
버킷명dta-cloud-de-{env}-health-data-export (env: dev/stage/prod)
리전europe-west3 (DiGA EU 데이터 레지던시)
접근 제어비공개, uniform bucket-level access, PII 전용 버킷
IaCinfrastructure/terragrunt/{env}/regions/europe-west3/cloud-storage/health-data-export/terragrunt.hcl

10.2 삭제 정책 (lifecycle)

  • lifecycle rule: age = 1 — 객체 생성 1일 후 자동 삭제(GCS 최소 단위).
  • 전용 버킷이라 prefix 조건 없이 버킷 전체에 적용.

10.3 lifecycle 실행 지연 (중요)

GCS lifecycle 은 비동기·best-effort 이며 GCP 는 삭제 시각의 정시성을 보장하지 않는다.

  • condition 충족 후 보통 24시간 이내 실행되지만, 경우에 따라 더 길어질 수 있다.
  • lifecycle 설정 변경도 적용까지 최대 24시간이 걸리며, 규칙 제거 후에도 최대 24시간 동안 동작할 수 있다.
  • 실측 사례: 6/2 생성된 객체가 6/5 에 삭제됨(약 3일 지연). 즉 age = 1삭제 하한일 뿐, 정확한 삭제 시각은 보장되지 않는다.
  • 따라서 "특정 시점까지 반드시 삭제"가 규제상 요구된다면 lifecycle 단독으로는 불충분하며, 별도 강제 삭제 로직이 필요하다.

10.4 Soft Delete — 복구 및 삭제 시점 추적

버킷에 GCS 기본 soft delete(보관 7일) 가 적용되어 있다. lifecycle 로 삭제된 객체도 7일간 복구 가능 상태로 보존된다.

  • 복구: gcloud storage restore (hard delete 시각 전까지).

  • 삭제 시점 추적: 삭제된 객체의 softDeleteTime 메타데이터에 실제 삭제 시각이 기록된다.

    gcloud storage objects list "gs://dta-cloud-de-{env}-health-data-export/**" --soft-deleted \
    --project=dta-cloud-de-{env} \
    --format="table(name, timeCreated, softDeleteTime, hardDeleteTime)"
  • 중요: lifecycle 에 의한 삭제는 Cloud Audit Logs 에 기록되지 않는다(수동 API 삭제만 기록). 따라서 soft delete 메타데이터가 삭제 시점을 확인하는 사실상 유일한 수단이다. usage/access 로그(별도 버킷 송출)는 현재 구성되어 있지 않다.

10.5 BSI 규제 대응 (O.Data_5 / O.Data_6)

BSI TR-03161 은 민감 데이터 삭제를 목적 기준(purpose-bound) 으로 규정할 뿐 구체적 삭제 기한(일수)은 명시하지 않는다. 대신 보관 기간을 제조사가 정의·문서화하도록 요구한다(이 §10 이 그 증빙에 해당).

BSI 항목요구사항본 버킷의 대응
O.Data_5 (P.1-072)민감 데이터를 처리 기간을 초과하여 보관 금지처리 목적 종료 즉시 삭제 대상 → lifecycle age=1 로 자동 삭제
O.Data_6 (P.1-073)데이터 최소화·목적 제한, 데이터별 보관 기간 문서화본 §10 에 위치·목적·보관 기간 명시 (DFD 증빙)

처리 목적 및 보관 상한 정의 (감사 대비)

항목정의
처리 목적local export 산출물(FHIR Bundle XML, PDF)을 사용자 다운로드용으로 일시 제공
목적 종료 시점사용자 다운로드 완료(또는 미수령 시 생성 후 단기 경과)
보관 상한lifecycle age=1 (생성 1일 후 삭제). soft delete 7일은 복구·삭제 추적용이며 처리 목적의 보관이 아님