# QA 검수 로그 — DMChronoTx-Hypo

**검수 일자**: 2026-05-08
**빌드 위치**: `/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-05-08-1-dm-chrono-tx-hypo/`

---

## 자동 검수 결과

| # | 명령어 | 결과 | 출력 요약 |
|---|---|---|---|
| 1 | `python3 -c "import ast; ast.parse(open('main.py').read())"` | OK | AST 구문 통과 |
| 2 | `python3 -c "import json; json.load(open('data/drugs.json'))"` | OK | drugs.json 로드 (50종) |
| 3 | `python3 -c "import json; json.load(open('data/time_splits.json'))"` | OK | 12종 |
| 4 | `python3 -c "import json; json.load(open('data/outcomes.json'))"` | OK | 20종 |
| 5 | `python3 -c "import json; json.load(open('data/corpus.json'))"` | OK | 85개 abstract |
| 6 | `python3 -c "import json; json.load(open('data/korean_cohorts.json'))"` | OK | 6개 cohort |
| 7 | `python3 -c "import json; json.load(open('data/labels.json'))"` | OK | 24개 라벨 |
| 8 | `python3 -c "import json; json.load(open('data/guidelines.json'))"` | OK | 4종 가이드라인 |
| 9 | `python3 main.py --help` | OK | argparse 도움말 정상 출력 |
| 10 | `python3 main.py --top 5` | OK | 다양화된 top 5 cell 출력 (semaglutide, dulaglutide, tirzepatide, empagliflozin, dapagliflozin) |
| 11 | `python3 main.py --card` | OK | 세마글루타이드 × 주1회 × PPG 한국어 hypothesis card |
| 12 | `python3 main.py --protocol` | OK | SPIRIT 6a~31 항목 호환 protocol skeleton |
| 13 | `python3 main.py --proposal` | OK | KHIDI/NRF/NIH/IIT proposal abstract |
| 14 | `python3 main.py --drug Empagliflozin` | OK | 영문 약물명 매칭 |
| 15 | `python3 main.py --drug 세마글루타이드` | OK | 한글 약물명 매칭 |
| 16 | `python3 main.py --stats` | OK | 12,000 cells, published 84, 미탐색 11,916 |
| 17 | `python3 main.py --top 10 --card --card-rank 5 --proposal` | OK | 복합 옵션 정상 |

---

## 의도 부합 점검

| 항목 | 결과 | 비고 |
|---|---|---|
| 5대 기능 1. literature ETL + entity 정규화 | OK | mock corpus 85개 → RxNorm/MeSH 정규화 dict 매핑 |
| 5대 기능 2. 3D ontology + 미탐색 cell ranking | OK | 50×12×20 = 12,000 cells, novelty + plausibility + 다양성 페널티 |
| 5대 기능 3. Korean cohort + 진료환경 feasibility | OK | NHIS-HEALS/KoGES/HEXA/NHIS Senior/K-CURE/KNHANES + 보험·adherence·sleep 점수 |
| 5대 기능 4. FDA/EMA/MFDS + KDA/ADA/EASD cross-link | OK | 24개 약물 라벨, 4종 가이드라인 |
| 5대 기능 5. 한국어 hypothesis card + protocol skeleton + grant proposal | OK | 한국어 출력, SPIRIT/STROBE/IIT 호환 골격 |
| Python 표준 라이브러리만 사용 | OK | json/argparse/random/math/datetime/sys/os 만 사용 |
| 외부 네트워크 호출 없음 | OK | requests/urllib 등 import 없음 |
| 한국어 출력 (영문 키워드 병기 가능) | OK | 한글 우선 + 영문 병기 |
| 디스클레이머 README + 출력 모두 포함 | OK | DISCLAIMER 상수 모든 카드/프로토콜/프로포절 말미에 출력, README에 별도 섹션 |

---

## 보정·개선 사항

1. **plausibility 보정**: 초기 구현은 `cls in ("GLP1RA", "GIP/GLP1RA") and s == "once_weekly"` 모든 GLP1RA에 0.95 부여 → liraglutide(매일 약물)도 weekly로 매핑되는 비현실적 결과 발생.
   - **수정**: `WEEKLY_GLP1 = {Semaglutide, Dulaglutide, Tirzepatide}` 화이트리스트로 분리. daily GLP1RA × once_weekly 조합은 0.2로 페널티.
2. **ranking 다양성 페널티**: 같은 약물·같은 split이 top을 도배하는 문제 → drug별 1개·(drug,split)별 1개 우선 선택, 부족하면 drug별 최대 2까지 허용하는 round-robin 후처리 추가.
3. **outcome × class sanity**: statin × HbA1c, ARB × TIR 등 비현실 조합은 `min(score, 0.3~0.4)` 상한 도입.

---

## 최종 결과

✅ **빌드 완료** — 17개 자동 검수 항목 모두 통과
