# task-149.1: 약관 PDF 업로드 파이프라인 전체 개선 (Phase 1~4)

## 한정 위임 (Scoped Delegation)
제이회장님 승인 완료. Phase 1~4 전체 진행. 순차 실행 (파일 충돌 방지).

## 참조 보고서
- 미팅 분석: `/home/jay/projects/insuwiki/memory/reports/task-146.1.md`

## Phase 1: 즉시 수정 — 데이터 정합성/보안
1. metadata docId 통일 (pdfIndexing.ts 수정) — `companyId_productId` 이중 prefix 버그 수정
2. 파일 검증 추가 (Magic Bytes + 크기 제한 50MB)
3. 카테고리 키워드에 '손해' 추가 + 변액보험 지원
4. YYMM 월 유효성 검사 추가
5. updatedAt 타입 Firestore Timestamp로 통일
6. 임시 파일 cleanup finally 블록 추가
7. `/admin/terms` 사이드바 네비게이션 추가

## Phase 2: 안정성 강화 — 동시성/복구
8. 재인덱싱 시 기존 chunks 전체 삭제 후 재생성 (고아 청크 방지)
9. 임베딩 지수 백오프 + 개별 retry 구현
10. 동시 업로드 방지 (productId 기반 분산 락)
11. Drive 업로드 실패 시 rollback 로직
12. 업로드 후 인덱싱 Job 상태 추적 UI 추가
13. 스캔 PDF 감지 + 조기 실패 처리

## Phase 3: UX 개선 — 관리자 경험
14. 실시간 파싱 미리보기 (파일명 → 메타데이터)
15. 약관 목록 실시간 리스너 (onSnapshot) 적용
16. 카테고리 수동 선택/오버라이드 UI
17. 약관 통계 대시보드 추가
18. 인덱싱 실패 재시도 UI

## Phase 4: 장기 아키텍처 — 확장성
19. 청킹 Overlap 추가 (RAG 품질 향상)
20. 회사명 정규화 테이블 (Firestore 관리)
21. 대용량 PDF 분할 처리
22. OCR 파이프라인 (스캔 PDF 지원)
23. Firebase Storage 마이그레이션 검토
24. 약관 버전 히스토리 관리

## 수정 대상 파일 (주요)
- `nextapp/src/app/api/admin/drive-upload/route.ts`
- `functions/src/pdfIndexing.ts`
- `nextapp/src/app/admin/upload/page.tsx`
- `nextapp/src/app/admin/terms/client.tsx`
- `nextapp/src/lib/googleDrive.ts`
- `firestore.rules`

## 환경
- Firebase 배포: `export GOOGLE_APPLICATION_CREDENTIALS="/home/jay/.config/gcloud/legacy_credentials/anu2026@insuwiki-j2h.iam.gserviceaccount.com/adc.json"`
- 프로젝트: insuwiki-j2h

## 완료 기준
- 24건 모두 구현 + TypeScript 빌드 성공
- 기존 약관 RAG 검색 품질 유지 (insurance_chunks 오염 금지)
- 보고서: `/home/jay/projects/insuwiki/memory/reports/task-149.1.md`
