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
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:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user