- Update vision, architecture and technical documentation - Update module definitions (PMC-001 to PMC-008) - Update requirements documentation - Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml - Add orchestration guidelines and references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
| id | title | type | status | priority | module | project | version | rf_count | created_date | updated_date |
|---|---|---|---|---|---|---|---|---|---|---|
| RF-PMC-001 | Tenants Module | Requirement | Done | Alta | tenants | platform_marketing_content | 1.0 | 15 | 2025-12-08 | 2026-01-04 |
Requerimientos Funcionales - PMC-001 Tenants
Módulo: Tenants Versión: 1.0.0 Fecha: 2025-12-08
RF-PMC-001-001: Crear Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-001 |
| Nombre | Crear Tenant |
| Prioridad | P1 |
| Actor | Super Admin |
Descripción: El sistema debe permitir crear un nuevo tenant con datos básicos.
Precondiciones:
- Usuario autenticado como Super Admin
Datos de entrada:
- name: string (requerido, 3-100 caracteres)
- slug: string (requerido, único, formato URL-safe)
- plan_id: UUID (requerido)
- settings: object (opcional)
- branding: object (opcional)
Flujo principal:
- Super Admin accede a gestión de tenants
- Selecciona "Crear tenant"
- Completa formulario con datos requeridos
- Sistema valida unicidad del slug
- Sistema crea tenant con status "active"
- Sistema crea usuario admin inicial (opcional)
- Sistema retorna tenant creado
Postcondiciones:
- Tenant existe en base de datos
- Tenant tiene plan asignado
- RLS configurado para nuevo tenant
Criterios de aceptación:
- Validación de slug único funciona
- Tenant se crea con status "active"
- Plan se asocia correctamente
RF-PMC-001-002: Editar Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-002 |
| Nombre | Editar Tenant |
| Prioridad | P2 |
| Actor | Super Admin, Tenant Admin |
Descripción: El sistema debe permitir modificar datos de un tenant existente.
Precondiciones:
- Usuario autenticado con permisos de edición
- Tenant existe
Datos de entrada:
- name: string (opcional)
- settings: object (opcional)
- branding: object (opcional)
- limits: object (opcional, solo Super Admin)
Flujo principal:
- Usuario accede a configuración del tenant
- Modifica campos permitidos según rol
- Sistema valida datos
- Sistema actualiza tenant
- Sistema registra cambio en audit log
Restricciones:
- Tenant Admin no puede modificar limits ni plan
- Slug no es editable después de creación
Criterios de aceptación:
- Campos se actualizan correctamente
- Permisos por rol se respetan
- Audit log registra cambios
RF-PMC-001-003: Suspender Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-003 |
| Nombre | Suspender Tenant |
| Prioridad | P2 |
| Actor | Super Admin |
Descripción: El sistema debe permitir suspender un tenant, bloqueando acceso de usuarios.
Precondiciones:
- Usuario autenticado como Super Admin
- Tenant existe con status "active"
Flujo principal:
- Super Admin selecciona tenant a suspender
- Sistema solicita confirmación
- Sistema cambia status a "suspended"
- Sistema invalida todas las sesiones del tenant
- Sistema notifica a admins del tenant
Postcondiciones:
- Usuarios del tenant no pueden hacer login
- Datos permanecen intactos
- Jobs pendientes se pausan
Criterios de aceptación:
- Status cambia a "suspended"
- Login bloqueado para usuarios del tenant
- Sesiones existentes invalidadas
RF-PMC-001-004: Reactivar Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-004 |
| Nombre | Reactivar Tenant |
| Prioridad | P2 |
| Actor | Super Admin |
Descripción: El sistema debe permitir reactivar un tenant suspendido.
Precondiciones:
- Tenant existe con status "suspended"
Flujo principal:
- Super Admin selecciona tenant suspendido
- Selecciona "Reactivar"
- Sistema cambia status a "active"
- Sistema notifica a admins del tenant
Postcondiciones:
- Usuarios pueden hacer login
- Jobs pausados se reactivan
Criterios de aceptación:
- Status cambia a "active"
- Login permitido nuevamente
RF-PMC-001-005: Eliminar Tenant (Soft Delete)
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-005 |
| Nombre | Eliminar Tenant |
| Prioridad | P3 |
| Actor | Super Admin |
Descripción: El sistema debe permitir eliminar un tenant mediante soft delete.
Precondiciones:
- Tenant existe
Flujo principal:
- Super Admin selecciona tenant a eliminar
- Sistema solicita confirmación con texto de verificación
- Sistema marca tenant como eliminado (deleted_at)
- Sistema invalida sesiones
- Sistema programa limpieza de datos (90 días)
Postcondiciones:
- Tenant marcado con deleted_at
- Datos retenidos por 90 días
- Acceso completamente bloqueado
Criterios de aceptación:
- Soft delete funciona correctamente
- Datos no se eliminan inmediatamente
- Tenant no aparece en listados
RF-PMC-001-006: Listar Tenants
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-006 |
| Nombre | Listar Tenants |
| Prioridad | P1 |
| Actor | Super Admin |
Descripción: El sistema debe permitir listar todos los tenants con filtros y paginación.
Datos de entrada (query params):
- status: string (filtro por estado)
- plan_id: UUID (filtro por plan)
- search: string (búsqueda por nombre)
- page: number
- limit: number (max 100)
Datos de salida:
- Lista de tenants con datos básicos
- Total de registros
- Información de paginación
Criterios de aceptación:
- Paginación funciona correctamente
- Filtros se aplican correctamente
- Búsqueda por nombre funciona
RF-PMC-001-007: Ver Detalle de Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-007 |
| Nombre | Ver Detalle de Tenant |
| Prioridad | P1 |
| Actor | Super Admin, Tenant Admin |
Descripción: El sistema debe mostrar información detallada de un tenant.
Datos de salida:
- Datos básicos del tenant
- Plan asociado con límites
- Configuración (settings)
- Branding
- Estadísticas de uso
- Usuarios activos (count)
Criterios de aceptación:
- Todos los datos se muestran correctamente
- Tenant Admin solo ve su propio tenant
RF-PMC-001-008: Configurar Branding
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-008 |
| Nombre | Configurar Branding |
| Prioridad | P3 |
| Actor | Tenant Admin |
Descripción: El sistema debe permitir personalizar el branding del tenant.
Datos de entrada:
- logo_url: string (URL o upload)
- primary_color: string (hex color)
- secondary_color: string (hex color)
- favicon_url: string (opcional)
Flujo principal:
- Admin accede a configuración de branding
- Sube logo o proporciona URL
- Selecciona colores
- Sistema valida formatos
- Sistema actualiza branding
- Cambios se reflejan en UI
Criterios de aceptación:
- Logo se almacena/referencia correctamente
- Colores se aplican en UI
- Preview disponible antes de guardar
RF-PMC-001-009: Configurar Límites Personalizados
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-009 |
| Nombre | Configurar Límites Personalizados |
| Prioridad | P2 |
| Actor | Super Admin |
Descripción: El sistema debe permitir sobreescribir límites del plan para un tenant específico.
Datos de entrada:
- generations_per_month: number (null = usar plan)
- storage_gb: number (null = usar plan)
- users_max: number (null = usar plan)
- custom_limits: object
Flujo principal:
- Super Admin accede a límites del tenant
- Modifica valores específicos
- Sistema valida que valores sean >= 0
- Sistema guarda límites personalizados
- Límites se aplican sobre los del plan
Criterios de aceptación:
- Límites personalizados sobreescriben plan
- Valores null usan defaults del plan
- Cambios se aplican inmediatamente
RF-PMC-001-010: Obtener Tenant Actual
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-010 |
| Nombre | Obtener Tenant Actual |
| Prioridad | P1 |
| Actor | Usuario autenticado |
Descripción: El sistema debe proporcionar los datos del tenant del usuario actual.
Flujo principal:
- Usuario hace request a /tenants/current
- Sistema extrae tenant_id del JWT
- Sistema retorna datos del tenant
Datos de salida:
- Datos básicos del tenant
- Plan con límites efectivos
- Branding
- Settings relevantes para el usuario
Criterios de aceptación:
- Endpoint retorna tenant correcto
- Límites efectivos calculados correctamente
RF-PMC-001-011: Validar Cuota de Uso
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-011 |
| Nombre | Validar Cuota de Uso |
| Prioridad | P1 |
| Actor | Sistema |
Descripción: El sistema debe validar cuotas antes de operaciones que consumen recursos.
Operaciones validadas:
- Generación de imágenes
- Entrenamiento de modelos
- Subida de archivos (storage)
- Creación de usuarios
Flujo principal:
- Usuario solicita operación
- Sistema obtiene límites del tenant
- Sistema obtiene uso actual
- Sistema compara uso vs límite
- Si excede: rechaza con error específico
- Si no excede: permite operación
Criterios de aceptación:
- Validación ocurre antes de cada operación
- Mensaje de error indica límite y uso actual
- Operaciones no se ejecutan si exceden límite
RF-PMC-001-012: Aplicar RLS por Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-012 |
| Nombre | Aplicar RLS por Tenant |
| Prioridad | P1 |
| Actor | Sistema |
Descripción: El sistema debe garantizar aislamiento de datos entre tenants mediante RLS.
Implementación:
- Todas las tablas principales tienen columna tenant_id
- Políticas RLS filtran por tenant_id
- Middleware inyecta tenant_id en cada request
- SET app.current_tenant ejecutado antes de queries
Tablas afectadas:
- clients, contacts, brands, products
- projects, campaigns
- assets, collections
- users, roles
- generation_jobs, custom_models
- automation_flows, automation_runs
Criterios de aceptación:
- Queries solo retornan datos del tenant actual
- INSERT automáticamente incluye tenant_id
- No es posible acceder a datos de otro tenant
RF-PMC-001-013: Gestionar Planes
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-013 |
| Nombre | Gestionar Planes |
| Prioridad | P2 |
| Actor | Super Admin |
Descripción: El sistema debe permitir crear y gestionar planes de suscripción.
Datos de entrada:
- name: string
- code: string (único)
- features: object (funcionalidades habilitadas)
- limits: object (cuotas)
- price_monthly: decimal
- price_yearly: decimal
- is_active: boolean
Operaciones:
- Crear plan
- Editar plan
- Activar/desactivar plan
- Ver tenants por plan
Criterios de aceptación:
- CRUD de planes funciona
- Planes inactivos no asignables a nuevos tenants
- Cambio de plan en tenant actualiza límites
RF-PMC-001-014: Cambiar Plan de Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-014 |
| Nombre | Cambiar Plan de Tenant |
| Prioridad | P2 |
| Actor | Super Admin |
Descripción: El sistema debe permitir cambiar el plan de un tenant.
Flujo principal:
- Super Admin selecciona tenant
- Selecciona nuevo plan
- Sistema valida compatibilidad
- Sistema actualiza plan_id
- Nuevos límites se aplican inmediatamente
- Sistema notifica a admins del tenant
Validaciones:
- Si downgrade: verificar que uso actual no exceda nuevos límites
- Warning si usuarios exceden nuevo límite
Criterios de aceptación:
- Plan se actualiza correctamente
- Límites se aplican inmediatamente
- Warnings apropiados en downgrade
RF-PMC-001-015: Ver Uso del Tenant
| Campo | Valor |
|---|---|
| ID | RF-PMC-001-015 |
| Nombre | Ver Uso del Tenant |
| Prioridad | P2 |
| Actor | Super Admin, Tenant Admin |
Descripción: El sistema debe mostrar métricas de uso del tenant.
Datos de salida:
- Generaciones: usado/límite
- Storage: usado/límite (GB)
- Usuarios: activos/límite
- Entrenamientos: usado/límite
- Período de facturación actual
Criterios de aceptación:
- Métricas se calculan correctamente
- Porcentajes y gráficos visuales
- Alertas cuando se acerca al límite (>80%)
Resumen
| Prioridad | Cantidad |
|---|---|
| P1 | 6 |
| P2 | 6 |
| P3 | 3 |
| Total | 15 |
Documento generado por: Requirements-Analyst Fecha: 2025-12-08