const Sequelize = require('sequelize');
var db = require("../database/db.js");

/**
 * ROTACION_DETALLE
 * Almacena los datos mensuales necesarios para calcular el índice de
 * rotación de personal, tal como aparece en la hoja DETALLE_ROTACION
 * del Excel de la Matriz de Rotación.
 *
 * Fórmula del índice de rotación utilizada por la empresa:
 *   INDICE_ROTACION = (NUM_SALIDAS / PROMEDIO_EMPLEADOS) * 100
 *
 * Nota: los movimientos individuales de salida siguen registrados en
 * HISTORIAL_EMPRESA (FECHA_SALIDA + MOTIVO_SALIDA).
 * Esta tabla guarda el resumen mensual para el dashboard.
 */
const RotacionDetalle = db.sequelize.define('ROTACION_DETALLE', {

    ID_DETALLE: {
        primaryKey: true,
        type: Sequelize.BIGINT,
        allowNull: false,
        autoIncrement: true
    },

    ANIO: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: 'Año del resumen mensual. Ej: 2025'
    },

    MES: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: 'Mes del resumen (1-12)'
    },

    // --- Plantilla del período ---
    EMPLEADOS_INICIO: {
        type: Sequelize.INTEGER,
        allowNull: true,
        defaultValue: 0,
        comment: 'Número de empleados al inicio del mes'
    },

    EMPLEADOS_TOTAL: {
        type: Sequelize.INTEGER,
        allowNull: true,
        defaultValue: 0,
        comment: 'Total de empleados contando ingresos del mes'
    },

    EMPLEADOS_FINAL: {
        type: Sequelize.INTEGER,
        allowNull: true,
        defaultValue: 0,
        comment: 'Número de empleados al cierre del mes'
    },

    PROMEDIO_EMPLEADOS: {
        type: Sequelize.DECIMAL(8, 2),
        allowNull: true,
        defaultValue: 0,
        comment: 'Promedio simple: (EMPLEADOS_INICIO + EMPLEADOS_FINAL) / 2'
    },

    // --- Salidas del período ---
    NUM_SALIDAS: {
        type: Sequelize.INTEGER,
        allowNull: true,
        defaultValue: 0,
        comment: 'Número de desvinculaciones ocurridas en el mes'
    },

    MOTIVO_SALIDA: {
        type: Sequelize.STRING(300),
        allowNull: true,
        comment: 'Motivo o motivos predominantes de salida en el mes. Ej: RENUNCIA VOLUNTARIA, DESAHUCIO'
    },

    AREA_AFECTADA: {
        type: Sequelize.STRING(200),
        allowNull: true,
        comment: 'Área o áreas con mayor rotación en el mes'
    },

    // --- Resultado calculado ---
    INDICE_ROTACION: {
        type: Sequelize.DECIMAL(8, 4),
        allowNull: true,
        comment: 'Índice de rotación calculado para el mes (porcentaje)'
    },

    OBSERVACION: {
        type: Sequelize.STRING(500),
        allowNull: true,
    },

    FECHA_REGISTRO: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW,
    },

},
    {
        timestamps: false,
        id: false
    });

module.exports = RotacionDetalle;
