# task-2098: InsuRo 플랜&구독 Phase 2 — AI 토큰/모델 코드 검증 + 잔여석 검증

## ★ 프로젝트: `/home/jay/projects/InsuRo/`
## ★ Agent 미팅: `memory/meetings/agent-meeting-task-2097.md`

## 작업 3건 (분석 + 필요 시 수정)

### 1. AI 토큰 항목 — 데이터 null 원인 확인
- `Pricing.tsx` L91-105: TokenCell 컴포넌트가 quota 값에 따라 "-" / "무제한" / "N 토큰/월" 표시
- `usePricingData()` 훅에서 `tokenConfigs` 가져옴
- **확인 사항**: Supabase DB에 실제로 token_quota 데이터가 있는지, 없다면 왜 없는지
- **판단**: 횟수 차감 방식으로 변경되어 토큰이 의미 없어졌다면 → 해당 행 제거 또는 "횟수 기반" 표시로 변경
- 관련 테이블/훅: `use-pricing-data.ts`, Supabase `plan_token_configs` 또는 유사 테이블

### 2. AI 모델 등급 — 관리자모드 연동 확인
- `Pricing.tsx` L107-122: AiModelCell이 model_tier (haiku/sonnet/opus → 기본AI/고급AI/최고급AI)
- `usePricingData()`에서 `aiModels` 가져옴
- **확인 사항**:
  1. 관리자모드(AdminSubscriptions.tsx)에서 모델 등급 선택이 실제로 DB에 저장되는지
  2. 저장된 값이 Pricing 페이지에 동적으로 표시되는지
  3. 플랜별 사용 가능 모델 코드 리스트가 사용자에게 보이는지
- **수정 필요 시**: aiModels 데이터가 없으면 DB seed 또는 기본값 설정

### 3. 잔여석 서버사이드 검증
- `use-remaining-seats.ts` 훅 확인
- **확인 사항**: 잔여석이 Supabase에서 가져오는지 (서버사이드), 아니면 클라이언트 하드코딩인지
- **보안**: 클라이언트에서 값 조작 가능 여부
- **수정 필요 시**: 하드코딩이면 Supabase 테이블 연동으로 변경

## ★ 먼저 읽을 파일
- `/home/jay/projects/InsuRo/src/hooks/use-pricing-data.ts` — 플랜 데이터 가져오는 훅
- `/home/jay/projects/InsuRo/src/hooks/use-remaining-seats.ts` — 잔여석 훅
- `/home/jay/projects/InsuRo/src/pages/AdminSubscriptions.tsx` — 관리자 모델 설정
- `/home/jay/projects/InsuRo/src/config/planFeatureMap.ts` — 플랜별 기능 매핑

## 완료 시그니처
- 3건 각각 "현재 상태 + 원인 + 수정 여부" 보고서에 명시
- 수정한 경우 `npm run build` 성공
- 수정 불필요한 경우 근거 명시

## 검증 시나리오
1. AI 토큰: 데이터 존재하면 값 표시, 없으면 행 제거 또는 표시 변경
2. AI 모델: 관리자에서 설정 → Pricing에 반영 여부 확인
3. 잔여석: Supabase 쿼리 확인 → 서버사이드 검증
4. `npm run build` 성공

## 레벨
- normal

## 프로젝트
- insuro