# InsuRo 고객 증권분석 기능 Phase 1 — 증권 분석 + 구조화

## 작업 레벨: Lv.4

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

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

## 프롬프트 참조
- 보험 분석 프롬프트 v3.7: `/home/jay/workspace/memory/specs/insuro-policy-analysis-prompt-v3.7.md`
- 구글시트 양식: https://docs.google.com/spreadsheets/d/1b2nFuQEwlNT6oIlSqBpXv88nNkO3iVt3ousCEja4lbQ/edit?gid=410241279

## 기능 개요
보험 설계사가 고객 증권 PDF를 업로드하면, AI가 표준 담보 리스트에 매핑하여 구조화된 분석 결과를 제공. 구글시트 양식과 호환되는 JSON/CSV 내보내기 지원.

## 구현 상세

### 1. 메뉴 위치
고객관리 사이드바: **파이프라인** / **고객 증권분석** (신규) / **메신저** 순서
- `src/components/navigation/navigationConfig.ts` 수정
- `src/config/routes.ts`에 `/crm/policy-analysis` 라우트 추가

### 2. 페이지 구조 (`src/pages/PolicyAnalysis.tsx`)

#### 2-1. 상단: 고객 정보 입력
- 고객명 (텍스트)
- 생년월일 (날짜)
- 분석 기준일 (기본: 오늘)

#### 2-2. 중단: 증권 PDF 업로드
- 복수 파일 업로드 가능 (한 고객이 여러 보험사 증권 보유)
- 파일별 "분석 시작" 또는 "일괄 분석"
- 분석 진행 상태 표시 (task-2222와 동일한 큐 시스템 활용)

#### 2-3. 하단: 분석 결과
- 보험사별 탭 또는 아코디언
- 각 증권별:
  - 메타데이터 (보험사, 상품명, 상품분류, 가입연월, 보험료, 납입잔여개월)
  - 담보 목록 (카테고리별 그룹화: 실손/진단/치료/수술/일당/장애/기타)
  - 각 담보: 담보명, 가입금액, 메모(갱신정보 등)
- "합산 보장현황" 뷰: 모든 증권의 담보를 통합하여 카테고리별 합산

#### 2-4. 내보내기
- "구글시트 내보내기" 버튼 → JSON 다운로드 (구글시트 양식 호환)
- "CSV 다운로드" 버튼
- "PDF 보고서" 버튼 (향후)

### 3. 담보 세팅 (사용자 커스텀)

#### 3-1. 기본 담보 리스트
프롬프트 v3.7의 표준 담보 ~50종을 기본 세팅으로 제공.

#### 3-2. 커스텀 세팅
- "담보 설정" 버튼 → 모달/페이지
- 카테고리별 담보 ON/OFF 토글
- 커스텀 담보 추가 (담보명 + 카테고리)
- 세팅 저장 (Supabase `user_policy_settings` 테이블)
- 세팅 프리셋 (기본/상세/간편)

### 4. 서버 엔드포인트

#### POST /api/insuro/analyze-policy
```python
@app.post("/api/insuro/analyze-policy")
async def analyze_policy(request: Request):
    # 1. JWT 인증
    # 2. PDF 파일 수신
    # 3. claude CLI subprocess로 분석 (Max200)
    #    - 프롬프트: insuro-policy-analysis-prompt-v3.7.md 기반
    #    - 사용자 커스텀 담보 리스트를 프롬프트에 포함
    # 4. JSON 응답 반환
    # 5. 큐 시스템 활용 (동시 처리 제한)
```

#### 분석 프롬프트 구성
```python
def build_policy_prompt(pdf_path, custom_coverages, base_date):
    prompt = f"""
    {pdf_path} 파일을 읽고, 아래 표준 담보 리스트에 매핑하여 JSON으로 출력해주세요.
    
    기준일: {base_date}
    
    [표준 담보 리스트]
    {json.dumps(custom_coverages, ensure_ascii=False)}
    
    [출력 형식]
    {{
      "meta": {{
        "insurance_company": "보험사명",
        "product_name": "상품명",
        "product_type": "종합보험",
        "enrollment_date": "2014. 8. 6",
        "premium": "28,900",
        "total_payment_years": 20
      }},
      "coverages": [
        {{
          "category": "진단",
          "name": "암진단비",
          "amount": 3000,
          "unit": "만원",
          "memo": ""
        }}
      ]
    }}
    """
    return prompt
```

### 5. 데이터 저장

#### Supabase 테이블
```sql
-- 분석 결과 저장
CREATE TABLE policy_analyses (
    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id uuid REFERENCES auth.users(id),
    customer_name text NOT NULL,
    customer_birth text,
    analysis_date date DEFAULT CURRENT_DATE,
    file_url text,  -- Google Drive URL
    result jsonb,   -- 분석 결과 JSON
    status text DEFAULT 'pending',
    created_at timestamptz DEFAULT now()
);

-- 사용자 담보 설정
CREATE TABLE user_policy_settings (
    id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id uuid REFERENCES auth.users(id),
    name text DEFAULT '기본',
    coverages jsonb NOT NULL,  -- 커스텀 담보 리스트
    created_at timestamptz DEFAULT now()
);
```

### 6. AI 엔진
- `claude` CLI subprocess (Max200, API 키 불필요)
- `--allowedTools "Read"` — PDF 파일 직접 읽기
- 모델: sonnet (증권 분석은 정확도 중요)
- 타임아웃: 120초

## affected_files
- `src/pages/PolicyAnalysis.tsx` (신규 — 메인 페이지)
- `src/components/policy/CoverageSettings.tsx` (신규 — 담보 세팅 컴포넌트)
- `src/components/policy/AnalysisResult.tsx` (신규 — 분석 결과 표시)
- `src/components/policy/ExportButtons.tsx` (신규 — 내보내기)
- `src/config/defaultCoverages.ts` (신규 — 기본 담보 리스트)
- `src/components/navigation/navigationConfig.ts` (수정 — 메뉴 추가)
- `src/config/routes.ts` (수정 — 라우트 추가)
- `server/main.py` (수정 — analyze-policy 엔드포인트)
- `server/policy_analyzer.py` (신규 — 증권 분석 모듈)

## 검증 시나리오
1. 증권 PDF 업로드 → AI 분석 → 담보 목록 + 메타데이터 표시
2. 담보 세팅 커스텀 → 세팅된 담보만 매핑
3. 복수 증권 업로드 → 합산 보장현황
4. JSON 내보내기 → 구글시트 양식 호환
5. npm run build 성공
6. 서버 재시작 후 엔드포인트 정상 응답