# QA 검수 로그 — MASHBiospecimenCoC-Kor

검수일: 2026-05-31
환경: macOS (darwin 25.5.0), Python 3.9.6
설치 확인: streamlit 1.50.0, pandas 2.3.3, numpy 2.0.2 / plotly 미설치(명시만)

---

## 검수 1: app.py / logic.py 구문 검사
명령: `python3 -c "import ast; ast.parse(open('app.py').read())"`
결과: ✅ PASS — `app.py syntax OK`, `logic.py syntax OK`

## 검수 2: 데모 데이터 생성 스크립트 실행
명령: `cd data && python3 generate_demo_data.py`
결과: ✅ PASS
```
wrote visit_schedule.csv: shape=(3, 4)
wrote specimen_manifest.csv: shape=(440, 10)
wrote custody_log.csv: shape=(1075, 10)
wrote shipment_log.csv: shape=(245, 16)
wrote pathology_turnaround.csv: shape=(51, 12)
```

## 검수 3: 합성 CSV pandas 로드
명령: `python3 -c "import pandas as pd; pd.read_csv('data/...')"`
결과: ✅ PASS
- specimen_manifest.csv (440, 10)
- custody_log.csv (1075, 10)
- shipment_log.csv (245, 16)
- pathology_turnaround.csv (51, 12)
- visit_schedule.csv (3, 4)

## 검수 4: requirements import 가능성
- streamlit / pandas / numpy: ✅ import OK
- plotly: ⚠️ 미설치(`ModuleNotFoundError`) — requirements.txt에 `plotly==5.24.1` 명시.
  app.py는 `try/except` 로 plotly 부재를 감지(`HAS_PLOTLY=False`)하고 Streamlit 기본 차트로 fallback.
  → 미설치 환경에서도 앱 import 및 동작 확인됨 (`app.py imports OK; HAS_PLOTLY = False; main callable: True`).

## 검수 5: 순수 로직 단위 테스트
명령: `python3 test_logic.py`
결과: ✅ PASS — ALL TESTS PASSED
- test_is_in_window: window 포함/미포함/빈값 판정 ✅
- test_schedule_compliance: due = collected + missed 불변식, 채취율 0~1 ✅ (due 367, collected 340, missed 27, 위반 73, 채취율 92.6%)
- test_window_alerts_subset: alert 목록은 missed 또는 위반만 포함 ✅ (73건)
- test_custody_completeness: VCTE는 collection 1단계로 complete, 물리검체 complete=4단계 ✅ (complete 340)
- test_shipment_qc: 승인율 0~1, rejected→재채취 trigger ✅ (245 shipment, 승인율 82.9%)
- test_turnaround: total = read_complete + pending, 목표 TAT 14일 ✅ (block 51, 완료 41, 적체 10, 중앙 TAT 9일, 초과 8, 재판독 3)
- test_inventory_and_risk: 재고/재채취대장/위험환자 컬럼·불변식 ✅ (재고 51, 대장 69, 위험환자 25)

---

## 제약 준수 확인
- ✅ 외부 네트워크/API 호출 없음 (urllib/requests 등 미사용, 전부 로컬 합성/업로드)
- ✅ 외부 유료 API 없음
- ✅ 전역 패키지 설치 안 함 (requirements.txt 명시만)
- ✅ 의학적 안전성 디스클레이머 — app.py UI 상단(st.warning) + 하단(st.caption) + README 상단 포함
- ✅ 형제 폴더 -1, -2 미접촉 (이 폴더 내부에만 기록)

## 종합 판정
✅ PASS — 구문/데이터/로직 전부 통과. plotly만 미설치이나 fallback으로 graceful 동작(⚠️ 설치 시 차트 활성화).
`pip install -r requirements.txt` 후 `streamlit run app.py` 로 전체 기능 시연 가능.
