# Backlog MGN-004: Multi-Tenancy ## Resumen del Modulo | Campo | Valor | |-------|-------| | **Modulo** | MGN-004 | | **Nombre** | Multi-Tenancy | | **Total User Stories** | 4 | | **Total Story Points** | 47 | | **Estado** | Ready for Development | | **Fecha** | 2025-12-05 | --- ## User Stories | ID | Nombre | Prioridad | SP | Estado | |----|--------|-----------|-----|--------| | [US-MGN004-001](./US-MGN004-001.md) | Gestion de Tenants | P0 | 13 | Ready | | [US-MGN004-002](./US-MGN004-002.md) | Configuracion de Tenant | P0 | 8 | Ready | | [US-MGN004-003](./US-MGN004-003.md) | Aislamiento de Datos | P0 | 13 | Ready | | [US-MGN004-004](./US-MGN004-004.md) | Subscripciones y Limites | P1 | 13 | Ready | --- ## Arquitectura Multi-Tenant ``` ┌─────────────────────────────────────────────────────────────────┐ │ Request Flow │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. HTTP Request │ │ └─> Authorization: Bearer {JWT} │ │ │ │ 2. JwtAuthGuard │ │ └─> Valida token, extrae user + tenant_id │ │ │ │ 3. TenantGuard (US-MGN004-003) │ │ └─> Verifica tenant activo │ │ └─> Inyecta tenant en request │ │ │ │ 4. TenantContextMiddleware (US-MGN004-003) │ │ └─> SET app.current_tenant_id = :tenantId │ │ │ │ 5. LimitGuard (US-MGN004-004) │ │ └─> Verifica limites de subscripcion │ │ │ │ 6. ModuleGuard (US-MGN004-004) │ │ └─> Verifica acceso al modulo │ │ │ │ 7. RbacGuard (MGN-003) │ │ └─> Valida permisos del usuario │ │ │ │ 8. Controller -> Service -> Repository │ │ │ │ 9. PostgreSQL RLS (US-MGN004-003) │ │ └─> WHERE tenant_id = current_tenant_id() │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Estados del Tenant ``` ┌──────────────┐ │ created │ └──────┬───────┘ │ (start trial) ▼ ┌──────────────┐ ┌──────────│ trial │──────────┐ │ └──────┬───────┘ │ │ │ │ │ (pay) │ (expire) │ (convert) │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │trial_expired │ │ │ └──────────────┘ │ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ active │◄────────────────────│ active │ └──────┬───────┘ (reactivate) └──────┬───────┘ │ │ │ (suspend) │ ▼ │ ┌──────────────┐ │ │ suspended │────────────────────────────┘ └──────┬───────┘ │ (schedule delete) ▼ ┌──────────────────┐ │ pending_deletion │ └────────┬─────────┘ │ (30 days) ▼ ┌──────────────┐ │ deleted │ └──────────────┘ ``` --- ## Planes de Subscripcion | Plan | Usuarios | Storage | Precio | |------|----------|---------|--------| | Trial | 5 | 1 GB | Gratis (14 dias) | | Starter | 10 | 5 GB | $29/mes | | Professional | 50 | 25 GB | $99/mes | | Enterprise | Ilimitado | 100 GB | $299/mes | --- ## Distribucion de Story Points ``` US-MGN004-001 (Gestion Tenants): ████████████████████████████ 13 SP (28%) US-MGN004-002 (Configuracion): █████████████████ 8 SP (17%) US-MGN004-003 (Aislamiento RLS): ████████████████████████████ 13 SP (28%) US-MGN004-004 (Subscripciones): ████████████████████████████ 13 SP (28%) ───────────────────────────── Total: 47 SP ``` --- ## Orden de Implementacion Recomendado 1. **US-MGN004-003** - Aislamiento de Datos (Base para todo) - RLS policies - TenantGuard - TenantContextMiddleware - TenantBaseEntity 2. **US-MGN004-001** - Gestion de Tenants (CRUD basico) - Entidad Tenant - TenantsService - Platform Admin endpoints 3. **US-MGN004-002** - Configuracion de Tenant - TenantSettings - Upload de logos - Merge con defaults 4. **US-MGN004-004** - Subscripciones y Limites (Monetizacion) - Plans, Subscriptions - LimitGuard, ModuleGuard - Billing integration --- ## Dependencias con Otros Modulos | Modulo | Dependencia | |--------|-------------| | MGN-001 Auth | JWT debe incluir tenant_id claim | | MGN-002 Users | Users deben tener tenant_id | | MGN-003 RBAC | Roles son per-tenant, permisos de platform admin | --- ## Riesgos Identificados | Riesgo | Mitigacion | |--------|------------| | RLS mal configurado expone datos | Tests exhaustivos de aislamiento | | Performance con muchos tenants | Indices compuestos, caching | | Migracion de datos existentes | Script de migracion con tenant default | | Complejidad de billing | Integracion con Stripe (proven) | --- ## Definition of Done del Modulo - [ ] US-MGN004-001: CRUD de tenants completo - [ ] US-MGN004-002: Settings funcionando con merge - [ ] US-MGN004-003: RLS aplicado en TODAS las tablas - [ ] US-MGN004-003: Tests de aislamiento pasando - [ ] US-MGN004-004: Planes y limites configurados - [ ] US-MGN004-004: LimitGuard y ModuleGuard activos - [ ] Tests unitarios > 80% coverage - [ ] Tests de aislamiento exhaustivos - [ ] Security review de RLS aprobado - [ ] Performance tests con multiples tenants - [ ] Documentacion Swagger completa --- ## Metricas de Exito | Metrica | Objetivo | |---------|----------| | Tiempo de respuesta (con RLS) | < 100ms p95 | | Tests de aislamiento | 100% pass | | Cobertura de tests | > 80% | | Vulnerabilidades cross-tenant | 0 | --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | System | Creacion inicial con 4 US |