# [Lv.3] 생보 3대질병 계단식 재설계 — 담보별 비교표 + 손보 양식 직각화살표 계단식

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "src/components/composite/LifeThreeCriticalDiff.tsx"
    - "src/components/composite/__tests__/LifeThreeCriticalDiff.test.tsx"
    - "src/components/composite/ConsultationHistoryView.tsx"
    - "src/components/composite/RpPresentation.tsx"
    - "src/lib/lifeThreeCritical.ts"
    - "src/lib/__tests__/lifeThreeCritical.test.ts"
    - "tests/e2e/composite-design-vpath.spec.ts"
  forbidden_paths:
    - "server/**"
    - "extension/**"
    - ".github/**"
    - "src/config/api.ts"
    - "src/integrations/**"
  commands: ["npx vitest","npx tsc","npx playwright","git"]
  merge_policy: "none"
  ttl_hours: 16
```
> ★ merge_policy=none. base=현 origin/main(62da2c1). **webapp-only, 서버·확장 무변경.** RpPresentation은 **손보 계단식 시각 참조/재사용용으로만 열람**(손보 로직 변경 금지, 필요시 공용 계단식 컴포넌트 추출은 surgical).

## 배경 (회장 실사용 피드백 — 재설계)
현재 생보 계단식(카드형)이 위 손보 계단식과 **양식이 다르고**, 담보별 상세 비교가 없음. 회장 요구:
- 위 손보 계단식(최고/최저/복합·회사명·정확한 원·**직각 화살표**·요약)과 **같은 양식**으로 생보 3대질병 계단식을 develop.
- **표(회사·월보험료 비교) + 계단식 직각화살표(월/총액 차액)** 둘 다.
- **납입연수 하드코딩(20년) 절대 금지** → 오마이매니저 선택값 동적 사용.

## 작업 (webapp 파생, 서버 응답 읽기만)

### 1. 납입연수 동적화 (★ 최우선)
- 총액 차액 = **월 차액 × 12 × `record.query_condition.payment_years`** (오마이매니저 선택 납입연수). **20년 하드코딩 금지.** 위 손보 계단식과 동일 기준값. 라벨도 "N년납 총액 차액"으로 동적(N=payment_years). payment_years 없으면 graceful(총액 생략 또는 명시).

### 2. 시나리오 1 — 암진단비 단일 담보
- **비교표**: [현재 손보사(3사복합에서 암진단비 배정) · 월보험료]  ↔  [암진단비 최저 생보사 · 월보험료]
- **계단식 직각화살표**(손보 양식 그대로): 손보 암진단비 월보험료 → 생보 월보험료, 화살표에 **월 차액**, 이어서 **N년납 총액 차액**.

### 3. 시나리오 2 — 3대질병 모두 1개 생보사
- **담보별 비교표**(3행 + 합계행):
  | 담보 | 손보사 · 월보험료 | 생보사 · 월보험료 | 차액 |
  - 암진단비 / 뇌혈관진단비 / 허혈성심장질환진단비 각 1행 (손보=3사복합 배정사·보험료, 생보=**선택된 단일 생보사**(3담보 합 최저)의 해당 담보 보험료)
  - 합계행: 손보 3담보 합 · 생보 3담보 합 · 합계 차액
- **계단식 직각화살표**: 손보 3담보 합 → 생보 3담보 합, 화살표에 **합계 월 차액** → **N년납 총액 차액**.

### 4. 양식 (손보 계단식과 통일)
- 위 손보 계단식(RpPresentation)과 **동일한 직각 화살표·회사명·정확한 원(반올림 금지)·굵은 차액 폰트** 시각 사용. 위 손보 섹션 **아래**에 통일감 있게.
- **"절감" 단어 금지 → "차액"**. 곡선 금지(직각). 표는 담보/회사/월보험료 비교용.
- life_matrix 없으면 기존처럼 미표시 graceful. baseline 계단식은 **triple_best 있을 때만**(task-2886 게이트 유지).

### 데이터 (기존 계약 재사용)
- 손보 담보별 배정(회사+월보험료) = composite `triple_best.coverages[]`(각 담보 company+premium+담보명). 담보 매칭 = **task-2886 로직 재사용**(coverage_cd 우선 + 정확명 allowlist + "유사암" 배제). 3담보: 암진단비·뇌혈관질환진단비·허혈성심장질환진단비.
- 생보 담보별 = `life_matrix`(담보×생보사). 시나리오1 = 암진단비 argmin 생보사. 시나리오2 = 3담보 합 최저 단일 생보사 + 그 회사 담보별 보험료.
- `lifeThreeCritical.ts`가 위 상세(담보별 손보사·보험료 / 생보사·보험료 / 담보별 차액 / payment_years 총액)를 **노출**하도록 확장.

## 검증
- `npx tsc` 0. `npx vitest run` 회귀 0. 신규/갱신:
  - payment_years 동적(예: 15/20/30년 각각 총액=월차액×12×N, 20 하드코딩 부재)
  - 시나리오1 표(손보사·생보사·월보험료) + 직각화살표(월차액·N년총액)
  - 시나리오2 담보별 표 3행+합계행(담보별 손보/생보 회사·보험료·차액) + 직각화살표(합계 월차액·N년총액)
  - 담보 매칭 유사암 배제(task-2886) / triple_best 게이트 / life 없음 graceful / "절감" 부재 / exact 원
- **e2e 케이스 C(composite-design-vpath.spec.ts) 새 구조 testId로 갱신** — 표·계단식 요소 검증, strict-mode 회귀 방지. clean worktree PASS.

## 완료 (★ 순서 B)
- 변경 = src/ (+tests/e2e) 만. 서버/확장/골든 불변.
- **dev6 금지** — dev1. 커밋 → push → finish-task **foreground 1회** → .done 즉시 종료. **background wait 금지.** ANU 검증·머지·CF Pages 배포(source .env.keys → wrangler pages deploy dist --project-name insuro --branch main)는 ANU.

## goal_assertions (auto-generated)
- `npx tsc`
- `npx vitest run`
