- Add 02b-hr-employees.sql: 15 puestos, 15 employees for HSE EPP assignments - Add 11-infonavit.sql: registro, ofertas, derechohabientes, asignaciones - Add validate-seeds-comprehensive.sql: FK integrity, calculations, coverage - Update 06-estimaciones.sql: Document formula in header - Update 08-hse.sql: Fix hse.capacitacion → hse.capacitaciones, add 6 new tables - Update validate-seeds.sql: Fix table name reference New tables seeded: tipos_inspeccion, inspecciones, epp_matriz_puesto, epp_asignaciones, cumplimiento_obra, dias_sin_accidente Coverage increased: HSE 7%→17%, INFONAVIT 0%→50% Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
376 lines
34 KiB
SQL
376 lines
34 KiB
SQL
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
-- SCRIPT: validate-seeds.sql
|
|
-- PROYECTO: ERP Construcción
|
|
-- DESCRIPCIÓN: Valida que todos los seeds de desarrollo estén correctamente cargados
|
|
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE CATÁLOGOS BASE (SEED 01)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_unidades INTEGER;
|
|
v_monedas INTEGER;
|
|
v_impuestos INTEGER;
|
|
v_bancos INTEGER;
|
|
v_estados INTEGER;
|
|
v_municipios INTEGER;
|
|
v_errors TEXT := '';
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_unidades FROM core.unidades WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_monedas FROM core.monedas WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_impuestos FROM core.impuestos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_bancos FROM core.bancos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_estados FROM core.estados WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_municipios FROM core.municipios WHERE activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '════════════════════════════════════════════════════════════════';
|
|
RAISE NOTICE ' VALIDACIÓN DE SEEDS - ERP CONSTRUCCIÓN';
|
|
RAISE NOTICE '════════════════════════════════════════════════════════════════';
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 01: CATÁLOGOS BASE │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Unidades de medida: %', LPAD(v_unidades::TEXT, 4) || CASE WHEN v_unidades >= 30 THEN ' ✓' ELSE ' ✗ (esperado: 32)' END || ' │';
|
|
RAISE NOTICE '│ Monedas: %', LPAD(v_monedas::TEXT, 4) || CASE WHEN v_monedas >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '│ Impuestos: %', LPAD(v_impuestos::TEXT, 4) || CASE WHEN v_impuestos >= 8 THEN ' ✓' ELSE ' ✗ (esperado: 10)' END || ' │';
|
|
RAISE NOTICE '│ Bancos: %', LPAD(v_bancos::TEXT, 4) || CASE WHEN v_bancos >= 18 THEN ' ✓' ELSE ' ✗ (esperado: 20)' END || ' │';
|
|
RAISE NOTICE '│ Estados: %', LPAD(v_estados::TEXT, 4) || CASE WHEN v_estados >= 30 THEN ' ✓' ELSE ' ✗ (esperado: 32)' END || ' │';
|
|
RAISE NOTICE '│ Municipios: %', LPAD(v_municipios::TEXT, 4) || CASE WHEN v_municipios >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 15)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
|
|
IF v_unidades < 30 OR v_monedas < 4 OR v_impuestos < 8 THEN
|
|
v_errors := v_errors || 'SEED-01 incompleto. ';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE USUARIOS Y PERFILES (SEED 02)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_roles INTEGER;
|
|
v_permisos INTEGER;
|
|
v_usuarios INTEGER;
|
|
v_usuarios_demo INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_roles FROM core.roles WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_permisos FROM core.permisos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_usuarios FROM core.usuarios WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_usuarios_demo FROM core.usuarios WHERE email LIKE '%@demo.com' AND activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 02: USUARIOS Y PERFILES │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Roles: %', LPAD(v_roles::TEXT, 4) || CASE WHEN v_roles >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 12)' END || ' │';
|
|
RAISE NOTICE '│ Permisos: %', LPAD(v_permisos::TEXT, 4) || CASE WHEN v_permisos >= 45 THEN ' ✓' ELSE ' ✗ (esperado: 50+)' END || ' │';
|
|
RAISE NOTICE '│ Usuarios totales: %', LPAD(v_usuarios::TEXT, 4) || CASE WHEN v_usuarios >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 12)' END || ' │';
|
|
RAISE NOTICE '│ Usuarios demo: %', LPAD(v_usuarios_demo::TEXT, 4) || CASE WHEN v_usuarios_demo >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 12)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE EMPRESA Y ESTRUCTURA (SEED 03)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_tenants INTEGER;
|
|
v_sucursales INTEGER;
|
|
v_almacenes INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_tenants FROM core.tenants WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_sucursales FROM core.sucursales WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_almacenes FROM inventory.almacenes WHERE activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 03: EMPRESA Y ESTRUCTURA │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Tenants: %', LPAD(v_tenants::TEXT, 4) || CASE WHEN v_tenants >= 1 THEN ' ✓' ELSE ' ✗ (esperado: 1)' END || ' │';
|
|
RAISE NOTICE '│ Sucursales: %', LPAD(v_sucursales::TEXT, 4) || CASE WHEN v_sucursales >= 2 THEN ' ✓' ELSE ' ✗ (esperado: 2)' END || ' │';
|
|
RAISE NOTICE '│ Almacenes: %', LPAD(v_almacenes::TEXT, 4) || CASE WHEN v_almacenes >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 4)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE PROYECTOS Y OBRAS (SEED 04)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_prototipos INTEGER;
|
|
v_proyectos INTEGER;
|
|
v_etapas INTEGER;
|
|
v_manzanas INTEGER;
|
|
v_lotes INTEGER;
|
|
v_departamentos INTEGER;
|
|
v_subcontratistas INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_prototipos FROM construction.prototipos_vivienda WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_proyectos FROM construction.fraccionamientos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_etapas FROM construction.etapas;
|
|
SELECT COUNT(*) INTO v_manzanas FROM construction.manzanas WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_lotes FROM construction.lotes WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_departamentos FROM construction.departamentos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_subcontratistas FROM construction.subcontratistas WHERE activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 04: PROYECTOS Y OBRAS │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Prototipos: %', LPAD(v_prototipos::TEXT, 4) || CASE WHEN v_prototipos >= 5 THEN ' ✓' ELSE ' ✗ (esperado: 6)' END || ' │';
|
|
RAISE NOTICE '│ Proyectos/Fraccionamientos: %', LPAD(v_proyectos::TEXT, 4) || CASE WHEN v_proyectos >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Etapas: %', LPAD(v_etapas::TEXT, 4) || CASE WHEN v_etapas >= 5 THEN ' ✓' ELSE ' ✗ (esperado: 6)' END || ' │';
|
|
RAISE NOTICE '│ Manzanas: %', LPAD(v_manzanas::TEXT, 4) || CASE WHEN v_manzanas >= 7 THEN ' ✓' ELSE ' ✗ (esperado: 8)' END || ' │';
|
|
RAISE NOTICE '│ Lotes: %', LPAD(v_lotes::TEXT, 4) || CASE WHEN v_lotes >= 12 THEN ' ✓' ELSE ' ✗ (esperado: 15)' END || ' │';
|
|
RAISE NOTICE '│ Departamentos: %', LPAD(v_departamentos::TEXT, 4) || CASE WHEN v_departamentos >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 12)' END || ' │';
|
|
RAISE NOTICE '│ Subcontratistas: %', LPAD(v_subcontratistas::TEXT, 4) || CASE WHEN v_subcontratistas >= 8 THEN ' ✓' ELSE ' ✗ (esperado: 10)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE PRESUPUESTOS (SEED 05)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_conceptos INTEGER;
|
|
v_presupuestos INTEGER;
|
|
v_partidas INTEGER;
|
|
v_programas INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_conceptos FROM construction.conceptos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_presupuestos FROM construction.presupuestos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_partidas FROM construction.presupuesto_partidas;
|
|
SELECT COUNT(*) INTO v_programas FROM construction.programa_obra WHERE activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 05: PRESUPUESTOS │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Conceptos (catálogo CMIC): %', LPAD(v_conceptos::TEXT, 4) || CASE WHEN v_conceptos >= 20 THEN ' ✓' ELSE ' ✗ (esperado: 25+)' END || ' │';
|
|
RAISE NOTICE '│ Presupuestos: %', LPAD(v_presupuestos::TEXT, 4) || CASE WHEN v_presupuestos >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '│ Partidas presupuestales: %', LPAD(v_partidas::TEXT, 4) || CASE WHEN v_partidas >= 12 THEN ' ✓' ELSE ' ✗ (esperado: 14)' END || ' │';
|
|
RAISE NOTICE '│ Programas de obra: %', LPAD(v_programas::TEXT, 4) || CASE WHEN v_programas >= 2 THEN ' ✓' ELSE ' ✗ (esperado: 2)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE ESTIMACIONES (SEED 06)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_contratos INTEGER;
|
|
v_estimaciones INTEGER;
|
|
v_anticipos INTEGER;
|
|
v_fondos INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_contratos FROM estimates.contratos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_estimaciones FROM estimates.estimaciones;
|
|
SELECT COUNT(*) INTO v_anticipos FROM estimates.anticipos;
|
|
SELECT COUNT(*) INTO v_fondos FROM estimates.fondo_garantia;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 06: ESTIMACIONES Y CONTRATOS │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Contratos: %', LPAD(v_contratos::TEXT, 4) || CASE WHEN v_contratos >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '│ Estimaciones: %', LPAD(v_estimaciones::TEXT, 4) || CASE WHEN v_estimaciones >= 5 THEN ' ✓' ELSE ' ✗ (esperado: 6)' END || ' │';
|
|
RAISE NOTICE '│ Anticipos: %', LPAD(v_anticipos::TEXT, 4) || CASE WHEN v_anticipos >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Fondos de garantía: %', LPAD(v_fondos::TEXT, 4) || CASE WHEN v_fondos >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE AVANCES Y CALIDAD (SEED 07)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_avances INTEGER;
|
|
v_bitacora INTEGER;
|
|
v_checklists INTEGER;
|
|
v_inspecciones INTEGER;
|
|
v_tickets INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_avances FROM construction.avance_obra;
|
|
SELECT COUNT(*) INTO v_bitacora FROM construction.bitacora_obra;
|
|
SELECT COUNT(*) INTO v_checklists FROM construction.checklist_calidad WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_inspecciones FROM construction.inspecciones;
|
|
SELECT COUNT(*) INTO v_tickets FROM construction.tickets_garantia;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 07: AVANCES Y CALIDAD │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Registros de avance: %', LPAD(v_avances::TEXT, 4) || CASE WHEN v_avances >= 5 THEN ' ✓' ELSE ' ✗ (esperado: 6)' END || ' │';
|
|
RAISE NOTICE '│ Entradas de bitácora: %', LPAD(v_bitacora::TEXT, 4) || CASE WHEN v_bitacora >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '│ Checklists de calidad: %', LPAD(v_checklists::TEXT, 4) || CASE WHEN v_checklists >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 4)' END || ' │';
|
|
RAISE NOTICE '│ Inspecciones: %', LPAD(v_inspecciones::TEXT, 4) || CASE WHEN v_inspecciones >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Tickets de garantía: %', LPAD(v_tickets::TEXT, 4) || CASE WHEN v_tickets >= 2 THEN ' ✓' ELSE ' ✗ (esperado: 2)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE HSE (SEED 08)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_epp INTEGER;
|
|
v_capacitaciones INTEGER;
|
|
v_incidentes INTEGER;
|
|
v_horas INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_epp FROM hse.epp_catalogo WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_capacitaciones FROM hse.capacitaciones WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_incidentes FROM hse.incidentes;
|
|
SELECT COUNT(*) INTO v_horas FROM hse.horas_trabajadas;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 08: HSE (SEGURIDAD, SALUD Y AMBIENTE) │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Catálogo EPP: %', LPAD(v_epp::TEXT, 4) || CASE WHEN v_epp >= 12 THEN ' ✓' ELSE ' ✗ (esperado: 13)' END || ' │';
|
|
RAISE NOTICE '│ Capacitaciones: %', LPAD(v_capacitaciones::TEXT, 4) || CASE WHEN v_capacitaciones >= 7 THEN ' ✓' ELSE ' ✗ (esperado: 8)' END || ' │';
|
|
RAISE NOTICE '│ Incidentes registrados: %', LPAD(v_incidentes::TEXT, 4) || CASE WHEN v_incidentes >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 4)' END || ' │';
|
|
RAISE NOTICE '│ Registros de horas: %', LPAD(v_horas::TEXT, 4) || CASE WHEN v_horas >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE FINANZAS (SEED 09)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_cuentas INTEGER;
|
|
v_bancos INTEGER;
|
|
v_cxp INTEGER;
|
|
v_cxc INTEGER;
|
|
v_polizas INTEGER;
|
|
v_movimientos INTEGER;
|
|
v_balance NUMERIC;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_cuentas FROM finance.cuentas_contables WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_bancos FROM finance.cuentas_bancarias WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_cxp FROM finance.cuentas_por_pagar WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_cxc FROM finance.cuentas_por_cobrar WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_polizas FROM finance.polizas_contables;
|
|
SELECT COUNT(*) INTO v_movimientos FROM finance.movimientos_poliza;
|
|
|
|
-- Verificar que las pólizas estén cuadradas
|
|
SELECT COALESCE(SUM(CASE WHEN tipo_movimiento = 'cargo' THEN monto ELSE -monto END), 0)
|
|
INTO v_balance FROM finance.movimientos_poliza;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 09: FINANZAS │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Cuentas contables: %', LPAD(v_cuentas::TEXT, 4) || CASE WHEN v_cuentas >= 30 THEN ' ✓' ELSE ' ✗ (esperado: 35)' END || ' │';
|
|
RAISE NOTICE '│ Cuentas bancarias: %', LPAD(v_bancos::TEXT, 4) || CASE WHEN v_bancos >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Cuentas por pagar: %', LPAD(v_cxp::TEXT, 4) || CASE WHEN v_cxp >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Cuentas por cobrar: %', LPAD(v_cxc::TEXT, 4) || CASE WHEN v_cxc >= 2 THEN ' ✓' ELSE ' ✗ (esperado: 2)' END || ' │';
|
|
RAISE NOTICE '│ Pólizas contables: %', LPAD(v_polizas::TEXT, 4) || CASE WHEN v_polizas >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 4)' END || ' │';
|
|
RAISE NOTICE '│ Movimientos póliza: %', LPAD(v_movimientos::TEXT, 4) || CASE WHEN v_movimientos >= 8 THEN ' ✓' ELSE ' ✗ (esperado: 10)' END || ' │';
|
|
RAISE NOTICE '│ Balance pólizas (debe=0): %', LPAD(v_balance::TEXT, 8) || CASE WHEN v_balance = 0 THEN ' ✓' ELSE ' ✗ DESCUADRADO!' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- VALIDACIÓN DE ACTIVOS Y DOCUMENTOS (SEED 10)
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_categorias INTEGER;
|
|
v_activos INTEGER;
|
|
v_mantenimientos INTEGER;
|
|
v_cat_docs INTEGER;
|
|
v_documentos INTEGER;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO v_categorias FROM assets.categorias_activo WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_activos FROM assets.activos WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_mantenimientos FROM assets.mantenimiento_programado WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_cat_docs FROM documents.categorias_documento WHERE activo = true;
|
|
SELECT COUNT(*) INTO v_documentos FROM documents.documentos WHERE activo = true;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '┌─────────────────────────────────────────────────────────────┐';
|
|
RAISE NOTICE '│ SEED 10: ACTIVOS Y DOCUMENTOS │';
|
|
RAISE NOTICE '├─────────────────────────────────────────────────────────────┤';
|
|
RAISE NOTICE '│ Categorías de activos: %', LPAD(v_categorias::TEXT, 4) || CASE WHEN v_categorias >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '│ Activos/Equipos: %', LPAD(v_activos::TEXT, 4) || CASE WHEN v_activos >= 8 THEN ' ✓' ELSE ' ✗ (esperado: 10)' END || ' │';
|
|
RAISE NOTICE '│ Mantenimientos programados: %', LPAD(v_mantenimientos::TEXT, 4) || CASE WHEN v_mantenimientos >= 3 THEN ' ✓' ELSE ' ✗ (esperado: 3)' END || ' │';
|
|
RAISE NOTICE '│ Categorías de documentos: %', LPAD(v_cat_docs::TEXT, 4) || CASE WHEN v_cat_docs >= 10 THEN ' ✓' ELSE ' ✗ (esperado: 11)' END || ' │';
|
|
RAISE NOTICE '│ Documentos: %', LPAD(v_documentos::TEXT, 4) || CASE WHEN v_documentos >= 4 THEN ' ✓' ELSE ' ✗ (esperado: 5)' END || ' │';
|
|
RAISE NOTICE '└─────────────────────────────────────────────────────────────┘';
|
|
END $$;
|
|
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
-- RESUMEN FINAL
|
|
-- ─────────────────────────────────────────────────────────────────────────────────
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_total_registros INTEGER := 0;
|
|
v_temp INTEGER;
|
|
BEGIN
|
|
-- Contar todos los registros de seeds
|
|
SELECT COUNT(*) INTO v_temp FROM core.unidades; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.monedas; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.impuestos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.bancos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.estados; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.municipios; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.roles; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.permisos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.usuarios; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.tenants; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM core.sucursales; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM inventory.almacenes; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.prototipos_vivienda; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.fraccionamientos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.etapas; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.manzanas; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.lotes; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.departamentos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.subcontratistas; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.conceptos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.presupuestos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.presupuesto_partidas; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM estimates.contratos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM estimates.estimaciones; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.avance_obra; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM construction.bitacora_obra; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM hse.epp_catalogo; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM hse.capacitaciones; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM hse.incidentes; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM finance.cuentas_contables; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM finance.polizas_contables; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM assets.activos; v_total_registros := v_total_registros + v_temp;
|
|
SELECT COUNT(*) INTO v_temp FROM documents.documentos; v_total_registros := v_total_registros + v_temp;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '════════════════════════════════════════════════════════════════';
|
|
RAISE NOTICE ' RESUMEN DE VALIDACIÓN';
|
|
RAISE NOTICE '════════════════════════════════════════════════════════════════';
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE ' Total de registros cargados: %', v_total_registros;
|
|
RAISE NOTICE ' Esperado aproximado: ~940';
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE ' Estado: %', CASE WHEN v_total_registros >= 800 THEN '✓ SEEDS CARGADOS CORRECTAMENTE' ELSE '✗ SEEDS INCOMPLETOS' END;
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '════════════════════════════════════════════════════════════════';
|
|
END $$;
|
|
|
|
-- ═══════════════════════════════════════════════════════════════════════════════
|
|
-- FIN VALIDACIÓN
|
|
-- ═══════════════════════════════════════════════════════════════════════════════
|