/** * ⚠️ ADVERTENCIA - COMPOSABLE OBSOLETO PARA PANORAMA FACTURADOR ⚠️ * * Este composable NO debe usarse en el Panorama Facturador. * * FILOSOFÍA DE LA APLICACIÓN: * "Metabase calcula TODO. Vue solo renderiza." * * Los cálculos de métricas, agregaciones y promedios DEBEN hacerse * en Metabase mediante SQL. Los componentes de Vue solo deben recibir * datos ya calculados y renderizarlos. * * Este composable existe para compatibilidad con otras páginas legacy, * pero NO debe usarse en nuevas funcionalidades del Panorama. * * Para el Panorama Facturador, consulta: * - METABASE_QUERIES_PANORAMA.md (Query #6: panorama_rechazos_subproductos) * - server/api/metabase/panorama.post.ts * - pages/panorama.vue * - components/rechazos/RechazosSubproductos.vue * * Última actualización: 2025-10-27 */ 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 perico: ComputedRef vano: ComputedRef picadillo: ComputedRef magalla: ComputedRef pinta: ComputedRef totalRechazos: ComputedRef } export function useRechazosMetrics(rechazos: ComputedRef) { const calcularMetricasPorTipo = (tipo: RechazoRecord['tipo']): ComputedRef => { 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) DESACTIVADO HASTA NORMALIZAR LOS DATOS DE LA TABLA ORIGINAL, MENCIONAR SI TE TOPAS CON ESTO UN MES DESPUES ESTAMOS EN 1 OCTUBRE 2025 // const precioPromedio = totalCantidad > 0 ? totalCobrado / totalCantidad : 0 DESACTIVADO HASTA NORMALIZAR LOS DATOS DE LA TABLA ORIGINAL, MENCIONAR SI TE TOPAS CON ESTO UN MES DESPUES ESTAMOS EN 1 OCTUBRE 2025 const precioPromedio = 10 const totalCobrado = 100 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 } }