# task-437.1 보고서: InsuRo 히든플랜 + is_public 컬럼 + PlanUpgradeDialog DB 연동

## 작업 요약
InsuRo 프로젝트에 지점 내부 직원용 히든플랜(Internal) 기능을 추가했습니다. `subscription_plans` 테이블에 `is_public` 컬럼을 추가하고, PlanUpgradeDialog를 DB 동적 조회로 변환, AdminSubscriptions에 비공개 토글/뱃지를 추가했습니다.

## 수행 내용

### 1. DB 스키마 변경 (마이그레이션 파일)
- `supabase/migrations/20260310120000_add_is_public_column.sql` 생성
- ALTER TABLE: `is_public boolean NOT NULL DEFAULT true` 추가
- Internal 히든플랜 INSERT (price=0, is_public=false, is_active=true, sort_order=99)
  - features: Enterprise 수준 전기능 + ai_provider=gemini-flash (비용 절감)
  - org_management, agent_management은 false (개인 단위 사용)

⚠️ **DDL 수동 적용 필요**: 이 환경에서 Supabase DB 직접 접속이 불가합니다 (IPv6 전용 + 풀러 미구성). Supabase Dashboard SQL Editor에서 마이그레이션 SQL을 수동 실행해야 합니다.

### 2. types.ts 업데이트
- `subscription_plans`의 Row/Insert/Update 타입에 `is_public: boolean` 필드 추가

### 3. PlanUpgradeDialog.tsx — DB 동적 조회로 변환
- 하드코딩된 plans 배열 → `useEffect`로 DB 조회 (`is_active=true AND is_public=true`)
- 아이콘/색상/버튼 스타일을 이름 기반 매핑 함수로 분리
- features JSON → 한글 라벨 변환 (`featureLabels` 매핑)
- number 타입 feature: -1이면 "무제한", 그 외 "최대 N건/장"
- 로딩 상태 처리 추가
- 할인율(OPEN_DISCOUNT, YEARLY_DISCOUNT) 및 가격 포매팅 함수는 유지

### 4. AdminSubscriptions.tsx — is_public 지원
- Plan 타입에 `is_public: boolean` 필드 추가
- 폼 초기 상태/생성/수정 시 `is_public` 포함
- 플랜 카드에 비공개 뱃지 추가 (`is_public=false` → 주황색 "비공개" 뱃지)
- 플랜 편집 다이얼로그에 "공개 (사용자에게 표시)" Switch 추가

## 생성/수정 파일 목록
1. `supabase/migrations/20260310120000_add_is_public_column.sql` (신규)
2. `src/components/PlanUpgradeDialog.tsx` (수정)
3. `src/integrations/supabase/types.ts` (수정)
4. `src/pages/AdminSubscriptions.tsx` (수정)

## 검증 결과
- 코드 변경 4개 파일 모두 정상 수정 확인
- TypeScript 타입 정합성 확인 (Row/Insert/Update 일관)
- DB 컬럼 미적용 상태에서는 PlanUpgradeDialog가 `is_public` 필터 사용 불가 (console.error 로깅)

## 특이사항
- **DB 직접 접속 불가**: IPv6 전용 DB + Supabase 풀러 "Tenant or user not found" 오류로 ALTER TABLE/INSERT를 직접 실행할 수 없었습니다. 마이그레이션 SQL 파일을 생성하여 Supabase Dashboard에서 수동 실행이 필요합니다.
- `ai_provider` feature는 string 타입이나 PlanUpgradeDialog의 feature 표시에서 boolean/number만 처리. string 값은 무시됨 (의도적: 사용자에게 AI 모델명 노출 불필요).
- 기존 테스트 파일 없음 (프론트엔드 컴포넌트)

## 버그 유무
- 발견된 버그 없음 (DB 컬럼 적용 후 정상 동작 예상)

## 머지 판단
- **머지 필요**: Yes (DDL 적용 후)
- **브랜치**: task/task-437.1-dev2
- **워크트리 경로**: /home/jay/projects/InsuRo/.worktrees/task-437.1-dev2
- **머지 의견**: 코드 변경은 완성 상태. DB 마이그레이션 SQL을 Supabase Dashboard에서 먼저 실행한 후 머지하면 PlanUpgradeDialog, AdminSubscriptions 모두 정상 동작 예상. 기존 5개 플랜은 `is_public` 기본값 true로 자동 설정되어 하위 호환성 보장됨.
