-- ═══════════════════════════════════════════════════════════════════════════════
-- 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
-- ═══════════════════════════════════════════════════════════════════════════════
