# QA Log — InsuTrialKit-Kor

## 환경
- Python 3.9.6 (target 3.11+)
- pandas 2.3.3, numpy 2.0.2, PyYAML 사용 가능 (실제로는 JSON으로 effect_sizes 처리하여 PyYAML 불필요)
- 외부 네트워크 호출 없음, 표준 라이브러리 + pandas/numpy만 사용

## 1. AST parse — 모든 .py 파일
```
OK: main.py
OK: outcomes.py
OK: power.py
OK: report.py
OK: adapters/__init__.py
OK: adapters/dexcom.py
OK: adapters/libre.py
OK: adapters/tandem.py
OK: adapters/medtronic.py
OK: adapters/stub_devices.py
OK: data/gen_synth.py
```

## 2. CLI help
`python3 main.py --help` 정상 동작 → 5개 서브커맨드 (ingest, outcomes, samplesize, gendata, demo) 표시 확인.

## 3. End-to-end demo
`python3 main.py demo` 통과:
- 합성 raw 4개 (Dexcom/Libre/Tandem/Medtronic) 생성 → 약 12k rows/file
- ingest 단계: 4개 어댑터 모두 dispatch 성공, 24h break-in cut 후 44,435 rows / 6 subjects
- outcomes 단계: out.csv → report.md + report_outcomes.csv 생성
- samplesize 단계: default + KR tertile-stratified 출력

## 4. Outcome 산출 sanity check
| subject_id | TIR_70_180_pct | GMI_pct | CV_pct |
|---|---|---|---|
| SUBJ_01 | 82.77 | 6.83 | 23.54 |
| SUBJ_02 | 72.56 | 7.01 | 24.51 |
| SUBJ_03 | 72.43 | 7.02 | 25.48 |
- TIR ∈ [0, 100] ✅
- GMI ∈ [4, 14] ✅
- CV% 정상 범위 (T1DM 목표 <36%) ✅

## 5. Sample size sanity check
- ΔTIR=5%, SD=12%, α=0.05, power=0.8
  - z_(1-α/2)=1.96, z_(1-β)=0.8416
  - **N/arm = 91**, total=182
  - 목표 범위 90~100 ✅
- HbA1c tertile-stratified:
  - low (<7.0%, Δ=3.5, SD=10): N/arm=129
  - mid (7.0–8.5%, Δ=6.0, SD=12): N/arm=63
  - high (>8.5%, Δ=8.5, SD=14.5): N/arm=46
  - tertile별 효과 크기 차이 표시 ✅

## 6. 데이터 위생
- KST 타임스탬프 가정, 24h break-in 컷 적용 (47,856 → 44,435 rows로 정상 축소)
- gap detection (≥30min) 함수 동작 확인 (합성 데이터에서는 0건 — 1% dropout이 5분 단위라 30분 미만)
- sensor wear time% 산출 (98.8~100% 범위, 정상)

## 7. 한계 및 알려진 제약
- Stub adapters (Omnipod View, CamAPS, MiniMed 780G, Guardian 4)는 generic CSV에만 동작.
  실제 export 형식 처리하려면 각 device별 헤더 패턴 구현 필요.
- MAGE는 간이 추정 (peak-trough > 1 SD); 정식 알고리즘은 더 복잡.
- Korean reference effect size는 placeholder. 실제 KDA/KAID 발표 데이터로 교체 필요.
- pandas.to_markdown 의존성(`tabulate`)이 환경에 없어 자체 markdown renderer로 대체.
- pandas concat FutureWarning 발생 (all-NA 컬럼 관련) — 현재 동작은 정상이나 향후 수정 필요.

## 결과
PASSED — 모든 검수 항목 통과.
