4.1 KiB
4.1 KiB
RF-MGN-015-001: Gestión de Planes de Suscripción
Módulo: MGN-015 - Billing y Suscripciones Prioridad: P0 (MVP para SaaS) Story Points: 8 Estado: Definido Fecha: 2025-11-24
Descripción
El sistema debe permitir la definición y gestión de planes de suscripción que determinan las características, límites y precios disponibles para los tenants. Los planes son globales (no pertenecen a un tenant específico) y definen qué funcionalidades están disponibles para cada nivel de servicio.
Actores
- Actor Principal: Administrador de Plataforma (super_admin)
- Actores Secundarios: Sistema (validación automática de límites)
Precondiciones
- Usuario debe tener rol
super_adminoplatform_admin - Schema
billingdebe existir en la base de datos
Flujo Principal
- Administrador accede al panel de administración de planes
- Sistema muestra lista de planes existentes (free, basic, professional, enterprise)
- Administrador puede:
- Ver detalles de cada plan
- Crear nuevo plan
- Editar plan existente
- Activar/desactivar plan
- Al crear/editar plan, administrador define:
- Código único (ej: "basic", "pro")
- Nombre visible (ej: "Plan Básico")
- Descripción
- Precios (mensual, anual)
- Límites (usuarios, empresas, almacenamiento)
- Features habilitadas (JSON)
- Días de prueba
- Orden de visualización
- Sistema valida datos y guarda cambios
- Cambios se reflejan inmediatamente para nuevas suscripciones
Flujos Alternativos
FA-1: Plan con Suscripciones Activas
- Si administrador intenta eliminar plan con suscripciones activas
- Sistema muestra error: "No se puede eliminar plan con suscripciones activas"
- Sistema sugiere desactivar plan en su lugar
FA-2: Cambio de Precio
- Si se modifica precio de un plan
- Sistema pregunta: "¿Aplicar a suscripciones existentes en próxima renovación?"
- Administrador selecciona opción
- Sistema registra cambio en historial
Reglas de Negocio
- RN-1: Códigos de plan deben ser únicos (ej: "basic", "pro", "enterprise")
- RN-2: Debe existir al menos un plan por defecto para nuevos tenants
- RN-3: Plan "single_tenant" es especial y no visible públicamente
- RN-4: Features se definen como JSON:
{"inventory": true, "sales": true, ...} - RN-5: max_users = NULL significa usuarios ilimitados
- RN-6: Precio 0 indica plan gratuito
- RN-7: Cambios de precio no afectan suscripciones existentes hasta renovación
Criterios de Aceptación
- Super admin puede listar todos los planes de suscripción
- Super admin puede crear nuevos planes con todos sus atributos
- Super admin puede editar planes existentes
- Super admin puede activar/desactivar planes
- Planes desactivados no aparecen en página de precios pública
- Plan por defecto se asigna automáticamente a nuevos tenants
- Sistema valida unicidad de código de plan
- Features se almacenan como JSONB para flexibilidad
- Historial de cambios de planes se registra
Entidades Involucradas
- Principales:
- billing.subscription_plans (id, code, name, price_monthly, price_yearly, max_users, features)
- Relacionadas:
- billing.subscriptions (referencia plan_id)
- auth.tenants (campo plan para retrocompatibilidad)
Referencias
Notas Técnicas
- Tabla:
billing.subscription_plans - No tiene tenant_id: Los planes son globales del sistema
- Features JSON ejemplo:
{ "inventory": true, "sales": true, "financial": true, "purchase": true, "crm": false, "projects": false, "reports_basic": true, "reports_advanced": false, "api_access": false, "white_label": false } - Función de verificación:
billing.has_feature(tenant_id, 'feature_name')
Dependencias
- RF Dependientes: Ninguno (funcionalidad base de billing)
- Bloqueante para: RF-MGN-015-002 (Gestión de Suscripciones)