Fix: Redondear SCAA Score a múltiplos de 0.25
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:
2025-10-19 02:37:35 -06:00
parent b1f008ab26
commit e36d7dac6b
2 changed files with 20 additions and 6 deletions

View File

@@ -50,8 +50,8 @@
type="number"
:min="scaaMin"
:max="scaaMax"
step="0.01"
placeholder="58.65-112.00"
step="0.25"
placeholder="58.75-112.00"
class="cata-input w-full px-3 py-2 rounded-md text-center text-lg"
@input="onScaaChange"
/>
@@ -146,7 +146,7 @@
<script setup lang="ts">
import type { Muestra } from '~/types/catacion'
import { scaaASumatoriaAfectiva, sumatoriaAfectivaASCAA } from '~/types/catacion'
import { scaaASumatoriaAfectiva, sumatoriaAfectivaASCAA, redondearA025 } from '~/types/catacion'
interface Props {
modelValue: boolean
@@ -226,6 +226,9 @@ const onScaaChange = () => {
actualizandoInput.value = true
// Redondear al múltiplo de 0.25 más cercano
scaaDeseado.value = redondearA025(scaaDeseado.value)
// Validar rango
if (scaaDeseado.value < scaaMin) scaaDeseado.value = scaaMin
if (scaaDeseado.value > scaaMax) scaaDeseado.value = scaaMax
@@ -239,7 +242,7 @@ const onScaaChange = () => {
// Asegurar rango válido
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)
actualizandoInput.value = false

View File

@@ -213,17 +213,26 @@ export function calcularPuntajeFinal(muestra: Muestra): number {
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
* Fórmula: S = 0.65625 × Σhᵢ + 52.75 - 2u - 4d
* 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 {
const sumatoriaAfectiva = calcularSumatoriaAfectiva(muestra)
const u = muestra.tazasNoUniformes.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)
* 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 {
return 0.65625 * sumatoriaAfectiva + 52.75
const scaaRaw = 0.65625 * sumatoriaAfectiva + 52.75
return redondearA025(scaaRaw)
}
/**