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

/**
 * INDICADOR_MATRIZ
 * Tabla genérica para guardar los valores mensuales de los indicadores
 * de las 4 matrices de RRHH: AUSENTISMO, CAPACITACION, ROTACION, VACACIONES.
 *
 * Cada fila representa un punto de medición mensual de un indicador.
 * Los campos LCI, META y LCS corresponden a los límites de control
 * inferior, meta y límite de control superior respectivamente.
 *
 * Campos CALIFICACION y TENDENCIA complementan el semáforo del dashboard.
 */
const IndicadorMatriz = db.sequelize.define('INDICADOR_MATRIZ', {

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

    // Discriminador: qué matriz origina este indicador
    TIPO_INDICADOR: {
        type: Sequelize.STRING(50),
        allowNull: false,
        comment: 'AUSENTISMO | CAPACITACION | ROTACION | VACACIONES'
    },

    // Subtipo para cuando una misma matriz tiene varios indicadores
    // Ej: en CAPACITACION puede haber "EFICACIA_PROGRAMACION" y "COBERTURA_PARTICIPANTES"
    SUBTIPO_INDICADOR: {
        type: Sequelize.STRING(100),
        allowNull: true,
        comment: 'Nombre específico del indicador dentro del tipo. Ej: INDICE_AUSENTISMO_DIAS'
    },

    ANIO: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: 'Año de la medición. Ej: 2025'
    },

    MES: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: 'Mes de la medición (1-12)'
    },

    // --- Valor medido y bandas de control ---
    VALOR_MEDICION: {
        type: Sequelize.DECIMAL(10, 4),
        allowNull: true,
        comment: 'Valor calculado del indicador para el período'
    },

    LCI: {
        type: Sequelize.DECIMAL(10, 4),
        allowNull: true,
        comment: 'Límite de Control Inferior'
    },

    META: {
        type: Sequelize.DECIMAL(10, 4),
        allowNull: true,
        comment: 'Valor meta del indicador'
    },

    LCS: {
        type: Sequelize.DECIMAL(10, 4),
        allowNull: true,
        comment: 'Límite de Control Superior'
    },

    // --- Evaluación cualitativa ---
    CALIFICACION: {
        type: Sequelize.STRING(50),
        allowNull: true,
        comment: 'Ej: SATISFACTORIO, EN PROCESO, NO SATISFACTORIO'
    },

    TENDENCIA: {
        type: Sequelize.STRING(20),
        allowNull: true,
        comment: 'SUBE | BAJA | ESTABLE'
    },

    // --- Datos de seguimiento ---
    FECHA_PRESENTACION: {
        type: Sequelize.DATEONLY,
        allowNull: true,
        comment: 'Fecha en que se presentó el indicador a la gerencia'
    },

    ANALISIS: {
        type: Sequelize.TEXT,
        allowNull: true,
        comment: 'Análisis de causa del resultado obtenido'
    },

    ACCION_CORRECTIVA: {
        type: Sequelize.TEXT,
        allowNull: true,
        comment: 'Acción correctiva o preventiva planteada'
    },

    RESPONSABLE: {
        type: Sequelize.STRING(200),
        allowNull: true,
        comment: 'Responsable de la acción correctiva'
    },

    PLAZO: {
        type: Sequelize.DATEONLY,
        allowNull: true,
        comment: 'Fecha límite para la acción correctiva'
    },

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

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

module.exports = IndicadorMatriz;
