# QA 검수 로그 — GlycemicNIMargin-Kor

검수일: 2026-05-17
검수자: 자동 빌드 파이프라인

---

## 1. 구문 파싱 검사 (`ast.parse`)

| 파일 | 결과 |
|------|------|
| `core.py` | ✅ OK |
| `app.py` | ✅ OK |
| `main.py` | ✅ OK |

명령: `python3 -c "import ast; ast.parse(open('<file>').read())"`

---

## 2. JSON 파싱 검사

| 파일 | 결과 |
|------|------|
| `data/margin_presets.json` | ✅ OK |

명령: `python3 -c "import json; json.load(open('data/margin_presets.json'))"`

---

## 3. CLI 동작 검사

| 명령 | 결과 |
|------|------|
| `python3 main.py --help` | ✅ 도움말 정상 출력 (면책 포함) |
| `python3 main.py --demo` | ✅ 5개 기능 전체 정상 계산·출력 |
| `python3 main.py --margin-fixed 0.8 0.5` | ✅ NI_margin_M2=0.4 정상 |
| `python3 main.py --samplesize 0.4 1.0` | ✅ MMRM 총 140명, DE=0.706 정상 |

---

## 4. 수치 정확성 검사

### norm_ppf (scipy 없을 때 graceful degradation 근사) vs scipy
| p | scipy | core.norm_ppf | 일치 |
|---|-------|---------------|------|
| 0.025 | -1.959964 | -1.959964 | ✅ |
| 0.5   | 0.0 | 0.0 | ✅ |
| 0.8   | 0.841621 | 0.841621 | ✅ |
| 0.975 | 1.959964 | 1.959964 | ✅ |
| 0.99  | 2.326348 | 2.326348 | ✅ |

Acklam 유리근사 정확도 1e-6 이내 — graceful degradation 검증 통과.

### 데모 시나리오 산출 sanity check
- HbA1c NI, 활성약-위약 0.8%, 50% 보존 → δ=0.4% ✅ (수식 일관)
- 단일시점 NI t-test (δ=0.4, SD=1.0, α=0.025, power=0.80) → 총 198명
  (arm별 99명). 손 검산: n/arm = 2×(1.96+0.842)²×1²/0.4² = 2×7.851/0.16
  ≈ 98.1 → 올림 99 ✅
- MMRM 종단 DE=0.653, 결측 inflation(MAR 15%)=1.081 → 총 DE=0.706,
  최종 140명. 단순 ANCOVA 232명 대비 39.7% 절감 ✅
- 공동 1차(HbA1c+TIR, r=0.7, Hochberg) → 496명, 공동검정력 80.1% ✅

---

## 5. 검수 중 발견·수정 사항

| # | 발견 | 수정 |
|---|------|------|
| 1 | 탈락 시뮬레이터 데모가 MMRM 축소 후 n(70/arm)을 기준으로 평가해 검정력이 58~64%로 비현실적으로 낮게 표시됨 | `run_demo_scenario`와 app 탭④ 기본값을 **단일시점 계획 표본수**(99/arm) 기준으로 변경. 수정 후 히트맵 78%(5% 탈락)~68%(25% 탈락), MAR_late 최취약 — 합리적 |
| 2 | 영문 규제문서 "weeks 3 post-baseline time points" 어색한 표현 | "3 post-baseline visits"로 수정 |

두 항목 모두 재검수 후 ✅ 통과.

---

## 6. 종합 판정

**✅ PASS** — 모든 필수 검수 항목 통과.

- 구문 파싱: 3/3 ✅
- JSON 파싱: ✅
- CLI 동작(--help, --demo): ✅
- 수치 정확성: ✅
- 면책 문구: README / CLI 출력 / Streamlit 앱 모두 포함 ✅
- 외부 네트워크 호출: 없음 ✅
- 전역 패키지 설치: 없음 ✅

재시도 횟수: 0 (1차 통과, 검수 중 품질 개선 2건 반영).

### 알려진 한계 (참고용 도구로서 명시)
- 공동 1차 endpoint 다중성은 2개 endpoint까지 정확 이변량 계산, 3개 이상은
  첫 2개로 근사 (MVP 범위).
- 중증저혈당률 endpoint는 연속형 t-test로 근사 처리 (보수적). 실제 설계는
  Poisson/negative-binomial 권장 — `margin_presets.json` 주석에 명시.
- MMRM 설계효과는 closed-form 근사이며, unstructured 공분산의 정밀 산정은
  실제 파일럿 데이터 기반 공분산 추정이 필요.
