## [2026-05-31]

### 수행 내용
- 아이디어 #2 ObesityEnrollFunnelOps-Kor MVP 자기완결 구현 (비만 RCT 진행 중 등록 funnel 운영 분석기, standalone Streamlit).
- 5개 기능 구현: (1) 6단계 funnel 분해+병목 자동식별, (2) screen-fail 근본원인 taxonomy+회피가능 분류, (3) site별 등록곡선 Bayesian(Poisson-Gamma) 재예측, (4) retention/dropout+early-responder 잔류편향, (5) 다양성/대표성 vs 역학 reference(카이제곱).
- 합성 데모 데이터 생성기 및 5개 CSV 생성, 순수 로직 단위테스트 27케이스 작성.

### 주요 결정 사항
- 계산 로직을 `funnel_logic.py`(streamlit/plotly 비의존)로 분리 → streamlit 컨텍스트 없이 단위테스트 가능(검수요건 5 충족).
- plotly 는 전역 설치 금지 제약에 따라 설치하지 않고 requirements.txt 에 pinned 명시만. 시각화는 app.py 에서만 사용하고 핵심 계산은 plotly 없이 검증.
- Bayesian 재예측은 Poisson-Gamma 켤레 사전 채택(폐형 사후, scipy.stats.gamma 로 CI). 데이터 누적 시 사후가 사전을 압도하도록 설계.
- 데모 데이터 RNG seed 20260531 고정으로 재현성 확보.

### 변경된 파일
- `app.py` - Streamlit 진입점, 5개 탭 UI + 상단 디스클레이머
- `funnel_logic.py` - 순수 분석 로직 모듈(단위테스트 대상)
- `test_logic.py` - 단위테스트 27케이스
- `requirements.txt` - pinned 의존성(streamlit/pandas/numpy/scipy/plotly)
- `README.md` - 목적/기능/실행법/검수체크리스트/출처
- `QA.md` - 검수 로그
- `data/generate_demo_data.py` - 합성 데이터 생성기
- `data/*.csv` - 합성 funnel/screen-fail/site/demographics/retention 데이터

### 재현 방법
1. `python3 data/generate_demo_data.py` 로 합성 CSV 생성
2. `python3 test_logic.py` 로 로직 검증(27/27 통과 기대)
3. `pip install -r requirements.txt` 후 `streamlit run app.py` 로 UI 실행(plotly 필요)
