# QA 검수 로그 — ObesityRecruitFeas-Kor

검수 일자: 2026-05-17
검수 환경: macOS (darwin), python3 / pandas 2.3.3 / numpy 2.0.2 / streamlit 설치됨

---

## 1. AST 파싱 검사

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

| 파일 | 결과 |
|---|---|
| `core.py` | ✅ AST OK |
| `app.py` | ✅ AST OK |
| `main.py` | ✅ AST OK |
| `data/generate_knhanes_synthetic.py` | ✅ AST OK |

→ 4개 파일 모두 구문 오류 없음.

---

## 2. 합성 데이터 생성 및 CSV 로드

명령: `python3 data/generate_knhanes_synthetic.py`

- ✅ `data/knhanes_synthetic.csv` 생성 확인 (7,000행 × 25열, 약 657 KB)
- ✅ seed=20260517 고정 — 재실행 시 동일 산출물 (재현 가능)
- ✅ `weight` 컬럼 포함, 가중치 합 = 44,000,003 (한국 성인 인구 외삽 기준)

가중 유병률 (공개 추세 대비):

| 지표 | 목표 | 실측 | 판정 |
|---|---|---|---|
| 비만 (BMI>=25) | ~38% | 39.7% | ✅ |
| 고도비만 (BMI>=30) | ~7% | 6.8% | ✅ |
| T2DM | ~12-13% | 10.6% | ⚠️ 약간 낮음(허용 범위) |
| 고혈압 | ~28-30% | 27.9% | ✅ |
| 이상지질혈증 | ~38-40% | 37.4% | ✅ |
| 현재 흡연 | ~18-20% | 19.6% | ✅ |
| 최근 GLP-1RA | ~1-2% | 0.8% | ⚠️ 약간 낮음(드문 사건, 허용) |

CSV 로드 테스트: `core.load_microdata()` → ✅ 7,000행 25열, 필수 컬럼 검증 통과.

---

## 3. CLI 동작 검사

| 명령 | 결과 |
|---|---|
| `python3 main.py --help` | ✅ usage/옵션 도움말 정상 출력, 면책 epilog 포함 |
| `python3 main.py --demo` | ✅ 예제 기준(BMI>=30, 동반질환 1개 이상)으로 전체 5개 분석 출력 |
| `python3 main.py --bmi-min 35 --age-max 60 --comorbidity t2dm --comorbidity-count 1 --target-n 100 --sites 4 --screening-per-site 4` | ✅ 좁은 기준에서도 정상 — 적격 표본 4명, tornado 정렬 정상 |

→ 데모 출력에 면책 문구 + "실제 KNHANES 아님" 주석 포함 확인.

---

## 4. Streamlit 앱 검사

- ✅ `app.py` 모듈 import 무오류 (bare 모드 ScriptRunContext 경고는 정상)
- ✅ `core` 함수 5종(estimate_population / sensitivity_analysis /
  screen_fail_analysis / recruitment_timeline / generate_report) 호출 경로 확인
- 비고: 실제 브라우저 렌더링은 `streamlit run app.py` 필요 (오프라인 검수 범위 외).
  핵심 로직은 `core.py`에 분리되어 CLI로 전체 검증 완료.

---

## 5. 기능별 동작 확인 (core.py)

| 기능 | 확인 내용 | 결과 |
|---|---|---|
| 1. 적격성 기준 빌더 | BMI/연령/동반질환/제외기준 조합 → 가중 외삽 + 95% CI | ✅ |
| 2. 기준 민감도 | 단독 완화 시나리오 생성·delta 내림차순 정렬 (tornado) | ✅ |
| 3. screen-fail 예측 | 포함/적격 차이 → screen-fail율 + 제외기준별 분해 + 필요 스크리닝 환산 | ✅ |
| 4. 모집 timeline | Monte-Carlo n_sim=2000, P10/P50/P90 + 도달 확률 | ✅ |
| 5. feasibility 리포트 | 국문 프로토콜 형식 텍스트 생성, 면책 포함 | ✅ |

---

## 6. 제약 준수 확인

- ✅ 외부 네트워크/API 호출 없음 — 전 과정 오프라인
- ✅ 전역 패키지 설치 없음 — 기존 설치분(pandas/numpy/streamlit) 사용,
  미설치 시 README 안내 + main.py 가드 처리
- ✅ 합성 데이터에 "실제 KNHANES 아님 — 공개 유병률 추세 기반 합성" 명시
  (생성 스크립트 docstring, CSV 생성 메시지, README, core.DISCLAIMER 주석)
- ✅ 의학적 안전성 면책 문구를 README·CLI(--demo/--help epilog)·앱(st.warning)에 포함

---

## 종합 판정: ✅ 통과

4개 Python 파일 AST 통과, 합성 CSV 생성·로드 정상, CLI `--help`/`--demo`/
커스텀 실행 정상, Streamlit 앱 import 무오류. 합성 데이터 유병률은 공개
추세 근사 범위 내(T2DM·GLP-1RA만 소폭 낮으나 드문 사건 특성상 허용).

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