# InsuRo 소식지/보험료 분석 상태 + 결과 확인 UX 개선

## 작업 레벨: Lv.2

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

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

## 버그 + UX 피드백

### 버그: DB status 컬럼 부재
- **에러**: `Could not find the 'status' column of 'newsletters' in the schema cache`
- **원인**: task-2213/2215에서 서버 코드가 `status` 컬럼을 업데이트하려 하지만, newsletters/premium_data 테이블에 `status` 컬럼이 없음
- **수정**: Supabase migration으로 `status` 컬럼 추가

### UX-1: 분석 상태를 사용자가 알 수 없음
- **현상**: 업로드 후 "분석중..."이 무한 표시. 실패해도 "분석중..."인 채로 방치
- **요구**: 
  - 분석 중: 스피너 + "AI가 텍스트를 추출하고 있습니다..."
  - 분석 완료: ✅ 아이콘 + "분석 완료"
  - 분석 실패: ❌ 아이콘 + "분석 실패 — 재시도" 버튼

### UX-2: 분석 결과를 확인할 수 없음
- **현상**: "텍스트 없음" 뱃지만 표시. 추출된 텍스트/보험사명/제목을 볼 수 없음
- **요구**: 각 항목 클릭 시 상세 보기 (또는 펼치기):
  - 보험사명 (자동 감지됨)
  - 제목 (자동 생성됨)
  - 추출된 텍스트 (접기/펼치기)
  - 원본 파일 링크

## 구현 상세

### 1. DB Migration
```sql
-- newsletters 테이블
ALTER TABLE public.newsletters ADD COLUMN IF NOT EXISTS status text DEFAULT 'pending';
-- premium_data 테이블  
ALTER TABLE public.premium_data ADD COLUMN IF NOT EXISTS status text DEFAULT 'pending';
-- status 값: 'pending' | 'analyzing' | 'completed' | 'failed'
```

Supabase SQL 편집기에서 직접 실행하거나, migration 파일 생성.

### 2. 서버 코드 수정 (main.py)
- upload-to-drive 엔드포인트에서 status 업데이트:
  - 업로드 시: `status = 'analyzing'`
  - 파싱 성공: `status = 'completed'`
  - 파싱 실패: `status = 'failed'`

### 3. 프론트엔드 (AdminNewsletters.tsx, AdminPremiumData.tsx)
- status별 UI 분기:
  - `pending`/`analyzing`: 스피너 + "분석 중..."
  - `completed`: ✅ + 제목 + 보험사명 뱃지
  - `failed`: ❌ + "분석 실패" + 재시도 버튼
- 각 항목 클릭/펼치기로 상세 정보 표시:
  - 추출된 텍스트 (parsed_text) — 접기/펼치기
  - 보험사명, 제목

### 4. 자동 새로고침
- 분석 중인 항목이 있으면 10초마다 자동 refetch (polling)
- 모든 항목 completed/failed 시 polling 중지

## affected_files
- `server/main.py` (수정 — status 업데이트 로직)
- `src/pages/AdminNewsletters.tsx` (수정 — status별 UI + 결과 표시)
- `src/pages/AdminPremiumData.tsx` (수정 — status별 UI + 결과 표시)
- Supabase DB: newsletters, premium_data 테이블 (ALTER TABLE)

## 검증 시나리오
1. 소식지 PDF 업로드 → status가 analyzing → completed 전환 확인
2. 완료 후 항목 클릭 → 추출 텍스트, 보험사명, 제목 표시
3. 실패 시 "분석 실패" + 재시도 버튼 동작
4. npm run build 성공
