workspace/projects/erp-suite/docs/REPORTE-VALIDACION-DDL-VERTICALES.md

9.3 KiB

Reporte de Validación DDL - Verticales ERP-Suite

Fecha: 2025-12-08 Versión: 1.1 Sistema: SIMCO v2.2.0


Resumen Ejecutivo

Este reporte documenta la validación de los DDL implementados en los proyectos verticales independientes de ERP-Suite.

Arquitectura: Cada vertical es un proyecto independiente (fork conceptual) que implementa y adapta patrones del ERP-Core para su dominio específico. Las verticales NO dependen del ERP-Core para ejecutarse.

Estado General

Vertical Archivos DDL Tablas Estado Discrepancias
Construcción 4 ~35 CORREGIDO 0 (2 resueltas)
Mecánicas-Diesel 6 ~30 VÁLIDO 0
Vidrio-Templado 0 0 N/A (Planificación) -
Retail 0 0 N/A (Planificación) -
Clínicas 0 0 N/A (Planificación) -

1. Vertical: CONSTRUCCIÓN

1.1 Archivos DDL Analizados

Archivo Líneas Tablas
database/schemas/01-construction-schema-ddl.sql 113 2
database/schemas/02-hr-schema-ddl.sql 153 3
database/schemas/03-hse-schema-ddl.sql 1268 ~28
database/init-scripts/01-init-database.sql 317 2 (fallback)

1.2 Discrepancias Encontradas

D-CON-001: CRÍTICA - Schema Incorrecto para tenants/users CORREGIDO

Ubicación: Múltiples archivos Problema original:

-- Construcción usaba:
REFERENCES core.tenants(id)
REFERENCES core.users(id)

-- ERP-Core tiene:
auth.tenants
auth.users

Corrección aplicada (2025-12-08):

  • 01-construction-schema-ddl.sql: 4 referencias corregidas
  • 02-hr-schema-ddl.sql: 4 referencias corregidas
  • 03-hse-schema-ddl.sql: 42 referencias corregidas
  • Total: 50 referencias corregidas a auth.tenants y auth.users

Estado: RESUELTO

D-CON-002: MEDIO - Tablas Fallback en init-database.sql

Ubicación: database/init-scripts/01-init-database.sql líneas 264-284 Situación:

-- Crea tablas fallback para uso standalone
CREATE TABLE IF NOT EXISTS core.tenants (...)
CREATE TABLE IF NOT EXISTS core.users (...)

Nota: Estas tablas permanecen como fallback para permitir uso standalone de construcción sin ERP-Core completo. El IF NOT EXISTS previene duplicación si auth.* ya existe.

Corrección aplicada en DDL de schemas:

  • 01-construction-schema-ddl.sql: Ahora verifica que auth.tenants y auth.users existan
  • Prerequisitos del ERP-Core son validados antes de crear tablas

Estado: ⚠️ ACEPTABLE (fallback para standalone)

1.3 Buenas Prácticas Detectadas

Práctica Estado Comentario
Row-Level Security Implementado en todas las tablas
Triggers updated_at Usando core_shared.set_updated_at()
Índices por tenant_id Presente en todas las tablas
Comentarios en tablas Documentación clara
Verificación de prerequisitos Corregido: Ahora verifica auth.tenants y auth.users

2. Vertical: MECÁNICAS-DIESEL

2.1 Archivos DDL Analizados

Archivo Líneas Tablas
database/init/00-extensions.sql 14 0
database/init/01-create-schemas.sql 30 0
database/init/02-rls-functions.sql 106 0
database/init/03-service-management-tables.sql 567 ~18
database/init/04-parts-management-tables.sql 398 ~12
database/init/05-vehicle-management-tables.sql 365 ~8

2.2 Estado de Validación

Sin discrepancias críticas

Enfoque diferente: Mecánicas-diesel NO usa FK explícitas a auth.*:

-- Usa columnas sin FK:
tenant_id UUID NOT NULL,  -- Sin REFERENCES
customer_id UUID NOT NULL,  -- Comentario: core.partners

Ventaja: No depende del schema específico de ERP-Core Desventaja: No hay integridad referencial a nivel de BD

2.3 Referencias a ERP-Core (Comentadas)

Columna Referencia Esperada Estado
tenant_id auth.tenants Solo comentario
customer_id core.partners Solo comentario
assigned_to auth.users Solo comentario
created_by auth.users Solo comentario

2.4 Buenas Prácticas Detectadas

Práctica Estado Comentario
Row-Level Security Función create_tenant_rls_policies()
Triggers updated_at trigger_set_updated_at()
Índices optimizados Índices compuestos por tenant y estado
CHECK constraints Validaciones de dominio
JSONB para datos flex raw_data en diagnósticos

3. Matriz de Compatibilidad con ERP-Core

Schema ERP-Core Construcción Mecánicas-Diesel
auth.tenants Corregido (usa auth.tenants) Compatible (sin FK)
auth.users Corregido (usa auth.users) Compatible (sin FK)
core.partners Compatible Compatible (sin FK)
inventory.* ⚠️ Extensión paralela ⚠️ Extensión paralela
financial.* N/A N/A

4. Acciones Recomendadas

Inmediatas (Construcción)

  1. Corregir referencias FK en archivos DDL:

    # Archivos a modificar:
    - database/schemas/01-construction-schema-ddl.sql
    - database/schemas/02-hr-schema-ddl.sql
    - database/schemas/03-hse-schema-ddl.sql
    
  2. Eliminar tablas fallback en 01-init-database.sql:

    • Eliminar CREATE TABLE IF NOT EXISTS core.tenants
    • Eliminar CREATE TABLE IF NOT EXISTS core.users
    • Agregar verificación de auth.tenants y auth.users

Corto Plazo

  1. Documentar prerequisitos en HERENCIA-ERP-CORE.md:

    • ERP-Core debe estar instalado primero
    • DDL del core debe ejecutarse antes de verticales
  2. Crear script de validación que verifique:

    • Schemas requeridos del core existen
    • Tablas base del core existen
    • FK referencias son válidas

Mediano Plazo (Mecánicas-Diesel)

  1. Evaluar agregar FK explícitas a mecánicas-diesel:
    • Ventaja: Integridad referencial
    • Desventaja: Acoplamiento con ERP-Core

5. Scripts de Corrección Propuestos

5.1 Corrección para Construcción

-- Ejecutar para corregir referencias
-- En 01-construction-schema-ddl.sql

-- Cambiar:
-- tenant_id UUID NOT NULL REFERENCES core.tenants(id),
-- A:
-- tenant_id UUID NOT NULL REFERENCES auth.tenants(id),

-- Cambiar:
-- created_by UUID REFERENCES core.users(id),
-- A:
-- created_by UUID REFERENCES auth.users(id),

5.2 Validación de Prerequisitos Propuesta

-- Agregar al inicio de cada DDL de vertical
DO $$
BEGIN
    -- Verificar ERP-Core instalado
    IF NOT EXISTS (SELECT 1 FROM pg_tables WHERE schemaname = 'auth' AND tablename = 'tenants') THEN
        RAISE EXCEPTION 'ERP-Core requerido: Falta auth.tenants';
    END IF;

    IF NOT EXISTS (SELECT 1 FROM pg_tables WHERE schemaname = 'auth' AND tablename = 'users') THEN
        RAISE EXCEPTION 'ERP-Core requerido: Falta auth.users';
    END IF;

    IF NOT EXISTS (SELECT 1 FROM pg_tables WHERE schemaname = 'core' AND tablename = 'partners') THEN
        RAISE EXCEPTION 'ERP-Core requerido: Falta core.partners';
    END IF;

    RAISE NOTICE 'ERP-Core verificado correctamente';
END $$;

6. Conclusión

Construcción

  • Estado: CORREGIDO - Compatible con ERP-Core
  • Correcciones aplicadas: 50 referencias a auth.tenants/auth.users
  • Verificaciones de prerequisitos actualizadas

Mecánicas-Diesel

  • Estado: Compatible con ERP-Core
  • Nota: Funciona independientemente pero sin integridad referencial FK

Verticales en Planificación

  • Vidrio-Templado, Retail, Clínicas: Sin DDL implementado
  • Recomendación: Seguir patrón de construcción corregido (con FK a auth.*)

7. Resumen de Correcciones Aplicadas (2025-12-08)

Archivo Correcciones
01-construction-schema-ddl.sql 4 FK + verificación prerequisitos
02-hr-schema-ddl.sql 4 FK + verificación prerequisitos
03-hse-schema-ddl.sql 42 FK corregidas
Total 50 referencias corregidas

8. Documentación Actualizada (2025-12-08)

Como resultado de esta validación, los siguientes archivos fueron actualizados:

Construcción

Archivo Actualización
database/schemas/01-construction-schema-ddl.sql 4 FK corregidas + prerequisitos
database/schemas/02-hr-schema-ddl.sql 4 FK corregidas + prerequisitos
database/schemas/03-hse-schema-ddl.sql 42 FK corregidas
database/HERENCIA-ERP-CORE.md Sección de correcciones agregada
orchestration/inventarios/DATABASE_INVENTORY.yml Sección validacion_ddl agregada
orchestration/inventarios/MASTER_INVENTORY.yml Sección validacion_ddl agregada

Mecánicas-Diesel

Archivo Actualización
database/HERENCIA-ERP-CORE.md Sección de validación DDL agregada
orchestration/inventarios/DATABASE_INVENTORY.yml Estado validacion_ddl actualizado
orchestration/inventarios/MASTER_INVENTORY.yml Estado y conteos actualizados

Generado por: Claude Code Sistema: SIMCO v2.2.0 Fecha: 2025-12-08 Última actualización: 2025-12-08 (documentación propagada a todas las verticales)