# CHANGELOG — MASHePRO-Kor

## [2026-04-28]

### 수행 내용
- MASH RCT용 한국어 ePRO 통합 키트 24h MVP 빌드.
- 5종 척도 한국어판 정의 + scoring + 검증 상태 메타데이터 (`scales.py`).
- 일정·푸시·dropout risk 모듈 (`notifications.py`).
- 검정력 시뮬레이션 (z-test + Monte Carlo, `power.py`).
- REDCap data dict / CDISC SDTM-QS / 한국 DSMB / 영문 sponsor 보고서 export (`exports.py`).
- Python CLI 진입점 (`backend.py`) — `schedule` / `power` / `gendata` / `export` / `demo` 5개 서브커맨드.
- 환자용 한국어 PWA 단일 파일 (`epro.html`) — localStorage, 진행률, JSON export, 검증 라벨.
- PI dashboard 단일 파일 (`dashboard.html`) — KPI, 사이트 SVG 차트, power 표, 환자 표 + alert.
- 합성 데이터 50명 × 12주 (`data/patients.json`).
- README · QA.md · CHANGELOG.md.

### 주요 결정 사항
- **Python 표준 라이브러리만 사용** (numpy/scipy 없이 수치). 이유: "외부 패키지 최소화" 제약 + 빌드 환경 의존성 제거. `_norm_ppf` Beasley-Springer-Moro 근사로 z-table 대체.
- **Chart.js 대신 inline SVG**: 외부 CDN 의존 제거, 단일 파일 자족.
- **dashboard 합성 데이터를 inline JSON 으로 임베드** (`<script type="application/json">`): 파일 경로 의존 없이 브라우저에서 즉시 동작.
- **CLDQ-NASH-Kor 는 단축형 8문항 데모만 포함**: 정식 36문항 한국어 라이선스 미보유. README/QA에서 명시.
- **PROMIS T-score 와 EQ-5D-5L value set 은 데모 근사**: 정식 IRT/Kim 2016 가중치는 라이선스/검증 후 교체 필요. 코드에서 `approx: True` + `note` 명시.
- **chronotype 기반 push 추천**: 단순 휴리스틱 (lark/neutral/owl × 3시간대) — 시연 용도. 실제 ML 기반 최적화 별도 작업.
- **dropout risk = 0.7 × (1 − 4w_compliance) + PHQ-9 가중**: 단순 가산 모델, 시연용. 실제 시험에는 multivariate Cox/logistic 권고.

### 변경된 파일
- `scales.py` — 5종 척도 정의 + scoring 함수 5개 + ALL_SCALES 리스트.
- `notifications.py` — `generate_schedule`, `suggest_push_time`, `score_compliance_window`, `dropout_risk`.
- `power.py` — `sample_size_two_proportions`, `adjust_for_compliance`, `compliance_scenarios`, `power_at_n`, `monte_carlo_power`, CLI.
- `exports.py` — REDCap dict, SDTM QS, DSMB-KR, sponsor-EN 빌더.
- `backend.py` — 진입점, 합성 데이터 generator, 통계 집계, 5 서브커맨드.
- `epro.html` — 환자용 단일 PWA 데모.
- `dashboard.html` — PI dashboard (inline 데이터 + SVG 차트).
- `_dashboard_template.html`, `_build_dashboard.py` — dashboard 빌드 헬퍼.
- `data/patients.json` — 합성 50명 × 12주.
- `data/dashboard_data.json` — dashboard inline payload.
- `exports/*.csv`, `exports/*.md` — 4종 export 산출물.
- `README.md`, `QA.md`, `CHANGELOG.md`.

### 재현 방법
```bash
cd "/Users/sangjoonpark/2026 metabolic daily idea/projects/2026-04-28-3-mash-epro-kor"

# 1. 합성 데이터 + 통계 + export 한 번에
python3 backend.py demo

# 2. dashboard.html 재빌드 (inline JSON 갱신)
python3 _build_dashboard.py

# 3. 검수
for f in scales.py notifications.py power.py exports.py backend.py; do
  python3 -c "import ast; ast.parse(open('$f').read())" && echo "OK: $f"
done
python3 backend.py --help
python3 backend.py power --p-control 0.10 --p-treatment 0.25 --compliance 0.70

# 4. 브라우저
open epro.html
open dashboard.html
```

### 검수 결과 요약
- 모든 .py `ast.parse` PASS
- `backend.py demo` end-to-end PASS
- HTML 5종 척도 + 검증 라벨 + 컴플라이언스 표 + power 표 모두 PASS
- 검정력 단조성 (compliance↓ → n↑) PASS
- 상세: `QA.md`
