Fix: Redondear SCAA Score a múltiplos de 0.25
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s
PROBLEMA: El SCAA Score debe moverse en steps de 0.25 (no aceptar cualquier valor decimal racional). SOLUCIÓN: 1. Nueva función en catacion.ts: - redondearA025(): Redondea al múltiplo de 0.25 más cercano - Math.round(valor / 0.25) * 0.25 2. Aplicado en todas las funciones de SCAA: - calcularSCAA(): redondea el resultado final - sumatoriaAfectivaASCAA(): redondea la conversión 3. ModalAsignacionRapida.vue: - Input step cambiado de 0.01 a 0.25 - onScaaChange(): redondea el valor ingresado - Placeholder actualizado: 58.75-112.00 VALORES VÁLIDOS: Ahora el SCAA Score solo puede tener valores como: - 85.00, 85.25, 85.50, 85.75, 86.00, etc. - Nunca valores como 85.17 o 85.33 La visualización con .toFixed(2) sigue mostrando 2 decimales correctamente.
This commit is contained in:
@@ -50,8 +50,8 @@
|
|||||||
type="number"
|
type="number"
|
||||||
:min="scaaMin"
|
:min="scaaMin"
|
||||||
:max="scaaMax"
|
:max="scaaMax"
|
||||||
step="0.01"
|
step="0.25"
|
||||||
placeholder="58.65-112.00"
|
placeholder="58.75-112.00"
|
||||||
class="cata-input w-full px-3 py-2 rounded-md text-center text-lg"
|
class="cata-input w-full px-3 py-2 rounded-md text-center text-lg"
|
||||||
@input="onScaaChange"
|
@input="onScaaChange"
|
||||||
/>
|
/>
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { Muestra } from '~/types/catacion'
|
import type { Muestra } from '~/types/catacion'
|
||||||
import { scaaASumatoriaAfectiva, sumatoriaAfectivaASCAA } from '~/types/catacion'
|
import { scaaASumatoriaAfectiva, sumatoriaAfectivaASCAA, redondearA025 } from '~/types/catacion'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: boolean
|
modelValue: boolean
|
||||||
@@ -226,6 +226,9 @@ const onScaaChange = () => {
|
|||||||
|
|
||||||
actualizandoInput.value = true
|
actualizandoInput.value = true
|
||||||
|
|
||||||
|
// Redondear al múltiplo de 0.25 más cercano
|
||||||
|
scaaDeseado.value = redondearA025(scaaDeseado.value)
|
||||||
|
|
||||||
// Validar rango
|
// Validar rango
|
||||||
if (scaaDeseado.value < scaaMin) scaaDeseado.value = scaaMin
|
if (scaaDeseado.value < scaaMin) scaaDeseado.value = scaaMin
|
||||||
if (scaaDeseado.value > scaaMax) scaaDeseado.value = scaaMax
|
if (scaaDeseado.value > scaaMax) scaaDeseado.value = scaaMax
|
||||||
@@ -239,7 +242,7 @@ const onScaaChange = () => {
|
|||||||
// Asegurar rango válido
|
// Asegurar rango válido
|
||||||
puntajeDeseado.value = Math.max(9, Math.min(90, sumatoriaRedondeada))
|
puntajeDeseado.value = Math.max(9, Math.min(90, sumatoriaRedondeada))
|
||||||
|
|
||||||
// Recalcular SCAA Score con el valor redondeado
|
// Recalcular SCAA Score con el valor redondeado (ya aplicará redondeo a 0.25)
|
||||||
scaaDeseado.value = sumatoriaAfectivaASCAA(puntajeDeseado.value)
|
scaaDeseado.value = sumatoriaAfectivaASCAA(puntajeDeseado.value)
|
||||||
|
|
||||||
actualizandoInput.value = false
|
actualizandoInput.value = false
|
||||||
|
|||||||
@@ -213,17 +213,26 @@ export function calcularPuntajeFinal(muestra: Muestra): number {
|
|||||||
return calcularSumatoriaAfectiva(muestra)
|
return calcularSumatoriaAfectiva(muestra)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redondea un número al múltiplo de 0.25 más cercano
|
||||||
|
*/
|
||||||
|
export function redondearA025(valor: number): number {
|
||||||
|
return Math.round(valor / 0.25) * 0.25
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calcula el SCAA Score a partir de la muestra
|
* Calcula el SCAA Score a partir de la muestra
|
||||||
* Fórmula: S = 0.65625 × Σhᵢ + 52.75 - 2u - 4d
|
* Fórmula: S = 0.65625 × Σhᵢ + 52.75 - 2u - 4d
|
||||||
* donde hᵢ = puntaje afectivo (1-9), u = tazas no uniformes, d = tazas defectuosas
|
* donde hᵢ = puntaje afectivo (1-9), u = tazas no uniformes, d = tazas defectuosas
|
||||||
|
* El resultado se redondea al múltiplo de 0.25 más cercano
|
||||||
*/
|
*/
|
||||||
export function calcularSCAA(muestra: Muestra): number {
|
export function calcularSCAA(muestra: Muestra): number {
|
||||||
const sumatoriaAfectiva = calcularSumatoriaAfectiva(muestra)
|
const sumatoriaAfectiva = calcularSumatoriaAfectiva(muestra)
|
||||||
const u = muestra.tazasNoUniformes.length
|
const u = muestra.tazasNoUniformes.length
|
||||||
const d = muestra.tazasDefectuosas.length
|
const d = muestra.tazasDefectuosas.length
|
||||||
|
|
||||||
return 0.65625 * sumatoriaAfectiva + 52.75 - 2 * u - 4 * d
|
const scaaRaw = 0.65625 * sumatoriaAfectiva + 52.75 - 2 * u - 4 * d
|
||||||
|
return redondearA025(scaaRaw)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -237,9 +246,11 @@ export function scaaASumatoriaAfectiva(scaaScore: number): number {
|
|||||||
/**
|
/**
|
||||||
* Convierte Sumatoria Afectiva a SCAA Score (sin penalizaciones)
|
* Convierte Sumatoria Afectiva a SCAA Score (sin penalizaciones)
|
||||||
* Fórmula: S = 0.65625 × Σhᵢ + 52.75
|
* Fórmula: S = 0.65625 × Σhᵢ + 52.75
|
||||||
|
* El resultado se redondea al múltiplo de 0.25 más cercano
|
||||||
*/
|
*/
|
||||||
export function sumatoriaAfectivaASCAA(sumatoriaAfectiva: number): number {
|
export function sumatoriaAfectivaASCAA(sumatoriaAfectiva: number): number {
|
||||||
return 0.65625 * sumatoriaAfectiva + 52.75
|
const scaaRaw = 0.65625 * sumatoriaAfectiva + 52.75
|
||||||
|
return redondearA025(scaaRaw)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user