# _MAP: MGN-004 - Multi-tenant **Modulo:** MGN-004 **Nombre:** Multi-tenant **Fase:** 01 - Foundation **Story Points:** 35 SP **Estado:** Migrado GAMILIT **Ultima actualizacion:** 2025-12-05 --- ## Resumen Sistema de multi-tenancy que permite aislar datos por organizacion/empresa, con configuracion independiente por tenant y soporte para planes de suscripcion. --- ## Metricas | Metrica | Valor | |---------|-------| | Story Points | 35 SP | | Requerimientos (RF) | 4 | | Especificaciones (ET) | 2 | | User Stories (US) | 4 | | Tablas DB | 4 | | Endpoints API | 25 | --- ## Requerimientos Funcionales (4) | ID | Archivo | Titulo | Prioridad | Estado | |----|---------|--------|-----------|--------| | RF-TENANT-001 | [RF-TENANT-001.md](./requerimientos/RF-TENANT-001.md) | CRUD de Tenants | P0 | Migrado | | RF-TENANT-002 | [RF-TENANT-002.md](./requerimientos/RF-TENANT-002.md) | Configuracion por Tenant | P0 | Migrado | | RF-TENANT-003 | [RF-TENANT-003.md](./requerimientos/RF-TENANT-003.md) | Planes y Suscripciones | P1 | Migrado | | RF-TENANT-004 | [RF-TENANT-004.md](./requerimientos/RF-TENANT-004.md) | Aislamiento RLS | P0 | Migrado | **Indice:** [INDICE-RF-TENANT.md](./requerimientos/INDICE-RF-TENANT.md) --- ## Especificaciones Tecnicas (2) | ID | Archivo | Titulo | RF Asociados | Estado | |----|---------|--------|--------------|--------| | ET-TENANTS-001 | [ET-tenants-backend.md](./especificaciones/ET-tenants-backend.md) | Backend Tenants | RF-TENANT-001 a RF-TENANT-004 | Migrado | | ET-TENANTS-002 | [ET-TENANT-database.md](./especificaciones/ET-TENANT-database.md) | Database Tenants | RF-TENANT-001 a RF-TENANT-004 | Migrado | --- ## Historias de Usuario (4) | ID | Archivo | Titulo | RF | SP | Estado | |----|---------|--------|----|----|--------| | US-MGN004-001 | [US-MGN004-001.md](./historias-usuario/US-MGN004-001.md) | Crear Tenant | RF-TENANT-001 | 8 | Migrado | | US-MGN004-002 | [US-MGN004-002.md](./historias-usuario/US-MGN004-002.md) | Configurar Tenant | RF-TENANT-002 | 5 | Migrado | | US-MGN004-003 | [US-MGN004-003.md](./historias-usuario/US-MGN004-003.md) | Gestionar Suscripcion | RF-TENANT-003 | 8 | Migrado | | US-MGN004-004 | [US-MGN004-004.md](./historias-usuario/US-MGN004-004.md) | Cambiar Plan | RF-TENANT-003 | 5 | Migrado | **Backlog:** [BACKLOG-MGN004.md](./historias-usuario/BACKLOG-MGN004.md) --- ## Implementacion ### Database | Objeto | Tipo | Schema | |--------|------|--------| | tenants | Tabla | core_tenants | | tenant_settings | Tabla | core_tenants | | plans | Tabla | core_tenants | | subscriptions | Tabla | core_tenants | | RLS Policies | Policy | Todos los schemas | ### Backend | Objeto | Tipo | Path | |--------|------|------| | TenantsModule | Module | src/modules/tenants/ | | TenantsService | Service | src/modules/tenants/tenants.service.ts | | SubscriptionsService | Service | src/modules/tenants/subscriptions.service.ts | | TenantMiddleware | Middleware | src/modules/tenants/tenant.middleware.ts | | TenantGuard | Guard | src/modules/tenants/guards/tenant.guard.ts | ### Frontend | Objeto | Tipo | Path | |--------|------|------| | TenantsPage | Page | src/features/tenants/pages/TenantsPage.tsx | | TenantSettingsPage | Page | src/features/tenants/pages/TenantSettingsPage.tsx | | OnboardingPage | Page | src/features/tenants/pages/OnboardingPage.tsx | --- ## Aislamiento RLS ```sql -- Cada tabla con tenant_id tiene RLS policy: CREATE POLICY tenant_isolation ON {table} USING (tenant_id = current_setting('app.current_tenant_id')::uuid); -- El middleware establece el contexto: SET LOCAL app.current_tenant_id = '{tenant_uuid}'; ``` --- ## Dependencias **Depende de:** MGN-001 (Auth), MGN-002 (Users), MGN-003 (Roles) **Requerido por:** Todos los modulos de negocio (catalogos, ventas, compras, etc.) --- ## Trazabilidad Ver: [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) --- **Generado por:** Requirements-Analyst **Fecha:** 2025-12-05