-- V6.9 - Validación auditoría calendario y parámetros legales.
-- Seguro: no borra datos. Inserta SOLO parámetros faltantes sin alterar valores existentes.

-- 1) Reforzar parámetros legales faltantes sin pisar valores configurados.
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'SALARIO_MINIMO_MENSUAL_VES', 'Salario mínimo mensual base legal', 'BASES', 130.000000, 'VES', '2026-01-01', 1, 'Valor editable. Se usa para topes IVSS/RPE. Actualizar cuando exista cambio oficial.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='SALARIO_MINIMO_MENSUAL_VES' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'IVSS_TRABAJADOR_TASA', 'IVSS trabajador', 'IVSS', 0.040000, 'TASA', '2026-01-01', 1, 'Retención trabajador.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='IVSS_TRABAJADOR_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'IVSS_PATRONO_RIESGO_TASA', 'IVSS patronal según riesgo', 'IVSS', 0.090000, 'TASA', '2026-01-01', 1, 'Riesgo mínimo por defecto: 9%. Cambiar a 10% o 11% si corresponde.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='IVSS_PATRONO_RIESGO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'IVSS_TOPE_SALARIOS_MINIMOS', 'Tope IVSS en salarios mínimos', 'IVSS', 5.000000, 'MULTIPLO', '2026-01-01', 1, 'Tope de cotización IVSS.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='IVSS_TOPE_SALARIOS_MINIMOS' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'RPE_TRABAJADOR_TASA', 'RPE trabajador', 'RPE', 0.005000, 'TASA', '2026-01-01', 1, '20% de la cotización total de 2,5%; equivale a 0,5%.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='RPE_TRABAJADOR_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'RPE_PATRONO_TASA', 'RPE patronal', 'RPE', 0.020000, 'TASA', '2026-01-01', 1, '80% de la cotización total de 2,5%; equivale a 2%.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='RPE_PATRONO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'RPE_TOPE_SALARIOS_MINIMOS', 'Tope RPE en salarios mínimos', 'RPE', 10.000000, 'MULTIPLO', '2026-01-01', 1, 'Tope superior de base RPE.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='RPE_TOPE_SALARIOS_MINIMOS' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'RPE_MIN_SALARIOS_MINIMOS', 'Mínimo RPE en salarios mínimos', 'RPE', 1.000000, 'MULTIPLO', '2026-01-01', 1, 'Tope inferior de base RPE.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='RPE_MIN_SALARIOS_MINIMOS' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'FAOV_TRABAJADOR_TASA', 'FAOV trabajador', 'FAOV', 0.010000, 'TASA', '2026-01-01', 1, 'Retención trabajador.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='FAOV_TRABAJADOR_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'FAOV_PATRONO_TASA', 'FAOV patronal', 'FAOV', 0.020000, 'TASA', '2026-01-01', 1, 'Aporte patronal.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='FAOV_PATRONO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'INCES_PATRONO_TASA', 'INCES patronal', 'INCES', 0.020000, 'TASA', '2026-01-01', 1, 'Aporte patronal causado sobre salario normal; su declaración suele ser trimestral.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='INCES_PATRONO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'INCES_TRABAJADOR_UTILIDADES_TASA', 'INCES trabajador sobre utilidades', 'INCES', 0.005000, 'TASA', '2026-01-01', 1, 'Retención sobre utilidades/bonificaciones de fin de año, no sobre nómina ordinaria.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='INCES_TRABAJADOR_UTILIDADES_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'PENSIONES_PATRONO_TASA', 'Ley Protección Pensiones patronal', 'PENSIONES', 0.090000, 'TASA', '2026-01-01', 1, 'Contribución especial patronal. Parametrizable por posible actualización anual.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='PENSIONES_PATRONO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'PENSIONES_BASE_MINIMA_USD', 'Base mínima mensual pensiones en USD', 'PENSIONES', 240.000000, 'USD', '2026-05-01', 1, 'Ingreso mínimo integral indexado referencial. Revisar/actualizar según obligación aplicable.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='PENSIONES_BASE_MINIMA_USD' AND vigencia_desde='2026-05-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'PENSIONES_APLICAR_BASE_MINIMA', 'Aplicar base mínima pensiones', 'PENSIONES', 1.000000, 'BOOLEAN', '2026-05-01', 1, '1 aplica base mínima mensual prorrateada por período; 0 usa solo pagos reales.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='PENSIONES_APLICAR_BASE_MINIMA' AND vigencia_desde='2026-05-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'BONO_NOCTURNO_TASA', 'Bono nocturno recargo legal', 'JORNADA', 0.300000, 'TASA', '2026-01-01', 1, 'Recargo mínimo 30% sobre salario normal/hora para jornada nocturna ordinaria. Art. 117 LOTTT.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='BONO_NOCTURNO_TASA' AND vigencia_desde='2026-01-01');
INSERT INTO nomina_parametros_legales (codigo, nombre, categoria, valor_decimal, unidad, vigencia_desde, activo, descripcion)
SELECT 'NOMINA_DIAS_BASE_MENSUAL', 'Días base mensual', 'BASES', 30.000000, 'DIAS', '2026-01-01', 1, 'Base de prorrata mensual para nómina.'
WHERE NOT EXISTS (SELECT 1 FROM nomina_parametros_legales WHERE codigo='NOMINA_DIAS_BASE_MENSUAL' AND vigencia_desde='2026-01-01');

-- 2) Revisión de parámetros faltantes.
SELECT 'PARAMETROS_ACTIVOS' AS revision, COUNT(*) AS total
FROM nomina_parametros_legales
WHERE activo = 1;

SELECT req.codigo AS parametro_faltante
FROM (
    SELECT 'SALARIO_MINIMO_MENSUAL_VES' codigo UNION ALL
    SELECT 'IVSS_TRABAJADOR_TASA' UNION ALL
    SELECT 'IVSS_PATRONO_RIESGO_TASA' UNION ALL
    SELECT 'IVSS_TOPE_SALARIOS_MINIMOS' UNION ALL
    SELECT 'RPE_TRABAJADOR_TASA' UNION ALL
    SELECT 'RPE_PATRONO_TASA' UNION ALL
    SELECT 'RPE_TOPE_SALARIOS_MINIMOS' UNION ALL
    SELECT 'RPE_MIN_SALARIOS_MINIMOS' UNION ALL
    SELECT 'FAOV_TRABAJADOR_TASA' UNION ALL
    SELECT 'FAOV_PATRONO_TASA' UNION ALL
    SELECT 'INCES_PATRONO_TASA' UNION ALL
    SELECT 'INCES_TRABAJADOR_UTILIDADES_TASA' UNION ALL
    SELECT 'PENSIONES_PATRONO_TASA' UNION ALL
    SELECT 'PENSIONES_BASE_MINIMA_USD' UNION ALL
    SELECT 'PENSIONES_APLICAR_BASE_MINIMA' UNION ALL
    SELECT 'BONO_NOCTURNO_TASA' UNION ALL
    SELECT 'NOMINA_DIAS_BASE_MENSUAL'
) req
LEFT JOIN nomina_parametros_legales p ON p.codigo = req.codigo AND p.activo = 1
WHERE p.id IS NULL;

-- 3) Revisión rápida de calendario congelado en corridas.
SELECT c.id AS corrida_id, c.estado, COUNT(cs.id) AS dias_calendario_congelados
FROM nomina_corridas c
LEFT JOIN nomina_corrida_calendario_snapshot cs ON cs.corrida_id = c.id
GROUP BY c.id, c.estado
ORDER BY c.id DESC;
