Files
aggios.app/1. docs/planos-roadmap.md
Erik Silva 2a112f169d refactor: redesign planos interface with design system patterns
- Create CreatePlanModal component with Headless UI Dialog
- Implement dark mode support throughout plans UI
- Update plans/page.tsx with professional card layout
- Update plans/[id]/page.tsx with consistent styling
- Add proper spacing, typography, and color consistency
- Implement smooth animations and transitions
- Add success/error message feedback
- Improve form UX with better input styling
2025-12-13 19:26:38 -03:00

5.2 KiB

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)

// 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

[
  {
    "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?