# CHANGELOG — FrailDMDeprescribe-Kor

## [2026-05-20]

### 수행 내용
- metabolic daily idea step2 자동 빌드로 아이디어 #1 (FrailDMDeprescribe-Kor / 프레일디엠디프리스크라이브코어) MVP 생성.
- Streamlit 기반 standalone 노인당뇨 코호트 대시보드 (5개 핵심 기능 탭) 구현.
- 합성 노인당뇨 cohort 데이터(n=360, 39 컬럼, seed=20260520) 생성 스크립트 작성.
- KDA 2023 노인당뇨 / ADA 2025 Older Adults / AGS Beers 2023 / STOPP/START v3 / KAFM polypharmacy 권고 라이브러리(`assets/guidelines.json`) 한국어 정리.
- QI 외래 리포트 export(.docx / .txt) 기능, python-docx 미설치 fallback 포함.
- 의학 디스클레이머 README + app UI 양쪽 명시.

### 주요 결정 사항
- **Streamlit 채택**: 카테고리="웹기반 대시보드"이며 standalone 오프라인 동작이 필수 → Flask/FastAPI보다 데이터 시각화 코호트 도구로 가벼움.
- **lifelines를 hard dependency가 아닌 soft fallback**: lifelines 미설치 환경에서도 대시보드가 동작하도록 내장 간이 Kaplan-Meier estimator(`_km_estimate`) 구현. requirements.txt에는 lifelines 명시되지만 ImportError 시 fallback 자동 사용.
- **python-docx도 soft fallback**: 미설치 시 txt 리포트만 제공. docx만 hard requirement로 두면 일부 환경에서 앱 자체가 죽을 수 있어 회피.
- **합성 데이터 phenotype 분포 (robust 40% / pre-frail 35% / frail 25%)**: 한국 노인당뇨 코호트(KNHANES, KARE) 일반화 비율 참조. 실제 빌드 결과는 36/38/26%로 유사.
- **HbA1c band 자동 분류**: KDA 2023 표를 함수 `kda_target_band()`로 코드화. EoL은 lower bound 없음(`None`) 처리하여 overtreatment 판단에서 제외.
- **Deprescribing 후보 기준**: SU 또는 insulin 사용 AND (frail OR overtreatment) — KDA/AGS Beers/STOPP 공통 신호.

### 변경된 파일
- `app.py` — Streamlit 진입점 (5 탭 구성, ~450 lines).
- `data/generate_synthetic.py` — 합성 cohort 생성기 (재현성 seed=20260520).
- `data/synthetic_frail_dm_cohort.csv` — 360 × 39 합성 데이터 (실행 결과 산출).
- `assets/guidelines.json` — 가이드라인 권고 라이브러리.
- `requirements.txt` — 의존성 명시.
- `README.md` — 사용 안내 + 의학 디스클레이머 + 출처.
- `QA.md` — 검수 로그.

### 재현 방법
```bash
cd "/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-05-20-1-frail-dm-deprescribe-kor"
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 data/generate_synthetic.py        # 합성 데이터 생성
streamlit run app.py                       # 대시보드 실행 (http://localhost:8501)
```

### 검수 결과
모든 7개 필수 검수 통과 — 자세한 로그는 `QA.md` 참조.
