# CHANGELOG — BariERASRecov-Kor

## [2026-05-27]

### 수행 내용
- BariERASRecov-Kor (바리이라스리커브코어) MVP 초기 빌드.
- 비만수술 perioperative ERAS recovery cohort 대시보드 — RYGB / SG / OAGB /
  SADI / DJB 5+ 술식 stratification.
- Streamlit + Plotly 대시보드 (`app.py`) + stdlib-only CLI (`main.py`) + 6개
  분석 모듈 (`modules/ingest.py`, `eras.py`, `procedure.py`, `hypo.py`,
  `outpatient.py`, `report.py`).
- 합성 코호트 데이터 생성기 내장: n=400, 4 ward, 5 surgeon, 5 술식.
- ERAS Society 비만수술 protocol 4-phase compliance (preop / intraop / POD0-3 /
  POD4-30), MBSAQIP/ASMBS analog quality measure 7개, 술식별 risk-adjusted
  Observed/Expected ratio (anchor: 문헌 기반 합성), post-bariatric hypoglycemia +
  dumping 시간 분포 + KDA 저혈당 가이드 L2+ 자동 flag, POD0-90 외래 transition
  + Kaplan-Meier-like 30-day readmission/mortality KM step.
- KASMBS / KSSO / KOSSO 학술대회 호환 KPI 리포트 한국어 + 영문 자동 생성 (md +
  python-docx 폴백) — `reports/bari_eras_recov_kor_{ko,en}.{md,docx}` 4 파일.
- 모든 노출 화면 / 리포트 / README 에 "참고용·연구용" 디스클레이머 +
  de-identification (SHA-256 trunc + date-shift) 명시.

### 주요 결정 사항
- **CLI 와 분석 모듈은 표준 라이브러리만으로 동작**하도록 설계 — `python3
  main.py --all` 실행에 가상환경 / pip 설치 불필요. Streamlit 대시보드는 옵션 (venv).
  → 검수자가 즉시 데이터·리포트 산출 가능, 친환경 fallback.
- `python-docx` 의존성은 **soft import** — 미설치 시 자동으로 `.md` 폴백.
  → 런타임 안정성 우선.
- Kaplan-Meier 는 `lifelines` 대신 **pure-stdlib step function** 구현. 외부 의존
  최소화 + 시연 목적에는 충분.
- 술식별 O/E ratio 의 expected rate 는 문헌 anchor 기반 **하드코딩 합성 상수**
  (`modules/procedure.py::EXPECTED_RATES`). 실데이터 운용 시 사이트별
  re-calibration 필요 — 코드 주석 / README에 명시.
- 데이터 모델은 6개 CSV 로 분리 (`patients` / `intraop` / `pod0_3` / `pod4_30` /
  `pod90_outpt` / `hypo_events`). REDCap export 와 직접 매핑 가능한 enum/bool
  중심 구조.

### 변경된 파일 (신규)
- `README.md` — 프로젝트 소개, 5개 핵심 기능, 실행법, 검수 체크리스트, 디스클레이머.
- `QA.md` — 자동 검수 결과 (구문 9/9, --help, --gen-data, --analyze, --report 모두 PASS).
- `CHANGELOG.md` — 이 파일.
- `requirements.txt` — pinned (streamlit/plotly/pandas/numpy/scikit-learn/
  lifelines/statsmodels/matplotlib/python-docx).
- `main.py` — argparse CLI, 5개 액션 (--gen-data / --analyze / --report / --all).
- `app.py` — Streamlit 7-tab dashboard (ERAS radar / MBSAQIP / procedure / hypo
  / POD0-90 / KM / raw).
- `modules/__init__.py` — 모듈 인덱스.
- `modules/ingest.py` — synthetic gen + CSV load + SHA-256 + date-shift de-id.
- `modules/eras.py` — ERAS bundle compliance + ward radar + MBSAQIP analog.
- `modules/procedure.py` — 5+ 술식 stratification + O/E ratio.
- `modules/hypo.py` — post-bariatric hypoglycemia / dumping 시간 분포 + KDA flag.
- `modules/outpatient.py` — POD0-90 adherence + transition summary + KM step.
- `modules/report.py` — md + docx KPI 리포트 생성기.
- `data/*.csv` — 합성 코호트 6 파일 (n=400, seed=42).
- `reports/bari_eras_recov_kor_{ko,en}.{md,docx}` — 자동 생성 샘플 리포트.

### 재현 방법
```bash
cd "/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-05-27-2-bari-eras-recov-kor"

# CLI 실행 (가상환경 불필요)
python3 main.py --help
python3 main.py --gen-data --n 400 --seed 42
python3 main.py --analyze --top 8
python3 main.py --report --lang ko
python3 main.py --all          # gen → analyze → report (ko + en)

# Streamlit dashboard (가상환경 필요)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app.py
```

### 검수 요약
- 구문 9/9, --help / --gen-data / --analyze / --report 모두 PASS.
- CSV 6개 (patients 400, intraop 400, pod0_3 400, pod4_30 400, pod90_outpt 400,
  hypo_events 158) — 모두 stdlib `csv.DictReader` 로 로드 PASS.
- `reports/*.docx` 38KB 4개, `reports/*.md` 4개 정상 생성.
- 외부 네트워크 / API import 0건 확인.
- 디스클레이머·de-id 모든 노출지점에 표기.
