-- ═══════════════════════════════════════════════════════════════════════════════
-- SEED 05: PRESUPUESTOS Y CONCEPTOS DE OBRA
-- ═══════════════════════════════════════════════════════════════════════════════
-- Proyecto: ERP Construcción
-- Autor: Claude Opus 4.5
-- Fecha: 2026-02-03
-- Descripción: Catálogo de conceptos CMIC, presupuestos, partidas, programa de obra
-- Dependencias: 03-empresa-tenant.sql, 04-proyectos-obras.sql
-- ═══════════════════════════════════════════════════════════════════════════════

-- UUIDs: 00000000-0000-0000-0005-XXXXXXXXXXXX

BEGIN;

-- ─────────────────────────────────────────────────────────────────────────────────
-- 1. CONCEPTOS DE OBRA (Catálogo jerárquico basado en CMIC)
-- ─────────────────────────────────────────────────────────────────────────────────

INSERT INTO construction.conceptos (
    id, tenant_id, code, name, parent_id, level, path,
    unit_id, unit_price, is_composite, is_active,
    created_at, created_by
) VALUES
-- NIVEL 1: Capítulos principales
('00000000-0000-0000-0005-000000000001', '00000000-0000-0000-0003-000000000001',
 '01', 'PRELIMINARES', NULL, 1, '01',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000002', '00000000-0000-0000-0003-000000000001',
 '02', 'CIMENTACIÓN', NULL, 1, '02',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000003', '00000000-0000-0000-0003-000000000001',
 '03', 'ESTRUCTURA', NULL, 1, '03',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000004', '00000000-0000-0000-0003-000000000001',
 '04', 'ALBAÑILERÍA', NULL, 1, '04',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000005', '00000000-0000-0000-0003-000000000001',
 '05', 'INSTALACIÓN HIDRÁULICA', NULL, 1, '05',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000006', '00000000-0000-0000-0003-000000000001',
 '06', 'INSTALACIÓN SANITARIA', NULL, 1, '06',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000007', '00000000-0000-0000-0003-000000000001',
 '07', 'INSTALACIÓN ELÉCTRICA', NULL, 1, '07',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000008', '00000000-0000-0000-0003-000000000001',
 '08', 'ACABADOS', NULL, 1, '08',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000009', '00000000-0000-0000-0003-000000000001',
 '09', 'CARPINTERÍA', NULL, 1, '09',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000010', '00000000-0000-0000-0003-000000000001',
 '10', 'HERRERÍA', NULL, 1, '10',
 NULL, 0, true, true, NOW(), '00000000-0000-0000-0002-000000000103'),

-- NIVEL 2: Subcapítulos PRELIMINARES
('00000000-0000-0000-0005-000000000101', '00000000-0000-0000-0003-000000000001',
 '01.01', 'Limpieza del terreno', '00000000-0000-0000-0005-000000000001', 2, '01.01',
 '00000000-0000-0000-0001-000000000010', 25.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000102', '00000000-0000-0000-0003-000000000001',
 '01.02', 'Trazo y nivelación', '00000000-0000-0000-0005-000000000001', 2, '01.02',
 '00000000-0000-0000-0001-000000000010', 35.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000103', '00000000-0000-0000-0003-000000000001',
 '01.03', 'Demolición de estructuras existentes', '00000000-0000-0000-0005-000000000001', 2, '01.03',
 '00000000-0000-0000-0001-000000000020', 450.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

-- NIVEL 2: Subcapítulos CIMENTACIÓN
('00000000-0000-0000-0005-000000000201', '00000000-0000-0000-0003-000000000001',
 '02.01', 'Excavación a máquina', '00000000-0000-0000-0005-000000000002', 2, '02.01',
 '00000000-0000-0000-0001-000000000020', 85.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000202', '00000000-0000-0000-0003-000000000001',
 '02.02', 'Excavación a mano', '00000000-0000-0000-0005-000000000002', 2, '02.02',
 '00000000-0000-0000-0001-000000000020', 180.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000203', '00000000-0000-0000-0003-000000000001',
 '02.03', 'Plantilla de concreto pobre', '00000000-0000-0000-0005-000000000002', 2, '02.03',
 '00000000-0000-0000-0001-000000000010', 180.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000204', '00000000-0000-0000-0003-000000000001',
 '02.04', 'Zapata de concreto armado fc=250 kg/cm2', '00000000-0000-0000-0005-000000000002', 2, '02.04',
 '00000000-0000-0000-0001-000000000020', 3500.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000205', '00000000-0000-0000-0003-000000000001',
 '02.05', 'Contratrabe de concreto armado', '00000000-0000-0000-0005-000000000002', 2, '02.05',
 '00000000-0000-0000-0001-000000000002', 1850.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000206', '00000000-0000-0000-0003-000000000001',
 '02.06', 'Relleno compactado al 95% Proctor', '00000000-0000-0000-0005-000000000002', 2, '02.06',
 '00000000-0000-0000-0001-000000000020', 120.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

-- NIVEL 2: Subcapítulos ESTRUCTURA
('00000000-0000-0000-0005-000000000301', '00000000-0000-0000-0003-000000000001',
 '03.01', 'Columna de concreto armado fc=250', '00000000-0000-0000-0005-000000000003', 2, '03.01',
 '00000000-0000-0000-0001-000000000020', 4200.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000302', '00000000-0000-0000-0003-000000000001',
 '03.02', 'Trabe de concreto armado fc=250', '00000000-0000-0000-0005-000000000003', 2, '03.02',
 '00000000-0000-0000-0001-000000000002', 2100.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000303', '00000000-0000-0000-0003-000000000001',
 '03.03', 'Losa de concreto armado e=12cm', '00000000-0000-0000-0005-000000000003', 2, '03.03',
 '00000000-0000-0000-0001-000000000010', 850.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000304', '00000000-0000-0000-0003-000000000001',
 '03.04', 'Escalera de concreto armado', '00000000-0000-0000-0005-000000000003', 2, '03.04',
 '00000000-0000-0000-0001-000000000040', 18500.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

-- NIVEL 2: Subcapítulos ALBAÑILERÍA
('00000000-0000-0000-0005-000000000401', '00000000-0000-0000-0003-000000000001',
 '04.01', 'Muro de block hueco 15x20x40', '00000000-0000-0000-0005-000000000004', 2, '04.01',
 '00000000-0000-0000-0001-000000000010', 420.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000402', '00000000-0000-0000-0003-000000000001',
 '04.02', 'Muro de tabique rojo recocido', '00000000-0000-0000-0005-000000000004', 2, '04.02',
 '00000000-0000-0000-0001-000000000010', 380.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000403', '00000000-0000-0000-0003-000000000001',
 '04.03', 'Castillo de concreto armado', '00000000-0000-0000-0005-000000000004', 2, '04.03',
 '00000000-0000-0000-0001-000000000002', 650.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000404', '00000000-0000-0000-0003-000000000001',
 '04.04', 'Dala de cerramiento', '00000000-0000-0000-0005-000000000004', 2, '04.04',
 '00000000-0000-0000-0001-000000000002', 580.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

-- NIVEL 2: Subcapítulos ACABADOS
('00000000-0000-0000-0005-000000000801', '00000000-0000-0000-0003-000000000001',
 '08.01', 'Aplanado fino en muros', '00000000-0000-0000-0005-000000000008', 2, '08.01',
 '00000000-0000-0000-0001-000000000010', 185.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000802', '00000000-0000-0000-0003-000000000001',
 '08.02', 'Yeso en plafones', '00000000-0000-0000-0005-000000000008', 2, '08.02',
 '00000000-0000-0000-0001-000000000010', 220.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000803', '00000000-0000-0000-0003-000000000001',
 '08.03', 'Pintura vinílica 2 manos', '00000000-0000-0000-0005-000000000008', 2, '08.03',
 '00000000-0000-0000-0001-000000000010', 95.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000804', '00000000-0000-0000-0003-000000000001',
 '08.04', 'Piso cerámico 45x45', '00000000-0000-0000-0005-000000000008', 2, '08.04',
 '00000000-0000-0000-0001-000000000010', 450.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000000805', '00000000-0000-0000-0003-000000000001',
 '08.05', 'Azulejo en baños', '00000000-0000-0000-0005-000000000008', 2, '08.05',
 '00000000-0000-0000-0001-000000000010', 520.00, false, true, NOW(), '00000000-0000-0000-0002-000000000103')
ON CONFLICT (id) DO NOTHING;

-- ─────────────────────────────────────────────────────────────────────────────────
-- 2. PRESUPUESTOS
-- ─────────────────────────────────────────────────────────────────────────────────

INSERT INTO construction.presupuestos (
    id, tenant_id, fraccionamiento_id, prototipo_id,
    code, name, version, is_active,
    total_amount, approved_at, approved_by,
    created_at, created_by
) VALUES
-- Presupuesto Casa 90 - Las Palmas
('00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000101', '00000000-0000-0000-0004-000000000001',
 'PPTO-PALMAS-C90-V1', 'Presupuesto Casa Tipo 90 - Las Palmas', 1, true,
 850000.00, '2024-02-15', '00000000-0000-0000-0002-000000000102',
 NOW(), '00000000-0000-0000-0002-000000000103'),

-- Presupuesto Casa 120 - Las Palmas
('00000000-0000-0000-0005-000000001002', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000101', '00000000-0000-0000-0004-000000000002',
 'PPTO-PALMAS-C120-V1', 'Presupuesto Casa Tipo 120 - Las Palmas', 1, true,
 1150000.00, '2024-02-15', '00000000-0000-0000-0002-000000000102',
 NOW(), '00000000-0000-0000-0002-000000000103'),

-- Presupuesto Casa Premium 150 - Las Palmas
('00000000-0000-0000-0005-000000001003', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000101', '00000000-0000-0000-0004-000000000003',
 'PPTO-PALMAS-C150-V1', 'Presupuesto Casa Premium 150 - Las Palmas', 1, true,
 1550000.00, '2024-02-15', '00000000-0000-0000-0002-000000000102',
 NOW(), '00000000-0000-0000-0002-000000000103'),

-- Presupuesto Depto 85 - Torre Diamante
('00000000-0000-0000-0005-000000001004', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000102', '00000000-0000-0000-0004-000000000005',
 'PPTO-DIAMANTE-D85-V1', 'Presupuesto Departamento 85 - Torre Diamante', 1, true,
 780000.00, '2024-05-20', '00000000-0000-0000-0002-000000000102',
 NOW(), '00000000-0000-0000-0002-000000000103'),

-- Presupuesto Depto Premium 110 - Torre Diamante
('00000000-0000-0000-0005-000000001005', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000102', '00000000-0000-0000-0004-000000000006',
 'PPTO-DIAMANTE-D110-V1', 'Presupuesto Departamento Premium 110 - Torre Diamante', 1, true,
 1050000.00, '2024-05-20', '00000000-0000-0000-0002-000000000102',
 NOW(), '00000000-0000-0000-0002-000000000103')
ON CONFLICT (id) DO NOTHING;

-- ─────────────────────────────────────────────────────────────────────────────────
-- 3. PARTIDAS DE PRESUPUESTO (Ejemplo para Casa 90)
-- ─────────────────────────────────────────────────────────────────────────────────

INSERT INTO construction.presupuesto_partidas (
    id, tenant_id, presupuesto_id, concepto_id,
    quantity, unit_price,
    created_at, created_by
) VALUES
-- Preliminares
('00000000-0000-0000-0005-000000002001', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000101',
 120.00, 25.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002002', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000102',
 120.00, 35.00, NOW(), '00000000-0000-0000-0002-000000000103'),

-- Cimentación
('00000000-0000-0000-0005-000000002003', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000201',
 45.00, 85.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002004', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000203',
 35.00, 180.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002005', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000204',
 8.50, 3500.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002006', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000205',
 42.00, 1850.00, NOW(), '00000000-0000-0000-0002-000000000103'),

-- Estructura
('00000000-0000-0000-0005-000000002007', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000301',
 6.50, 4200.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002008', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000302',
 35.00, 2100.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002009', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000303',
 95.00, 850.00, NOW(), '00000000-0000-0000-0002-000000000103'),

-- Albañilería
('00000000-0000-0000-0005-000000002010', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000401',
 185.00, 420.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002011', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000403',
 52.00, 650.00, NOW(), '00000000-0000-0000-0002-000000000103'),

-- Acabados
('00000000-0000-0000-0005-000000002012', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000801',
 280.00, 185.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002013', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000803',
 320.00, 95.00, NOW(), '00000000-0000-0000-0002-000000000103'),
('00000000-0000-0000-0005-000000002014', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0005-000000001001', '00000000-0000-0000-0005-000000000804',
 90.00, 450.00, NOW(), '00000000-0000-0000-0002-000000000103')
ON CONFLICT (id) DO NOTHING;

-- ─────────────────────────────────────────────────────────────────────────────────
-- 4. PROGRAMA DE OBRA
-- ─────────────────────────────────────────────────────────────────────────────────

INSERT INTO construction.programa_obra (
    id, tenant_id, fraccionamiento_id,
    code, name, version, is_active,
    start_date, end_date,
    created_at, created_by
) VALUES
('00000000-0000-0000-0005-000000003001', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000101',
 'PROG-PALMAS-E1-V1', 'Programa de Obra Las Palmas Etapa 1', 1, true,
 '2024-03-01', '2025-06-30',
 NOW(), '00000000-0000-0000-0002-000000000103'),

('00000000-0000-0000-0005-000000003002', '00000000-0000-0000-0003-000000000001',
 '00000000-0000-0000-0004-000000000102',
 'PROG-DIAMANTE-V1', 'Programa de Obra Torre Diamante', 1, true,
 '2024-06-01', '2027-06-30',
 NOW(), '00000000-0000-0000-0002-000000000103')
ON CONFLICT (id) DO NOTHING;

-- ─────────────────────────────────────────────────────────────────────────────────
-- VERIFICACIÓN
-- ─────────────────────────────────────────────────────────────────────────────────

DO $$
DECLARE
    v_conceptos INTEGER;
    v_presupuestos INTEGER;
    v_partidas INTEGER;
    v_programas INTEGER;
BEGIN
    SELECT COUNT(*) INTO v_conceptos FROM construction.conceptos;
    SELECT COUNT(*) INTO v_presupuestos FROM construction.presupuestos;
    SELECT COUNT(*) INTO v_partidas FROM construction.presupuesto_partidas;
    SELECT COUNT(*) INTO v_programas FROM construction.programa_obra;

    RAISE NOTICE '══════════════════════════════════════════════════════════════';
    RAISE NOTICE 'SEED 05 - PRESUPUESTOS - COMPLETADO';
    RAISE NOTICE '══════════════════════════════════════════════════════════════';
    RAISE NOTICE 'Conceptos de obra: %', v_conceptos;
    RAISE NOTICE 'Presupuestos: %', v_presupuestos;
    RAISE NOTICE 'Partidas: %', v_partidas;
    RAISE NOTICE 'Programas de obra: %', v_programas;
    RAISE NOTICE '══════════════════════════════════════════════════════════════';
END $$;

COMMIT;

-- ═══════════════════════════════════════════════════════════════════════════════
-- FIN SEED 05
-- ═══════════════════════════════════════════════════════════════════════════════
