Files
analiticaNucleo/nuxt4-app/app/composables/useRechazosMetrics.ts

69 lines
2.0 KiB
TypeScript

import { computed } from 'vue'
import type { ComputedRef } from 'vue'
export interface RechazoRecord {
tipo: 'chibolita' | 'perico' | 'vano' | 'picadillo' | 'magalla' | 'pinta'
cantidad: number // libras para chibolita, perico, pinta; galones para vano, picadillo, magalla
precio_unitario: number
total_cobrado: number
}
export interface RechazoMetrics {
totalCantidad: number
precioPromedio: number
totalCobrado: number
}
export interface RechazosMetrics {
chibolita: ComputedRef<RechazoMetrics>
perico: ComputedRef<RechazoMetrics>
vano: ComputedRef<RechazoMetrics>
picadillo: ComputedRef<RechazoMetrics>
magalla: ComputedRef<RechazoMetrics>
pinta: ComputedRef<RechazoMetrics>
totalRechazos: ComputedRef<number>
}
export function useRechazosMetrics(rechazos: ComputedRef<RechazoRecord[]>) {
const calcularMetricasPorTipo = (tipo: RechazoRecord['tipo']): ComputedRef<RechazoMetrics> => {
return computed(() => {
const registros = rechazos.value.filter(r => r.tipo === tipo)
const totalCantidad = registros.reduce((sum, r) => sum + (r.cantidad || 0), 0)
const totalCobrado = registros.reduce((sum, r) => sum + (r.total_cobrado || 0), 0)
const precioPromedio = totalCantidad > 0 ? totalCobrado / totalCantidad : 0
return {
totalCantidad,
precioPromedio,
totalCobrado
}
})
}
const chibolita = calcularMetricasPorTipo('chibolita')
const perico = calcularMetricasPorTipo('perico')
const vano = calcularMetricasPorTipo('vano')
const picadillo = calcularMetricasPorTipo('picadillo')
const magalla = calcularMetricasPorTipo('magalla')
const pinta = calcularMetricasPorTipo('pinta')
const totalRechazos = computed(() => {
return chibolita.value.totalCobrado +
perico.value.totalCobrado +
vano.value.totalCobrado +
picadillo.value.totalCobrado +
magalla.value.totalCobrado +
pinta.value.totalCobrado
})
return {
chibolita,
perico,
vano,
picadillo,
magalla,
pinta,
totalRechazos
}
}