# Sistema de Planos - Roadmap ## Status: Estrutura Frontend Criada ✅ ### O que foi criado no Frontend: 1. **Menu Item** adicionado em `/superadmin/layout.tsx` - Nova rota: `/superadmin/plans` 2. **Página Principal de Planos** (`/superadmin/plans/page.tsx`) - Lista todos os planos em grid - Mostra: nome, descrição, faixa de usuários, preços, features, diferenciais - Botão "Novo Plano" - Botões Editar e Deletar - Status visual (ativo/inativo) 3. **Página de Edição de Plano** (`/superadmin/plans/[id]/page.tsx`) - Formulário completo para editar: - Informações básicas (nome, slug, descrição) - Faixa de usuários (min/max) - Preços (mensal/anual) - Armazenamento (GB) - Status (ativo/inativo) - TODO: Editor de Features e Diferenciais --- ## Próximos Passos - Backend ### 1. Modelo de Dados (Domain) ```go // internal/domain/plan.go type Plan struct { ID string `json:"id"` Name string `json:"name"` Slug string `json:"slug"` Description string `json:"description"` MinUsers int `json:"min_users"` MaxUsers int `json:"max_users"` // -1 = unlimited MonthlyPrice *decimal.Decimal `json:"monthly_price"` AnnualPrice *decimal.Decimal `json:"annual_price"` Features pq.StringArray `json:"features"` // CRM, ERP, etc Differentiators pq.StringArray `json:"differentiators"` StorageGB int `json:"storage_gb"` IsActive bool `json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type Subscription struct { ID string `json:"id"` AgencyID string `json:"agency_id"` PlanID string `json:"plan_id"` BillingType string `json:"billing_type"` // monthly/annual CurrentUsers int `json:"current_users"` Status string `json:"status"` // active/suspended/cancelled StartDate time.Time `json:"start_date"` RenewalDate time.Time `json:"renewal_date"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } ``` ### 2. Migrations - `001_create_plans_table.sql` - `002_create_agency_subscriptions_table.sql` - `003_add_plan_id_to_agencies.sql` ### 3. Repository - `PlanRepository` (CRUD) - `SubscriptionRepository` (CRUD) ### 4. Service - `PlanService` (validações, lógica) - `SubscriptionService` (validar limite de usuários, etc) ### 5. Handlers (API) ``` GET /api/admin/plans - Listar planos POST /api/admin/plans - Criar plano GET /api/admin/plans/:id - Obter plano PUT /api/admin/plans/:id - Atualizar plano DELETE /api/admin/plans/:id - Deletar plano GET /api/admin/subscriptions - Listar subscrições ``` ### 6. Seeds - Seed dos 4 planos padrão (Ignição, Órbita, Cosmos, Enterprise) --- ## Dados Padrão para Seed ```json [ { "name": "Ignição", "slug": "ignition", "description": "Ideal para pequenas agências iniciantes", "min_users": 1, "max_users": 30, "monthly_price": 199.99, "annual_price": 1919.90, "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"], "differentiators": [], "storage_gb": 1, "is_active": true }, { "name": "Órbita", "slug": "orbit", "description": "Para agências em crescimento", "min_users": 31, "max_users": 100, "monthly_price": 399.99, "annual_price": 3839.90, "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"], "differentiators": ["Suporte prioritário"], "storage_gb": 1, "is_active": true }, { "name": "Cosmos", "slug": "cosmos", "description": "Para agências consolidadas", "min_users": 101, "max_users": 300, "monthly_price": 799.99, "annual_price": 7679.90, "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"], "differentiators": ["Gerente de conta dedicado", "API integrações"], "storage_gb": 1, "is_active": true }, { "name": "Enterprise", "slug": "enterprise", "description": "Solução customizada para grandes agências", "min_users": 301, "max_users": -1, "monthly_price": null, "annual_price": null, "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"], "differentiators": ["Armazenamento customizado", "Treinamento personalizado"], "storage_gb": 1, "is_active": true } ] ``` --- ## Integração com Agências Quando agência se cadastra: 1. Seleciona um plano 2. Sistema cria `Subscription` com status `active` ou `pending_payment` 3. Agência herda limite de usuários do plano 4. Ao criar usuário: validar se não ultrapassou limite --- ## Features Futuras - [ ] Editor de Features e Diferenciais (drag-drop no frontend) - [ ] Planos promocionais (duplicar existente, editar preço) - [ ] Validações de limite de usuários por plano - [ ] Dashboard com uso atual vs limite - [ ] Alertas quando próximo do limite - [ ] Integração com Stripe/PagSeguro --- **Pronto para começar?**