---
task_id: task-2166
type: context
scope: task
created: 2026-04-25
updated: 2026-04-25
status: completed
---

# 맥락 노트: task-2166

**task**: task-2166

---

## 결정 근거

### ReportViewModel 어댑터 패턴 (Codex 검증 대응)
- Codex 사전 검증에서 AnalysisReport 모델 한계 지적 (확정/미확정 상태, 주사제 구분 등)
- Phase 1-A/B 코드 수정 금지 제약 → 어댑터 계층으로 해결
- HtmlReportGenerator.generate() 내에서 변환 로직 처리 (주사제 필터링, 동적 분기)

### 3 Step Why 자문 결과
- 1st Why: AnalysisReport에 렌더링 세부 정보 부재 + 수정 금지 제약 → 어댑터 필요
- 2nd Why: Jinja2 템플릿에 로직 넣으면 테스트 불가 → ViewModel 분리가 최선
- 3rd Why: 대안1(템플릿 내 로직)=테스트 불가, 대안2(모델 수정)=지시서 위반 → 현 접근이 최선

### 주사제 판별 규칙
- 키워드: "주사", "inj", "injection", "수액", "링겔"
- "주" 단독은 오탐 위험으로 제외 (예: "주석산", "주사기")
- 대소문자 무시

### 병원명 마스킹 규칙
- 2글자 이하: 원본 유지
- 3~4글자: 2번째 글자 * (예: 서울병원 → 서*병원)
- 5글자 이상: 2~3번째 글자 ** (예: 수원성모이비인후과의원 → 수**모이비인후과의원)

## 참조 자료

- MediScan 마스터플랜: `/home/jay/workspace/memory/plans/mediscan/plan.md`
- MHS V9.7 리포트 구조: `/home/jay/workspace/memory/plans/mediscan/context-notes.md` 섹션 4
- AnalysisReport 모델: `/home/jay/projects/MediScan/src/analysis/models.py`
- Codex 검증 결과: `/home/jay/workspace/memory/events/task-2166.codex-gate`

## 주의사항

- Phase 1-A/B 소스코드 수정 절대 금지
- docs/samples/ 디렉토리는 .gitignore — PDF/HTML 샘플은 커밋하지 않음
- HTML 리포트는 정적 HTML + 최소 JS (아코디언/토글만)
