# InsuRo 고객 증권분석 Phase 2-1 — 분석 결과 UI 개선

## 작업 레벨: Lv.4 (Phase 2-1/3)

## 프로젝트 시스템 3문서
- DevSystem: `/home/jay/workspace/memory/plans/anu-guide-system/plan.md`

## 프로젝트
- InsuRo: `/home/jay/projects/InsuRo`
- 서버: `/home/jay/projects/InsuRo/server`

## 전체 Phase 구성
- **Phase 2-1 (본 작업)**: 분석 결과 UI 개선 — 납입잔여 계산 + 미가입 담보 표시 + 원문보기
- **Phase 2-2**: 고객별 증권 관리 — CRM 연동 + 분석 히스토리 + 임시 고객등록
- **Phase 2-3**: 합산 보장현황 고도화 — 시간차 분석 합산 + 기존 분석 로드

## Phase 2-1 수정 사항

### 1. 납입잔여 계산 개선
현재: 서버에서 `total_payment_years: 20`만 반환 → 프론트에서 "20년"으로 표시
변경: 분석 기준일 기준으로 잔여 납입 기간을 정확히 계산

**서버 (`server/main.py` 또는 `server/policy_analyzer.py`):**
AI 분석 프롬프트에서 `enrollment_date`(가입연월)를 추출하고 있으므로:
```python
# 계산 로직
enrollment_date = "2008. 3. 31"
total_payment_years = 20
base_date = "2026-04-27"  # 분석 기준일

# 납입완료일 = 가입일 + 납입기간
payment_end = enrollment_date + total_payment_years
# 잔여 = payment_end - base_date
# 결과: { "remaining_years": 1, "remaining_months": 11, "remaining_total_months": 23 }
```

**프론트 (`src/pages/PolicyAnalysis.tsx`):**
- 메타데이터 표시: "납입잔여: 1년 11개월 (23개월)" 또는 납입 완료된 경우 "납입완료"
- 기존 `납입잔여: 20년` → 계산된 값으로 교체

### 2. 미가입 담보 리스트 표시
현재: AI가 감지한 가입 담보만 표시
변경: `src/config/defaultCoverages.ts`의 표준 담보 리스트 전체를 카테고리별로 표시하고, 미가입 담보는 회색/비활성 상태로 표시

**프론트 (`src/pages/PolicyAnalysis.tsx` 또는 분석 결과 컴포넌트):**
```tsx
// 표준 담보 리스트에서 가입된 것은 금액 표시, 미가입은 "-" 또는 회색
{defaultCoverages.map(category => (
  <div key={category.name}>
    <h4>{category.name}</h4> {/* 실손, 진단, 수술, 일당, 장애, 기타 */}
    {category.items.map(item => {
      const matched = analysisResult.coverages.find(c => c.name === item.name);
      return (
        <div className={matched ? "" : "text-muted-foreground opacity-50"}>
          <span>{item.name}</span>
          <span>{matched ? `${matched.amount}만원` : "-"}</span>
        </div>
      );
    })}
  </div>
))}
```

### 3. 원문보기 버튼
업로드한 PDF 파일을 다시 볼 수 있는 기능.

**방법:**
- 분석 요청 시 파일을 Google Drive에 업로드 (기존 `upload-to-drive` 활용)
- 또는 임시 파일 URL을 서버에서 제공
- 분석 결과 상단에 "📄 원문 PDF 보기" 버튼 → 새 탭에서 PDF 열기

**서버:**
- `/api/insuro/analyze-policy` 응답에 `file_url` 포함 (Drive URL 또는 서버 임시 URL)
- 또는 별도 엔드포인트: `GET /api/insuro/policy-original/{analysis_id}` → PDF 파일 반환

**프론트:**
- 분석 결과 카드 상단에 "원문보기" 버튼
- 클릭 시 새 탭에서 PDF 오픈

## affected_files
- `src/pages/PolicyAnalysis.tsx` (수정 — 납입잔여 계산 표시 + 미가입 담보 + 원문보기 버튼)
- `src/config/defaultCoverages.ts` (참조 — 표준 담보 리스트)
- `server/main.py` (수정 — 납입잔여 계산 로직 + file_url 반환 + 원문 제공 엔드포인트)
- `server/policy_analyzer.py` (수정 — 납입잔여 계산 함수)

## 검증 시나리오
1. 증권 PDF 분석 → "납입잔여: X년 Y개월 (ZZ개월)" 정확 표시
2. 납입 완료된 경우 → "납입완료" 표시
3. 표준 담보 리스트 전체 표시 → 가입 담보는 금액, 미가입은 "-" (회색)
4. "원문보기" 클릭 → 새 탭에서 원본 PDF 표시
5. npm run build 성공
6. 서버 API 정상 응답