erp-clinicas-database-v2/seeds/fase8/02-clinica-catalogos.sql
rckrdmrd cf07a84e26 Migración desde erp-clinicas/database - Estándar multi-repo v2
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-16 08:12:00 -06:00

84 lines
4.5 KiB
SQL

-- ============================================================================
-- SEED DATA: Catálogos de Clínica
-- FASE-8 ERP-Core - ERP Clínicas
-- ============================================================================
-- NOTA: Ejecutar después de SET app.current_tenant_id = 'UUID-DEL-TENANT';
-- ============================================================================
-- Categorías de almacén para clínicas
INSERT INTO inventory.storage_categories (tenant_id, name, max_weight, allow_new_product,
requiere_refrigeracion, temperatura_min, temperatura_max, es_controlado, requiere_receta)
SELECT current_setting('app.current_tenant_id', true)::UUID, name, max_weight, allow_new_product,
requiere_refrigeracion, temperatura_min, temperatura_max, es_controlado, requiere_receta
FROM (VALUES
('Farmacia General', 5000.0, 'mixed', false, NULL, NULL, false, false),
('Refrigerados', 500.0, 'same', true, 2.0, 8.0, false, true),
('Medicamentos Controlados', 100.0, 'same', false, NULL, NULL, true, true),
('Material Quirúrgico', 1000.0, 'mixed', false, NULL, NULL, false, false),
('Insumos Laboratorio', 500.0, 'mixed', false, NULL, NULL, false, false),
('Vacunas', 200.0, 'same', true, 2.0, 8.0, false, true)
) AS t(name, max_weight, allow_new_product, requiere_refrigeracion, temperatura_min, temperatura_max, es_controlado, requiere_receta)
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
AND current_setting('app.current_tenant_id', true) != ''
ON CONFLICT DO NOTHING;
-- Tipos de paquete para medicamentos
INSERT INTO inventory.package_types (tenant_id, name, height, width, length, base_weight, max_weight, sequence)
SELECT current_setting('app.current_tenant_id', true)::UUID, name, height, width, length, base_weight, max_weight, seq
FROM (VALUES
('Caja Medicamentos', 20.0, 15.0, 10.0, 0.1, 2.0, 10),
('Blister', 15.0, 10.0, 1.0, 0.01, 0.1, 20),
('Frasco', 10.0, 5.0, 5.0, 0.05, 0.5, 30),
('Ampolleta', 8.0, 2.0, 2.0, 0.01, 0.05, 40),
('Bolsa Suero', 30.0, 20.0, 5.0, 0.1, 1.0, 50),
('Jeringa', 15.0, 3.0, 3.0, 0.02, 0.1, 60)
) AS t(name, height, width, length, base_weight, max_weight, seq)
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
AND current_setting('app.current_tenant_id', true) != ''
ON CONFLICT DO NOTHING;
-- Métodos de pago para clínicas
INSERT INTO financial.payment_methods (tenant_id, name, code, payment_type, aplica_seguro, requiere_factura, porcentaje_seguro)
SELECT current_setting('app.current_tenant_id', true)::UUID, name, code, payment_type::financial.payment_method_type, aplica_seguro, requiere_factura, porcentaje_seguro
FROM (VALUES
('Efectivo', 'efectivo', 'inbound', false, false, 0),
('Tarjeta Débito', 'td', 'inbound', false, false, 0),
('Tarjeta Crédito', 'tc', 'inbound', false, true, 0),
('Transferencia', 'transfer', 'inbound', false, true, 0),
('Seguro GMM', 'seguro_gmm', 'inbound', true, true, 80),
('Seguro GMA', 'seguro_gma', 'inbound', true, true, 70),
('Convenio Empresa', 'convenio', 'inbound', false, true, 0)
) AS t(name, code, payment_type, aplica_seguro, requiere_factura, porcentaje_seguro)
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
AND current_setting('app.current_tenant_id', true) != ''
ON CONFLICT (tenant_id, code) DO NOTHING;
-- Estructuras de nómina para clínicas
INSERT INTO hr.payslip_structures (tenant_id, name, code, tipo_pago)
SELECT current_setting('app.current_tenant_id', true)::UUID, name, code, tipo_pago
FROM (VALUES
('Nómina Quincenal', 'NOM-QUIN', 'quincenal'),
('Nómina Semanal', 'NOM-SEM', 'semanal'),
('Honorarios Médicos', 'HON-MED', 'honorarios'),
('Pago por Guardia', 'PAG-GUAR', 'guardia'),
('Comisión por Consulta', 'COM-CONS', 'comision')
) AS t(name, code, tipo_pago)
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
AND current_setting('app.current_tenant_id', true) != ''
ON CONFLICT (tenant_id, code) DO NOTHING;
-- Tipos de consultorio
INSERT INTO hr.work_locations (tenant_id, name, tipo_consultorio, capacidad)
SELECT current_setting('app.current_tenant_id', true)::UUID, name, tipo, capacidad
FROM (VALUES
('Consultorio 1', 'general', 1),
('Consultorio 2', 'general', 1),
('Consultorio Especialidad', 'especialidad', 1),
('Área de Urgencias', 'urgencias', 3),
('Laboratorio', 'laboratorio', 5),
('Farmacia', 'farmacia', 2)
) AS t(name, tipo, capacidad)
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
AND current_setting('app.current_tenant_id', true) != ''
ON CONFLICT DO NOTHING;