@eclass/grade-scales
Version:
Módulo para calcular notas en base a una escala.
54 lines • 6.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getGrade = exports.calcGrade = void 0;
const grades_1 = require("./grades");
/**
* Hace el cálculo de la nota en base al puntaje obtenido y el total con la Escala de notas
*
* @example const grade = calcGrade(scale, total, obtained)
*/
const calcGrade = (scale, total, obtained) => {
let grade = 0;
if (scale.passingPercentage > 0) {
const passingPercentage = scale.passingPercentage / 100;
const approveMinPoints = total * passingPercentage;
let weight;
let calcWeight;
if (obtained > approveMinPoints) {
weight = (scale.max - scale.passingGrade) / (total - approveMinPoints);
calcWeight = scale.max - weight * total;
}
else {
weight = (scale.passingGrade - scale.min) / approveMinPoints;
calcWeight = scale.passingGrade - weight * total * passingPercentage;
}
const prevGrade = weight * obtained + calcWeight;
grade = (100 * prevGrade) / 100;
}
else {
grade = (scale.max * obtained) / total;
}
return grade;
};
exports.calcGrade = calcGrade;
/**
* Recibe los puntajes y calcula la nota.
* - Si el puntaje obtenido es >= al total entonces asigna la nota máxima de la escala.
* - Si el puntaje obtenido es <= 0 entonces asigna la nota minima de la escala.
* - Si está en el rango > 0 y < total entonces calcula la nota considerando la ponderación.
*
* @example const grade = getGrade(scale, 10, 5)
*/
const getGrade = (scale, total, obtained) => {
if (obtained >= total) {
return scale.max;
}
else if (obtained <= 0) {
return scale.min;
}
else {
return (0, grades_1.gradeRound)(scale, (0, exports.calcGrade)(scale, total, obtained));
}
};
exports.getGrade = getGrade;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0R3JhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvZ2V0R3JhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXFDO0FBR3JDOzs7O0dBSUc7QUFDSSxNQUFNLFNBQVMsR0FBRyxDQUN2QixLQUFzQixFQUN0QixLQUFhLEVBQ2IsUUFBZ0IsRUFDUixFQUFFO0lBQ1YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2IsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO1FBQy9CLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQTtRQUN2RCxNQUFNLGdCQUFnQixHQUFHLEtBQUssR0FBRyxpQkFBaUIsQ0FBQTtRQUVsRCxJQUFJLE1BQWMsQ0FBQTtRQUNsQixJQUFJLFVBQWtCLENBQUE7UUFFdEIsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLEVBQUU7WUFDL0IsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQTtZQUN0RSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFBO1NBQ3hDO2FBQU07WUFDTCxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQTtZQUM1RCxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixDQUFBO1NBQ3JFO1FBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUE7UUFDaEQsS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtLQUNoQztTQUFNO1FBQ0wsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUE7S0FDdkM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMsQ0FBQTtBQTFCWSxRQUFBLFNBQVMsYUEwQnJCO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLE1BQU0sUUFBUSxHQUFHLENBQ3RCLEtBQXNCLEVBQ3RCLEtBQWEsRUFDYixRQUFnQixFQUNSLEVBQUU7SUFDVixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7UUFDckIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFBO0tBQ2pCO1NBQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtLQUNqQjtTQUFNO1FBQ0wsT0FBTyxJQUFBLG1CQUFVLEVBQUMsS0FBSyxFQUFFLElBQUEsaUJBQVMsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7S0FDNUQ7QUFDSCxDQUFDLENBQUE7QUFaWSxRQUFBLFFBQVEsWUFZcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncmFkZVJvdW5kIH0gZnJvbSAnLi9ncmFkZXMnXG5pbXBvcnQgeyBTY2FsZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3R5cGVzJ1xuXG4vKipcbiAqIEhhY2UgZWwgY8OhbGN1bG8gZGUgbGEgbm90YSBlbiBiYXNlIGFsIHB1bnRhamUgb2J0ZW5pZG8geSBlbCB0b3RhbCBjb24gbGEgRXNjYWxhIGRlIG5vdGFzXG4gKlxuICogQGV4YW1wbGUgY29uc3QgZ3JhZGUgPSBjYWxjR3JhZGUoc2NhbGUsIHRvdGFsLCBvYnRhaW5lZClcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGNHcmFkZSA9IChcbiAgc2NhbGU6IFNjYWxlQXR0cmlidXRlcyxcbiAgdG90YWw6IG51bWJlcixcbiAgb2J0YWluZWQ6IG51bWJlcixcbik6IG51bWJlciA9PiB7XG4gIGxldCBncmFkZSA9IDBcbiAgaWYgKHNjYWxlLnBhc3NpbmdQZXJjZW50YWdlID4gMCkge1xuICAgIGNvbnN0IHBhc3NpbmdQZXJjZW50YWdlID0gc2NhbGUucGFzc2luZ1BlcmNlbnRhZ2UgLyAxMDBcbiAgICBjb25zdCBhcHByb3ZlTWluUG9pbnRzID0gdG90YWwgKiBwYXNzaW5nUGVyY2VudGFnZVxuXG4gICAgbGV0IHdlaWdodDogbnVtYmVyXG4gICAgbGV0IGNhbGNXZWlnaHQ6IG51bWJlclxuXG4gICAgaWYgKG9idGFpbmVkID4gYXBwcm92ZU1pblBvaW50cykge1xuICAgICAgd2VpZ2h0ID0gKHNjYWxlLm1heCAtIHNjYWxlLnBhc3NpbmdHcmFkZSkgLyAodG90YWwgLSBhcHByb3ZlTWluUG9pbnRzKVxuICAgICAgY2FsY1dlaWdodCA9IHNjYWxlLm1heCAtIHdlaWdodCAqIHRvdGFsXG4gICAgfSBlbHNlIHtcbiAgICAgIHdlaWdodCA9IChzY2FsZS5wYXNzaW5nR3JhZGUgLSBzY2FsZS5taW4pIC8gYXBwcm92ZU1pblBvaW50c1xuICAgICAgY2FsY1dlaWdodCA9IHNjYWxlLnBhc3NpbmdHcmFkZSAtIHdlaWdodCAqIHRvdGFsICogcGFzc2luZ1BlcmNlbnRhZ2VcbiAgICB9XG4gICAgY29uc3QgcHJldkdyYWRlID0gd2VpZ2h0ICogb2J0YWluZWQgKyBjYWxjV2VpZ2h0XG4gICAgZ3JhZGUgPSAoMTAwICogcHJldkdyYWRlKSAvIDEwMFxuICB9IGVsc2Uge1xuICAgIGdyYWRlID0gKHNjYWxlLm1heCAqIG9idGFpbmVkKSAvIHRvdGFsXG4gIH1cbiAgcmV0dXJuIGdyYWRlXG59XG5cbi8qKlxuICogUmVjaWJlIGxvcyBwdW50YWplcyB5IGNhbGN1bGEgbGEgbm90YS5cbiAqIC0gU2kgZWwgcHVudGFqZSBvYnRlbmlkbyBlcyA+PSBhbCB0b3RhbCBlbnRvbmNlcyBhc2lnbmEgbGEgbm90YSBtw6F4aW1hIGRlIGxhIGVzY2FsYS5cbiAqIC0gU2kgZWwgcHVudGFqZSBvYnRlbmlkbyBlcyA8PSAwIGVudG9uY2VzIGFzaWduYSBsYSBub3RhIG1pbmltYSBkZSBsYSBlc2NhbGEuXG4gKiAtIFNpIGVzdMOhIGVuIGVsIHJhbmdvID4gMCB5IDwgdG90YWwgZW50b25jZXMgY2FsY3VsYSBsYSBub3RhIGNvbnNpZGVyYW5kbyBsYSBwb25kZXJhY2nDs24uXG4gKlxuICogQGV4YW1wbGUgY29uc3QgZ3JhZGUgPSBnZXRHcmFkZShzY2FsZSwgMTAsIDUpXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcmFkZSA9IChcbiAgc2NhbGU6IFNjYWxlQXR0cmlidXRlcyxcbiAgdG90YWw6IG51bWJlcixcbiAgb2J0YWluZWQ6IG51bWJlcixcbik6IG51bWJlciA9PiB7XG4gIGlmIChvYnRhaW5lZCA+PSB0b3RhbCkge1xuICAgIHJldHVybiBzY2FsZS5tYXhcbiAgfSBlbHNlIGlmIChvYnRhaW5lZCA8PSAwKSB7XG4gICAgcmV0dXJuIHNjYWxlLm1pblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBncmFkZVJvdW5kKHNjYWxlLCBjYWxjR3JhZGUoc2NhbGUsIHRvdGFsLCBvYnRhaW5lZCkpXG4gIH1cbn1cbiJdfQ==