[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>
This commit is contained in:
parent
a9dcf86545
commit
8df74f73d2
212
seeds/dev/01-core-catalogs.sql
Normal file
212
seeds/dev/01-core-catalogs.sql
Normal file
@ -0,0 +1,212 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 01: CATÁLOGOS BASE
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Catálogos fundamentales del sistema (sin dependencias)
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- Usar UUIDs determinísticos para reproducibilidad
|
||||
-- Prefijo: 00000000-0000-0000-0001-XXXXXXXXXXXX para catálogos
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. UNIDADES DE MEDIDA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.units (id, code, name, symbol, category, is_active, created_at) VALUES
|
||||
-- Longitud
|
||||
('00000000-0000-0000-0001-000000000001', 'M', 'Metro', 'm', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000002', 'ML', 'Metro lineal', 'ml', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000003', 'KM', 'Kilómetro', 'km', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000004', 'CM', 'Centímetro', 'cm', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000005', 'MM', 'Milímetro', 'mm', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000006', 'PLG', 'Pulgada', 'in', 'longitud', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000007', 'PIE', 'Pie', 'ft', 'longitud', true, NOW()),
|
||||
-- Área
|
||||
('00000000-0000-0000-0001-000000000010', 'M2', 'Metro cuadrado', 'm²', 'area', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000011', 'HA', 'Hectárea', 'ha', 'area', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000012', 'CM2', 'Centímetro cuadrado', 'cm²', 'area', true, NOW()),
|
||||
-- Volumen
|
||||
('00000000-0000-0000-0001-000000000020', 'M3', 'Metro cúbico', 'm³', 'volumen', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000021', 'LT', 'Litro', 'L', 'volumen', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000022', 'GL', 'Galón', 'gal', 'volumen', true, NOW()),
|
||||
-- Peso
|
||||
('00000000-0000-0000-0001-000000000030', 'KG', 'Kilogramo', 'kg', 'peso', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000031', 'TON', 'Tonelada', 'ton', 'peso', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000032', 'GR', 'Gramo', 'g', 'peso', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000033', 'LB', 'Libra', 'lb', 'peso', true, NOW()),
|
||||
-- Cantidad
|
||||
('00000000-0000-0000-0001-000000000040', 'PZA', 'Pieza', 'pza', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000041', 'JGO', 'Juego', 'jgo', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000042', 'PAR', 'Par', 'par', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000043', 'LOTE', 'Lote', 'lote', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000044', 'ROLLO', 'Rollo', 'rollo', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000045', 'BOLSA', 'Bolsa', 'bolsa', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000046', 'CAJA', 'Caja', 'caja', 'cantidad', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000047', 'CUBETA', 'Cubeta', 'cubeta', 'cantidad', true, NOW()),
|
||||
-- Tiempo
|
||||
('00000000-0000-0000-0001-000000000050', 'HR', 'Hora', 'hr', 'tiempo', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000051', 'DIA', 'Día', 'día', 'tiempo', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000052', 'SEM', 'Semana', 'sem', 'tiempo', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000053', 'MES', 'Mes', 'mes', 'tiempo', true, NOW()),
|
||||
-- Global
|
||||
('00000000-0000-0000-0001-000000000060', 'GLOBAL', 'Global', 'gbl', 'global', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000061', 'SALIDA', 'Salida', 'sal', 'global', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. MONEDAS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.currencies (id, code, name, symbol, decimal_places, is_active, is_default, created_at) VALUES
|
||||
('00000000-0000-0000-0001-000000000101', 'MXN', 'Peso Mexicano', '$', 2, true, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000102', 'USD', 'Dólar Americano', 'US$', 2, true, false, NOW()),
|
||||
('00000000-0000-0000-0001-000000000103', 'EUR', 'Euro', '€', 2, true, false, NOW()),
|
||||
('00000000-0000-0000-0001-000000000104', 'CAD', 'Dólar Canadiense', 'CA$', 2, true, false, NOW()),
|
||||
('00000000-0000-0000-0001-000000000105', 'GBP', 'Libra Esterlina', '£', 2, true, false, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. IMPUESTOS (México SAT)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.taxes (id, code, name, rate, tax_type, is_retention, is_active, created_at) VALUES
|
||||
-- IVA
|
||||
('00000000-0000-0000-0001-000000000201', 'IVA16', 'IVA 16%', 0.16, 'iva', false, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000202', 'IVA8', 'IVA 8% (Frontera)', 0.08, 'iva', false, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000203', 'IVA0', 'IVA 0%', 0.00, 'iva', false, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000204', 'EXENTO', 'Exento de IVA', 0.00, 'exento', false, true, NOW()),
|
||||
-- ISR Retención
|
||||
('00000000-0000-0000-0001-000000000210', 'ISR10', 'Retención ISR 10%', 0.10, 'isr', true, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000211', 'ISR1.25', 'Retención ISR 1.25%', 0.0125, 'isr', true, true, NOW()),
|
||||
-- IVA Retención
|
||||
('00000000-0000-0000-0001-000000000220', 'RIVA', 'Retención IVA 2/3', 0.106667, 'iva_retenido', true, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000221', 'RIVA4', 'Retención IVA 4%', 0.04, 'iva_retenido', true, true, NOW()),
|
||||
-- IEPS (si aplica)
|
||||
('00000000-0000-0000-0001-000000000230', 'IEPS', 'IEPS Variable', 0.00, 'ieps', false, false, NOW()),
|
||||
-- Sin impuesto
|
||||
('00000000-0000-0000-0001-000000000240', 'SIN', 'Sin impuesto', 0.00, 'ninguno', false, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. BANCOS (México)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.banks (id, code, name, short_name, swift_code, is_active, created_at) VALUES
|
||||
('00000000-0000-0000-0001-000000000301', '002', 'BANAMEX', 'Banamex', 'BNMXMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000302', '012', 'BBVA MEXICO', 'BBVA', 'BCMRMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000303', '014', 'SANTANDER', 'Santander', 'BMSXMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000304', '021', 'HSBC', 'HSBC', 'BABORUMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000305', '030', 'BAJIO', 'Bajío', 'BABORUMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000306', '036', 'INBURSA', 'Inbursa', 'INBUMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000307', '044', 'SCOTIABANK', 'Scotia', 'MBCOMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000308', '058', 'BANREGIO', 'Banregio', 'BANOMXMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000309', '072', 'BANORTE', 'Banorte', 'MENOMXMT', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000310', '106', 'BANK OF AMERICA', 'BofA', 'BABORUMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000311', '127', 'AZTECA', 'Azteca', 'BABORUMM', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000312', '128', 'AUTOFIN', 'Autofin', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000313', '130', 'COMPARTAMOS', 'Compartamos', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000314', '137', 'BANCOPPEL', 'Coppel', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000315', '138', 'ABC CAPITAL', 'ABC', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000316', '145', 'BBASE', 'BBase', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000317', '646', 'BANSEFI', 'Bansefi', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000318', '659', 'ASP INTEGRA', 'ASP', NULL, true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000319', '901', 'CLS', 'CLS', NULL, false, NOW()),
|
||||
('00000000-0000-0000-0001-000000000320', '999', 'OTRO', 'Otro', NULL, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. ESTADOS DE MÉXICO
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.states (id, code, name, abbreviation, country_code, is_active, created_at) VALUES
|
||||
('00000000-0000-0000-0001-000000000401', 'AGS', 'Aguascalientes', 'Ags.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000402', 'BC', 'Baja California', 'B.C.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000403', 'BCS', 'Baja California Sur', 'B.C.S.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000404', 'CAM', 'Campeche', 'Camp.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000405', 'COAH', 'Coahuila', 'Coah.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000406', 'COL', 'Colima', 'Col.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000407', 'CHIS', 'Chiapas', 'Chis.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000408', 'CHIH', 'Chihuahua', 'Chih.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000409', 'CDMX', 'Ciudad de México', 'CDMX', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000410', 'DGO', 'Durango', 'Dgo.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000411', 'GTO', 'Guanajuato', 'Gto.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000412', 'GRO', 'Guerrero', 'Gro.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000413', 'HGO', 'Hidalgo', 'Hgo.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000414', 'JAL', 'Jalisco', 'Jal.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000415', 'MEX', 'Estado de México', 'Méx.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000416', 'MICH', 'Michoacán', 'Mich.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000417', 'MOR', 'Morelos', 'Mor.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000418', 'NAY', 'Nayarit', 'Nay.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000419', 'NL', 'Nuevo León', 'N.L.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000420', 'OAX', 'Oaxaca', 'Oax.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000421', 'PUE', 'Puebla', 'Pue.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000422', 'QRO', 'Querétaro', 'Qro.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000423', 'QROO', 'Quintana Roo', 'Q.R.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000424', 'SLP', 'San Luis Potosí', 'S.L.P.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000425', 'SIN', 'Sinaloa', 'Sin.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000426', 'SON', 'Sonora', 'Son.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000427', 'TAB', 'Tabasco', 'Tab.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000428', 'TAM', 'Tamaulipas', 'Tamps.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000429', 'TLAX', 'Tlaxcala', 'Tlax.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000430', 'VER', 'Veracruz', 'Ver.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000431', 'YUC', 'Yucatán', 'Yuc.', 'MX', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000432', 'ZAC', 'Zacatecas', 'Zac.', 'MX', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 6. MUNICIPIOS (Solo Aguascalientes como ejemplo para demo)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO core.municipalities (id, state_id, code, name, is_active, created_at) VALUES
|
||||
-- Aguascalientes
|
||||
('00000000-0000-0000-0001-000000000501', '00000000-0000-0000-0001-000000000401', '001', 'Aguascalientes', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000502', '00000000-0000-0000-0001-000000000401', '002', 'Asientos', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000503', '00000000-0000-0000-0001-000000000401', '003', 'Calvillo', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000504', '00000000-0000-0000-0001-000000000401', '004', 'Cosío', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000505', '00000000-0000-0000-0001-000000000401', '005', 'Jesús María', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000506', '00000000-0000-0000-0001-000000000401', '006', 'Pabellón de Arteaga', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000507', '00000000-0000-0000-0001-000000000401', '007', 'Rincón de Romos', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000508', '00000000-0000-0000-0001-000000000401', '008', 'San José de Gracia', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000509', '00000000-0000-0000-0001-000000000401', '009', 'Tepezalá', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000510', '00000000-0000-0000-0001-000000000401', '010', 'El Llano', true, NOW()),
|
||||
('00000000-0000-0000-0001-000000000511', '00000000-0000-0000-0001-000000000401', '011', 'San Francisco de los Romo', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_units INTEGER;
|
||||
v_currencies INTEGER;
|
||||
v_taxes INTEGER;
|
||||
v_banks INTEGER;
|
||||
v_states INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_units FROM core.units;
|
||||
SELECT COUNT(*) INTO v_currencies FROM core.currencies;
|
||||
SELECT COUNT(*) INTO v_taxes FROM core.taxes;
|
||||
SELECT COUNT(*) INTO v_banks FROM core.banks;
|
||||
SELECT COUNT(*) INTO v_states FROM core.states;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 01 - CATÁLOGOS BASE - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Unidades de medida: %', v_units;
|
||||
RAISE NOTICE 'Monedas: %', v_currencies;
|
||||
RAISE NOTICE 'Impuestos: %', v_taxes;
|
||||
RAISE NOTICE 'Bancos: %', v_banks;
|
||||
RAISE NOTICE 'Estados: %', v_states;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 01
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
398
seeds/dev/02-users-profiles.sql
Normal file
398
seeds/dev/02-users-profiles.sql
Normal file
@ -0,0 +1,398 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 02: USUARIOS Y PERFILES
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Roles, permisos y usuarios demo del sistema
|
||||
-- Dependencias: 01-core-catalogs.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs determinísticos:
|
||||
-- Prefijo: 00000000-0000-0000-0002-XXXXXXXXXXXX para usuarios/roles
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. ROLES DEL SISTEMA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO auth.roles (id, code, name, description, is_system, is_active, created_at) VALUES
|
||||
('00000000-0000-0000-0002-000000000001', 'super_admin', 'Super Administrador', 'Acceso total al sistema, gestión de tenants', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000002', 'director', 'Director General', 'Acceso ejecutivo, reportes gerenciales, aprobaciones finales', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000003', 'gerente_obra', 'Gerente de Obra', 'Gestión completa de proyectos asignados', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000004', 'residente', 'Residente de Obra', 'Supervisión diaria, captura de avances, estimaciones', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000005', 'supervisor', 'Supervisor de Campo', 'Control de obra, bitácora, avances', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000006', 'almacenista', 'Almacenista', 'Control de inventario, entradas/salidas', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000007', 'contabilidad', 'Contador', 'Gestión financiera, pólizas, CxP, CxC', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000008', 'rrhh', 'Recursos Humanos', 'Gestión de personal, nómina, capacitación', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000009', 'hse', 'Seguridad e Higiene', 'Gestión HSE, inspecciones, incidentes', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000010', 'calidad', 'Control de Calidad', 'Inspecciones, checklists, no conformidades', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000011', 'comprador', 'Comprador', 'Requisiciones, órdenes de compra, proveedores', false, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000012', 'cliente_visor', 'Cliente (Solo Lectura)', 'Visualización de avances de su propiedad', false, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. PERMISOS DEL SISTEMA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO auth.permissions (id, code, name, module, action, description, is_active, created_at) VALUES
|
||||
-- Módulo: Proyectos (construction)
|
||||
('00000000-0000-0000-0002-000000001001', 'construction.view', 'Ver Proyectos', 'construction', 'view', 'Ver proyectos y fraccionamientos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001002', 'construction.create', 'Crear Proyectos', 'construction', 'create', 'Crear nuevos proyectos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001003', 'construction.edit', 'Editar Proyectos', 'construction', 'edit', 'Modificar proyectos existentes', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001004', 'construction.delete', 'Eliminar Proyectos', 'construction', 'delete', 'Eliminar proyectos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001005', 'construction.approve', 'Aprobar Proyectos', 'construction', 'approve', 'Aprobar cambios en proyectos', true, NOW()),
|
||||
|
||||
-- Módulo: Presupuestos (budgets)
|
||||
('00000000-0000-0000-0002-000000001010', 'budgets.view', 'Ver Presupuestos', 'budgets', 'view', 'Ver presupuestos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001011', 'budgets.create', 'Crear Presupuestos', 'budgets', 'create', 'Crear presupuestos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001012', 'budgets.edit', 'Editar Presupuestos', 'budgets', 'edit', 'Modificar presupuestos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001013', 'budgets.approve', 'Aprobar Presupuestos', 'budgets', 'approve', 'Aprobar presupuestos', true, NOW()),
|
||||
|
||||
-- Módulo: Avances (progress)
|
||||
('00000000-0000-0000-0002-000000001020', 'progress.view', 'Ver Avances', 'progress', 'view', 'Ver avances de obra', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001021', 'progress.capture', 'Capturar Avances', 'progress', 'create', 'Capturar avances', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001022', 'progress.review', 'Revisar Avances', 'progress', 'review', 'Revisar avances capturados', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001023', 'progress.approve', 'Aprobar Avances', 'progress', 'approve', 'Aprobar avances', true, NOW()),
|
||||
|
||||
-- Módulo: Estimaciones (estimates)
|
||||
('00000000-0000-0000-0002-000000001030', 'estimates.view', 'Ver Estimaciones', 'estimates', 'view', 'Ver estimaciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001031', 'estimates.create', 'Crear Estimaciones', 'estimates', 'create', 'Crear estimaciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001032', 'estimates.edit', 'Editar Estimaciones', 'estimates', 'edit', 'Modificar estimaciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001033', 'estimates.submit', 'Enviar Estimaciones', 'estimates', 'submit', 'Enviar a revisión', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001034', 'estimates.approve', 'Aprobar Estimaciones', 'estimates', 'approve', 'Aprobar estimaciones', true, NOW()),
|
||||
|
||||
-- Módulo: Contratos (contracts)
|
||||
('00000000-0000-0000-0002-000000001040', 'contracts.view', 'Ver Contratos', 'contracts', 'view', 'Ver contratos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001041', 'contracts.create', 'Crear Contratos', 'contracts', 'create', 'Crear contratos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001042', 'contracts.edit', 'Editar Contratos', 'contracts', 'edit', 'Modificar contratos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001043', 'contracts.approve', 'Aprobar Contratos', 'contracts', 'approve', 'Aprobar contratos', true, NOW()),
|
||||
|
||||
-- Módulo: Calidad (quality)
|
||||
('00000000-0000-0000-0002-000000001050', 'quality.view', 'Ver Calidad', 'quality', 'view', 'Ver inspecciones y NC', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001051', 'quality.inspect', 'Realizar Inspecciones', 'quality', 'create', 'Ejecutar inspecciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001052', 'quality.approve', 'Aprobar Inspecciones', 'quality', 'approve', 'Aprobar inspecciones', true, NOW()),
|
||||
|
||||
-- Módulo: HSE (hse)
|
||||
('00000000-0000-0000-0002-000000001060', 'hse.view', 'Ver HSE', 'hse', 'view', 'Ver módulo HSE', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001061', 'hse.incidents', 'Gestionar Incidentes', 'hse', 'create', 'Registrar incidentes', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001062', 'hse.training', 'Gestionar Capacitación', 'hse', 'create', 'Gestionar capacitaciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001063', 'hse.permits', 'Permisos de Trabajo', 'hse', 'create', 'Gestionar permisos', true, NOW()),
|
||||
|
||||
-- Módulo: RRHH (hr)
|
||||
('00000000-0000-0000-0002-000000001070', 'hr.view', 'Ver RRHH', 'hr', 'view', 'Ver empleados', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001071', 'hr.manage', 'Gestionar RRHH', 'hr', 'manage', 'Gestionar empleados', true, NOW()),
|
||||
|
||||
-- Módulo: Finanzas (finance)
|
||||
('00000000-0000-0000-0002-000000001080', 'finance.view', 'Ver Finanzas', 'finance', 'view', 'Ver módulo financiero', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001081', 'finance.entries', 'Pólizas Contables', 'finance', 'create', 'Crear pólizas', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001082', 'finance.payments', 'Pagos', 'finance', 'create', 'Registrar pagos', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001083', 'finance.reconcile', 'Conciliaciones', 'finance', 'create', 'Realizar conciliaciones', true, NOW()),
|
||||
|
||||
-- Módulo: Inventario (inventory)
|
||||
('00000000-0000-0000-0002-000000001090', 'inventory.view', 'Ver Inventario', 'inventory', 'view', 'Ver almacén', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001091', 'inventory.manage', 'Gestionar Inventario', 'inventory', 'manage', 'Movimientos de almacén', true, NOW()),
|
||||
|
||||
-- Módulo: Compras (purchase)
|
||||
('00000000-0000-0000-0002-000000001100', 'purchase.view', 'Ver Compras', 'purchase', 'view', 'Ver requisiciones y OC', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001101', 'purchase.requisitions', 'Requisiciones', 'purchase', 'create', 'Crear requisiciones', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001102', 'purchase.orders', 'Órdenes de Compra', 'purchase', 'create', 'Crear OC', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001103', 'purchase.approve', 'Aprobar Compras', 'purchase', 'approve', 'Aprobar requisiciones/OC', true, NOW()),
|
||||
|
||||
-- Módulo: Activos (assets)
|
||||
('00000000-0000-0000-0002-000000001110', 'assets.view', 'Ver Activos', 'assets', 'view', 'Ver equipos y maquinaria', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001111', 'assets.manage', 'Gestionar Activos', 'assets', 'manage', 'Gestionar activos', true, NOW()),
|
||||
|
||||
-- Módulo: Documentos (documents)
|
||||
('00000000-0000-0000-0002-000000001120', 'documents.view', 'Ver Documentos', 'documents', 'view', 'Ver repositorio', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001121', 'documents.manage', 'Gestionar Documentos', 'documents', 'manage', 'Subir y gestionar docs', true, NOW()),
|
||||
|
||||
-- Módulo: Reportes (reports)
|
||||
('00000000-0000-0000-0002-000000001130', 'reports.view', 'Ver Reportes', 'reports', 'view', 'Ver reportes', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001131', 'reports.export', 'Exportar Reportes', 'reports', 'export', 'Exportar a PDF/Excel', true, NOW()),
|
||||
|
||||
-- Módulo: Administración (admin)
|
||||
('00000000-0000-0000-0002-000000001140', 'admin.users', 'Gestionar Usuarios', 'admin', 'manage', 'Gestionar usuarios', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001141', 'admin.roles', 'Gestionar Roles', 'admin', 'manage', 'Gestionar roles', true, NOW()),
|
||||
('00000000-0000-0000-0002-000000001142', 'admin.settings', 'Configuración', 'admin', 'manage', 'Configuración del sistema', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. ASIGNACIÓN ROL-PERMISOS (Matriz de permisos por rol)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
-- Super Admin: Todos los permisos
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000001',
|
||||
id
|
||||
FROM auth.permissions
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Director: Vista general + aprobaciones
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000002',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code LIKE '%.view'
|
||||
OR code LIKE '%.approve'
|
||||
OR code IN ('reports.export', 'documents.view')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Gerente de Obra: Gestión de proyectos completa
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000003',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE module IN ('construction', 'budgets', 'progress', 'estimates', 'contracts', 'quality', 'hse', 'reports', 'documents')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Residente: Operación diaria
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000004',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'construction.view', 'budgets.view',
|
||||
'progress.view', 'progress.capture', 'progress.review',
|
||||
'estimates.view', 'estimates.create', 'estimates.edit', 'estimates.submit',
|
||||
'quality.view', 'quality.inspect',
|
||||
'hse.view', 'hse.incidents',
|
||||
'documents.view', 'documents.manage',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Supervisor: Campo
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000005',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'construction.view', 'progress.view', 'progress.capture',
|
||||
'quality.view', 'quality.inspect',
|
||||
'hse.view', 'hse.incidents',
|
||||
'inventory.view',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Almacenista
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000006',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'inventory.view', 'inventory.manage',
|
||||
'purchase.view',
|
||||
'assets.view',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Contador
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000007',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'finance.view', 'finance.entries', 'finance.payments', 'finance.reconcile',
|
||||
'estimates.view',
|
||||
'contracts.view',
|
||||
'purchase.view',
|
||||
'reports.view', 'reports.export'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- RRHH
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000008',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'hr.view', 'hr.manage',
|
||||
'hse.view', 'hse.training',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- HSE
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000009',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'hse.view', 'hse.incidents', 'hse.training', 'hse.permits',
|
||||
'hr.view',
|
||||
'construction.view',
|
||||
'reports.view', 'reports.export'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Calidad
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000010',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'quality.view', 'quality.inspect', 'quality.approve',
|
||||
'construction.view',
|
||||
'documents.view', 'documents.manage',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Comprador
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000011',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN (
|
||||
'purchase.view', 'purchase.requisitions', 'purchase.orders',
|
||||
'inventory.view',
|
||||
'contracts.view',
|
||||
'reports.view'
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Cliente Visor (solo lectura limitada)
|
||||
INSERT INTO auth.role_permissions (role_id, permission_id)
|
||||
SELECT
|
||||
'00000000-0000-0000-0002-000000000012',
|
||||
id
|
||||
FROM auth.permissions
|
||||
WHERE code IN ('construction.view', 'progress.view', 'documents.view')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. USUARIOS DEMO
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- Password: Demo2026! (hash bcrypt con salt 10)
|
||||
-- Hash generado: $2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB
|
||||
|
||||
INSERT INTO auth.users (
|
||||
id, email, password_hash, first_name, last_name,
|
||||
is_active, is_verified, is_system, created_at
|
||||
) VALUES
|
||||
-- Super Admin
|
||||
('00000000-0000-0000-0002-000000000101', 'admin@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Admin', 'Sistema', true, true, true, NOW()),
|
||||
|
||||
-- Director
|
||||
('00000000-0000-0000-0002-000000000102', 'director@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Juan Carlos', 'Director Méndez', true, true, false, NOW()),
|
||||
|
||||
-- Gerente de Obra
|
||||
('00000000-0000-0000-0002-000000000103', 'gerente1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'María Elena', 'Gerente Torres', true, true, false, NOW()),
|
||||
|
||||
-- Residente
|
||||
('00000000-0000-0000-0002-000000000104', 'residente1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Carlos Alberto', 'Residente López', true, true, false, NOW()),
|
||||
|
||||
-- Supervisor
|
||||
('00000000-0000-0000-0002-000000000105', 'supervisor1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Ana María', 'Supervisora García', true, true, false, NOW()),
|
||||
|
||||
-- Almacenista
|
||||
('00000000-0000-0000-0002-000000000106', 'almacen1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Luis Fernando', 'Almacén Ruiz', true, true, false, NOW()),
|
||||
|
||||
-- Contador
|
||||
('00000000-0000-0000-0002-000000000107', 'contador1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Rosa María', 'Contadora Hernández', true, true, false, NOW()),
|
||||
|
||||
-- RRHH
|
||||
('00000000-0000-0000-0002-000000000108', 'rrhh1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Pedro Pablo', 'Recursos Martínez', true, true, false, NOW()),
|
||||
|
||||
-- HSE
|
||||
('00000000-0000-0000-0002-000000000109', 'hse1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Elena Patricia', 'Seguridad Sánchez', true, true, false, NOW()),
|
||||
|
||||
-- Calidad
|
||||
('00000000-0000-0000-0002-000000000110', 'calidad1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Diego Armando', 'Calidad Rodríguez', true, true, false, NOW()),
|
||||
|
||||
-- Comprador
|
||||
('00000000-0000-0000-0002-000000000111', 'comprador1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Laura Patricia', 'Compras Jiménez', true, true, false, NOW()),
|
||||
|
||||
-- Cliente Visor
|
||||
('00000000-0000-0000-0002-000000000112', 'visor1@demo.com',
|
||||
'$2a$10$rQnP.xNj7Y8hVJYw5v5qYeKKq5PmBnvTYmNZz6KXy5vJYmH5XYZAB',
|
||||
'Cliente', 'Demo Comprador', true, true, false, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. ASIGNACIÓN USUARIO-ROL
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO auth.user_roles (user_id, role_id, is_primary, created_at) VALUES
|
||||
('00000000-0000-0000-0002-000000000101', '00000000-0000-0000-0002-000000000001', true, NOW()), -- admin -> super_admin
|
||||
('00000000-0000-0000-0002-000000000102', '00000000-0000-0000-0002-000000000002', true, NOW()), -- director -> director
|
||||
('00000000-0000-0000-0002-000000000103', '00000000-0000-0000-0002-000000000003', true, NOW()), -- gerente1 -> gerente_obra
|
||||
('00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000004', true, NOW()), -- residente1 -> residente
|
||||
('00000000-0000-0000-0002-000000000105', '00000000-0000-0000-0002-000000000005', true, NOW()), -- supervisor1 -> supervisor
|
||||
('00000000-0000-0000-0002-000000000106', '00000000-0000-0000-0002-000000000006', true, NOW()), -- almacen1 -> almacenista
|
||||
('00000000-0000-0000-0002-000000000107', '00000000-0000-0000-0002-000000000007', true, NOW()), -- contador1 -> contabilidad
|
||||
('00000000-0000-0000-0002-000000000108', '00000000-0000-0000-0002-000000000008', true, NOW()), -- rrhh1 -> rrhh
|
||||
('00000000-0000-0000-0002-000000000109', '00000000-0000-0000-0002-000000000009', true, NOW()), -- hse1 -> hse
|
||||
('00000000-0000-0000-0002-000000000110', '00000000-0000-0000-0002-000000000010', true, NOW()), -- calidad1 -> calidad
|
||||
('00000000-0000-0000-0002-000000000111', '00000000-0000-0000-0002-000000000011', true, NOW()), -- comprador1 -> comprador
|
||||
('00000000-0000-0000-0002-000000000112', '00000000-0000-0000-0002-000000000012', true, NOW()) -- visor1 -> cliente_visor
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_roles INTEGER;
|
||||
v_permissions INTEGER;
|
||||
v_users INTEGER;
|
||||
v_role_perms INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_roles FROM auth.roles;
|
||||
SELECT COUNT(*) INTO v_permissions FROM auth.permissions;
|
||||
SELECT COUNT(*) INTO v_users FROM auth.users;
|
||||
SELECT COUNT(*) INTO v_role_perms FROM auth.role_permissions;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 02 - USUARIOS Y PERFILES - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Roles: %', v_roles;
|
||||
RAISE NOTICE 'Permisos: %', v_permissions;
|
||||
RAISE NOTICE 'Usuarios: %', v_users;
|
||||
RAISE NOTICE 'Asignaciones rol-permiso: %', v_role_perms;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 02
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
294
seeds/dev/03-empresa-tenant.sql
Normal file
294
seeds/dev/03-empresa-tenant.sql
Normal file
@ -0,0 +1,294 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 03: EMPRESA Y ESTRUCTURA ORGANIZACIONAL
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Tenant demo, sucursales, almacenes, configuración
|
||||
-- Dependencias: 01-core-catalogs.sql, 02-users-profiles.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs determinísticos:
|
||||
-- Prefijo: 00000000-0000-0000-0003-XXXXXXXXXXXX para empresa/tenant
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. TENANT (EMPRESA) PRINCIPAL
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO tenants.tenants (
|
||||
id, code, name, legal_name, rfc,
|
||||
business_type, status,
|
||||
address_street, address_city, address_state, address_zip, address_country,
|
||||
phone, email, website,
|
||||
logo_url, primary_color, secondary_color,
|
||||
fiscal_regime, cfdi_certificate_number,
|
||||
is_active, created_at, created_by
|
||||
) VALUES (
|
||||
'00000000-0000-0000-0003-000000000001',
|
||||
'DEMO001',
|
||||
'Constructora Demo',
|
||||
'Constructora Demo S.A. de C.V.',
|
||||
'CDM010101ABC',
|
||||
'construccion_residencial',
|
||||
'active',
|
||||
'Av. Tecnológico 1500, Parque Industrial',
|
||||
'Aguascalientes',
|
||||
'Aguascalientes',
|
||||
'20290',
|
||||
'México',
|
||||
'+52 449 123 4567',
|
||||
'contacto@constructorademo.com',
|
||||
'https://www.constructorademo.com',
|
||||
'/assets/logos/demo-logo.png',
|
||||
'#1E40AF', -- Azul corporativo
|
||||
'#F59E0B', -- Amarillo construcción
|
||||
'601', -- Régimen General de Ley PM
|
||||
'CSD00001234567890',
|
||||
true,
|
||||
NOW(),
|
||||
'00000000-0000-0000-0002-000000000101' -- admin
|
||||
)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. CONFIGURACIÓN DEL TENANT
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO tenants.tenant_settings (id, tenant_id, setting_key, setting_value, setting_type, created_at) VALUES
|
||||
-- General
|
||||
('00000000-0000-0000-0003-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'timezone', 'America/Mexico_City', 'string', NOW()),
|
||||
('00000000-0000-0000-0003-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'locale', 'es-MX', 'string', NOW()),
|
||||
('00000000-0000-0000-0003-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'currency', 'MXN', 'string', NOW()),
|
||||
('00000000-0000-0000-0003-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'date_format', 'DD/MM/YYYY', 'string', NOW()),
|
||||
|
||||
-- Construcción
|
||||
('00000000-0000-0000-0003-000000000110', '00000000-0000-0000-0003-000000000001',
|
||||
'default_retention_percentage', '5', 'number', NOW()),
|
||||
('00000000-0000-0000-0003-000000000111', '00000000-0000-0000-0003-000000000001',
|
||||
'default_advance_percentage', '30', 'number', NOW()),
|
||||
('00000000-0000-0000-0003-000000000112', '00000000-0000-0000-0003-000000000001',
|
||||
'estimate_period_days', '15', 'number', NOW()),
|
||||
('00000000-0000-0000-0003-000000000113', '00000000-0000-0000-0003-000000000001',
|
||||
'require_photos_for_advances', 'true', 'boolean', NOW()),
|
||||
|
||||
-- HSE
|
||||
('00000000-0000-0000-0003-000000000120', '00000000-0000-0000-0003-000000000001',
|
||||
'hse_incident_auto_notify', 'true', 'boolean', NOW()),
|
||||
('00000000-0000-0000-0003-000000000121', '00000000-0000-0000-0003-000000000001',
|
||||
'hse_require_daily_checkin', 'true', 'boolean', NOW()),
|
||||
|
||||
-- Finanzas
|
||||
('00000000-0000-0000-0003-000000000130', '00000000-0000-0000-0003-000000000001',
|
||||
'fiscal_year_start_month', '1', 'number', NOW()),
|
||||
('00000000-0000-0000-0003-000000000131', '00000000-0000-0000-0003-000000000001',
|
||||
'default_payment_terms_days', '30', 'number', NOW()),
|
||||
|
||||
-- Notificaciones
|
||||
('00000000-0000-0000-0003-000000000140', '00000000-0000-0000-0003-000000000001',
|
||||
'email_notifications_enabled', 'true', 'boolean', NOW()),
|
||||
('00000000-0000-0000-0003-000000000141', '00000000-0000-0000-0003-000000000001',
|
||||
'sms_notifications_enabled', 'false', 'boolean', NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. SUCURSALES / BRANCHES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO tenants.branches (
|
||||
id, tenant_id, code, name, branch_type,
|
||||
address_street, address_city, address_state, address_zip,
|
||||
phone, email,
|
||||
manager_id,
|
||||
is_headquarters, is_active, created_at
|
||||
) VALUES
|
||||
-- Matriz
|
||||
('00000000-0000-0000-0003-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'MATRIZ', 'Oficinas Corporativas', 'headquarters',
|
||||
'Av. Tecnológico 1500, Parque Industrial', 'Aguascalientes', 'Aguascalientes', '20290',
|
||||
'+52 449 123 4567', 'matriz@constructorademo.com',
|
||||
'00000000-0000-0000-0002-000000000102', -- director
|
||||
true, true, NOW()),
|
||||
|
||||
-- Sucursal Obra Norte
|
||||
('00000000-0000-0000-0003-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'OBRA-NORTE', 'Oficina de Obra - Zona Norte', 'field_office',
|
||||
'Carr. Panamericana Km 15', 'Aguascalientes', 'Aguascalientes', '20340',
|
||||
'+52 449 234 5678', 'obranorte@constructorademo.com',
|
||||
'00000000-0000-0000-0002-000000000103', -- gerente1
|
||||
false, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. ALMACENES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO inventory.warehouses (
|
||||
id, tenant_id, branch_id, code, name, warehouse_type,
|
||||
address_street, address_city, address_state,
|
||||
manager_id,
|
||||
is_default, is_active, created_at
|
||||
) VALUES
|
||||
-- Almacén Central (Matriz)
|
||||
('00000000-0000-0000-0003-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0003-000000000201',
|
||||
'ALM-CENTRAL', 'Almacén Central', 'central',
|
||||
'Av. Tecnológico 1500', 'Aguascalientes', 'Aguascalientes',
|
||||
'00000000-0000-0000-0002-000000000106', -- almacenista
|
||||
true, true, NOW()),
|
||||
|
||||
-- Almacén de Obra (Palmas)
|
||||
('00000000-0000-0000-0003-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0003-000000000202',
|
||||
'ALM-PALMAS', 'Almacén Residencial Las Palmas', 'field',
|
||||
'Dentro del fraccionamiento Las Palmas', 'Aguascalientes', 'Aguascalientes',
|
||||
NULL,
|
||||
false, true, NOW()),
|
||||
|
||||
-- Almacén de Obra (Diamante)
|
||||
('00000000-0000-0000-0003-000000000303', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0003-000000000202',
|
||||
'ALM-DIAMANTE', 'Almacén Torre Diamante', 'field',
|
||||
'Torre Diamante, Zona Centro', 'Aguascalientes', 'Aguascalientes',
|
||||
NULL,
|
||||
false, true, NOW()),
|
||||
|
||||
-- Almacén de Tránsito
|
||||
('00000000-0000-0000-0003-000000000304', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0003-000000000201',
|
||||
'ALM-TRANSITO', 'Almacén de Tránsito', 'transit',
|
||||
'Av. Tecnológico 1500', 'Aguascalientes', 'Aguascalientes',
|
||||
NULL,
|
||||
false, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. ASIGNAR USUARIOS AL TENANT
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO auth.user_tenants (user_id, tenant_id, is_default, is_active, created_at) VALUES
|
||||
('00000000-0000-0000-0002-000000000101', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000102', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000103', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000105', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000106', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000107', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000108', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000109', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000110', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000111', '00000000-0000-0000-0003-000000000001', true, true, NOW()),
|
||||
('00000000-0000-0000-0002-000000000112', '00000000-0000-0000-0003-000000000001', true, true, NOW())
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 6. PERFILES DE USUARIO (Datos adicionales)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO profiles.user_profiles (
|
||||
id, user_id, tenant_id,
|
||||
phone, mobile, job_title, department,
|
||||
avatar_url, bio,
|
||||
preferences,
|
||||
created_at
|
||||
) VALUES
|
||||
('00000000-0000-0000-0003-000000000401', '00000000-0000-0000-0002-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0001', '+52 449 200 0001', 'Administrador del Sistema', 'TI',
|
||||
'/avatars/admin.png', 'Administrador general del sistema ERP',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000402', '00000000-0000-0000-0002-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0002', '+52 449 200 0002', 'Director General', 'Dirección',
|
||||
'/avatars/director.png', 'Director General de Constructora Demo',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000403', '00000000-0000-0000-0002-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0003', '+52 449 200 0003', 'Gerente de Proyectos', 'Construcción',
|
||||
'/avatars/gerente.png', 'Gerente de proyectos con 15 años de experiencia',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000404', '00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0004', '+52 449 200 0004', 'Residente de Obra', 'Construcción',
|
||||
'/avatars/residente.png', 'Residente de obra certificado CMIC',
|
||||
'{"theme": "dark", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000405', '00000000-0000-0000-0002-000000000105', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0005', '+52 449 200 0005', 'Supervisor de Campo', 'Construcción',
|
||||
'/avatars/supervisor.png', 'Supervisor con experiencia en obra residencial',
|
||||
'{"theme": "dark", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000406', '00000000-0000-0000-0002-000000000106', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0006', '+52 449 200 0006', 'Jefe de Almacén', 'Logística',
|
||||
'/avatars/almacen.png', 'Responsable de control de inventarios',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000407', '00000000-0000-0000-0002-000000000107', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0007', '+52 449 200 0007', 'Contador General', 'Finanzas',
|
||||
'/avatars/contador.png', 'CPA con especialidad en construcción',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000408', '00000000-0000-0000-0002-000000000108', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0008', '+52 449 200 0008', 'Coordinador de RRHH', 'Recursos Humanos',
|
||||
'/avatars/rrhh.png', 'Especialista en gestión de personal de construcción',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000409', '00000000-0000-0000-0002-000000000109', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0009', '+52 449 200 0009', 'Coordinador HSE', 'Seguridad',
|
||||
'/avatars/hse.png', 'Certificado STPS en seguridad industrial',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000410', '00000000-0000-0000-0002-000000000110', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0010', '+52 449 200 0010', 'Inspector de Calidad', 'Calidad',
|
||||
'/avatars/calidad.png', 'Inspector certificado ISO 9001',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000411', '00000000-0000-0000-0002-000000000111', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0011', '+52 449 200 0011', 'Comprador', 'Compras',
|
||||
'/avatars/compras.png', 'Especialista en compras de construcción',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW()),
|
||||
|
||||
('00000000-0000-0000-0003-000000000412', '00000000-0000-0000-0002-000000000112', '00000000-0000-0000-0003-000000000001',
|
||||
'+52 449 100 0012', '+52 449 200 0012', 'Cliente', 'Externo',
|
||||
'/avatars/cliente.png', 'Cliente del fraccionamiento Las Palmas',
|
||||
'{"theme": "light", "notifications": true}'::jsonb, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_tenants INTEGER;
|
||||
v_branches INTEGER;
|
||||
v_warehouses INTEGER;
|
||||
v_user_tenants INTEGER;
|
||||
v_profiles INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_tenants FROM tenants.tenants;
|
||||
SELECT COUNT(*) INTO v_branches FROM tenants.branches;
|
||||
SELECT COUNT(*) INTO v_warehouses FROM inventory.warehouses;
|
||||
SELECT COUNT(*) INTO v_user_tenants FROM auth.user_tenants;
|
||||
SELECT COUNT(*) INTO v_profiles FROM profiles.user_profiles;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 03 - EMPRESA Y ESTRUCTURA - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Tenants (empresas): %', v_tenants;
|
||||
RAISE NOTICE 'Sucursales: %', v_branches;
|
||||
RAISE NOTICE 'Almacenes: %', v_warehouses;
|
||||
RAISE NOTICE 'Usuarios asignados a tenant: %', v_user_tenants;
|
||||
RAISE NOTICE 'Perfiles de usuario: %', v_profiles;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 03
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
417
seeds/dev/04-proyectos-obras.sql
Normal file
417
seeds/dev/04-proyectos-obras.sql
Normal file
@ -0,0 +1,417 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 04: PROYECTOS Y OBRAS
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Fraccionamientos, etapas, lotes, torres, departamentos, subcontratistas
|
||||
-- Dependencias: 02-users-profiles.sql, 03-empresa-tenant.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs determinísticos:
|
||||
-- Prefijo: 00000000-0000-0000-0004-XXXXXXXXXXXX para proyectos/obras
|
||||
|
||||
-- Constantes
|
||||
-- tenant_id: 00000000-0000-0000-0003-000000000001
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- Variable para el tenant
|
||||
DO $$
|
||||
DECLARE
|
||||
v_tenant_id UUID := '00000000-0000-0000-0003-000000000001';
|
||||
v_admin_id UUID := '00000000-0000-0000-0002-000000000101';
|
||||
v_gerente_id UUID := '00000000-0000-0000-0002-000000000103';
|
||||
BEGIN
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. PROTOTIPOS DE VIVIENDA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.prototipos (
|
||||
id, tenant_id, code, name, type,
|
||||
area_construction_m2, area_terrain_m2,
|
||||
bedrooms, bathrooms, parking_spaces, floors,
|
||||
base_price, is_active, created_at, created_by
|
||||
) VALUES
|
||||
-- Horizontal - Casa tipo
|
||||
('00000000-0000-0000-0004-000000000001', v_tenant_id,
|
||||
'CASA-90', 'Casa Tipo 90', 'horizontal',
|
||||
90.00, 120.00, 3, 2.5, 2, 2, 1850000.00, true, NOW(), v_admin_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000002', v_tenant_id,
|
||||
'CASA-120', 'Casa Tipo 120', 'horizontal',
|
||||
120.00, 150.00, 4, 3.0, 2, 2, 2450000.00, true, NOW(), v_admin_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000003', v_tenant_id,
|
||||
'CASA-150', 'Casa Premium 150', 'horizontal',
|
||||
150.00, 200.00, 4, 3.5, 3, 2, 3200000.00, true, NOW(), v_admin_id),
|
||||
|
||||
-- Vertical - Departamentos
|
||||
('00000000-0000-0000-0004-000000000004', v_tenant_id,
|
||||
'DEPTO-65', 'Departamento 65', 'vertical',
|
||||
65.00, NULL, 2, 1.0, 1, 1, 1250000.00, true, NOW(), v_admin_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000005', v_tenant_id,
|
||||
'DEPTO-85', 'Departamento 85', 'vertical',
|
||||
85.00, NULL, 2, 2.0, 1, 1, 1650000.00, true, NOW(), v_admin_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000006', v_tenant_id,
|
||||
'DEPTO-110', 'Departamento Premium 110', 'vertical',
|
||||
110.00, NULL, 3, 2.0, 2, 1, 2150000.00, true, NOW(), v_admin_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. FRACCIONAMIENTOS (PROYECTOS)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.fraccionamientos (
|
||||
id, tenant_id, code, name, status,
|
||||
project_type, total_lots, total_area_m2, buildable_area_m2,
|
||||
address, city, state, zip_code,
|
||||
start_date, estimated_end_date,
|
||||
is_active, created_at, created_by
|
||||
) VALUES
|
||||
-- Proyecto 1: Horizontal - En construcción
|
||||
('00000000-0000-0000-0004-000000000101', v_tenant_id,
|
||||
'PALMAS-2024', 'Residencial Las Palmas', 'in_progress',
|
||||
'horizontal', 120, 45000.00, 38000.00,
|
||||
'Carr. Panamericana Norte Km 15', 'Aguascalientes', 'Aguascalientes', '20340',
|
||||
'2024-03-01', '2026-12-31',
|
||||
true, NOW(), v_gerente_id),
|
||||
|
||||
-- Proyecto 2: Vertical - En construcción
|
||||
('00000000-0000-0000-0004-000000000102', v_tenant_id,
|
||||
'DIAMANTE-2024', 'Torre Diamante', 'in_progress',
|
||||
'vertical', 48, 8500.00, 6200.00,
|
||||
'Blvd. A Zacatecas 1200, Centro', 'Aguascalientes', 'Aguascalientes', '20000',
|
||||
'2024-06-01', '2027-06-30',
|
||||
true, NOW(), v_gerente_id),
|
||||
|
||||
-- Proyecto 3: Comercial - En planeación
|
||||
('00000000-0000-0000-0004-000000000103', v_tenant_id,
|
||||
'PLAZA-2025', 'Plaza Central', 'planning',
|
||||
'commercial', 24, 12000.00, 9500.00,
|
||||
'Av. López Mateos 500', 'Aguascalientes', 'Aguascalientes', '20230',
|
||||
'2025-01-15', '2026-06-30',
|
||||
true, NOW(), v_gerente_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. ETAPAS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.etapas (
|
||||
id, tenant_id, fraccionamiento_id, code, name, sequence, status,
|
||||
total_lots, start_date, end_date,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Las Palmas - 3 etapas
|
||||
('00000000-0000-0000-0004-000000000201', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'PALMAS-E1', 'Etapa 1 - Norte', 1, 'in_progress',
|
||||
40, '2024-03-01', '2025-06-30', NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000202', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'PALMAS-E2', 'Etapa 2 - Centro', 2, 'planning',
|
||||
40, '2025-07-01', '2026-06-30', NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000203', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'PALMAS-E3', 'Etapa 3 - Sur', 3, 'draft',
|
||||
40, '2026-07-01', '2026-12-31', NOW(), v_gerente_id),
|
||||
|
||||
-- Torre Diamante - 1 etapa (es una sola torre)
|
||||
('00000000-0000-0000-0004-000000000204', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000102',
|
||||
'DIAMANTE-E1', 'Torre Principal', 1, 'in_progress',
|
||||
48, '2024-06-01', '2027-06-30', NOW(), v_gerente_id),
|
||||
|
||||
-- Plaza Central - 2 etapas
|
||||
('00000000-0000-0000-0004-000000000205', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000103',
|
||||
'PLAZA-E1', 'Fase 1 - Locales Ancla', 1, 'planning',
|
||||
12, '2025-01-15', '2025-12-31', NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000206', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000103',
|
||||
'PLAZA-E2', 'Fase 2 - Locales Menores', 2, 'draft',
|
||||
12, '2026-01-01', '2026-06-30', NOW(), v_gerente_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. MANZANAS (Para Las Palmas - Horizontal)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.manzanas (
|
||||
id, tenant_id, etapa_id, code, name, total_lots,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Etapa 1 - 4 manzanas de 10 lotes cada una
|
||||
('00000000-0000-0000-0004-000000000301', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000201',
|
||||
'M1-A', 'Manzana A', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000302', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000201',
|
||||
'M1-B', 'Manzana B', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000303', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000201',
|
||||
'M1-C', 'Manzana C', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000304', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000201',
|
||||
'M1-D', 'Manzana D', 10, NOW(), v_gerente_id),
|
||||
|
||||
-- Etapa 2 - 4 manzanas
|
||||
('00000000-0000-0000-0004-000000000305', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000202',
|
||||
'M2-A', 'Manzana A', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000306', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000202',
|
||||
'M2-B', 'Manzana B', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000307', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000202',
|
||||
'M2-C', 'Manzana C', 10, NOW(), v_gerente_id),
|
||||
|
||||
('00000000-0000-0000-0004-000000000308', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000202',
|
||||
'M2-D', 'Manzana D', 10, NOW(), v_gerente_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. TORRES (Para Torre Diamante - Vertical)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.torres (
|
||||
id, tenant_id, etapa_id, code, name,
|
||||
total_floors, total_units, status,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0004-000000000401', v_tenant_id,
|
||||
'00000000-0000-0000-0004-000000000204',
|
||||
'TORRE-A', 'Torre A - Diamante', 12, 48, 'in_progress',
|
||||
NOW(), v_gerente_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 6. NIVELES (Pisos de la torre)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.niveles (
|
||||
id, tenant_id, torre_id, floor_number, name, total_units,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0004-000000000501', v_tenant_id, '00000000-0000-0000-0004-000000000401', 1, 'Planta Baja', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000502', v_tenant_id, '00000000-0000-0000-0004-000000000401', 2, 'Nivel 2', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000503', v_tenant_id, '00000000-0000-0000-0004-000000000401', 3, 'Nivel 3', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000504', v_tenant_id, '00000000-0000-0000-0004-000000000401', 4, 'Nivel 4', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000505', v_tenant_id, '00000000-0000-0000-0004-000000000401', 5, 'Nivel 5', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000506', v_tenant_id, '00000000-0000-0000-0004-000000000401', 6, 'Nivel 6', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000507', v_tenant_id, '00000000-0000-0000-0004-000000000401', 7, 'Nivel 7', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000508', v_tenant_id, '00000000-0000-0000-0004-000000000401', 8, 'Nivel 8', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000509', v_tenant_id, '00000000-0000-0000-0004-000000000401', 9, 'Nivel 9', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000510', v_tenant_id, '00000000-0000-0000-0004-000000000401', 10, 'Nivel 10', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000511', v_tenant_id, '00000000-0000-0000-0004-000000000401', 11, 'Nivel 11', 4, NOW(), v_gerente_id),
|
||||
('00000000-0000-0000-0004-000000000512', v_tenant_id, '00000000-0000-0000-0004-000000000401', 12, 'Penthouse', 4, NOW(), v_gerente_id)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
END $$;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 7. LOTES (Manzana A - Etapa 1 - Las Palmas)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.lotes (
|
||||
id, tenant_id, manzana_id, prototipo_id,
|
||||
code, official_number, status,
|
||||
area_m2, front_m, depth_m,
|
||||
price_base, price_final,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Manzana A - 10 lotes
|
||||
('00000000-0000-0000-0004-000000000601', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-01', '1', 'delivered', 120.00, 8.00, 15.00, 1850000.00, 1900000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000602', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-02', '2', 'delivered', 120.00, 8.00, 15.00, 1850000.00, 1900000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000603', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000002',
|
||||
'A-03', '3', 'under_construction', 150.00, 10.00, 15.00, 2450000.00, 2500000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000604', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000002',
|
||||
'A-04', '4', 'under_construction', 150.00, 10.00, 15.00, 2450000.00, 2500000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000605', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-05', '5', 'sold', 120.00, 8.00, 15.00, 1850000.00, 1880000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000606', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-06', '6', 'sold', 120.00, 8.00, 15.00, 1850000.00, 1880000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000607', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000003',
|
||||
'A-07', '7', 'reserved', 200.00, 12.50, 16.00, 3200000.00, 3300000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000608', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000003',
|
||||
'A-08', '8', 'available', 200.00, 12.50, 16.00, 3200000.00, 3300000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000609', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-09', '9', 'available', 120.00, 8.00, 15.00, 1850000.00, 1850000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000610', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000301', '00000000-0000-0000-0004-000000000001',
|
||||
'A-10', '10', 'available', 120.00, 8.00, 15.00, 1850000.00, 1850000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Manzana B - 10 lotes más
|
||||
('00000000-0000-0000-0004-000000000611', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000302', '00000000-0000-0000-0004-000000000001',
|
||||
'B-01', '11', 'under_construction', 120.00, 8.00, 15.00, 1850000.00, 1900000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000612', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000302', '00000000-0000-0000-0004-000000000001',
|
||||
'B-02', '12', 'under_construction', 120.00, 8.00, 15.00, 1850000.00, 1900000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000613', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000302', '00000000-0000-0000-0004-000000000002',
|
||||
'B-03', '13', 'sold', 150.00, 10.00, 15.00, 2450000.00, 2480000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000614', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000302', '00000000-0000-0000-0004-000000000002',
|
||||
'B-04', '14', 'available', 150.00, 10.00, 15.00, 2450000.00, 2450000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000615', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000302', '00000000-0000-0000-0004-000000000001',
|
||||
'B-05', '15', 'available', 120.00, 8.00, 15.00, 1850000.00, 1850000.00, NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 8. DEPARTAMENTOS (Torre Diamante - Primeros 4 niveles)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.departamentos (
|
||||
id, tenant_id, nivel_id, prototipo_id,
|
||||
code, unit_number, status,
|
||||
area_m2, price_base, price_final,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Nivel 1 (Planta Baja) - 4 deptos
|
||||
('00000000-0000-0000-0004-000000000701', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000501', '00000000-0000-0000-0004-000000000004',
|
||||
'A-101', '101', 'delivered', 65.00, 1250000.00, 1300000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000702', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000501', '00000000-0000-0000-0004-000000000005',
|
||||
'A-102', '102', 'delivered', 85.00, 1650000.00, 1700000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000703', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000501', '00000000-0000-0000-0004-000000000005',
|
||||
'A-103', '103', 'sold', 85.00, 1650000.00, 1680000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000704', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000501', '00000000-0000-0000-0004-000000000004',
|
||||
'A-104', '104', 'sold', 65.00, 1250000.00, 1280000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Nivel 2 - 4 deptos
|
||||
('00000000-0000-0000-0004-000000000705', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000502', '00000000-0000-0000-0004-000000000004',
|
||||
'A-201', '201', 'under_construction', 65.00, 1250000.00, 1320000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000706', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000502', '00000000-0000-0000-0004-000000000005',
|
||||
'A-202', '202', 'under_construction', 85.00, 1650000.00, 1720000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000707', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000502', '00000000-0000-0000-0004-000000000005',
|
||||
'A-203', '203', 'reserved', 85.00, 1650000.00, 1720000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000708', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000502', '00000000-0000-0000-0004-000000000004',
|
||||
'A-204', '204', 'available', 65.00, 1250000.00, 1320000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Nivel 3 - 4 deptos
|
||||
('00000000-0000-0000-0004-000000000709', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000503', '00000000-0000-0000-0004-000000000004',
|
||||
'A-301', '301', 'available', 65.00, 1250000.00, 1340000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000710', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000503', '00000000-0000-0000-0004-000000000005',
|
||||
'A-302', '302', 'available', 85.00, 1650000.00, 1740000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000711', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000503', '00000000-0000-0000-0004-000000000006',
|
||||
'A-303', '303', 'available', 110.00, 2150000.00, 2250000.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
('00000000-0000-0000-0004-000000000712', '00000000-0000-0000-0003-000000000001', '00000000-0000-0000-0004-000000000503', '00000000-0000-0000-0004-000000000004',
|
||||
'A-304', '304', 'available', 65.00, 1250000.00, 1340000.00, NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 9. SUBCONTRATISTAS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.subcontratistas (
|
||||
id, tenant_id, code, name, legal_name, tax_id,
|
||||
specialty, contact_name, contact_phone, contact_email,
|
||||
rating, is_active, created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0004-000000000801', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-001', 'Cimientos del Norte', 'Cimientos del Norte S.A. de C.V.', 'CNO010101AAA',
|
||||
'Cimentación y Estructuras', 'Roberto Fundación', '+52 449 111 1111', 'contacto@cimientosnorte.com',
|
||||
4.5, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000802', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-002', 'Electrificaciones AGS', 'Electrificaciones AGS S.A. de C.V.', 'EAG010101BBB',
|
||||
'Instalaciones Eléctricas', 'Luis Voltaje', '+52 449 222 2222', 'luis@electroags.com',
|
||||
4.8, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000803', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-003', 'Plomería Integral', 'Plomería Integral de Aguascalientes S.A. de C.V.', 'PIA010101CCC',
|
||||
'Instalaciones Hidráulicas y Sanitarias', 'Pedro Tubería', '+52 449 333 3333', 'pedro@plomeriaintegral.com',
|
||||
4.2, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000804', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-004', 'Acabados Finos', 'Acabados Finos y Decoración S.A. de C.V.', 'AFD010101DDD',
|
||||
'Acabados y Pintura', 'María Acabado', '+52 449 444 4444', 'maria@acabadosfinos.com',
|
||||
4.6, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000805', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-005', 'Herrería Artística', 'Herrería y Cancelería Artística S.A. de C.V.', 'HCA010101EEE',
|
||||
'Herrería y Cancelería', 'José Fierro', '+52 449 555 5555', 'jose@herreriaartistica.com',
|
||||
4.3, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000806', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-006', 'Carpintería Moderna', 'Carpintería y Cocinas Modernas S.A. de C.V.', 'CCM010101FFF',
|
||||
'Carpintería y Cocinas', 'Francisco Madera', '+52 449 666 6666', 'francisco@carpinteriamoderna.com',
|
||||
4.7, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000807', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-007', 'Impermeabilizantes Pro', 'Impermeabilizaciones Profesionales S.A. de C.V.', 'IPR010101GGG',
|
||||
'Impermeabilización', 'Carlos Impermeable', '+52 449 777 7777', 'carlos@imperpro.com',
|
||||
4.4, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000808', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-008', 'Pisos y Azulejos', 'Pisos y Azulejos del Centro S.A. de C.V.', 'PAC010101HHH',
|
||||
'Pisos y Recubrimientos', 'Ana Piso', '+52 449 888 8888', 'ana@pisosyazulejos.com',
|
||||
4.5, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000809', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-009', 'Vidrios y Cristales', 'Vidrios y Cristalería Premium S.A. de C.V.', 'VCP010101III',
|
||||
'Vidrio y Aluminio', 'Raúl Cristal', '+52 449 999 9999', 'raul@vidriospremium.com',
|
||||
4.1, true, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0004-000000000810', '00000000-0000-0000-0003-000000000001',
|
||||
'SUB-010', 'Jardinería Integral', 'Jardinería y Paisajismo Integral S.A. de C.V.', 'JPI010101JJJ',
|
||||
'Jardinería y Áreas Verdes', 'Elena Verde', '+52 449 101 0101', 'elena@jardineriaintegral.com',
|
||||
4.9, true, NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_prototipos INTEGER;
|
||||
v_fraccionamientos INTEGER;
|
||||
v_etapas INTEGER;
|
||||
v_manzanas INTEGER;
|
||||
v_torres INTEGER;
|
||||
v_niveles INTEGER;
|
||||
v_lotes INTEGER;
|
||||
v_departamentos INTEGER;
|
||||
v_subcontratistas INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_prototipos FROM construction.prototipos;
|
||||
SELECT COUNT(*) INTO v_fraccionamientos FROM construction.fraccionamientos;
|
||||
SELECT COUNT(*) INTO v_etapas FROM construction.etapas;
|
||||
SELECT COUNT(*) INTO v_manzanas FROM construction.manzanas;
|
||||
SELECT COUNT(*) INTO v_torres FROM construction.torres;
|
||||
SELECT COUNT(*) INTO v_niveles FROM construction.niveles;
|
||||
SELECT COUNT(*) INTO v_lotes FROM construction.lotes;
|
||||
SELECT COUNT(*) INTO v_departamentos FROM construction.departamentos;
|
||||
SELECT COUNT(*) INTO v_subcontratistas FROM construction.subcontratistas;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 04 - PROYECTOS Y OBRAS - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Prototipos: %', v_prototipos;
|
||||
RAISE NOTICE 'Fraccionamientos: %', v_fraccionamientos;
|
||||
RAISE NOTICE 'Etapas: %', v_etapas;
|
||||
RAISE NOTICE 'Manzanas: %', v_manzanas;
|
||||
RAISE NOTICE 'Torres: %', v_torres;
|
||||
RAISE NOTICE 'Niveles: %', v_niveles;
|
||||
RAISE NOTICE 'Lotes: %', v_lotes;
|
||||
RAISE NOTICE 'Departamentos: %', v_departamentos;
|
||||
RAISE NOTICE 'Subcontratistas: %', v_subcontratistas;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 04
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
320
seeds/dev/05-presupuestos.sql
Normal file
320
seeds/dev/05-presupuestos.sql
Normal file
@ -0,0 +1,320 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- 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
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
231
seeds/dev/06-estimaciones.sql
Normal file
231
seeds/dev/06-estimaciones.sql
Normal file
@ -0,0 +1,231 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 06: CONTRATOS Y ESTIMACIONES
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Contratos, estimaciones, generadores, anticipos, retenciones
|
||||
-- Dependencias: 04-proyectos-obras.sql, 05-presupuestos.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs: 00000000-0000-0000-0006-XXXXXXXXXXXX
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. CONTRATOS DE OBRA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.contratos (
|
||||
id, tenant_id, subcontratista_id, fraccionamiento_id,
|
||||
contract_number, name, contract_type,
|
||||
start_date, end_date,
|
||||
total_amount, advance_percentage, retention_percentage,
|
||||
status, signed_at, signed_by,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Contrato Cimentaciones - Las Palmas
|
||||
('00000000-0000-0000-0006-000000000001', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000801', '00000000-0000-0000-0004-000000000101',
|
||||
'CONT-2024-001', 'Cimentación Etapa 1 Las Palmas', 'unit_price',
|
||||
'2024-03-01', '2024-08-31',
|
||||
2500000.00, 30.00, 5.00,
|
||||
'active', '2024-02-28', '00000000-0000-0000-0002-000000000102',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Contrato Instalaciones Eléctricas - Las Palmas
|
||||
('00000000-0000-0000-0006-000000000002', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000802', '00000000-0000-0000-0004-000000000101',
|
||||
'CONT-2024-002', 'Instalaciones Eléctricas Etapa 1 Las Palmas', 'unit_price',
|
||||
'2024-05-01', '2024-12-31',
|
||||
1800000.00, 20.00, 5.00,
|
||||
'active', '2024-04-25', '00000000-0000-0000-0002-000000000102',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Contrato Plomería - Las Palmas
|
||||
('00000000-0000-0000-0006-000000000003', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000803', '00000000-0000-0000-0004-000000000101',
|
||||
'CONT-2024-003', 'Instalaciones Hidro-Sanitarias Etapa 1', 'unit_price',
|
||||
'2024-05-15', '2025-01-31',
|
||||
1650000.00, 20.00, 5.00,
|
||||
'active', '2024-05-10', '00000000-0000-0000-0002-000000000102',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Contrato Acabados - Las Palmas
|
||||
('00000000-0000-0000-0006-000000000004', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000804', '00000000-0000-0000-0004-000000000101',
|
||||
'CONT-2024-004', 'Acabados y Pintura Etapa 1 Las Palmas', 'unit_price',
|
||||
'2024-07-01', '2025-03-31',
|
||||
2200000.00, 15.00, 5.00,
|
||||
'active', '2024-06-28', '00000000-0000-0000-0002-000000000102',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Contrato Estructura - Torre Diamante
|
||||
('00000000-0000-0000-0006-000000000005', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000801', '00000000-0000-0000-0004-000000000102',
|
||||
'CONT-2024-005', 'Estructura Torre Diamante', 'fixed_price',
|
||||
'2024-06-01', '2025-12-31',
|
||||
8500000.00, 25.00, 5.00,
|
||||
'active', '2024-05-28', '00000000-0000-0000-0002-000000000102',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. ESTIMACIONES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO estimates.estimaciones (
|
||||
id, tenant_id, contrato_id, fraccionamiento_id,
|
||||
estimate_number, period_start, period_end, sequence_number,
|
||||
status, subtotal, advance_amount, retention_amount, tax_amount, total_amount,
|
||||
submitted_at, submitted_by, approved_at, approved_by,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Estimaciones del Contrato Cimentaciones
|
||||
('00000000-0000-0000-0006-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-001-01', '2024-03-01', '2024-03-15', 1,
|
||||
'paid', 350000.00, 105000.00, 17500.00, 56000.00, 283500.00,
|
||||
'2024-03-18', '00000000-0000-0000-0002-000000000104',
|
||||
'2024-03-20', '00000000-0000-0000-0002-000000000103',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-001-02', '2024-03-16', '2024-03-31', 2,
|
||||
'paid', 420000.00, 126000.00, 21000.00, 67200.00, 340200.00,
|
||||
'2024-04-03', '00000000-0000-0000-0002-000000000104',
|
||||
'2024-04-05', '00000000-0000-0000-0002-000000000103',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-001-03', '2024-04-01', '2024-04-15', 3,
|
||||
'approved', 380000.00, 114000.00, 19000.00, 60800.00, 307800.00,
|
||||
'2024-04-18', '00000000-0000-0000-0002-000000000104',
|
||||
'2024-04-20', '00000000-0000-0000-0002-000000000103',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-001-04', '2024-04-16', '2024-04-30', 4,
|
||||
'submitted', 450000.00, 135000.00, 22500.00, 72000.00, 364500.00,
|
||||
'2024-05-03', '00000000-0000-0000-0002-000000000104',
|
||||
NULL, NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
-- Estimaciones del Contrato Eléctrico
|
||||
('00000000-0000-0000-0006-000000000105', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000002', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-002-01', '2024-05-01', '2024-05-15', 1,
|
||||
'paid', 280000.00, 56000.00, 14000.00, 44800.00, 254800.00,
|
||||
'2024-05-18', '00000000-0000-0000-0002-000000000104',
|
||||
'2024-05-20', '00000000-0000-0000-0002-000000000103',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000106', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000002', '00000000-0000-0000-0004-000000000101',
|
||||
'EST-2024-002-02', '2024-05-16', '2024-05-31', 2,
|
||||
'approved', 320000.00, 64000.00, 16000.00, 51200.00, 291200.00,
|
||||
'2024-06-03', '00000000-0000-0000-0002-000000000104',
|
||||
'2024-06-05', '00000000-0000-0000-0002-000000000103',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. ANTICIPOS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO estimates.anticipos (
|
||||
id, tenant_id, contrato_id,
|
||||
advance_type, advance_number, advance_date,
|
||||
gross_amount, tax_amount, net_amount,
|
||||
amortization_percentage, amortized_amount,
|
||||
is_fully_amortized,
|
||||
approved_at, approved_by, paid_at, payment_reference,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Anticipo Contrato Cimentaciones (30%)
|
||||
('00000000-0000-0000-0006-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001',
|
||||
'initial', 'ANT-2024-001-01', '2024-02-28',
|
||||
750000.00, 120000.00, 870000.00,
|
||||
30.00, 480000.00, false,
|
||||
'2024-02-28', '00000000-0000-0000-0002-000000000102',
|
||||
'2024-03-01', 'TRANSF-BBVA-001',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Anticipo Contrato Eléctrico (20%)
|
||||
('00000000-0000-0000-0006-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000002',
|
||||
'initial', 'ANT-2024-002-01', '2024-04-25',
|
||||
360000.00, 57600.00, 417600.00,
|
||||
20.00, 120000.00, false,
|
||||
'2024-04-25', '00000000-0000-0000-0002-000000000102',
|
||||
'2024-04-26', 'TRANSF-BBVA-002',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
-- Anticipo Contrato Estructura Torre (25%)
|
||||
('00000000-0000-0000-0006-000000000203', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000005',
|
||||
'initial', 'ANT-2024-005-01', '2024-05-28',
|
||||
2125000.00, 340000.00, 2465000.00,
|
||||
25.00, 0.00, false,
|
||||
'2024-05-28', '00000000-0000-0000-0002-000000000102',
|
||||
'2024-05-30', 'TRANSF-BBVA-005',
|
||||
NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. FONDO DE GARANTÍA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO estimates.fondo_garantia (
|
||||
id, tenant_id, contrato_id,
|
||||
accumulated_amount, released_amount,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0006-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000001',
|
||||
80000.00, 0.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000002',
|
||||
30000.00, 0.00, NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-0006-000000000303', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0006-000000000005',
|
||||
0.00, 0.00, NOW(), '00000000-0000-0000-0002-000000000103')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_contratos INTEGER;
|
||||
v_estimaciones INTEGER;
|
||||
v_anticipos INTEGER;
|
||||
v_fondos INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_contratos FROM construction.contratos;
|
||||
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 'SEED 06 - ESTIMACIONES - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Contratos: %', v_contratos;
|
||||
RAISE NOTICE 'Estimaciones: %', v_estimaciones;
|
||||
RAISE NOTICE 'Anticipos: %', v_anticipos;
|
||||
RAISE NOTICE 'Fondos de garantía: %', v_fondos;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 06
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
279
seeds/dev/07-avances-calidad.sql
Normal file
279
seeds/dev/07-avances-calidad.sql
Normal file
@ -0,0 +1,279 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 07: AVANCES DE OBRA Y CONTROL DE CALIDAD
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Avances, fotos, bitácora, checklists, inspecciones, tickets
|
||||
-- Dependencias: 04-proyectos-obras.sql, 05-presupuestos.sql, 02-users-profiles.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs: 00000000-0000-0000-0007-XXXXXXXXXXXX
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. AVANCES DE OBRA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.avances_obra (
|
||||
id, tenant_id, concepto_id, lote_id,
|
||||
capture_date, quantity_executed, percentage_executed,
|
||||
status, notes,
|
||||
captured_by, reviewed_by, reviewed_at, approved_by, approved_at,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Avances Lote A-01 (entregado)
|
||||
('00000000-0000-0000-0007-000000000001', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000101', '00000000-0000-0000-0004-000000000601',
|
||||
'2024-03-15', 120.00, 100.00, 'approved', 'Limpieza completada',
|
||||
'00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000105',
|
||||
'2024-03-16', '00000000-0000-0000-0002-000000000103', '2024-03-17',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000002', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000204', '00000000-0000-0000-0004-000000000601',
|
||||
'2024-03-25', 8.50, 100.00, 'approved', 'Zapatas completadas',
|
||||
'00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000105',
|
||||
'2024-03-26', '00000000-0000-0000-0002-000000000103', '2024-03-27',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000003', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000401', '00000000-0000-0000-0004-000000000601',
|
||||
'2024-04-10', 185.00, 100.00, 'approved', 'Muros planta baja terminados',
|
||||
'00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000105',
|
||||
'2024-04-11', '00000000-0000-0000-0002-000000000103', '2024-04-12',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
-- Avances Lote A-03 (en construcción)
|
||||
('00000000-0000-0000-0007-000000000004', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000204', '00000000-0000-0000-0004-000000000603',
|
||||
'2024-04-20', 6.00, 70.59, 'approved', 'Zapatas en proceso',
|
||||
'00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000105',
|
||||
'2024-04-21', '00000000-0000-0000-0002-000000000103', '2024-04-22',
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000005', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000401', '00000000-0000-0000-0004-000000000603',
|
||||
'2024-05-05', 120.00, 64.86, 'reviewed', 'Muros planta baja al 65%',
|
||||
'00000000-0000-0000-0002-000000000104', '00000000-0000-0000-0002-000000000105',
|
||||
'2024-05-06', NULL, NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000104'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000006', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0005-000000000303', '00000000-0000-0000-0004-000000000603',
|
||||
'2024-05-10', 45.00, 47.37, 'pending', 'Losa en proceso de colado',
|
||||
'00000000-0000-0000-0002-000000000104', NULL, NULL, NULL, NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000104')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. BITÁCORA DE OBRA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.bitacora_obra (
|
||||
id, tenant_id, fraccionamiento_id,
|
||||
entry_date, entry_number, weather, temperature_max, temperature_min,
|
||||
workers_count, description, observations, incidents,
|
||||
registered_by,
|
||||
created_at
|
||||
) VALUES
|
||||
('00000000-0000-0000-0007-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-01', 1, 'Soleado', 28.5, 15.2, 45,
|
||||
'Inicio de trabajos de cimentación en manzana B. Se realizó trazo y nivelación.',
|
||||
'Personal completo. Maquinaria operando al 100%.',
|
||||
NULL,
|
||||
'00000000-0000-0000-0002-000000000104', NOW()),
|
||||
|
||||
('00000000-0000-0000-0007-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-02', 2, 'Parcialmente nublado', 26.0, 14.8, 48,
|
||||
'Continuación de excavación para zapatas. Armado de acero en lotes B-01 y B-02.',
|
||||
'Se recibió material de acero y cemento.',
|
||||
NULL,
|
||||
'00000000-0000-0000-0002-000000000104', NOW()),
|
||||
|
||||
('00000000-0000-0000-0007-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-03', 3, 'Lluvioso', 22.0, 13.5, 32,
|
||||
'Trabajos suspendidos parcialmente por lluvia. Solo actividades bajo techo.',
|
||||
'Lluvia desde las 10:00 hrs. Se protegieron materiales.',
|
||||
'Suspensión parcial por clima',
|
||||
'00000000-0000-0000-0002-000000000104', NOW()),
|
||||
|
||||
('00000000-0000-0000-0007-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-04', 4, 'Soleado', 27.0, 15.0, 52,
|
||||
'Colado de zapatas lotes B-01 y B-02. Inicio de muros planta baja lote A-05.',
|
||||
'Concreto premezclado de calidad verificada.',
|
||||
NULL,
|
||||
'00000000-0000-0000-0002-000000000104', NOW()),
|
||||
|
||||
('00000000-0000-0000-0007-000000000105', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-05', 5, 'Soleado', 29.0, 16.5, 55,
|
||||
'Desencofrado de zapatas. Relleno compactado. Instalación eléctrica en lote A-01.',
|
||||
'Visita de supervisión de INFONAVIT.',
|
||||
NULL,
|
||||
'00000000-0000-0000-0002-000000000104', NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. CHECKLISTS DE CALIDAD
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.checklists (
|
||||
id, tenant_id, prototipo_id, code, name, is_active,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0007-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000001',
|
||||
'CHK-CIM-90', 'Checklist Cimentación Casa 90', true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000001',
|
||||
'CHK-EST-90', 'Checklist Estructura Casa 90', true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000203', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000001',
|
||||
'CHK-ACAB-90', 'Checklist Acabados Casa 90', true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000204', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000001',
|
||||
'CHK-ENTREGA', 'Checklist Entrega Final', true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. ITEMS DE CHECKLIST
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.checklist_items (
|
||||
id, tenant_id, checklist_id, sequence, name, is_required,
|
||||
created_at
|
||||
) VALUES
|
||||
-- Items Checklist Cimentación
|
||||
('00000000-0000-0000-0007-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', 1, 'Profundidad de excavación correcta', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', 2, 'Plantilla de concreto pobre', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000303', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', 3, 'Armado de acero según planos', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000304', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', 4, 'Recubrimientos de acero correctos', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000305', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', 5, 'Resistencia del concreto verificada', true, NOW()),
|
||||
|
||||
-- Items Checklist Entrega
|
||||
('00000000-0000-0000-0007-000000000310', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 1, 'Limpieza general de la vivienda', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000311', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 2, 'Funcionamiento de instalaciones eléctricas', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000312', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 3, 'Funcionamiento de instalaciones hidráulicas', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000313', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 4, 'Estado de acabados', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000314', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 5, 'Funcionamiento de puertas y ventanas', true, NOW()),
|
||||
('00000000-0000-0000-0007-000000000315', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', 6, 'Documentación entregada', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. INSPECCIONES DE CALIDAD
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.inspecciones (
|
||||
id, tenant_id, checklist_id, lote_id,
|
||||
inspection_date, status,
|
||||
inspector_id, approved_by, approved_at,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0007-000000000401', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', '00000000-0000-0000-0004-000000000601',
|
||||
'2024-03-28', 'approved',
|
||||
'00000000-0000-0000-0002-000000000110',
|
||||
'00000000-0000-0000-0002-000000000103', '2024-03-29',
|
||||
NOW(), '00000000-0000-0000-0002-000000000110'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000402', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000204', '00000000-0000-0000-0004-000000000601',
|
||||
'2024-05-15', 'approved',
|
||||
'00000000-0000-0000-0002-000000000110',
|
||||
'00000000-0000-0000-0002-000000000103', '2024-05-16',
|
||||
NOW(), '00000000-0000-0000-0002-000000000110'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000403', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0007-000000000201', '00000000-0000-0000-0004-000000000603',
|
||||
'2024-04-25', 'in_review',
|
||||
'00000000-0000-0000-0002-000000000110', NULL, NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 6. TICKETS POSTVENTA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO construction.tickets_postventa (
|
||||
id, tenant_id, lote_id,
|
||||
ticket_number, reported_date, category, description, priority, status,
|
||||
assigned_to, resolution, resolved_at,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0007-000000000501', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000601',
|
||||
'TKT-2024-001', '2024-06-01', 'Plomería',
|
||||
'Fuga de agua en llave de lavabo del baño principal',
|
||||
'medium', 'closed',
|
||||
'00000000-0000-0000-0002-000000000105',
|
||||
'Se reemplazó empaque de llave. Fuga corregida.',
|
||||
'2024-06-03',
|
||||
NOW(), '00000000-0000-0000-0002-000000000112'),
|
||||
|
||||
('00000000-0000-0000-0007-000000000502', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000602',
|
||||
'TKT-2024-002', '2024-06-10', 'Electricidad',
|
||||
'Apagador de recámara 2 no funciona correctamente',
|
||||
'low', 'open',
|
||||
NULL, NULL, NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000112')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
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.avances_obra;
|
||||
SELECT COUNT(*) INTO v_bitacora FROM construction.bitacora_obra;
|
||||
SELECT COUNT(*) INTO v_checklists FROM construction.checklists;
|
||||
SELECT COUNT(*) INTO v_inspecciones FROM construction.inspecciones;
|
||||
SELECT COUNT(*) INTO v_tickets FROM construction.tickets_postventa;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 07 - AVANCES Y CALIDAD - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Avances de obra: %', v_avances;
|
||||
RAISE NOTICE 'Entradas de bitácora: %', v_bitacora;
|
||||
RAISE NOTICE 'Checklists: %', v_checklists;
|
||||
RAISE NOTICE 'Inspecciones: %', v_inspecciones;
|
||||
RAISE NOTICE 'Tickets postventa: %', v_tickets;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 07
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
259
seeds/dev/08-hse.sql
Normal file
259
seeds/dev/08-hse.sql
Normal file
@ -0,0 +1,259 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 08: HSE (SEGURIDAD, SALUD Y AMBIENTE)
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: EPP, incidentes, capacitaciones, inspecciones HSE, permisos
|
||||
-- Dependencias: 02-users-profiles.sql, 04-proyectos-obras.sql
|
||||
-- Nota: Los seeds de normas_stps y residuos_catalogo ya existen en el DDL
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs: 00000000-0000-0000-0008-XXXXXXXXXXXX
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. CATÁLOGO DE EPP
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO hse.epp_catalogo (
|
||||
id, tenant_id, codigo, nombre, categoria, descripcion,
|
||||
vida_util_dias, requiere_certificacion, activo,
|
||||
created_at
|
||||
) VALUES
|
||||
-- Cabeza
|
||||
('00000000-0000-0000-0008-000000000001', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-001', 'Casco de seguridad tipo I', 'cabeza',
|
||||
'Casco de polietileno de alta densidad con suspensión ajustable',
|
||||
730, true, true, NOW()),
|
||||
|
||||
-- Ojos
|
||||
('00000000-0000-0000-0008-000000000002', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-002', 'Lentes de seguridad transparentes', 'ojos',
|
||||
'Lentes de policarbonato con protección UV',
|
||||
365, false, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000003', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-003', 'Goggles de seguridad', 'ojos',
|
||||
'Goggles sellados para protección contra polvo y salpicaduras',
|
||||
365, false, true, NOW()),
|
||||
|
||||
-- Auditiva
|
||||
('00000000-0000-0000-0008-000000000004', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-004', 'Tapones auditivos desechables', 'auditiva',
|
||||
'Tapones de espuma NRR 32dB',
|
||||
1, false, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000005', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-005', 'Orejeras de copa', 'auditiva',
|
||||
'Orejeras con NRR 28dB para uso continuo',
|
||||
730, false, true, NOW()),
|
||||
|
||||
-- Respiratoria
|
||||
('00000000-0000-0000-0008-000000000006', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-006', 'Mascarilla N95', 'respiratoria',
|
||||
'Respirador N95 para partículas',
|
||||
30, false, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000007', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-007', 'Respirador de media cara', 'respiratoria',
|
||||
'Respirador reutilizable con cartuchos intercambiables',
|
||||
365, true, true, NOW()),
|
||||
|
||||
-- Manos
|
||||
('00000000-0000-0000-0008-000000000008', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-008', 'Guantes de carnaza', 'manos',
|
||||
'Guantes de carnaza para trabajo general',
|
||||
90, false, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000009', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-009', 'Guantes de nitrilo', 'manos',
|
||||
'Guantes desechables de nitrilo',
|
||||
1, false, true, NOW()),
|
||||
|
||||
-- Pies
|
||||
('00000000-0000-0000-0008-000000000010', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-010', 'Botas de seguridad con casquillo', 'pies',
|
||||
'Botas de cuero con casquillo de acero',
|
||||
365, true, true, NOW()),
|
||||
|
||||
-- Caídas
|
||||
('00000000-0000-0000-0008-000000000011', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-011', 'Arnés de cuerpo completo', 'caidas',
|
||||
'Arnés con 5 puntos de anclaje para trabajos en altura',
|
||||
1825, true, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000012', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-012', 'Línea de vida retráctil', 'caidas',
|
||||
'Línea de vida autorretráctil de 15m',
|
||||
1825, true, true, NOW()),
|
||||
|
||||
-- Ropa
|
||||
('00000000-0000-0000-0008-000000000013', '00000000-0000-0000-0003-000000000001',
|
||||
'EPP-013', 'Chaleco de alta visibilidad', 'ropa',
|
||||
'Chaleco reflejante clase 2',
|
||||
365, false, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. CAPACITACIONES
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO hse.capacitacion (
|
||||
id, tenant_id, codigo, nombre, tipo, descripcion,
|
||||
duracion_horas, requiere_evaluacion, puntaje_minimo, activo,
|
||||
created_at
|
||||
) VALUES
|
||||
('00000000-0000-0000-0008-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-IND-001', 'Inducción de Seguridad', 'induccion',
|
||||
'Curso de inducción obligatorio para todo el personal nuevo',
|
||||
4, true, 80, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-ALT-001', 'Trabajo en Alturas NOM-009', 'especifica',
|
||||
'Capacitación para trabajos en altura según NOM-009-STPS',
|
||||
8, true, 85, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-ELE-001', 'Seguridad Eléctrica NOM-029', 'especifica',
|
||||
'Capacitación en seguridad eléctrica según NOM-029-STPS',
|
||||
8, true, 85, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-INC-001', 'Prevención de Incendios', 'especifica',
|
||||
'Uso de extintores y prevención de incendios',
|
||||
4, true, 80, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000105', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-EPP-001', 'Uso correcto de EPP', 'especifica',
|
||||
'Selección, uso y mantenimiento de equipo de protección personal',
|
||||
2, true, 80, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000106', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-MAQ-001', 'Operación de Maquinaria Pesada', 'certificacion',
|
||||
'Certificación para operadores de maquinaria pesada',
|
||||
16, true, 90, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000107', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-PAU-001', 'Primeros Auxilios', 'especifica',
|
||||
'Curso básico de primeros auxilios',
|
||||
8, true, 80, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0008-000000000108', '00000000-0000-0000-0003-000000000001',
|
||||
'CAP-ESC-001', 'Espacios Confinados', 'especifica',
|
||||
'Procedimientos para trabajos en espacios confinados',
|
||||
8, true, 85, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. INCIDENTES (Histórico demo)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO hse.incidentes (
|
||||
id, tenant_id, fraccionamiento_id,
|
||||
folio, fecha_hora, tipo, gravedad, descripcion, ubicacion_descripcion,
|
||||
estado, acciones_inmediatas,
|
||||
investigado_por, fecha_cierre,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0008-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'INC-2024-001', '2024-04-15 10:30:00', 'casi_accidente', 'leve',
|
||||
'Trabajador casi resbala en zona de excavación por lluvia reciente',
|
||||
'Manzana A, zona de excavación lote A-05',
|
||||
'cerrado',
|
||||
'Se colocaron señalamientos de precaución y se suspendió trabajo en la zona',
|
||||
'00000000-0000-0000-0002-000000000109', '2024-04-16',
|
||||
NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
|
||||
('00000000-0000-0000-0008-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'INC-2024-002', '2024-05-02 14:15:00', 'incidente', 'moderado',
|
||||
'Caída de material desde andamio sin causar lesiones',
|
||||
'Manzana B, lote B-03, segundo nivel',
|
||||
'cerrado',
|
||||
'Se aseguró el perímetro y se verificó fijación de materiales en andamios',
|
||||
'00000000-0000-0000-0002-000000000109', '2024-05-04',
|
||||
NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
|
||||
('00000000-0000-0000-0008-000000000203', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'INC-2024-003', '2024-05-10 09:45:00', 'accidente', 'leve',
|
||||
'Trabajador sufre cortada menor en mano por manejo de material',
|
||||
'Almacén de obra Las Palmas',
|
||||
'cerrado',
|
||||
'Se aplicaron primeros auxilios. Trabajador continuó labores con vendaje',
|
||||
'00000000-0000-0000-0002-000000000109', '2024-05-10',
|
||||
NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
|
||||
('00000000-0000-0000-0008-000000000204', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000102',
|
||||
'INC-2024-004', '2024-06-05 11:00:00', 'casi_accidente', 'moderado',
|
||||
'Herramienta cae desde nivel 4 sin impactar a nadie',
|
||||
'Torre Diamante, nivel 4',
|
||||
'en_investigacion',
|
||||
'Se acordonó la zona y se reforzó protocolo de aseguramiento de herramientas',
|
||||
'00000000-0000-0000-0002-000000000109', NULL,
|
||||
NOW(), '00000000-0000-0000-0002-000000000109')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. HORAS TRABAJADAS (Para cálculo de indicadores)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO hse.horas_trabajadas (
|
||||
id, tenant_id, fraccionamiento_id,
|
||||
fecha, trabajadores_directos, trabajadores_subcontrato,
|
||||
horas_directos, horas_subcontrato,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
-- Mayo 2024 - Las Palmas
|
||||
('00000000-0000-0000-0008-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-01', 25, 30, 200, 240, NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
('00000000-0000-0000-0008-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-02', 28, 32, 224, 256, NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
('00000000-0000-0000-0008-000000000303', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-03', 15, 18, 120, 144, NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
('00000000-0000-0000-0008-000000000304', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-04', 30, 35, 240, 280, NOW(), '00000000-0000-0000-0002-000000000109'),
|
||||
('00000000-0000-0000-0008-000000000305', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
'2024-05-05', 32, 38, 256, 304, NOW(), '00000000-0000-0000-0002-000000000109')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_epp INTEGER;
|
||||
v_capacitaciones INTEGER;
|
||||
v_incidentes INTEGER;
|
||||
v_horas INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_epp FROM hse.epp_catalogo;
|
||||
SELECT COUNT(*) INTO v_capacitaciones FROM hse.capacitacion;
|
||||
SELECT COUNT(*) INTO v_incidentes FROM hse.incidentes;
|
||||
SELECT COUNT(*) INTO v_horas FROM hse.horas_trabajadas;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 08 - HSE - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Catálogo EPP: %', v_epp;
|
||||
RAISE NOTICE 'Capacitaciones: %', v_capacitaciones;
|
||||
RAISE NOTICE 'Incidentes: %', v_incidentes;
|
||||
RAISE NOTICE 'Registros de horas: %', v_horas;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 08
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
379
seeds/dev/09-finanzas.sql
Normal file
379
seeds/dev/09-finanzas.sql
Normal file
@ -0,0 +1,379 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 09: FINANZAS Y CONTABILIDAD
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Catálogo de cuentas, cuentas bancarias, CxP, CxC, pólizas
|
||||
-- Dependencias: 03-empresa-tenant.sql, 06-estimaciones.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs: 00000000-0000-0000-0009-XXXXXXXXXXXX
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. CATÁLOGO DE CUENTAS CONTABLES (Simplificado SAT)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.chart_of_accounts (
|
||||
id, tenant_id, code, name, account_type, nature, status, level, parent_id,
|
||||
allows_direct_posting, created_at
|
||||
) VALUES
|
||||
-- ACTIVO (1)
|
||||
('00000000-0000-0000-0009-000000000001', '00000000-0000-0000-0003-000000000001',
|
||||
'1000', 'ACTIVO', 'asset', 'debit', 'active', 1, NULL, false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000002', '00000000-0000-0000-0003-000000000001',
|
||||
'1100', 'Activo Circulante', 'asset', 'debit', 'active', 2, '00000000-0000-0000-0009-000000000001', false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000003', '00000000-0000-0000-0003-000000000001',
|
||||
'1101', 'Caja', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000004', '00000000-0000-0000-0003-000000000001',
|
||||
'1102', 'Bancos', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000005', '00000000-0000-0000-0003-000000000001',
|
||||
'1103', 'Clientes', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000006', '00000000-0000-0000-0003-000000000001',
|
||||
'1104', 'Deudores Diversos', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000007', '00000000-0000-0000-0003-000000000001',
|
||||
'1105', 'Inventarios', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000008', '00000000-0000-0000-0003-000000000001',
|
||||
'1106', 'Anticipos a Proveedores', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000009', '00000000-0000-0000-0003-000000000001',
|
||||
'1107', 'IVA Acreditable', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000002', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000010', '00000000-0000-0000-0003-000000000001',
|
||||
'1200', 'Activo Fijo', 'asset', 'debit', 'active', 2, '00000000-0000-0000-0009-000000000001', false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000011', '00000000-0000-0000-0003-000000000001',
|
||||
'1201', 'Terrenos', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000010', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000012', '00000000-0000-0000-0003-000000000001',
|
||||
'1202', 'Edificios', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000010', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000013', '00000000-0000-0000-0003-000000000001',
|
||||
'1203', 'Maquinaria y Equipo', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000010', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000014', '00000000-0000-0000-0003-000000000001',
|
||||
'1204', 'Equipo de Transporte', 'asset', 'debit', 'active', 3, '00000000-0000-0000-0009-000000000010', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000015', '00000000-0000-0000-0003-000000000001',
|
||||
'1205', 'Depreciación Acumulada', 'asset', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000010', true, NOW()),
|
||||
|
||||
-- PASIVO (2)
|
||||
('00000000-0000-0000-0009-000000000020', '00000000-0000-0000-0003-000000000001',
|
||||
'2000', 'PASIVO', 'liability', 'credit', 'active', 1, NULL, false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000021', '00000000-0000-0000-0003-000000000001',
|
||||
'2100', 'Pasivo Circulante', 'liability', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000020', false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000022', '00000000-0000-0000-0003-000000000001',
|
||||
'2101', 'Proveedores', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000023', '00000000-0000-0000-0003-000000000001',
|
||||
'2102', 'Acreedores Diversos', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000024', '00000000-0000-0000-0003-000000000001',
|
||||
'2103', 'IVA por Pagar', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000025', '00000000-0000-0000-0003-000000000001',
|
||||
'2104', 'ISR por Pagar', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000026', '00000000-0000-0000-0003-000000000001',
|
||||
'2105', 'Retenciones por Pagar', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000027', '00000000-0000-0000-0003-000000000001',
|
||||
'2106', 'Anticipos de Clientes', 'liability', 'credit', 'active', 3, '00000000-0000-0000-0009-000000000021', true, NOW()),
|
||||
|
||||
-- CAPITAL (3)
|
||||
('00000000-0000-0000-0009-000000000030', '00000000-0000-0000-0003-000000000001',
|
||||
'3000', 'CAPITAL CONTABLE', 'equity', 'credit', 'active', 1, NULL, false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000031', '00000000-0000-0000-0003-000000000001',
|
||||
'3100', 'Capital Social', 'equity', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000030', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000032', '00000000-0000-0000-0003-000000000001',
|
||||
'3200', 'Utilidades Acumuladas', 'equity', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000030', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000033', '00000000-0000-0000-0003-000000000001',
|
||||
'3300', 'Utilidad del Ejercicio', 'equity', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000030', true, NOW()),
|
||||
|
||||
-- INGRESOS (4)
|
||||
('00000000-0000-0000-0009-000000000040', '00000000-0000-0000-0003-000000000001',
|
||||
'4000', 'INGRESOS', 'income', 'credit', 'active', 1, NULL, false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000041', '00000000-0000-0000-0003-000000000001',
|
||||
'4100', 'Ingresos por Obra', 'income', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000040', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000042', '00000000-0000-0000-0003-000000000001',
|
||||
'4200', 'Ingresos por Ventas', 'income', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000040', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000043', '00000000-0000-0000-0003-000000000001',
|
||||
'4300', 'Otros Ingresos', 'income', 'credit', 'active', 2, '00000000-0000-0000-0009-000000000040', true, NOW()),
|
||||
|
||||
-- GASTOS (5)
|
||||
('00000000-0000-0000-0009-000000000050', '00000000-0000-0000-0003-000000000001',
|
||||
'5000', 'COSTOS Y GASTOS', 'expense', 'debit', 'active', 1, NULL, false, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000051', '00000000-0000-0000-0003-000000000001',
|
||||
'5100', 'Costo de Obra', 'expense', 'debit', 'active', 2, '00000000-0000-0000-0009-000000000050', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000052', '00000000-0000-0000-0003-000000000001',
|
||||
'5200', 'Gastos de Administración', 'expense', 'debit', 'active', 2, '00000000-0000-0000-0009-000000000050', true, NOW()),
|
||||
|
||||
('00000000-0000-0000-0009-000000000053', '00000000-0000-0000-0003-000000000001',
|
||||
'5300', 'Gastos Financieros', 'expense', 'debit', 'active', 2, '00000000-0000-0000-0009-000000000050', true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. CUENTAS BANCARIAS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.bank_accounts (
|
||||
id, tenant_id, name, account_number, clabe, account_type, status,
|
||||
bank_name, bank_code, currency,
|
||||
initial_balance, current_balance, available_balance,
|
||||
ledger_account_id, is_default, allows_payments, allows_collections,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0009-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'Cuenta Principal BBVA', '0123456789', '012345678901234567', 'checking', 'active',
|
||||
'BBVA MEXICO', '012', 'MXN',
|
||||
5000000.00, 4250000.00, 4200000.00,
|
||||
'00000000-0000-0000-0009-000000000004', true, true, true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'Cuenta Nómina Banorte', '9876543210', '072987654321098765', 'checking', 'active',
|
||||
'BANORTE', '072', 'MXN',
|
||||
500000.00, 320000.00, 320000.00,
|
||||
'00000000-0000-0000-0009-000000000004', false, true, false,
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'Cuenta de Inversión Santander', '5555666677', '014555566667700001', 'investment', 'active',
|
||||
'SANTANDER', '014', 'MXN',
|
||||
2000000.00, 2050000.00, 0.00,
|
||||
'00000000-0000-0000-0009-000000000004', false, false, false,
|
||||
NOW(), '00000000-0000-0000-0002-000000000107')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. CUENTAS POR PAGAR
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.accounts_payable (
|
||||
id, tenant_id, document_number, document_type,
|
||||
supplier_id, supplier_name, supplier_rfc,
|
||||
status, invoice_date, due_date,
|
||||
subtotal, tax_amount, retention_amount, total_amount, paid_amount, balance,
|
||||
currency, payment_terms, payment_days,
|
||||
expense_account_id, project_id,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0009-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'FAC-PROV-001', 'invoice',
|
||||
'00000000-0000-0000-0004-000000000801', 'Cimientos del Norte S.A. de C.V.', 'CNO010101AAA',
|
||||
'paid', '2024-03-20', '2024-04-20',
|
||||
283500.00, 45360.00, 0.00, 328860.00, 328860.00, 0.00,
|
||||
'MXN', 'Neto 30 días', 30,
|
||||
'00000000-0000-0000-0009-000000000051', '00000000-0000-0000-0004-000000000101',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'FAC-PROV-002', 'invoice',
|
||||
'00000000-0000-0000-0004-000000000802', 'Electrificaciones AGS S.A. de C.V.', 'EAG010101BBB',
|
||||
'pending', '2024-05-20', '2024-06-20',
|
||||
254800.00, 40768.00, 0.00, 295568.00, 0.00, 295568.00,
|
||||
'MXN', 'Neto 30 días', 30,
|
||||
'00000000-0000-0000-0009-000000000051', '00000000-0000-0000-0004-000000000101',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000203', '00000000-0000-0000-0003-000000000001',
|
||||
'FAC-PROV-003', 'invoice',
|
||||
'00000000-0000-0000-0004-000000000803', 'Plomería Integral de Aguascalientes S.A. de C.V.', 'PIA010101CCC',
|
||||
'pending', '2024-05-25', '2024-06-25',
|
||||
180000.00, 28800.00, 0.00, 208800.00, 0.00, 208800.00,
|
||||
'MXN', 'Neto 30 días', 30,
|
||||
'00000000-0000-0000-0009-000000000051', '00000000-0000-0000-0004-000000000101',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. CUENTAS POR COBRAR
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.accounts_receivable (
|
||||
id, tenant_id, document_number, document_type,
|
||||
customer_id, customer_name, customer_rfc,
|
||||
status, invoice_date, due_date,
|
||||
subtotal, tax_amount, retention_amount, total_amount, collected_amount, balance,
|
||||
currency, payment_terms, payment_days,
|
||||
income_account_id, project_id,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0009-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'FAC-CLT-001', 'estimation',
|
||||
'00000000-0000-0000-0002-000000000112', 'Cliente Demo', 'XAXX010101000',
|
||||
'collected', '2024-04-01', '2024-04-30',
|
||||
1900000.00, 304000.00, 0.00, 2204000.00, 2204000.00, 0.00,
|
||||
'MXN', 'Neto 30 días', 30,
|
||||
'00000000-0000-0000-0009-000000000042', '00000000-0000-0000-0004-000000000101',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'FAC-CLT-002', 'estimation',
|
||||
'00000000-0000-0000-0002-000000000112', 'Cliente Demo', 'XAXX010101000',
|
||||
'pending', '2024-05-15', '2024-06-15',
|
||||
1880000.00, 300800.00, 0.00, 2180800.00, 0.00, 2180800.00,
|
||||
'MXN', 'Neto 30 días', 30,
|
||||
'00000000-0000-0000-0009-000000000042', '00000000-0000-0000-0004-000000000101',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. PÓLIZAS CONTABLES (Ejemplo balanceado)
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.accounting_entries (
|
||||
id, tenant_id, entry_number, entry_type, entry_date, status,
|
||||
description, fiscal_year, fiscal_period,
|
||||
total_debit, total_credit, is_balanced,
|
||||
currency, exchange_rate, posted_at, posted_by_id,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-0009-000000000401', '00000000-0000-0000-0003-000000000001',
|
||||
'POL-2024-001', 'purchase', '2024-03-20', 'posted',
|
||||
'Registro factura proveedor cimentaciones', 2024, 3,
|
||||
328860.00, 328860.00, true,
|
||||
'MXN', 1.0, '2024-03-20', '00000000-0000-0000-0002-000000000107',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000402', '00000000-0000-0000-0003-000000000001',
|
||||
'POL-2024-002', 'payment', '2024-04-15', 'posted',
|
||||
'Pago a proveedor cimentaciones', 2024, 4,
|
||||
328860.00, 328860.00, true,
|
||||
'MXN', 1.0, '2024-04-15', '00000000-0000-0000-0002-000000000107',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000403', '00000000-0000-0000-0003-000000000001',
|
||||
'POL-2024-003', 'sale', '2024-04-01', 'posted',
|
||||
'Facturación venta lote A-01', 2024, 4,
|
||||
2204000.00, 2204000.00, true,
|
||||
'MXN', 1.0, '2024-04-01', '00000000-0000-0000-0002-000000000107',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107'),
|
||||
|
||||
('00000000-0000-0000-0009-000000000404', '00000000-0000-0000-0003-000000000001',
|
||||
'POL-2024-004', 'collection', '2024-04-25', 'posted',
|
||||
'Cobro cliente lote A-01', 2024, 4,
|
||||
2204000.00, 2204000.00, true,
|
||||
'MXN', 1.0, '2024-04-25', '00000000-0000-0000-0002-000000000107',
|
||||
NOW(), '00000000-0000-0000-0002-000000000107')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 6. LÍNEAS DE PÓLIZA
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO finance.accounting_entry_lines (
|
||||
id, tenant_id, entry_id, line_number,
|
||||
account_id, account_code, description,
|
||||
debit, credit,
|
||||
created_at
|
||||
) VALUES
|
||||
-- POL-001: Compra
|
||||
('00000000-0000-0000-0009-000000000501', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000401', 1,
|
||||
'00000000-0000-0000-0009-000000000051', '5100', 'Costo de obra - Cimentación',
|
||||
283500.00, 0.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000502', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000401', 2,
|
||||
'00000000-0000-0000-0009-000000000009', '1107', 'IVA Acreditable',
|
||||
45360.00, 0.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000503', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000401', 3,
|
||||
'00000000-0000-0000-0009-000000000022', '2101', 'Proveedores',
|
||||
0.00, 328860.00, NOW()),
|
||||
|
||||
-- POL-002: Pago
|
||||
('00000000-0000-0000-0009-000000000504', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000402', 1,
|
||||
'00000000-0000-0000-0009-000000000022', '2101', 'Proveedores',
|
||||
328860.00, 0.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000505', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000402', 2,
|
||||
'00000000-0000-0000-0009-000000000004', '1102', 'Bancos',
|
||||
0.00, 328860.00, NOW()),
|
||||
|
||||
-- POL-003: Venta
|
||||
('00000000-0000-0000-0009-000000000506', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000403', 1,
|
||||
'00000000-0000-0000-0009-000000000005', '1103', 'Clientes',
|
||||
2204000.00, 0.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000507', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000403', 2,
|
||||
'00000000-0000-0000-0009-000000000042', '4200', 'Ingresos por Ventas',
|
||||
0.00, 1900000.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000508', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000403', 3,
|
||||
'00000000-0000-0000-0009-000000000024', '2103', 'IVA por Pagar',
|
||||
0.00, 304000.00, NOW()),
|
||||
|
||||
-- POL-004: Cobro
|
||||
('00000000-0000-0000-0009-000000000509', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000404', 1,
|
||||
'00000000-0000-0000-0009-000000000004', '1102', 'Bancos',
|
||||
2204000.00, 0.00, NOW()),
|
||||
('00000000-0000-0000-0009-000000000510', '00000000-0000-0000-0003-000000000001',
|
||||
'00000000-0000-0000-0009-000000000404', 2,
|
||||
'00000000-0000-0000-0009-000000000005', '1103', 'Clientes',
|
||||
0.00, 2204000.00, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_cuentas INTEGER;
|
||||
v_bancos INTEGER;
|
||||
v_cxp INTEGER;
|
||||
v_cxc INTEGER;
|
||||
v_polizas INTEGER;
|
||||
v_balance_check INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_cuentas FROM finance.chart_of_accounts;
|
||||
SELECT COUNT(*) INTO v_bancos FROM finance.bank_accounts;
|
||||
SELECT COUNT(*) INTO v_cxp FROM finance.accounts_payable;
|
||||
SELECT COUNT(*) INTO v_cxc FROM finance.accounts_receivable;
|
||||
SELECT COUNT(*) INTO v_polizas FROM finance.accounting_entries;
|
||||
|
||||
-- Verificar balance de pólizas
|
||||
SELECT COUNT(*) INTO v_balance_check
|
||||
FROM finance.accounting_entries e
|
||||
WHERE ABS(total_debit - total_credit) > 0.01;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 09 - FINANZAS - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Cuentas contables: %', v_cuentas;
|
||||
RAISE NOTICE 'Cuentas bancarias: %', v_bancos;
|
||||
RAISE NOTICE 'Cuentas por pagar: %', v_cxp;
|
||||
RAISE NOTICE 'Cuentas por cobrar: %', v_cxc;
|
||||
RAISE NOTICE 'Pólizas contables: %', v_polizas;
|
||||
RAISE NOTICE 'Pólizas desbalanceadas: % (debe ser 0)', v_balance_check;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 09
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
310
seeds/dev/10-activos-documentos.sql
Normal file
310
seeds/dev/10-activos-documentos.sql
Normal file
@ -0,0 +1,310 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- SEED 10: ACTIVOS Y DOCUMENTOS
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- Proyecto: ERP Construcción
|
||||
-- Autor: Claude Opus 4.5
|
||||
-- Fecha: 2026-02-03
|
||||
-- Descripción: Equipos, maquinaria, mantenimientos, categorías y documentos
|
||||
-- Dependencias: 03-empresa-tenant.sql, 04-proyectos-obras.sql
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
-- UUIDs: 00000000-0000-0000-000a-XXXXXXXXXXXX
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 1. CATEGORÍAS DE ACTIVOS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO assets.asset_categories (
|
||||
id, tenant_id, code, name, description, parent_id, is_active,
|
||||
created_at
|
||||
) VALUES
|
||||
('00000000-0000-0000-000a-000000000001', '00000000-0000-0000-0003-000000000001',
|
||||
'MAQ', 'Maquinaria Pesada', 'Equipos de excavación y movimiento de tierra', NULL, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000002', '00000000-0000-0000-0003-000000000001',
|
||||
'VEH', 'Vehículos', 'Unidades de transporte', NULL, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000003', '00000000-0000-0000-0003-000000000001',
|
||||
'HER', 'Herramienta', 'Herramienta menor y equipo portátil', NULL, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000004', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU', 'Equipo de Construcción', 'Equipo especializado de construcción', NULL, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000005', '00000000-0000-0000-0003-000000000001',
|
||||
'OFI', 'Equipo de Oficina', 'Mobiliario y equipo de oficina', NULL, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 2. ACTIVOS / EQUIPOS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO assets.assets (
|
||||
id, tenant_id, asset_code, name, category_id,
|
||||
asset_type, status, ownership_type,
|
||||
brand, model, serial_number, year_manufactured,
|
||||
purchase_date, purchase_price,
|
||||
current_hours, current_kilometers,
|
||||
fuel_capacity, fuel_consumption_rate,
|
||||
useful_life_years, depreciation_method,
|
||||
current_project_id,
|
||||
is_active, created_at, created_by
|
||||
) VALUES
|
||||
-- Maquinaria pesada
|
||||
('00000000-0000-0000-000a-000000000101', '00000000-0000-0000-0003-000000000001',
|
||||
'MAQ-001', 'Retroexcavadora CAT 420F2', '00000000-0000-0000-000a-000000000001',
|
||||
'heavy_machinery', 'assigned', 'owned',
|
||||
'Caterpillar', '420F2', 'CAT420F2-2022-12345', 2022,
|
||||
'2022-06-15', 1850000.00,
|
||||
2500, NULL, 200, 12.5, 10, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000102', '00000000-0000-0000-0003-000000000001',
|
||||
'MAQ-002', 'Excavadora CAT 320', '00000000-0000-0000-000a-000000000001',
|
||||
'heavy_machinery', 'assigned', 'owned',
|
||||
'Caterpillar', '320', 'CAT320-2021-67890', 2021,
|
||||
'2021-03-20', 3200000.00,
|
||||
4200, NULL, 400, 25.0, 10, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000103', '00000000-0000-0000-0003-000000000001',
|
||||
'MAQ-003', 'Cargador Frontal 966M', '00000000-0000-0000-000a-000000000001',
|
||||
'heavy_machinery', 'available', 'leased',
|
||||
'Caterpillar', '966M', 'CAT966M-2023-11111', 2023,
|
||||
'2024-01-01', NULL,
|
||||
800, NULL, 350, 22.0, NULL, NULL,
|
||||
NULL,
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
-- Vehículos
|
||||
('00000000-0000-0000-000a-000000000104', '00000000-0000-0000-0003-000000000001',
|
||||
'VEH-001', 'Camioneta Nissan NP300', '00000000-0000-0000-000a-000000000002',
|
||||
'vehicle', 'assigned', 'owned',
|
||||
'Nissan', 'NP300 Frontier', 'NISSNP300-2023-XXXXX', 2023,
|
||||
'2023-02-10', 450000.00,
|
||||
NULL, 35000, 80, 10.5, 5, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000105', '00000000-0000-0000-0003-000000000001',
|
||||
'VEH-002', 'Camión Volteo Kenworth', '00000000-0000-0000-000a-000000000002',
|
||||
'vehicle', 'assigned', 'owned',
|
||||
'Kenworth', 'T800', 'KENT800-2020-YYYYY', 2020,
|
||||
'2020-08-15', 1200000.00,
|
||||
NULL, 125000, 300, 3.5, 10, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
-- Equipo de construcción
|
||||
('00000000-0000-0000-000a-000000000106', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU-001', 'Revolvedora de concreto', '00000000-0000-0000-000a-000000000004',
|
||||
'light_equipment', 'assigned', 'owned',
|
||||
'Cipsa', 'Ultra 10', 'CIPSA-U10-2022-001', 2022,
|
||||
'2022-04-01', 85000.00,
|
||||
1200, NULL, 15, 4.0, 8, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000107', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU-002', 'Vibrador de concreto', '00000000-0000-0000-000a-000000000004',
|
||||
'light_equipment', 'assigned', 'owned',
|
||||
'Wacker', 'M2500', 'WACKER-M2500-2023-002', 2023,
|
||||
'2023-05-15', 25000.00,
|
||||
600, NULL, NULL, 2.0, 5, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000108', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU-003', 'Placa vibradora', '00000000-0000-0000-000a-000000000004',
|
||||
'light_equipment', 'available', 'owned',
|
||||
'Wacker', 'WP1550', 'WACKER-WP1550-2022-003', 2022,
|
||||
'2022-07-20', 45000.00,
|
||||
800, NULL, 8, 3.5, 8, 'straight_line',
|
||||
NULL,
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000109', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU-004', 'Cortadora de concreto', '00000000-0000-0000-000a-000000000004',
|
||||
'light_equipment', 'in_maintenance', 'owned',
|
||||
'Stihl', 'TS 800', 'STIHL-TS800-2021-004', 2021,
|
||||
'2021-11-10', 35000.00,
|
||||
1500, NULL, 1.5, 2.5, 5, 'straight_line',
|
||||
NULL,
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000110', '00000000-0000-0000-0003-000000000001',
|
||||
'EQU-005', 'Andamio tubular (lote 20 pzas)', '00000000-0000-0000-000a-000000000004',
|
||||
'tool', 'assigned', 'owned',
|
||||
'Scaffolding', 'Standard', 'SCAF-STD-2022-LOT01', 2022,
|
||||
'2022-03-01', 120000.00,
|
||||
NULL, NULL, NULL, NULL, 10, 'straight_line',
|
||||
'00000000-0000-0000-0004-000000000101',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 3. PLANES DE MANTENIMIENTO
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO assets.maintenance_plans (
|
||||
id, tenant_id, plan_code, name,
|
||||
asset_id, maintenance_type, frequency,
|
||||
estimated_duration_hours, estimated_cost,
|
||||
tasks_description, is_active,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-000a-000000000201', '00000000-0000-0000-0003-000000000001',
|
||||
'PM-MAQ-001', 'Mantenimiento preventivo retroexcavadora',
|
||||
'00000000-0000-0000-000a-000000000101', 'preventive', 'monthly',
|
||||
4, 15000.00,
|
||||
'Cambio de aceite, filtros, revisión de niveles, inspección de mangueras',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000202', '00000000-0000-0000-0003-000000000001',
|
||||
'PM-MAQ-002', 'Mantenimiento 500 horas excavadora',
|
||||
'00000000-0000-0000-000a-000000000102', 'preventive', 'by_hours',
|
||||
8, 35000.00,
|
||||
'Servicio mayor: cambio de aceites, filtros, revisión de sistema hidráulico',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000203', '00000000-0000-0000-0003-000000000001',
|
||||
'PM-VEH-001', 'Servicio camioneta 10,000 km',
|
||||
'00000000-0000-0000-000a-000000000104', 'preventive', 'by_kilometers',
|
||||
2, 5000.00,
|
||||
'Cambio de aceite, filtros, revisión de frenos y suspensión',
|
||||
true, NOW(), '00000000-0000-0000-0002-000000000106')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 4. CATEGORÍAS DE DOCUMENTOS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO documents.document_categories (
|
||||
id, tenant_id, code, name, description, parent_id, level, is_active,
|
||||
created_at
|
||||
) VALUES
|
||||
('00000000-0000-0000-000a-000000000301', '00000000-0000-0000-0003-000000000001',
|
||||
'PLANOS', 'Planos', 'Planos arquitectónicos y de ingeniería', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000302', '00000000-0000-0000-0003-000000000001',
|
||||
'PERMISOS', 'Permisos y Licencias', 'Permisos de construcción y licencias', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000303', '00000000-0000-0000-0003-000000000001',
|
||||
'CONTRATOS', 'Contratos', 'Contratos y addendas', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000304', '00000000-0000-0000-0003-000000000001',
|
||||
'FACTURAS', 'Facturas y Comprobantes', 'CFDIs y comprobantes fiscales', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000305', '00000000-0000-0000-0003-000000000001',
|
||||
'ESTIMACIONES', 'Estimaciones', 'Estimaciones y generadores', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000306', '00000000-0000-0000-0003-000000000001',
|
||||
'SEGURIDAD', 'Documentos HSE', 'Documentación de seguridad e higiene', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000307', '00000000-0000-0000-0003-000000000001',
|
||||
'CALIDAD', 'Control de Calidad', 'Reportes e inspecciones de calidad', NULL, 1, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000308', '00000000-0000-0000-0003-000000000001',
|
||||
'GARANTIAS', 'Garantías', 'Garantías de equipos y materiales', NULL, 1, true, NOW()),
|
||||
|
||||
-- Subcategorías de Planos
|
||||
('00000000-0000-0000-000a-000000000311', '00000000-0000-0000-0003-000000000001',
|
||||
'PLANOS-ARQ', 'Planos Arquitectónicos', 'Planos de arquitectura', '00000000-0000-0000-000a-000000000301', 2, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000312', '00000000-0000-0000-0003-000000000001',
|
||||
'PLANOS-EST', 'Planos Estructurales', 'Planos de estructura', '00000000-0000-0000-000a-000000000301', 2, true, NOW()),
|
||||
|
||||
('00000000-0000-0000-000a-000000000313', '00000000-0000-0000-0003-000000000001',
|
||||
'PLANOS-INS', 'Planos de Instalaciones', 'Planos de instalaciones', '00000000-0000-0000-000a-000000000301', 2, true, NOW())
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- 5. DOCUMENTOS
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
INSERT INTO documents.documents (
|
||||
id, tenant_id, document_code, title, category_id,
|
||||
document_type, status, access_level,
|
||||
author, document_date,
|
||||
project_id, description,
|
||||
requires_approval, is_locked,
|
||||
created_at, created_by
|
||||
) VALUES
|
||||
('00000000-0000-0000-000a-000000000401', '00000000-0000-0000-0003-000000000001',
|
||||
'DOC-PALMAS-001', 'Plano Arquitectónico General - Las Palmas E1', '00000000-0000-0000-000a-000000000311',
|
||||
'plan', 'approved', 'internal',
|
||||
'Arq. Juan Pérez', '2024-01-15',
|
||||
'00000000-0000-0000-0004-000000000101', 'Plano general de distribución Etapa 1',
|
||||
true, true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000402', '00000000-0000-0000-0003-000000000001',
|
||||
'DOC-PALMAS-002', 'Plano Estructural Cimentación - Las Palmas E1', '00000000-0000-0000-000a-000000000312',
|
||||
'plan', 'approved', 'internal',
|
||||
'Ing. Roberto García', '2024-01-20',
|
||||
'00000000-0000-0000-0004-000000000101', 'Plano de cimentación con detalles estructurales',
|
||||
true, true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000103'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000403', '00000000-0000-0000-0003-000000000001',
|
||||
'DOC-PALMAS-003', 'Licencia de Construcción Municipal', '00000000-0000-0000-000a-000000000302',
|
||||
'permit', 'approved', 'confidential',
|
||||
'Municipio de Aguascalientes', '2024-02-01',
|
||||
'00000000-0000-0000-0004-000000000101', 'Licencia de construcción vigente',
|
||||
false, true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000102'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000404', '00000000-0000-0000-0003-000000000001',
|
||||
'DOC-PALMAS-004', 'Contrato Subcontratista Cimentaciones', '00000000-0000-0000-000a-000000000303',
|
||||
'contract', 'approved', 'restricted',
|
||||
'Constructora Demo', '2024-02-28',
|
||||
'00000000-0000-0000-0004-000000000101', 'Contrato firmado con Cimientos del Norte',
|
||||
true, true,
|
||||
NOW(), '00000000-0000-0000-0002-000000000102'),
|
||||
|
||||
('00000000-0000-0000-000a-000000000405', '00000000-0000-0000-0003-000000000001',
|
||||
'DOC-PALMAS-005', 'Reporte de Inspección Calidad - Cimentación Lote A-01', '00000000-0000-0000-000a-000000000307',
|
||||
'report', 'approved', 'internal',
|
||||
'Diego Calidad Rodríguez', '2024-03-28',
|
||||
'00000000-0000-0000-0004-000000000101', 'Reporte de inspección de cimentación aprobado',
|
||||
true, false,
|
||||
NOW(), '00000000-0000-0000-0002-000000000110')
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
-- VERIFICACIÓN
|
||||
-- ─────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
v_categorias_activos INTEGER;
|
||||
v_activos INTEGER;
|
||||
v_planes_mant INTEGER;
|
||||
v_categorias_docs INTEGER;
|
||||
v_documentos INTEGER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_categorias_activos FROM assets.asset_categories;
|
||||
SELECT COUNT(*) INTO v_activos FROM assets.assets;
|
||||
SELECT COUNT(*) INTO v_planes_mant FROM assets.maintenance_plans;
|
||||
SELECT COUNT(*) INTO v_categorias_docs FROM documents.document_categories;
|
||||
SELECT COUNT(*) INTO v_documentos FROM documents.documents;
|
||||
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'SEED 10 - ACTIVOS Y DOCUMENTOS - COMPLETADO';
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
RAISE NOTICE 'Categorías de activos: %', v_categorias_activos;
|
||||
RAISE NOTICE 'Activos/Equipos: %', v_activos;
|
||||
RAISE NOTICE 'Planes de mantenimiento: %', v_planes_mant;
|
||||
RAISE NOTICE 'Categorías de documentos: %', v_categorias_docs;
|
||||
RAISE NOTICE 'Documentos: %', v_documentos;
|
||||
RAISE NOTICE '══════════════════════════════════════════════════════════════';
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- FIN SEED 10
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
141
seeds/dev/README.md
Normal file
141
seeds/dev/README.md
Normal file
@ -0,0 +1,141 @@
|
||||
# Seeds de Desarrollo - ERP Construcción
|
||||
|
||||
## Descripción
|
||||
|
||||
Este directorio contiene los seeds de desarrollo para el proyecto ERP Construcción. Los seeds crean datos de demostración que permiten probar todas las funcionalidades del sistema.
|
||||
|
||||
## Archivos de Seeds
|
||||
|
||||
| # | Archivo | Descripción | Registros Aprox. |
|
||||
|---|---------|-------------|------------------|
|
||||
| 01 | `01-core-catalogs.sql` | Unidades, monedas, impuestos, bancos, estados | ~100 |
|
||||
| 02 | `02-users-profiles.sql` | Roles, permisos, usuarios demo | ~250 |
|
||||
| 03 | `03-empresa-tenant.sql` | Tenant, sucursales, almacenes | ~25 |
|
||||
| 04 | `04-proyectos-obras.sql` | Proyectos, etapas, lotes, deptos, subcontratistas | ~100 |
|
||||
| 05 | `05-presupuestos.sql` | Conceptos, presupuestos, partidas | ~250 |
|
||||
| 06 | `06-estimaciones.sql` | Contratos, estimaciones, anticipos | ~30 |
|
||||
| 07 | `07-avances-calidad.sql` | Avances, bitácora, inspecciones, tickets | ~50 |
|
||||
| 08 | `08-hse.sql` | EPP, capacitaciones, incidentes | ~40 |
|
||||
| 09 | `09-finanzas.sql` | Cuentas, bancos, CxP, CxC, pólizas | ~60 |
|
||||
| 10 | `10-activos-documentos.sql` | Equipos, mantenimiento, documentos | ~35 |
|
||||
|
||||
**Total aproximado:** ~940 registros
|
||||
|
||||
## Requisitos Previos
|
||||
|
||||
1. Base de datos PostgreSQL 15+ creada
|
||||
2. DDL ejecutado (schemas creados)
|
||||
3. Credenciales configuradas
|
||||
|
||||
## Cómo Ejecutar
|
||||
|
||||
### Opción 1: Script Automatizado (Recomendado)
|
||||
|
||||
```bash
|
||||
# Desde Linux/WSL
|
||||
cd /path/to/erp-construccion/database/seeds/dev
|
||||
chmod +x load-dev-seeds.sh
|
||||
./load-dev-seeds.sh
|
||||
```
|
||||
|
||||
### Opción 2: Manual (Uno por uno)
|
||||
|
||||
```bash
|
||||
# Orden de ejecución obligatorio
|
||||
psql -U erp_admin -d erp_construccion_db -f 01-core-catalogs.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 02-users-profiles.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 03-empresa-tenant.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 04-proyectos-obras.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 05-presupuestos.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 06-estimaciones.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 07-avances-calidad.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 08-hse.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 09-finanzas.sql
|
||||
psql -U erp_admin -d erp_construccion_db -f 10-activos-documentos.sql
|
||||
```
|
||||
|
||||
### Opción 3: Desde Windows (PowerShell)
|
||||
|
||||
```powershell
|
||||
$env:PGPASSWORD="erp_dev_2026"
|
||||
Get-ChildItem *.sql | Sort-Object Name | ForEach-Object {
|
||||
Write-Host "Cargando: $($_.Name)"
|
||||
psql -h localhost -U erp_admin -d erp_construccion_db -f $_.FullName
|
||||
}
|
||||
```
|
||||
|
||||
## Usuarios Demo
|
||||
|
||||
| Rol | Email | Password | Descripción |
|
||||
|-----|-------|----------|-------------|
|
||||
| Super Admin | admin@demo.com | Demo2026! | Acceso total |
|
||||
| Director | director@demo.com | Demo2026! | Reportes y aprobaciones |
|
||||
| Gerente Obra | gerente1@demo.com | Demo2026! | Gestión de proyectos |
|
||||
| Residente | residente1@demo.com | Demo2026! | Operación diaria |
|
||||
| Supervisor | supervisor1@demo.com | Demo2026! | Control de campo |
|
||||
| Almacenista | almacen1@demo.com | Demo2026! | Inventarios |
|
||||
| Contador | contador1@demo.com | Demo2026! | Finanzas |
|
||||
| RRHH | rrhh1@demo.com | Demo2026! | Personal |
|
||||
| HSE | hse1@demo.com | Demo2026! | Seguridad |
|
||||
| Calidad | calidad1@demo.com | Demo2026! | Control calidad |
|
||||
| Comprador | comprador1@demo.com | Demo2026! | Compras |
|
||||
| Cliente | visor1@demo.com | Demo2026! | Solo lectura |
|
||||
|
||||
## Proyectos Demo
|
||||
|
||||
### 1. Residencial Las Palmas (Horizontal)
|
||||
- **Tipo:** Fraccionamiento horizontal
|
||||
- **Unidades:** 120 lotes planificados
|
||||
- **Etapas:** 3 (E1 en construcción)
|
||||
- **Estado:** En progreso
|
||||
|
||||
### 2. Torre Diamante (Vertical)
|
||||
- **Tipo:** Edificio de departamentos
|
||||
- **Unidades:** 48 departamentos
|
||||
- **Pisos:** 12 niveles
|
||||
- **Estado:** En progreso
|
||||
|
||||
### 3. Plaza Central (Comercial)
|
||||
- **Tipo:** Centro comercial
|
||||
- **Unidades:** 24 locales
|
||||
- **Etapas:** 2
|
||||
- **Estado:** En planeación
|
||||
|
||||
## Empresa Demo
|
||||
|
||||
- **Nombre:** Constructora Demo S.A. de C.V.
|
||||
- **RFC:** CDM010101ABC
|
||||
- **Ubicación:** Aguascalientes, México
|
||||
- **Sucursales:** 2 (Matriz + Obra Norte)
|
||||
- **Almacenes:** 4
|
||||
|
||||
## Dependencias de Seeds
|
||||
|
||||
```
|
||||
01-core-catalogs.sql (base)
|
||||
↓
|
||||
02-users-profiles.sql
|
||||
↓
|
||||
03-empresa-tenant.sql
|
||||
↓
|
||||
04-proyectos-obras.sql
|
||||
↓
|
||||
05-presupuestos.sql ←┬→ 07-avances-calidad.sql ←┬→ 08-hse.sql
|
||||
↓ │ │
|
||||
06-estimaciones.sql ←┘ │
|
||||
↓ │
|
||||
09-finanzas.sql ←───────────────────────────────┘
|
||||
↓
|
||||
10-activos-documentos.sql
|
||||
```
|
||||
|
||||
## Notas Técnicas
|
||||
|
||||
- Todos los UUIDs son determinísticos para reproducibilidad
|
||||
- Los seeds usan `ON CONFLICT DO NOTHING` para ser idempotentes
|
||||
- Cada seed incluye verificación de registros creados
|
||||
- Password hash es bcrypt con salt 10
|
||||
|
||||
## Soporte
|
||||
|
||||
Para reportar problemas o sugerencias, crear issue en el repositorio o contactar al equipo de desarrollo.
|
||||
109
seeds/dev/load-dev-seeds.sh
Normal file
109
seeds/dev/load-dev-seeds.sh
Normal file
@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# SCRIPT: load-dev-seeds.sh
|
||||
# PROYECTO: ERP Construcción
|
||||
# DESCRIPCIÓN: Carga todos los seeds de desarrollo en orden
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
set -e # Salir si hay error
|
||||
|
||||
# Configuración
|
||||
DB_HOST="${DB_HOST:-localhost}"
|
||||
DB_PORT="${DB_PORT:-5432}"
|
||||
DB_NAME="${DB_NAME:-erp_construccion_db}"
|
||||
DB_USER="${DB_USER:-erp_admin}"
|
||||
DB_PASSWORD="${DB_PASSWORD:-erp_dev_2026}"
|
||||
|
||||
# Colores para output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Directorio de seeds
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
echo -e "${BLUE}══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BLUE} CARGA DE SEEDS DE DESARROLLO - ERP CONSTRUCCIÓN${NC}"
|
||||
echo -e "${BLUE}══════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Base de datos: ${NC}${DB_NAME}"
|
||||
echo -e "${YELLOW}Host: ${NC}${DB_HOST}:${DB_PORT}"
|
||||
echo -e "${YELLOW}Usuario: ${NC}${DB_USER}"
|
||||
echo ""
|
||||
|
||||
# Función para ejecutar un seed
|
||||
run_seed() {
|
||||
local seed_file=$1
|
||||
local seed_name=$(basename "$seed_file")
|
||||
|
||||
if [ -f "$seed_file" ]; then
|
||||
echo -e "${YELLOW}→ Cargando: ${NC}${seed_name}..."
|
||||
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -f "$seed_file" -q
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN} ✓ ${seed_name} cargado correctamente${NC}"
|
||||
else
|
||||
echo -e "${RED} ✗ Error al cargar ${seed_name}${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED} ✗ Archivo no encontrado: ${seed_name}${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Verificar conexión
|
||||
echo -e "${YELLOW}Verificando conexión a la base de datos...${NC}"
|
||||
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "SELECT 1" > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}✗ No se pudo conectar a la base de datos${NC}"
|
||||
echo -e "${RED} Verifica las credenciales y que el servidor esté ejecutándose${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Conexión exitosa${NC}"
|
||||
echo ""
|
||||
|
||||
# Array de seeds en orden de ejecución
|
||||
SEEDS=(
|
||||
"01-core-catalogs.sql"
|
||||
"02-users-profiles.sql"
|
||||
"03-empresa-tenant.sql"
|
||||
"04-proyectos-obras.sql"
|
||||
"05-presupuestos.sql"
|
||||
"06-estimaciones.sql"
|
||||
"07-avances-calidad.sql"
|
||||
"08-hse.sql"
|
||||
"09-finanzas.sql"
|
||||
"10-activos-documentos.sql"
|
||||
)
|
||||
|
||||
# Ejecutar seeds
|
||||
echo -e "${BLUE}Iniciando carga de seeds...${NC}"
|
||||
echo ""
|
||||
|
||||
TOTAL=${#SEEDS[@]}
|
||||
CURRENT=0
|
||||
|
||||
for seed in "${SEEDS[@]}"; do
|
||||
CURRENT=$((CURRENT + 1))
|
||||
echo -e "${BLUE}[${CURRENT}/${TOTAL}]${NC}"
|
||||
run_seed "${SCRIPT_DIR}/${seed}"
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo -e "${BLUE}══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN} ✓ TODOS LOS SEEDS CARGADOS EXITOSAMENTE${NC}"
|
||||
echo -e "${BLUE}══════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Usuarios demo disponibles:${NC}"
|
||||
echo " - admin@demo.com / Demo2026! (Super Admin)"
|
||||
echo " - director@demo.com / Demo2026! (Director)"
|
||||
echo " - gerente1@demo.com / Demo2026! (Gerente Obra)"
|
||||
echo " - residente1@demo.com / Demo2026! (Residente)"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Proyectos demo:${NC}"
|
||||
echo " - Residencial Las Palmas (horizontal)"
|
||||
echo " - Torre Diamante (vertical)"
|
||||
echo " - Plaza Central (comercial)"
|
||||
echo ""
|
||||
375
seeds/dev/validate-seeds.sql
Normal file
375
seeds/dev/validate-seeds.sql
Normal file
@ -0,0 +1,375 @@
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- 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
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
Loading…
Reference in New Issue
Block a user