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