-- V6.8 Calendario laboral Venezuela para nómina
-- Compatible MariaDB/MySQL. No usa INSERT ... AS nuevo ni ON DUPLICATE KEY UPDATE.
-- Ejecutar solo si deseas crear/precargar manualmente las tablas sin esperar a entrar al PHP.

CREATE TABLE IF NOT EXISTS nomina_calendario_laboral (
    id INT AUTO_INCREMENT PRIMARY KEY,
    fecha DATE NOT NULL,
    anio SMALLINT NOT NULL,
    nombre VARCHAR(160) NOT NULL,
    tipo VARCHAR(40) NOT NULL DEFAULT 'NACIONAL',
    aplica_nomina TINYINT(1) NOT NULL DEFAULT 1,
    aplica_banco TINYINT(1) NOT NULL DEFAULT 0,
    fuente VARCHAR(180) NULL,
    base_legal VARCHAR(255) NULL,
    observacion TEXT NULL,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_fecha_tipo_nombre (fecha, tipo, nombre),
    KEY idx_fecha_activo (fecha, activo),
    KEY idx_anio (anio),
    KEY idx_aplica_nomina (aplica_nomina),
    KEY idx_aplica_banco (aplica_banco)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS nomina_corrida_calendario_snapshot (
    id INT AUTO_INCREMENT PRIMARY KEY,
    corrida_id INT NOT NULL,
    fecha DATE NOT NULL,
    nombre VARCHAR(160) NOT NULL,
    tipo VARCHAR(40) NOT NULL,
    aplica_nomina TINYINT(1) NOT NULL DEFAULT 1,
    aplica_banco TINYINT(1) NOT NULL DEFAULT 0,
    fuente VARCHAR(180) NULL,
    base_legal VARCHAR(255) NULL,
    es_domingo TINYINT(1) NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_corrida_fecha_nombre (corrida_id, fecha, nombre),
    KEY idx_corrida (corrida_id),
    KEY idx_fecha (fecha)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Feriados laborales nacionales Venezuela 2026: LOTTT art. 184 + fiestas nacionales usuales.
INSERT IGNORE INTO nomina_calendario_laboral
(fecha, anio, nombre, tipo, aplica_nomina, aplica_banco, fuente, base_legal, observacion, activo)
VALUES
('2026-01-01', 2026, 'Año Nuevo', 'NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', NULL, 1),
('2026-02-16', 2026, 'Lunes de Carnaval', 'RELIGIOSO_MOVIL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', 'Calculado según Semana Santa 2026', 1),
('2026-02-17', 2026, 'Martes de Carnaval', 'RELIGIOSO_MOVIL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', 'Calculado según Semana Santa 2026', 1),
('2026-04-02', 2026, 'Jueves Santo', 'RELIGIOSO_MOVIL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', 'Calculado según Semana Santa 2026', 1),
('2026-04-03', 2026, 'Viernes Santo', 'RELIGIOSO_MOVIL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', 'Calculado según Semana Santa 2026', 1),
('2026-04-19', 2026, 'Movimiento Precursor de la Independencia', 'FIESTA_NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'Ley de Fiestas Nacionales', NULL, 1),
('2026-05-01', 2026, 'Día del Trabajador', 'NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', NULL, 1),
('2026-06-24', 2026, 'Batalla de Carabobo', 'FIESTA_NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'Ley de Fiestas Nacionales', NULL, 1),
('2026-07-05', 2026, 'Día de la Independencia', 'FIESTA_NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'Ley de Fiestas Nacionales', NULL, 1),
('2026-07-24', 2026, 'Natalicio del Libertador', 'FIESTA_NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'Ley de Fiestas Nacionales', NULL, 1),
('2026-10-12', 2026, 'Día de la Resistencia Indígena', 'FIESTA_NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'Ley de Fiestas Nacionales', NULL, 1),
('2026-12-24', 2026, 'Víspera de Navidad', 'NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', NULL, 1),
('2026-12-25', 2026, 'Navidad', 'NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', NULL, 1),
('2026-12-31', 2026, 'Fin de Año', 'NACIONAL', 1, 1, 'Precarga RRHH Venezuela', 'LOTTT art. 184', NULL, 1);

-- Referencias bancarias 2026. No aplican nómina salvo que RRHH las active.
INSERT IGNORE INTO nomina_calendario_laboral
(fecha, anio, nombre, tipo, aplica_nomina, aplica_banco, fuente, base_legal, observacion, activo)
VALUES
('2026-01-06', 2026, 'Día de Reyes', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-03-19', 2026, 'San José', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-06-11', 2026, 'Corpus Christi', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-06-29', 2026, 'San Pedro y San Pablo', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-08-15', 2026, 'Asunción de Nuestra Señora', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-09-11', 2026, 'Virgen de Coromoto', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-11-02', 2026, 'Día de Todos los Santos', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1),
('2026-11-18', 2026, 'Virgen del Rosario de Chiquinquirá', 'BANCARIO_REFERENCIAL', 0, 1, 'BCV/SUDEBAN calendario bancario referencial', 'Feriado bancario; no equivale automáticamente a feriado laboral', NULL, 1);

SELECT anio, COUNT(*) AS eventos, SUM(aplica_nomina=1 AND activo=1) AS aplican_nomina, SUM(aplica_banco=1 AND activo=1) AS aplican_banco
FROM nomina_calendario_laboral
WHERE anio = 2026
GROUP BY anio;
