# 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```gherkin 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 ```typescript @Post() @CheckLimit('users') create(@Body() dto: CreateUserDto) { } ``` ### Decorador CheckModule ```typescript @Get() @CheckModule('crm') findAllContacts() { } ``` ### Response 402 Payment Required ```json { "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