-- ═══════════════════════════════════════════════════════════════════════════════ -- 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.capacitacion 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.capacitacion; 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 -- ═══════════════════════════════════════════════════════════════════════════════