# QA 검수 로그 — PostLTMASHMetabolicKor

- 빌드 ID: 2026-05-20-3-post-lt-mash-metabolic-kor
- 빌드 일자: 2026-05-20
- 도메인: MASLD / 카테고리: 웹기반 대시보드 (Streamlit)

---

## 자동 검수 결과

| # | 항목 | 명령 | 결과 |
|---|------|------|------|
| 1 | app.py 구문 | `python3 -c "import ast; ast.parse(open('app.py').read())"` | OK |
| 2 | generate_synthetic.py 구문 | `python3 -c "import ast; ast.parse(open('data/generate_synthetic.py').read())"` | OK |
| 3 | 합성 데이터 생성 | `python3 data/generate_synthetic.py` | OK (cohort 300x48, longi 2016x15) |
| 4 | cohort 로드 | `pd.read_csv('data/synthetic_post_lt_cohort.csv')` | OK shape=(300, 48) |
| 5 | longitudinal 로드 | `pd.read_csv('data/synthetic_longitudinal.csv')` | OK shape=(2016, 15) |
| 6 | app.py 컴파일 | `python3 -m py_compile app.py` | OK |
| 7 | requirements.txt | 파일 존재 | OK (streamlit, pandas, numpy, plotly, lifelines, statsmodels, python-docx) |
| 8 | guidelines.json 파싱 | `json.load(open('assets/guidelines.json'))` | OK |
| 9 | 의학 디스클레이머 | README + app 헤더에 명시 | OK |

전 항목 PASS. 재시도 없음.

---

## 합성 데이터 개요

- `synthetic_post_lt_cohort.csv`: 300명 x 48컬럼
  - patient_id, center(6대), sex, age_at_lt, lt_date, followup_months, indication, is_regimen
  - 면역억제제 trough/dose: tac/csa/siro/steroid
  - metabolic: bmi_pre/cur, weight_regain, hba1c, fpg, sbp/dbp, ldl/hdl/tg, uric
  - liver: alt/ast/ggt/meld
  - NIT: vcte_lsm, mri_pdff, fib4, elf, biopsy_stage
  - 결과: mash_recurrence + month, pre_lt_dm, nodat + month
  - screening: 1m/3m/6m/1y/annual
  - 약물: glp1ra, sglt2i, metformin
  - 안전: rejection, infection_cmv, death

- `synthetic_longitudinal.csv`: 2016행 x 15컬럼 (환자별 8 timepoint: 1/3/6/12/24/36/48/60m)

- 재현: seed=20260520 고정.

---

## 의학 디스클레이머 명시 위치

- `README.md` 상단 별도 섹션
- `app.py` 헤더 `st.warning(DISCLAIMER)` 매 페이지 출력
- `assets/guidelines.json` 의 `disclaimer` 필드

---

## 제약 준수

- 외부 네트워크 / API 호출: 0
- 전역 패키지 설치: 0 (`requirements.txt` 만 제공, venv 권장)
- 24시간 범위 내 단일 세션 빌드
- 형제 빌드 디렉토리 미접근

상태: **PASS**
