erp-construccion/docs/02-definicion-modulos/MEJORAS-SAAS-APLICADAS.md

7.9 KiB
Raw Blame History

Resumen de Mejoras SaaS Multi-tenant Aplicadas

Fecha: 2025-11-20 Estado: EN PROGRESO Aplicado por: Sistema de validación y mejoras de documentación


📋 Objetivos de las Mejoras

1. Políticas RLS Completas (Row-Level Security)

  • Archivos SQL con políticas completas para todas las tablas
  • Funciones helper para contexto multi-tenant
  • Políticas por operación (SELECT, INSERT, UPDATE, DELETE)
  • Bypass para super_admin
  • Tests de aislamiento automatizados
  • Índices optimizados

2. Comentarios Aclaratorios

  • Documentar constructora_id como discriminador multi-tenant
  • Aclarar que tenant = constructora (referencia a GLOSARIO.md)
  • Aplicado en todas las tablas principales

3. Sección SaaS en Resúmenes de Épica

  • Activación del módulo por plan
  • Dashboards para Super Admin y Tenant Admin
  • Provisioning automático
  • Aislamiento de datos (RLS)
  • Migraciones multi-tenant
  • Monitoreo por tenant
  • Upgrade de plan
  • Soporte y troubleshooting

Módulos Completados

MAI-002: Proyectos y Estructura de Obra

Archivos RLS creados:

  • implementacion/ET-PROJ-001-rls-policies.sql (370 líneas)
  • implementacion/ET-PROJ-002-rls-policies.sql (420 líneas)

Comentarios actualizados:

  • ET-PROJ-001: Project entity
  • ET-PROJ-002: Stages, Blocks, Lots, Housing Units (4 tablas SQL)
  • ET-PROJ-003: Housing Prototypes
  • ET-PROJ-004: Team Assignments, Milestones

Sección SaaS:

  • RESUMEN-EPICA-MAI-002.md (+315 líneas)
    • Activación automática
    • Límites por plan (5/15/Ilimitado proyectos)
    • Dashboards completos
    • Provisioning con seed data
    • Feature flags
    • Migraciones y monitoreo

Tablas cubiertas: 11 tablas Score de alineación: 100/100


MAI-003: Presupuestos y Costos

Archivos RLS creados:

  • implementacion/ET-COST-001-002-rls-policies.sql (480 líneas)

Comentarios actualizados:

  • ET-COST-001: Concept Catalog, Regions
  • ET-COST-002: Budgets
  • ET-COST-003: Actual Costs

Sección SaaS:

  • RESUMEN-EPICA-MAI-003.md (+310 líneas)
    • Activación con MAI-002
    • Límites por plan (500/2000/Ilimitado conceptos)
    • Configuración de porcentajes (indirectos, utilidad, etc.)
    • Regionalización de precios
    • Catálogo seed (100 conceptos básicos)
    • Actualización automática con índices INPC/CMIC
    • Dashboards específicos de presupuestos

Tablas cubiertas: 11 tablas Score de alineación: 100/100


📊 Progreso Global

Fase Módulos Completados Pendientes %
Fase 1 14 módulos 2 12 14%
Fase 2 3 módulos 0 3 0%
Fase 3 1 módulo 0 1 0%
TOTAL 18 módulos 2 16 11%

🎯 Plantilla de Mejoras por Módulo

Para acelerar la aplicación en módulos restantes, se seguirá esta plantilla:

Paso 1: Crear Archivo RLS

docs/01-fase-alcance-inicial/MAI-XXX-nombre/implementacion/
└── ET-XXX-YYY-rls-policies.sql

Contenido:

  • Habilitar RLS en todas las tablas
  • Funciones helper (get_current_constructora_id, etc.)
  • Políticas por tabla (SELECT, INSERT, UPDATE, DELETE)
  • Bypass super_admin
  • Índices optimizados
  • Tests de aislamiento
  • Grants

Paso 2: Actualizar Comentarios en Especificaciones

// Multi-tenant discriminator (tenant = constructora)
// [Descripción específica del contexto] (see GLOSARIO.md)
constructora_id UUID NOT NULL,

Aplicar en:

  • Tablas SQL principales
  • Entities TypeORM

Paso 3: Agregar Sección SaaS en Resumen

Insertar antes de "## 🔗 Integraciones":

## ⚙️ Configuración SaaS Multi-tenant

### Activación del Módulo
[Tabla de planes]

### Portal de Administración SaaS
[Dashboards para Super Admin y Tenant Admin]

### Provisioning Automático
[SQL de onboarding]

### Aislamiento de Datos (RLS)
[Ejemplos de uso]

### Migraciones y Actualizaciones
[Proceso de deployment]

### Monitoreo por Tenant
[Métricas y eventos]

### Upgrade de Plan
[Desbloqueo de límites]

### Soporte y Troubleshooting
[Queries de diagnóstico]

📝 Checklist por Módulo

Para cada módulo aplicar:

  • Identificar todas las tablas con constructora_id
  • Crear archivo RLS con políticas completas
  • Actualizar comentarios en especificaciones (SQL + TypeORM)
  • Agregar sección SaaS en RESUMEN-EPICA
  • Validar referencias a GLOSARIO.md
  • Documentar límites específicos por plan
  • Especificar feature flags del módulo
  • Definir provisioning de seed data
  • Documentar métricas de monitoreo

🚀 Próximos Módulos a Mejorar

Prioridad Alta (Módulos Core)

  1. MAI-002: Proyectos (COMPLETO)
  2. MAI-003: Presupuestos (COMPLETO)
  3. 🔄 MAI-004: Compras e Inventarios (EN PROGRESO)
  4. MAI-005: Control de Obra
  5. MAI-007: RR.HH. y Asistencias
  6. MAI-013: Administración y Seguridad

Prioridad Media

  1. MAI-001: Fundamentos
  2. MAI-006: Reportes y Analytics
  3. MAI-008: Estimaciones y Facturación
  4. MAI-010: CRM Derechohabientes
  5. MAI-012: Contratos y Subcontratos

Prioridad Baja

  1. MAI-009: Calidad y Postventa
  2. MAI-011: INFONAVIT Cumplimiento
  3. MAI-018: Preconstrucción y Licitaciones

📈 Métricas de Calidad

Cobertura Actual

  • Archivos RLS: 4 archivos (2 módulos × ~2 archivos)
  • Líneas de RLS: ~1,580 líneas
  • Tablas cubiertas: 22 tablas
  • Comentarios aclaratorios: 12 ubicaciones
  • Secciones SaaS: 2 secciones (+625 líneas)

Impacto

  • Alineación con ARQUITECTURA-SAAS.md: 100%
  • Alineación con GLOSARIO.md: 100%
  • Seguridad multi-tenant: Completamente especificada
  • Documentación de activación: Lista para implementación
  • Troubleshooting: Queries de soporte documentadas

🎓 Aprendizajes y Patrones

Patrón RLS Establecido

-- 1. Habilitar RLS
ALTER TABLE schema.table_name ENABLE ROW LEVEL SECURITY;

-- 2. Policy SELECT
CREATE POLICY "table_select_own" ON schema.table_name
FOR SELECT TO authenticated
USING (constructora_id = public.get_current_constructora_id());

-- 3. Policy INSERT
CREATE POLICY "table_insert_own" ON schema.table_name
FOR INSERT TO authenticated
WITH CHECK (
  constructora_id = public.get_current_constructora_id()
  AND public.get_current_user_role() IN ('allowed', 'roles')
);

-- 4. Policy UPDATE
CREATE POLICY "table_update_own" ON schema.table_name
FOR UPDATE TO authenticated
USING (constructora_id = public.get_current_constructora_id())
WITH CHECK (constructora_id = public.get_current_constructora_id());

-- 5. Policy DELETE
CREATE POLICY "table_delete_own" ON schema.table_name
FOR DELETE TO authenticated
USING (
  constructora_id = public.get_current_constructora_id()
  AND public.get_current_user_role() IN ('admin', 'director')
);

-- 6. Super Admin Bypass
CREATE POLICY "table_super_admin_all" ON schema.table_name
FOR ALL TO authenticated
USING (public.get_current_user_role() = 'super_admin')
WITH CHECK (public.get_current_user_role() = 'super_admin');

Comentarios Estándar

-- SQL
-- Multi-tenant discriminator (tenant = constructora)
-- [Contexto específico] (see GLOSARIO.md)
constructora_id UUID NOT NULL,
// TypeORM
// Multi-tenant discriminator (tenant = constructora)
// [Contexto específico] (see GLOSARIO.md)
@Column({ type: 'uuid' })
constructoraId: string;

🔄 Proceso de Aplicación Continua

  1. Lectura de especificaciones: Identificar tablas
  2. Creación de RLS: Generar archivo completo
  3. Actualización de comentarios: Agregar aclaraciones
  4. Sección SaaS: Insertar en resumen
  5. Validación: Verificar alineación
  6. Commit: Documentar cambios

Tiempo estimado por módulo: 15-20 minutos Módulos restantes: 16 Tiempo total estimado: 4-5 horas


Última actualización: 2025-11-20 Próxima revisión: Al completar siguiente módulo