erp-construccion-database-v2/seeds/dev/05-presupuestos.sql
Adrian Flores Cortes 8df74f73d2 [TASK-2026-02-03-SEEDS] feat: Add complete development seeds for demo
Seeds include:
- 01-core-catalogs.sql: Units, currencies, taxes, banks, states (~100 records)
- 02-users-profiles.sql: 12 roles, 50+ permissions, 12 demo users
- 03-empresa-tenant.sql: Demo company with 2 branches, 4 warehouses
- 04-proyectos-obras.sql: 3 projects, stages, lots, apartments
- 05-presupuestos.sql: CMIC-based concepts, 5 budgets
- 06-estimaciones.sql: Contracts, estimates, advances
- 07-avances-calidad.sql: Progress, logbook, quality checklists
- 08-hse.sql: PPE catalog, training, incidents
- 09-finanzas.sql: Chart of accounts, CxP, CxC, balanced entries
- 10-activos-documentos.sql: Assets, maintenance, documents

Total: ~940 records for complete demo coverage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 11:08:26 -06:00

321 lines
20 KiB
PL/PgSQL

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