# QA 검수 로그 — MASLDNITSchedule-Kor

검수 일자: 2026-05-17
검수 환경: macOS (darwin 25.4.0), Python 3, numpy 2.0.2, scipy 1.13.1, streamlit 1.50.0

---

## 1. 필수 검수 항목 (빌드 명세 지정)

| # | 검수 항목 | 명령 | 결과 |
|---|-----------|------|------|
| 1 | core.py 구문 파싱 | `python3 -c "import ast; ast.parse(open('core.py').read())"` | ✅ PASS |
| 2 | app.py 구문 파싱 | `python3 -c "import ast; ast.parse(open('app.py').read())"` | ✅ PASS |
| 3 | main.py 구문 파싱 | `python3 -c "import ast; ast.parse(open('main.py').read())"` | ✅ PASS |
| 4 | nit_variability.json JSON 파싱 | `json.load(...)` — NIT 5종 확인 | ✅ PASS |
| 5 | `python3 main.py --help` | 정상 출력, exit 0 | ✅ PASS |
| 6 | `python3 main.py --demo` | 6개 기능 전체 출력, exit 0 | ✅ PASS |

재시도: 불필요 (전 항목 1회 통과).

---

## 2. 추가 검수 항목

| # | 검수 항목 | 결과 |
|---|-----------|------|
| 7 | 5종 NIT 전체 설계 리포트 생성 (`generate_design_report`) | ✅ PASS |
| 8 | scipy 미설치 시뮬레이션 — 내장 z값/`math.erf` 대체 동작 | ✅ PASS (z=1.96, norm_cdf(1.96)=0.975) |
| 9 | 엣지 케이스: 추적 visit 1회(`--followups 1`) | ✅ PASS |
| 10 | 개별 리포트 `--report MRI_PDFF` 등 | ✅ PASS |
| 11 | app.py 구조 안전성 (streamlit 미실행 import 검증) | ✅ PASS |

---

## 3. 빌드 중 발견·수정 사항

### 3-1. 집단 검정력 포화 문제 (수정 완료)
- **증상**: 초기 `slope_power_analytic`가 측정오차(sem)만 분산으로 사용 →
  표본 120명에서 모든 NIT 검정력이 100%로 포화, visit window/결측 비교가
  무의미해짐.
- **원인**: 종단 기울기 분산에 피험자 간 진행률 이질성(τ²)이 누락됨.
- **수정**:
  1. `slope_power_analytic`에 임의기울기 분산 `τ² = (subject_slope_cv·slope)²`
     추가 → `Var(slope_i) = τ² + σ_e²/Sxx`.
  2. `simulate_missingness`에 피험자별 임의기울기
     `slope_i ~ N(true_slope, τ²)` 도입 (해석 모형과 일치).
  3. 그래도 집단 평균 가설은 n이 크면 포화되는 것이 통계적으로 정상이므로,
     스케줄 품질에 직접 민감한 **피험자 단위 변화 검출률**
     (`subject_detect_rate`: baseline~종료 |Δ|>MDC 비율),
     **엔드포인트 완전성**(`endpoint_completeness`) 지표를 신설하여
     기능 4·6의 1차 비교 기준으로 채택.
- **검증**: 데모에서 변화검출률 30.6%, 엔드포인트 완전성 72.3%(=0.85² 결측
  생존 확률과 일치) 등 해석 가능한 비포화 값 확인.

### 3-2. 잔여 한계 (의도된 동작)
- visit window(±2~12주)가 12개월 간격 위에서는 baseline~종료 span(24개월)에
  미치는 영향이 매우 작아 변화검출률 손실이 ~0%p로 나옴. 이는 통계적으로
  정직한 결과이며 인위적 과장을 하지 않음. 결측률 변화에는 엔드포인트
  완전성을 통해 정상적으로 민감하게 반응함.

---

## 4. 명세 부합 점검

- ✅ core.py: numpy/scipy만 사용, statsmodels 미사용. scipy 없으면 근사 대체.
- ✅ app.py: Streamlit UI, 6개 탭. streamlit 미설치 시 안내 후 종료.
- ✅ main.py: argparse CLI, `--demo`/`--help`/개별 NIT 리포트.
- ✅ data/nit_variability.json: NIT 5종, 변동성·품질기준·진행률·단가, 추정치
  명시 및 출처 미상 항목 note 표기.
- ✅ MDC = 1.96×√2×SEM 표준 공식, 출처 주석 명시.
- ✅ 의학적 안전성 디스클레이머 — README, core.DISCLAIMER, CLI/앱 출력 포함.
- ✅ 외부 네트워크/API 호출 없음, 전역 패키지 설치 없음.
- ✅ 가이드라인 출처(AASLD 2023, EASL-EASD-EASO 2024) README·리포트 표기.

---

## 5. 종합 판정

**✅ 전체 검수 통과** — 필수 항목 6/6, 추가 항목 5/5 PASS.
빌드 중 발견된 검정력 포화 문제는 모형 보강 + 신규 지표 도입으로 해결됨.
실패 항목 없음.
