# task-623.1 완료 보고서: 인슈로 플랜 관리 고도화 Phase 3

## SCQA

**S**: 인슈로 플랜 관리 Phase 2까지 완료되어 5개 플랜 체계, 기능 매트릭스, 토큰 시스템, AI 모델 DB가 구축된 상태이다. 현재 Pricing 페이지는 하드코딩된 2개 플랜 비교이고, AI 호출 시 아누 시스템 연동이 없다.

**C**: 관리자가 매트릭스에서 변경한 기능이 안내 페이지에 자동 반영되지 않고, AI 호출이 아누 시스템을 경유하지 않아 토큰 차감/모델 라우팅이 불가하다.

**Q**: DB 기반 동적 Pricing 페이지와 아누 시스템 AI 라우팅을 구현하여 관리자 변경이 자동 반영되고, 플랜별 AI 모델·토큰 체계가 동작하도록 할 수 있는가?

**A**: 4개 서브태스크(AI Provider 모듈화, 아누 엔드포인트, Pricing 동적 개편, UpgradeDialog 업데이트)를 구현 완료. pytest 23건 전체 통과, tsc --noEmit 에러 0건. Pricing 페이지는 DB에서 4개 플랜 + feature_definitions + 토큰 쿼타 + AI 모델 등급을 동적 로드하여 비교 테이블로 표시.

---

## 생성/수정 파일

**신규 생성 (5개):**
- `server/anu_provider.py` — 아누 시스템 AI 라우팅 모듈 (model_tier → Anthropic API)
- `server/tests/test_anu_provider.py` — anu_provider 테스트 (23개 케이스)
- `src/hooks/use-pricing-data.ts` — Pricing 페이지용 데이터 훅 (4 테이블 병렬 쿼리)
- `src/components/TokenBalance.tsx` — Phase 2 토큰 잔액 컴포넌트 (Phase 2에서 이관)
- `src/hooks/use-user-tokens.ts` — Phase 2 토큰 정보 훅 (Phase 2에서 이관)

**수정 (4개):**
- `supabase/functions/_shared/ai-provider.ts` — anu-system Provider + callAIWithTokenCheck 추가
- `server/main.py` — POST /api/insuro/ai/anu-generate 엔드포인트 추가
- `src/pages/Pricing.tsx` — 하드코딩 2플랜 → DB 동적 4열 비교 테이블 완전 재작성
- `src/components/PlanUpgradeDialog.tsx` — 토큰 정보 + AI 모델 등급 표시 추가

**이관 포함 (Phase 2 산출물):**
- `supabase/migrations/20260316130000_token_system_and_ai_models.sql`
- `src/components/TokenUsageHistory.tsx`
- `src/pages/AdminSubscriptions.tsx` (4탭 확장 버전)

---

## 테스트 결과

- **pytest (anu_provider)**: 23/23 통과 (0.27초)
  - ModelTierMapping 4건, VerifyApiKey 6건, RequestValidation 9건, GenerateFunction 4건
- **TypeScript**: tsc --noEmit 에러 0건
- **기존 테스트 (server/)**: 사전 실패 9건 존재 (test_main.py 8건 + test_ai_parser.py 1건, 본 작업 범위 외 — worktree 생성 시점부터 동일 실패)

⚠️ 기존 테스트 실패 9건 (본 작업 범위 외): test_main.py::TestUploadSuccess 계열 8건, test_ai_parser.py 1건

---

## 발견 이슈 및 해결

### 자체 해결 (3건)

1. **ai-provider.ts: 플랜 조회 경로 오류** — `organization_members` 테이블 대신 `profiles.organization_id` → `organization_subscriptions` → `user_subscriptions` 순서로 수정
   - 상세: callAIWithTokenCheck 함수의 플랜 조회 로직이 존재하지 않는 테이블을 참조. 기존 use-user-plan.ts, use-user-tokens.ts 패턴과 일관되게 수정.

2. **ai-provider.ts: feature_token_costs 쿼리 model_tier 필터 누락** — 기능별+모델별 토큰 소비가 다른데 model_tier 없이 쿼리하면 잘못된 비용 적용. `model_tier=eq.${modelTier}` 필터 추가.

3. **ai-provider.ts: token_usage_log 컬럼명 불일치** — DB 컬럼 `model_used`, `tokens_consumed` vs 코드 `model_tier`, `tokens_used`. DB 스키마에 맞게 수정.

---

## 머지 판단

- **머지 필요**: Yes
- **브랜치**: task/task-623.1-dev1
- **워크트리 경로**: /home/jay/projects/InsuRo/.worktrees/task-623.1-dev1
- **머지 의견**: pytest 23건 전체 통과, tsc 에러 0건, 기존 API/컴포넌트 시그니처 변경 없음(하위호환 유지). 팀장 코드 리뷰에서 발견한 3건 버그 모두 해결 완료. 기존 실패 테스트 9건은 본 작업과 무관(worktree 생성 시점부터 동일 실패). 머지 추천.

---

## QC 자동 검증

overall: **WARN** (Gate PASS)

- file_check: **PASS** (8/8)
- data_integrity: **PASS**
- tdd_check: **PASS** (테스트 1개 + 구현 6개 확인)
- pyright_check: **WARN** (1건 — anu_provider import 해석 불가, server 로컬 모듈이라 실행엔 무관)
- style_check: **WARN** (black OK, isort 프로필 설정 차이)
- critical_gap: **PASS**
- test_runner: SKIP (기존 test_ai_parser.py 실패 1건 — 본 작업 범위 외, 수동 pytest 23/23 통과 증거 대체)
- api_health: SKIP
- schema_contract: SKIP
- scope_check: SKIP

⚠️ 기존 테스트 실패 1건 (본 작업 범위 외): `test_ai_parser.py::TestAnalyzeFcpaPdf::test_analyze_fcpa_pdf_includes_pdf_text_in_prompt`
