-- ============================================================
-- quoERP — Módulos RRHH y Nómina Ecuador
-- Migración: 014_hr_payroll_module.sql
-- Versión: 1.0.0 | Fecha: 2026-06-06
-- Cálculos según legislación ecuatoriana:
--   IESS empleado: 9.45% | IESS patronal: 12.15%
--   Décimo tercero (1/12 gross/mes) | Décimo cuarto (SBU/año)
--   Fondos de reserva: 8.33% (después del 1er año)
--   Vacaciones: 15 días/año mínimo
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ─────────────────────────────────────────────────────────────
-- MEJORA: employees — campos adicionales
-- ─────────────────────────────────────────────────────────────
ALTER TABLE employees
    ADD COLUMN IF NOT EXISTS nationality     VARCHAR(80)   DEFAULT 'Ecuatoriana',
    ADD COLUMN IF NOT EXISTS photo           VARCHAR(255)  DEFAULT NULL,
    ADD COLUMN IF NOT EXISTS emergency_name  VARCHAR(150)  DEFAULT NULL,
    ADD COLUMN IF NOT EXISTS emergency_phone VARCHAR(20)   DEFAULT NULL,
    ADD COLUMN IF NOT EXISTS notes           TEXT          DEFAULT NULL,
    ADD COLUMN IF NOT EXISTS vacation_days_taken DECIMAL(5,1) DEFAULT 0
        COMMENT 'Total de días de vacaciones tomados (histórico)',
    ADD INDEX IF NOT EXISTS idx_office (office_id);


-- ─────────────────────────────────────────────────────────────
-- TABLA: employee_vacations — Solicitudes y toma de vacaciones
-- Acumulación: 15 días/año (1.25 días/mes trabajado)
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS employee_vacations (
    id           INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    employee_id  INT UNSIGNED    NOT NULL,
    company_id   INT UNSIGNED    NOT NULL,
    type         ENUM('request','taken','adjustment') NOT NULL DEFAULT 'request',
    start_date   DATE            NOT NULL,
    end_date     DATE            NOT NULL,
    days         DECIMAL(5,1)    NOT NULL,
    reason       TEXT            DEFAULT NULL,
    status       ENUM('pending','approved','rejected','taken') NOT NULL DEFAULT 'pending',
    approved_by  INT UNSIGNED    DEFAULT NULL,
    approved_at  DATETIME        DEFAULT NULL,
    created_by   INT UNSIGNED    DEFAULT NULL,
    created_at   DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    INDEX idx_employee (employee_id),
    INDEX idx_company  (company_id),
    INDEX idx_status   (status),

    CONSTRAINT fk_ev_employee FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE,
    CONSTRAINT fk_ev_company  FOREIGN KEY (company_id)  REFERENCES companies(id)  ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Solicitudes y registros de vacaciones de empleados. 15 días/año Ecuador.';


-- ─────────────────────────────────────────────────────────────
-- TABLA: payroll_config — Parámetros de nómina por empresa
-- Configura las tasas y valores Ecuador vigentes por empresa.
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS payroll_config (
    id                    INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    company_id            INT UNSIGNED    NOT NULL,
    sbu                   DECIMAL(10,2)   NOT NULL DEFAULT 460.00
        COMMENT 'Salario Básico Unificado vigente (Ecuador 2025: $460)',
    iess_employee_rate    DECIMAL(7,5)    NOT NULL DEFAULT 0.09450
        COMMENT 'Aporte personal IESS (9.45%)',
    iess_employer_rate    DECIMAL(7,5)    NOT NULL DEFAULT 0.12150
        COMMENT 'Aporte patronal IESS (12.15%)',
    fondos_reserva_rate   DECIMAL(7,5)    NOT NULL DEFAULT 0.08330
        COMMENT 'Fondos de reserva (8.33%, aplica desde el 2do año)',
    vacation_days_year    TINYINT UNSIGNED NOT NULL DEFAULT 15
        COMMENT 'Días de vacación por año (mínimo 15 Ecuador)',
    decimo4_region        ENUM('sierra','costa') NOT NULL DEFAULT 'sierra'
        COMMENT 'Región para pago Décimo Cuarto: sierra=agosto, costa=abril',
    updated_at            DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uq_company (company_id),

    CONSTRAINT fk_pc_company FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Parámetros de nómina por empresa. Tasas IESS, SBU, vacaciones Ecuador.';


-- ─────────────────────────────────────────────────────────────
-- MEJORA: payroll_slips — campos adicionales para Ecuador
-- ─────────────────────────────────────────────────────────────
ALTER TABLE payroll_slips
    ADD COLUMN IF NOT EXISTS work_days      TINYINT UNSIGNED DEFAULT 30
        COMMENT 'Días trabajados en el período',
    ADD COLUMN IF NOT EXISTS salary_full    DECIMAL(10,2) DEFAULT 0
        COMMENT 'Sueldo completo del contrato (base de cálculo)',
    ADD COLUMN IF NOT EXISTS notes          TEXT DEFAULT NULL;


SET FOREIGN_KEY_CHECKS = 1;

-- ─────────────────────────────────────────────────────────────
-- FIN DE MIGRACIÓN
-- Tablas nuevas: employee_vacations, payroll_config
-- ALTER employees: nationality, photo, emergency_*, notes, vacation_days_taken
-- ALTER payroll_slips: work_days, salary_full, notes
-- ─────────────────────────────────────────────────────────────
