# task-2958 · InsuRo 실손계산기 기능① MVP (codex↔ANU 합의)

## 배경
- 트랙B 신규 도구(도구/분석 메뉴). 회장 지시: 가입시기+병원영수증 → 실손 보험금 계산.
- **codex↔ANU 합의 핵심**: silson 세대지식(`server/silson/data/silson_generations.json`)은 **OCR 문장형 값**("좌동" 상속·"1회당 2만원 또는 30% 중 큰 금액")이라 **계산에 직접 못 씀** → 정규화 계산 테이블 선행 필수. 세대 판별은 기존 `analysis_bridge.attach_generation` 재사용 가능.
- repo `/home/jay/projects/InsuRo`, origin/main `6eeb5b6`. 담당 dev1(트랙A 증권분석 Phase 1b는 dev2 병행 중).

## ★ 확정 설계 (codex↔ANU 합의)
### 1. 세대별 계산 정규화 테이블 신설 (진짜 선행)
- silson 원문(문장형) → **머신 계산용 스키마**로 정규화. 필드: `generation` · `care_type`(입원/통원) · `benefit_type`(급여/비급여) · `provider_tier`(의원/병원/종합/상급종합) · `severity`(5세대 중증/비중증) · `deductible_rule`(percent/fixed/max) · `payout_rate` · `per_visit_limit` · `annual_limit` · `special_benefit`(MRI/도수/주사).
- **원문 근거 추적**(각 값에 silson 출처). 파싱 불가·"좌동" 상속 해소 불가·문장형은 **UNKNOWN**(추측 금지, 금소법). **1세대는 `verification_notice` → "약관 확인 필요" 분기**(일괄 계산 금지).

### 2. 결정적 계산 함수
- 입력 = 세대(가입연월→attach_generation 판별 or 직접선택) + 영수증 항목(급여/비급여 · 입원/통원 · 병원급 · 금액, **수동 입력**).
- 출력 = 예상 실손 수령액(세대별 자기부담·공제·한도 적용). **AI 분리 결정적 함수**(금소법 수치환각 금지). UNKNOWN 항목은 계산 제외+표기.
- 고정 고지: "추정치입니다. 실제 지급은 약관·심사에 따라 다릅니다."

### 3. 프론트 — 실손계산기 라우트 신설
- 도구/분석 메뉴에 "실손계산기"(`src/config/routes.ts` ~258·299, `navigationConfig.ts:41` 패턴). 세대선택/가입연월 + 항목 수동입력 1~N + 계산결과 + 금소법 고지.

### 범위 밖 (후속)
- 영수증 **OCR 자동추출**(MVP=수동입력). policy_extract/vision(증권용)·mediscan(외부 의존) 재사용 부적합 → 후속 별도.
- **기능②(변천사·판례 참고탭)** = 별도 task. 판례축은 PR#217 머지·자산 실재 확인 후.

## 리스크
- 정규화 파싱 정확도 = 금소법 직결 → silson 원문 축자 대조·UNKNOWN 정직. 억지 수치 금지.
- 1세대/verification_notice·"좌동" 상속 = 계산 불가 분기 명확히.

## 완료 조건
- **PR** + 회귀 + `npm run build` PASS + 실브라우저 스크린샷(실손계산기 화면·계산결과·고지).
- `memory/reports/task-2958.md`(정규화 테이블 커버리지: 확정/UNKNOWN 건수) + `.done` + ANU 콜백(≤3900B).
- **머지·배포 HOLD** — ANU 검증 + 회장 보고 후. Surgical(silson 원본 데이터 무변경, 정규화는 파생 신규).
