Fix: Corregir escalas de intensidad y cálculo de puntaje final
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s

CAMBIOS CRÍTICOS EN ESCALAS:
- Escala descriptiva: 1-10 → 1-15
- Escala afectiva: 1-15 → 1-9
- Puntaje final: suma de afectivos (no descriptivos)
- Rango puntaje final: 9-90 (8 categorías × 1-9 afectivo)

Iconos de selección en SelectorFamilia:
- Fragancia/Aroma: i-heroicons-check-circle-solid
- Sabor: i-heroicons-check-badge-solid
- Eliminar textos de títulos para interfaz más limpia

Actualizar calcularPuntajeFinal (catacion.ts):
- Cambiar suma de descriptivos a afectivos
- Actualizar comentarios JSDoc

Actualizar SelectorIntensidad:
- Máximo descriptiva: 10 → 15
- Máximo afectiva: 15 → 9
- Actualizar comentarios y tipos

Actualizar ModalAsignacionRapida:
- Rango de entrada: 8-80 → 9-90
- Modificar valores afectivos (no descriptivos)
- Valor por defecto: 40 → 45
- Actualizar validaciones de rango

Actualizar FormularioMuestra:
- aplicarAsignacionRapida usa tipo 'afectiva'
- Texto: "Suma de valores afectivos"

IMPORTANTE: Estos cambios afectan toda la lógica de puntuación
This commit is contained in:
2025-10-19 01:52:08 -06:00
parent fe24b3e724
commit e5275d223e
5 changed files with 19 additions and 19 deletions

View File

@@ -809,7 +809,7 @@
<span class="text-3xl font-bold cata-text">{{ muestra.puntajeFinal }}</span> <span class="text-3xl font-bold cata-text">{{ muestra.puntajeFinal }}</span>
</div> </div>
<p class="text-xs cata-text opacity-60 mt-1"> <p class="text-xs cata-text opacity-60 mt-1">
Suma de valores descriptivos Suma de valores afectivos
</p> </p>
</div> </div>
</div> </div>
@@ -955,9 +955,9 @@ const modalAsignacionRapida = ref(false)
// Aplicar asignación rápida de puntajes // Aplicar asignación rápida de puntajes
const aplicarAsignacionRapida = async (puntajes: Record<string, number>) => { const aplicarAsignacionRapida = async (puntajes: Record<string, number>) => {
// Aplicar cada puntaje a su categoría correspondiente // Aplicar cada puntaje a su categoría correspondiente (afectiva)
for (const [categoria, puntaje] of Object.entries(puntajes)) { for (const [categoria, puntaje] of Object.entries(puntajes)) {
await actualizarIntensidad(categoria as keyof Muestra['intensidades'], 'descriptiva', puntaje) await actualizarIntensidad(categoria as keyof Muestra['intensidades'], 'afectiva', puntaje)
} }
} }

View File

@@ -26,9 +26,9 @@
<input <input
v-model.number="puntajeDeseado" v-model.number="puntajeDeseado"
type="number" type="number"
:min="8" :min="9"
:max="80" :max="90"
placeholder="Puntaje Total (8-80)" placeholder="Puntaje Total (9-90)"
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"
/> />
</div> </div>
@@ -154,21 +154,21 @@ const isOpen = computed({
// Estado del formulario // Estado del formulario
const paso = ref(1) const paso = ref(1)
const puntajeDeseado = ref<number>(40) const puntajeDeseado = ref<number>(45)
const categoriasSeleccionadas = ref<string[]>([]) const categoriasSeleccionadas = ref<string[]>([])
// Resetear estado cuando el modal se abre // Resetear estado cuando el modal se abre
watch(isOpen, (newValue) => { watch(isOpen, (newValue) => {
if (newValue) { if (newValue) {
paso.value = 1 paso.value = 1
puntajeDeseado.value = 40 puntajeDeseado.value = 45
categoriasSeleccionadas.value = [] categoriasSeleccionadas.value = []
} }
}) })
// Cálculos // Cálculos
const puntajeValido = computed(() => { const puntajeValido = computed(() => {
return puntajeDeseado.value >= 8 && puntajeDeseado.value <= 80 return puntajeDeseado.value >= 9 && puntajeDeseado.value <= 90
}) })
const multiploMasCercano = computed(() => { const multiploMasCercano = computed(() => {

View File

@@ -34,7 +34,7 @@
</div> </div>
<UIcon <UIcon
v-if="modelValue.categorias.includes(categoria)" v-if="modelValue.categorias.includes(categoria)"
:name="tipo === 'fragancia-aroma' ? 'i-lucide-wind' : 'i-lucide-ice-cream-cone'" :name="tipo === 'fragancia-aroma' ? 'i-heroicons-check-circle-solid' : 'i-heroicons-check-badge-solid'"
class="categoria-check" class="categoria-check"
/> />
</button> </button>
@@ -62,7 +62,7 @@
<span class="subcategoria-text cata-text">{{ subcategoria }}</span> <span class="subcategoria-text cata-text">{{ subcategoria }}</span>
<UIcon <UIcon
v-if="modelValue.subcategorias.includes(subcategoria)" v-if="modelValue.subcategorias.includes(subcategoria)"
:name="tipo === 'fragancia-aroma' ? 'i-lucide-wind' : 'i-lucide-ice-cream-cone'" :name="tipo === 'fragancia-aroma' ? 'i-heroicons-check-circle-solid' : 'i-heroicons-check-badge-solid'"
class="subcategoria-check" class="subcategoria-check"
/> />
</button> </button>

View File

@@ -47,7 +47,7 @@
<script setup lang="ts"> <script setup lang="ts">
interface SelectorIntensidadProps { interface SelectorIntensidadProps {
/** Tipo de intensidad: descriptiva (1-10) o afectiva (1-15) */ /** Tipo de intensidad: descriptiva (1-15) o afectiva (1-9) */
tipo: 'descriptiva' | 'afectiva' tipo: 'descriptiva' | 'afectiva'
/** Valor actual del selector */ /** Valor actual del selector */
modelValue: number | null modelValue: number | null
@@ -80,7 +80,7 @@ const valorHover = ref<number | null>(null)
// Configuración según el tipo // Configuración según el tipo
const min = computed(() => 1) const min = computed(() => 1)
const max = computed(() => props.tipo === 'descriptiva' ? 10 : 15) const max = computed(() => props.tipo === 'descriptiva' ? 15 : 9)
// Array de valores para los iconos // Array de valores para los iconos
const iconos = computed(() => { const iconos = computed(() => {

View File

@@ -7,9 +7,9 @@
// ============================================================================ // ============================================================================
export interface IntensidadValor { export interface IntensidadValor {
/** Valor descriptivo: qué tan intensa es la característica (1-10) */ /** Valor descriptivo: qué tan intensa es la característica (1-15) */
descriptiva: number | null descriptiva: number | null
/** Valor afectivo: qué tan buena/mala es la característica (1-15) */ /** Valor afectivo: qué tan buena/mala es la característica (1-9) */
afectiva: number | null afectiva: number | null
} }
@@ -190,16 +190,16 @@ export function crearMuestraVacia(id: number): Muestra {
} }
/** /**
* Calcula el puntaje final sumando todos los valores descriptivos * Calcula el puntaje final sumando todos los valores afectivos
*/ */
export function calcularPuntajeFinal(muestra: Muestra): number { export function calcularPuntajeFinal(muestra: Muestra): number {
const { intensidades } = muestra const { intensidades } = muestra
let total = 0 let total = 0
// Sumar todos los valores descriptivos que no sean null // Sumar todos los valores afectivos que no sean null
Object.values(intensidades).forEach((intensidad) => { Object.values(intensidades).forEach((intensidad) => {
if (intensidad.descriptiva !== null) { if (intensidad.afectiva !== null) {
total += intensidad.descriptiva total += intensidad.afectiva
} }
}) })