## [2026-05-31]

### 수행 내용
- 아이디어 #3 MASHBiospecimenCoC-Kor MVP 자기완결적 구현.
- MASH 시험 검체(liver biopsy block · ELF · PRO-C3 · VCTE) chain-of-custody & central lab 물류 추적기(Streamlit) 5개 기능 구현:
  1) schedule window 준수 추적, 2) chain-of-custody 원장, 3) cold-chain shipment QC, 4) central pathology turnaround, 5) block 재고·재채취 대장.
- 합성 데모 데이터 생성 스크립트(시드 고정) 및 CSV 5종 생성, 순수 로직 단위 테스트 작성·통과.

### 주요 결정 사항
- 순수 로직을 `logic.py`로 분리 → streamlit 컨텍스트 없이 단위 테스트 가능(요구 검수 5 충족).
- plotly가 환경에 미설치 → `try/except`로 `HAS_PLOTLY` 감지, Streamlit 기본 차트로 fallback. requirements.txt에는 pinned 명시. (전역 설치 금지 제약 준수)
- 데이터는 시드(20260531) 고정 합성. snapshot 기준일 TODAY=2026-05-31로 두어 미도래 visit/dropout/missed를 현실적으로 분포.
- VCTE는 영상 결과로 물리 운송 없음 → custody 사슬 완전성 판정에서 collection 1단계만으로 complete 처리.

### 변경된 파일
- `app.py` - Streamlit 진입점(5개 탭, 디스클레이머, CSV 업로드 override, 다운로드 버튼)
- `logic.py` - 순수 로직(window/custody/shipment QC/turnaround/재고·위험)
- `test_logic.py` - 단위 테스트(7개, 전부 통과)
- `data/generate_demo_data.py` - 합성 데이터 생성기
- `data/*.csv` - visit_schedule, specimen_manifest, custody_log, shipment_log, pathology_turnaround
- `requirements.txt` - streamlit/pandas/numpy/plotly pinned
- `README.md`, `QA.md` - 문서·검수 로그

### 재현 방법
1. `cd data && python3 generate_demo_data.py` (CSV 재생성, 선택)
2. `python3 test_logic.py` (로직 검증)
3. `pip install -r requirements.txt && streamlit run app.py` (앱 실행)
