# US-MGN004-001: Gestion de Tenants ## Identificacion | Campo | Valor | |-------|-------| | **ID** | US-MGN004-001 | | **Modulo** | MGN-004 Tenants | | **RF Relacionado** | RF-TENANT-001 | | **Prioridad** | P0 - Critica | | **Story Points** | 13 | | **Sprint** | TBD | --- ## Historia de Usuario **Como** Platform Admin **Quiero** gestionar los tenants de la plataforma (crear, ver, editar, suspender, eliminar) **Para** administrar las organizaciones que usan el sistema ERP --- ## Criterios de Aceptacion ### AC-001: Listar tenants ```gherkin Given soy Platform Admin autenticado When accedo a GET /api/v1/platform/tenants Then veo lista paginada de tenants And cada tenant muestra: nombre, slug, estado, fecha creacion And puedo filtrar por estado (created, trial, active, suspended) And puedo buscar por nombre o slug ``` ### AC-002: Crear nuevo tenant ```gherkin Given soy Platform Admin autenticado When envio POST /api/v1/platform/tenants con: | name | slug | subdomain | | Empresa XYZ | empresa-xyz | xyz | Then se crea el tenant con estado "created" And se crean los settings por defecto And se genera registro de auditoria ``` ### AC-003: Validacion de slug unico ```gherkin Given existe tenant con slug "empresa-abc" When intento crear tenant con slug "empresa-abc" Then el sistema responde con status 409 And el mensaje indica que el slug ya existe ``` ### AC-004: Ver detalle de tenant ```gherkin Given soy Platform Admin autenticado And existe tenant "tenant-123" When accedo a GET /api/v1/platform/tenants/tenant-123 Then veo toda la informacion del tenant And incluye: nombre, slug, subdominio, estado, fechas And incluye: subscripcion actual, uso de recursos ``` ### AC-005: Actualizar tenant ```gherkin Given soy Platform Admin autenticado And existe tenant "tenant-123" con nombre "Empresa Original" When envio PATCH /api/v1/platform/tenants/tenant-123 con: | name | subdominio | | Empresa Nueva | nuevo | Then el nombre cambia a "Empresa Nueva" And el subdominio cambia a "nuevo" And se actualiza updated_at y updated_by ``` ### AC-006: Suspender tenant ```gherkin Given soy Platform Admin autenticado And tenant "tenant-123" esta activo When cambio estado a "suspended" con razon "Falta de pago" Then el estado cambia a "suspended" And se registra suspended_at y suspension_reason And usuarios del tenant no pueden acceder ``` ### AC-007: Reactivar tenant suspendido ```gherkin Given soy Platform Admin autenticado And tenant "tenant-123" esta suspendido When cambio estado a "active" Then el estado cambia a "active" And se limpian campos de suspension And usuarios pueden acceder nuevamente ``` ### AC-008: Programar eliminacion ```gherkin Given soy Platform Admin autenticado And tenant "tenant-123" existe When envio DELETE /api/v1/platform/tenants/tenant-123 Then el estado cambia a "pending_deletion" And se programa eliminacion en 30 dias And se notifica al owner del tenant ``` ### AC-009: Restaurar tenant pendiente de eliminacion ```gherkin Given soy Platform Admin autenticado And tenant "tenant-123" esta en "pending_deletion" When envio POST /api/v1/platform/tenants/tenant-123/restore Then el estado cambia a "active" And se cancela la eliminacion programada ``` ### AC-010: Cambiar contexto a tenant (switch) ```gherkin Given soy Platform Admin autenticado When envio POST /api/v1/platform/switch-tenant/tenant-123 Then mi contexto cambia a tenant "tenant-123" And puedo ver datos de ese tenant And la accion queda auditada ``` --- ## Tareas Tecnicas | ID | Tarea | Estimacion | |----|-------|------------| | T-001 | Crear entidad Tenant con TypeORM | 1 SP | | T-002 | Implementar TenantsService CRUD | 3 SP | | T-003 | Implementar PlatformTenantsController | 2 SP | | T-004 | Crear DTOs con validaciones | 1 SP | | T-005 | Implementar transicion de estados | 2 SP | | T-006 | Implementar switch tenant | 2 SP | | T-007 | Tests unitarios | 2 SP | | **Total** | | **13 SP** | --- ## Notas de Implementacion - Estados validos: created -> trial -> active -> suspended -> pending_deletion -> deleted - Solo Platform Admin puede gestionar tenants - Switch tenant debe quedar en logs de auditoria - Eliminacion real solo despues de 30 dias de grace period --- ## Mockup de Referencia Ver RF-TENANT-001.md seccion Mockup. --- ## Dependencias | Tipo | Descripcion | |------|-------------| | Backend | Schema core_tenants creado | | Auth | JWT con claims de platform_admin | | Audit | Sistema de auditoria funcionando | --- ## Definition of Done - [ ] Endpoints implementados y documentados en Swagger - [ ] Validaciones de DTOs completas - [ ] Transiciones de estado implementadas - [ ] Tests unitarios con >80% coverage - [ ] Code review aprobado - [ ] Logs de auditoria funcionando