# CHANGELOG — MASLDNITSchedule-Kor

## [2026-05-17]

### 수행 내용
- MASLD/MASH 관찰연구 비침습검사(NIT) 종단 측정 스케줄 설계 계산기 MVP 빌드.
- 6개 핵심 기능 구현: 스케줄 빌더, MDC 산출기, 기간 vs 진행률 tradeoff,
  visit window 최적화·결측 Monte-Carlo, NIT 비용효율 frontier, 설계 리포트 생성.
- 5종 NIT(FIB-4, ELF, VCTE_LSM, MRE, MRI_PDFF) 변동성·진행률·단가 라이브러리 작성.
- CLI(`main.py`), Streamlit UI(`app.py`), 순수 계산 모듈(`core.py`) 3-레이어 구성.
- 필수 검수 6항목 + 추가 검수 5항목 전체 통과 (QA.md 기록).

### 주요 결정 사항
- **3-레이어 분리**: 계산 로직을 `core.py`(numpy/scipy만)로 분리, Streamlit
  미설치 환경에서도 `main.py` CLI로 전체 계산이 가능하도록 함. 명세의
  "오프라인 CLI 시연 가능" 요구 충족.
- **scipy 선택적 의존**: scipy 없으면 내장 z값 테이블 + `math.erf` 기반
  정규분포 근사로 대체. core import 자체는 numpy만 있으면 성공.
- **검정력 모형 보강**: 초기 집단 평균 기울기 검정력이 표본 120명에서 100%로
  포화되어 스케줄 비교가 무의미했음. 임의기울기 분산(τ²)을 해석·시뮬 모형에
  모두 추가하고, 스케줄 품질에 직접 민감한 **피험자 단위 변화 검출률**과
  **엔드포인트 완전성** 지표를 신설하여 기능 4·6의 1차 비교 기준으로 채택.
  (대안: 표본 수를 인위적으로 줄여 포화를 피하는 방법 — 통계적으로 부정직하여
  기각.)
- **데이터 추정치 명시**: NIT 변동성·진행률·단가는 모두 발표 문헌 기반 추정치로,
  JSON `note`·`_meta.disclaimer`에 출처 미상 여부와 추정 범위를 명기.
- **의학적 안전성**: 디스클레이머를 README·`core.DISCLAIMER`·CLI/앱 출력에
  모두 포함 (생물통계학자 검토 필수, 변동성 값은 문헌 추정치).

### 변경된 파일 (전부 신규)
- `core.py` — MDC·tradeoff·검정력·결측 Monte-Carlo·비용 frontier·리포트 순수 함수.
- `app.py` — Streamlit 6탭 UI.
- `main.py` — argparse CLI (`--demo`, `--help`, 개별 NIT 리포트).
- `data/nit_variability.json` — NIT 5종 변동성·재현성·진행률·단가 라이브러리.
- `README.md` — 목적·도메인·기능·실행법·방법론·출처·검수 체크리스트.
- `QA.md` — 검수 로그.
- `CHANGELOG.md` — 본 문서.

### 재현 방법
1. 디렉토리 이동:
   `cd "2026-05-17-3-masld-nit-schedule-kor"`
2. 의존성 확인: `python3 -c "import numpy, scipy"` (scipy는 선택).
   필요 시 `pip install --user numpy scipy streamlit`.
3. CLI 전체 데모: `python3 main.py --demo`
4. 도움말: `python3 main.py --help`
5. 개별 NIT 설계: `python3 main.py --nit VCTE_LSM --followups 3 --interval 6`
6. GUI: `streamlit run app.py`
7. 검수: `python3 -c "import ast; ast.parse(open('core.py').read())"` (core/app/main),
   `python3 -c "import json; json.load(open('data/nit_variability.json'))"`,
   `python3 main.py --help`, `python3 main.py --demo`.
