# QA 검수 로그 — RodentCGMTel
**빌드일**: 2026-05-11
**빌드 에이전트**: build agent #1 (DM, 동물실험 도구)
**위치**: `/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-05-11-1-rodent-cgm-tel/`

## 환경
- Python: 3.9.6
- 사용 패키지: numpy, pandas, scipy, streamlit, matplotlib (core OK)
- **누락 패키지**: `plotly`, `statsmodels` → fallback 적용:
  - 시각화: matplotlib만 사용
  - 통계: scipy.stats `f_oneway` + Welch t-test (Bonferroni) — mixed-effect 대신
- 전역 패키지 설치 시도 없음 / 외부 네트워크 호출 없음 / pip install 없음

## 검수 결과

### 1. 구문 검사
| 파일 | 결과 |
|------|------|
| `main.py` | ✅ `ast.parse` OK |
| `analysis.py` | ✅ `ast.parse` OK |
| `species_reference.py` | ✅ `ast.parse` OK |
| `data/synthetic_generator.py` | ✅ `ast.parse` OK |

### 2. 합성 데이터 생성 (seed=42)
| 코호트 | 동물 수 | 행 수 |
|--------|---------|-------|
| `cohort_control.csv` (C57BL/6J) | 6 | 12,096 |
| `cohort_T2DM_db.csv` (db/db) | 5 | 10,080 |
| `cohort_T2DM_ob.csv` (ob/ob) | 5 | 10,080 |
| `cohort_T1DM_stz.csv` (STZ T1DM) | 5 | 10,080 |
| `cohort_DIO_HFD.csv` (DIO HFD) | 6 | 12,096 |
| `cohort_T2DM_zdf.csv` (ZDF rat) | 4 | 8,064 |
| **합계** | **31 mice/rats** | **62,496 samples** |

각 CSV는 표준 schema `[timestamp, animal_id, model, bg_mgdl, group, source_format]`로 저장됨. 7일 × 5분 interval = 2,016 samples/animal.

### 3. CSV 로드 검증
- `pd.read_csv(..., parse_dates=['timestamp'])` 정상 동작.
- 6개 모델 모두 dtypes 정상 (`timestamp: datetime64[ns]`, `bg_mgdl: float64`).
- control 코호트 BG 분포: mean 147 mg/dL, SD 25.3, [73.9, 235.5] — 생리적으로 합당.

### 4. `python3 main.py --demo` CLI 실행
✅ stdout 한국어 요약 정상 출력. 핵심 결과:

| group | mean_bg | TIR% | TAR% | CV% | MAGE | MODD | dawn |
|-------|---------|------|------|-----|------|------|------|
| control (WT) | 147.1 | 89.2 | 10.8 | 10.6 | 23.2 | 13.8 | +3.0 |
| DIO_HFD | 218.8 | 53.4 | 46.6 | 12.0 | 41.0 | 27.1 | +1.8 |
| T2DM_ob | 249.7 | 53.4 | 46.6 | 13.3 | 53.3 | 36.0 | +1.8 |
| T2DM_zdf | 325.1 | 6.4 | 93.6 | 12.8 | 66.5 | 48.2 | +0.2 |
| T2DM_db | 380.6 | 2.1 | 97.9 | 12.6 | 77.5 | 52.8 | +0.6 |
| T1DM_stz | 478.1 | 1.8 | 98.2 | 19.5 | 148.0 | 108.0 | -3.0 |

- 그룹별 평균 혈당 순서가 문헌과 일치(control < DIO < ob < ZDF < db/db < STZ).
- TIR ANOVA p=1.0e-8 — 군간 분리 명확.
- 모의 GTT 분석: baseline=493, peak=653 at 30min, AUC=102,390, iAUC=13,650, returned-to-baseline=True. 정상 동작.

### 5. 산출 파일 목록
- `README.md`
- `QA.md`
- `main.py`
- `analysis.py`
- `species_reference.py`
- `data/synthetic_generator.py`
- `data/synthetic/cohort_control.csv`
- `data/synthetic/cohort_T2DM_db.csv`
- `data/synthetic/cohort_T2DM_ob.csv`
- `data/synthetic/cohort_T1DM_stz.csv`
- `data/synthetic/cohort_DIO_HFD.csv`
- `data/synthetic/cohort_T2DM_zdf.csv`

## 알려진 한계
1. `plotly` 미설치 → 모든 시각화 matplotlib로 대체. UI 인터랙티브성 일부 감소.
2. `statsmodels` 미설치 → mixed-effect 대신 scipy ANOVA + Welch t-test (Bonferroni) 사용.
3. Streamlit 실행 시 `2026-05-11 ... missing ScriptRunContext` 경고는 CLI 모드에서 streamlit lazy import 시 발생하는 무해한 메시지 (실제 동작 영향 없음).
4. 합성 데이터는 실제 telemetry 특성을 *모사*한 것으로 실 실험과는 차이 존재. 실 데이터 사용 시 reference range 검증 필요.

## 결과
✅ **PASS** — 모든 검수 항목 통과. 1차 시도 성공, 재시도 불필요.
