4.9 KiB
4.9 KiB
US-MGN004-004: Subscripciones y Limites
Identificacion
| Campo | Valor |
|---|---|
| ID | US-MGN004-004 |
| Modulo | MGN-004 Tenants |
| RF Relacionado | RF-TENANT-004 |
| Prioridad | P1 - Alta |
| Story Points | 13 |
| Sprint | TBD |
Historia de Usuario
Como Tenant Admin Quiero gestionar la subscripcion de mi organizacion y ver los limites de uso Para controlar los costos y asegurar que tengo los recursos necesarios
Criterios de Aceptacion
AC-001: Ver subscripcion actual
Given soy Tenant Admin autenticado
And tengo plan Professional activo
When accedo a GET /api/v1/tenant/subscription
Then veo:
| plan | Professional |
| price | $99 USD/mes |
| status | active |
| nextRenewal | 01/01/2026 |
And veo uso actual vs limites
AC-002: Ver uso de recursos
Given soy Tenant Admin con plan Professional (50 usuarios, 25GB)
And tengo 35 usuarios activos y 18GB usado
When consulto GET /api/v1/tenant/subscription/usage
Then veo:
| recurso | actual | limite | porcentaje |
| usuarios | 35 | 50 | 70% |
| storage | 18GB | 25GB | 72% |
| apiCalls | 5000 | 50000 | 10% |
AC-003: Bloqueo por limite de usuarios
Given tenant con plan Starter (10 usuarios)
And 10 usuarios activos (100%)
When Admin intenta crear usuario #11
Then el sistema responde con status 402
And el mensaje indica limite alcanzado
And sugiere planes con mayor limite
AC-004: Bloqueo por modulo no incluido
Given tenant con plan Starter (sin CRM)
When usuario intenta GET /api/v1/crm/contacts
Then el sistema responde con status 402
And el mensaje indica modulo no disponible
And sugiere planes que incluyen CRM
AC-005: Ver planes disponibles
Given soy usuario autenticado
When accedo a GET /api/v1/subscription/plans
Then veo lista de planes publicos
And cada plan muestra: nombre, precio, limites, features
And puedo comparar con mi plan actual
AC-006: Upgrade de plan
Given tenant en Starter ($29/mes) al dia 15 del mes
When solicito upgrade a Professional ($99/mes)
Then sistema calcula prorrateo: $35 (15 dias de diferencia)
And proceso pago de $35
And plan cambia inmediatamente a Professional
And nuevos limites aplican de inmediato
AC-007: Cancelar subscripcion
Given soy Tenant Admin con subscripcion activa
When solicito cancelar subscripcion
Then sistema muestra encuesta de salida
And confirmo cancelacion
And subscripcion se marca cancel_at_period_end = true
And acceso continua hasta fin de periodo pagado
AC-008: Trial expira
Given tenant en Trial de 14 dias
When pasan los 14 dias sin subscribirse
Then estado cambia a "trial_expired"
And usuarios no pueden acceder (excepto admin para subscribirse)
And datos se conservan
AC-009: Verificar limite antes de accion
Given endpoint que crea usuarios
And tiene decorador @CheckLimit('users')
When se ejecuta la accion
Then LimitGuard verifica limite automaticamente
And si excede, retorna 402 antes de ejecutar logica
AC-010: Ver historial de facturas
Given soy Tenant Admin autenticado
When accedo a GET /api/v1/tenant/invoices
Then veo lista de facturas:
| fecha | concepto | monto | estado |
| 01/12/2025 | Professional - Dic | $99.00 | Pagado |
And puedo descargar PDF de cada factura
Tareas Tecnicas
| ID | Tarea | Estimacion |
|---|---|---|
| T-001 | Crear entidades Plan, Subscription, Invoice | 2 SP |
| T-002 | Implementar SubscriptionsService | 3 SP |
| T-003 | Implementar LimitGuard | 2 SP |
| T-004 | Implementar ModuleGuard | 1 SP |
| T-005 | Implementar TenantUsageService | 2 SP |
| T-006 | Crear endpoints de subscripcion | 2 SP |
| T-007 | Tests unitarios | 2 SP |
| Total | 14 SP |
Notas de Implementacion
Decorador CheckLimit
@Post()
@CheckLimit('users')
create(@Body() dto: CreateUserDto) { }
Decorador CheckModule
@Get()
@CheckModule('crm')
findAllContacts() { }
Response 402 Payment Required
{
"statusCode": 402,
"error": "Payment Required",
"message": "Limite de usuarios alcanzado (10/10)",
"upgradeOptions": [
{ "planId": "...", "name": "Professional", "newLimit": 50 }
]
}
Mockup de Referencia
Ver RF-TENANT-004.md seccion Mockup.
Dependencias
| Tipo | Descripcion |
|---|---|
| Backend | Tenants y Settings (US-MGN004-001, US-MGN004-002) |
| Payment | Integracion con Stripe/PayPal (futuro) |
| Scheduler | Jobs para renovacion y notificaciones |
Definition of Done
- Planes y subscripciones funcionando
- LimitGuard bloqueando excesos
- ModuleGuard verificando acceso a modulos
- Upgrade/downgrade funcionando
- Calculo de prorrateo correcto
- Historial de facturas visible
- Tests unitarios con >80% coverage