# 계획서: InsuWiki PDF 약관 3단계 요약 파이프라인

## 목표
보험약관 PDF(최대 800페이지) 업로드 시, 비용을 최소화하면서 3단계 레벨로 요약하여 저장·표시

## 아키텍처: 하이브리드 (pdf-parse + Gemini 임베딩 + Claude Code 요약)

### 처리 흐름
```
어드민 PDF 업로드 → Drive 저장 → metadata 기록
  → [Phase 1] Cloud Function: pdf-parse 텍스트 추출 + 청킹 + 임베딩
  → [Phase 2] Level 3 저장 (청크 원문)
  → [Phase 3] cron → 아누 → 팀봇 dispatch → Level 2 + Level 1 요약 생성
  → [Phase 4] 프론트엔드 3단계 요약 표시
```

### 3단계 요약 정의
- **Level 1 (핵심)**: 전체 약관 1~2문단 요약 — "이 상품의 핵심 보장, 주요 면책, 특이사항"
- **Level 2 (섹션)**: 장(章)/절(節) 단위 요약 — "이 장의 핵심 보장내용과 면책사항"
- **Level 3 (상세)**: 페이지별 원문 청크 (현재 pdfIndexing.ts 방식과 유사)

### 비용 구조
- 텍스트 추출: pdf-parse → $0
- 임베딩: Gemini text-embedding-004 → ~$0.01/문서
- Level 3 저장: 그대로 → $0
- Level 2+1 요약: Claude Code 팀봇 → $0 (구독 포함)
- **월 100건 × 800p 추정: $1~2/월 (임베딩만)**

## Phase 구분

### Phase 1: pdfIndexing.ts 리팩토링
- pdf-parse npm 패키지 도입 (Gemini 텍스트 추출 대체)
- 페이지 단위 텍스트 추출 → [PAGE n] 마커 자동 삽입
- 배치 임베딩 (순차→병렬, 타임아웃 대응)
- Cloud Function 타임아웃 대응: 대용량 PDF는 분할 job 생성
- 기존 용어 추출(Gemini)은 유지 (선택적 비활성화 가능)

### Phase 2: Firestore 스키마 확장 + Level 3 저장
- insurance_summaries 컬렉션 신설 (Level 1, 2 저장용)
- InsuranceSummary 타입 정의: { productId, level, sectionTitle?, content, pageRange?, createdAt }
- insurance_chunks에 sectionId 필드 추가 (Level 2와 연결)
- Level 3 = 기존 insurance_chunks 그대로

### Phase 3: Claude Code 요약 파이프라인
- pdfIndexing 완료 후 Firestore에 summary_jobs 문서 생성 (status: pending)
- cron 통보 → 아누에게 "요약 대기 N건" 알림
- 아누 → 팀봇 dispatch: 추출된 텍스트를 읽고 Level 2 + Level 1 생성
- 팀봇 결과 → Firestore insurance_summaries에 저장
- 완료 후 summary_jobs status → complete

### Phase 4: 프론트엔드 3단계 요약 UI
- 약관 상세 페이지에 Level 탭/토글 UI
- Level 1: 요약 카드 (한눈에 보기)
- Level 2: 아코디언 섹션별 요약
- Level 3: 원문 검색 (기존 벡터 검색 활용)

## 팀 배치안
- **Phase 1**: 1팀 (pdfIndexing.ts 리팩토링, 백엔드 중심)
- **Phase 2**: 1팀 (Phase 1과 연속, 동일 파일)
- **Phase 3**: 2팀 (dispatch 연동, 새 파이프라인)
- **Phase 4**: 2팀 or 별도 (프론트엔드)
- Phase 1→2 순차, Phase 3은 2 완료 후, Phase 4는 3 완료 후

## 수정/생성 대상 파일
- functions/src/pdfIndexing.ts (Phase 1: pdf-parse 도입, 리팩토링)
- functions/package.json (Phase 1: pdf-parse 의존성 추가)
- nextapp/src/types/firestore.ts (Phase 2: InsuranceSummary 타입)
- firestore.rules (Phase 2: insurance_summaries 규칙)
- functions/src/pdfIndexing.ts (Phase 2: summary_jobs 생성)
- nextapp/src/app/api/admin/ (Phase 3: 요약 상태 API)
- dispatch 연동 스크립트 (Phase 3)
- nextapp/src/components/ (Phase 4: 요약 UI)
