# task-2955 · InsuRo 실손 세대지식 설계사 노출 MVP (codex↔ANU 합의 설계 확정본)

## 배경
- silson 세대지식 표준약관 1차출처 확정(PR#214 `2ccc121`). 런타임 배선 0(휴면). 우선순위 B(배선)→A(판례) — codex↔ANU 합의.
- 기존 증권분석 라이브: 프론트 `src/pages/PolicyAnalysis.tsx`, 서버 analyze-policy(`server/main.py:6973~`). 응답 `meta+coverages`뿐, silson 미부착.
- **이전 task-2954는 설계 미합의로 취소.** 본 task는 codex↔ANU **설계 합의 확정본**이다.
- repo `/home/jay/projects/InsuRo`, origin/main `2ccc121`. 용도=설계사 참고용(고객 자동판정 아님).

## ★ 확정 설계 (codex↔ANU 합의 — 임의 변경 금지)
### silson_summary 스키마 (describe_for_analysis 실제 반환 기반)
`describe_for_analysis()` 실제 반환 = `generation / display_name / period_start / period_end / date_source / sources / verification_notice / deductible / coverage_limit / payout_rate / plan_type_resolution`. 이것만 사용한다(임의 필드 신설 금지).
```
silson_summary = {
  generation_id       <- generation
  generation_label    <- display_name
  effective_period    <- {start: period_start, end: period_end}
  date_source         <- date_source (실제값 coverage_start_date|contract_date|enrollment_date_proxy, 외부표현 번역 허용)
  key_coverages = {
     deductible   <- {raw: deductible,   resolved: plan_type_resolution.deductible}
     coverage_limit <- coverage_limit  (원문형 단일 문자열 — 입원/통원 분리 필드 없음)
     payout_rate  <- {raw: payout_rate, resolved: plan_type_resolution.payout_rate}
  }
  sources             <- sources (표준약관 출처)
  verification_notice <- verification_notice (1세대 등 있을 때만)
  disclaimer          <- 고정 고지문 "설계사 참고용입니다. 실제 증권·약관을 확인하세요."
}
```
⚠️ **`mri / outpatient_limit / inpatient_limit / three_nonpayment` 전용필드 신설 금지** — describe_for_analysis 계약에 없음.

### ★ 세대판별 입력 (최대 리스크 — 합의 대안)
- `attach_generation()`은 `coverage_start_date` 우선, 없으면 `header.contract_date` 요구. 그러나 현 analyze-policy 결과에는 **`meta.enrollment_date`만 존재**(policy_analyzer AI JSON).
- **MVP 합의안**: `meta.enrollment_date`를 가입일 proxy로 정규화해 세대판별 입력으로 사용. `date_source="enrollment_date_proxy"`로 표기하고, **프론트에 "가입일 기준(계약일과 다를 수 있음) 참고값" 주의문구 고정**.
- enrollment_date 부재/파싱불가 시 **세대판별 불가로 명시**(추측 금지, silson_summary=null + 사유).
- ※ policy_extract 재호출로 contract_date 정밀확보는 **후속**(무거워서 MVP 제외).

### 부착 지점
- 서버: `server/main.py` `results.append(validated)` **직전**(≈7027)에서 `validated`에 silson_summary 부착 → DB `policy_analyses.result`·상태조회 응답에 자동 전파.
- 프론트: `AnalysisResult` 타입(`PolicyAnalysis.tsx:18`)에 `silson_summary?` 추가 → 상세 카드 메타그리드 아래/담보 리스트 위에 블록 삽입.

## 리스크 가드
- PII: silson_summary는 세대지식만(PII 아님). 증권 식별정보 로그 자제.
- 금소법: disclaimer 고정, 고객 자동판정 아님. gating(고객경로) 무변경.
- 운영: enrollment_date_proxy·계약일 fallback을 확정판정처럼 보이지 않게 주의문구 필수.

## 완료 조건
- **PR**(백엔드+프론트) + 회귀·build PASS + **실브라우저 스크린샷**(PolicyAnalysis에 세대블록 표시, proxy 주의문구 포함).
- `memory/reports/task-2955.md` + `.done` + ANU 콜백(≤3900B): task_id·pr_number·build결과·스크린샷경로·세대판별 입력방식(enrollment_date_proxy).
- **머지·배포 HOLD** — ANU 검증 + 회장 보고 후 머지, 실배포는 별도 회장 go.
- Surgical. 기존 증권분석 로직·gating·silson 데이터 무변경.