Refinando la Gestión de Ventas: Integración Robusta y Corrección de Cálculos en TuTiendaWeb
En el proyecto TuTiendaWeb-public, nos embarcamos en una fase crucial de integración, enfocándonos en el módulo de ventas. Nuestro objetivo era garantizar la máxima precisión en los cálculos de los totales de venta y la robustez de las operaciones contra emuladores de Firestore. Durante esta fase, identificamos y abordamos dos hallazgos críticos que afectaban la consistencia de los datos financieros.
El Desafío de la Precisión en las Ventas
El módulo de ventas es el corazón de cualquier plataforma de comercio electrónico. Cualquier imprecisión en los totales puede tener un impacto significativo. Detectamos que el cálculo del total de ventas no estaba considerando correctamente la tarifa de envío y que, en ciertas actualizaciones, los descuentos aplicados se perdían inexplicablemente. Estos eran problemas fundamentales que requerían una solución inmediata para asegurar la integridad financiera de las transacciones.
El Diagnóstico: Hallazgos Críticos
Identificamos dos problemas específicos:
- INT-01 — La tarifa de envío no se integraba en el total persistido: Al crear una venta, el cálculo del
totalse realizaba comosubtotal - descuento, ignorando por completo cualquierdeliveryFee. Esto no solo resultaba en subtotales incorrectos para el cliente, sino que también falseaba los Indicadores Clave de Rendimiento (KPIs) en los reportes de ventas. - INT-02 —
updateSalereseteaba el descuento a cero: Cuando se editaban los ítems de una venta sin reenviar explícitamente los campostotals(incluyendodiscount), el sistema asumía un descuento de cero, sobrescribiendo el valor previamente guardado. Esto causaba pérdidas para el cliente o errores en la facturación.
La Solución: Reforzando el Modelo y los Procesos
Para resolver estos problemas, implementamos una serie de mejoras críticas:
-
Actualización del Esquema de Totales (
saleTotalsSchema): Introdujimos un nuevo campodeliveryFeeen el esquema, con un valor por defecto de0para mantener la compatibilidad con ventas previas. Esto garantiza que la tarifa de envío sea ahora una parte oficial y persistente de los totales de venta.import { z } from 'zod'; const SaleTotalsSchema = z.object({ subtotal: z.number().min(0), discount: z.number().min(0).default(0), deliveryFee: z.number().min(0).default(0), // Nuevo campo total: z.number().min(0) }); -
Recálculo Correcto del Total: Modificamos la lógica en
createSaleyupdateSalepara que eltotalse calcule de manera exhaustiva:// Dentro de createSale o updateSale const calculatedTotal = subtotal - discount + deliveryFee; // Persistencia const saleData = { // ... otros campos de venta totals: { subtotal, discount, deliveryFee, // Ahora se persiste total: calculatedTotal } }; -
Preservación de Descuentos y Envíos en
updateSale: Para evitar el reseteo del descuento, la lógica deupdateSaleahora hace un fallback a los valores ya persistidos dediscountydeliveryFeesi estos no se proporcionan explícitamente en la actualización. Esto asegura que la edición de ítems no altere accidentalmente los descuentos o tarifas de envío.
Impacto: Pruebas de Integración y Consistencia
Para validar estas correcciones y asegurar la estabilidad a largo plazo, desarrollamos una exhaustiva suite de pruebas de integración con Vitest para el módulo de ventas. Se añadieron 42 nuevos tests que cubren:
createSale: Verificación de recálculos de subtotal/variantes, descuentos,deliveryFeey generación deorderNumber.getSalesygetSaleById: Funcionalidad de filtros, ordenación y manejo de ventas existentes/inexistentes.updateSale: Recálculo de ítems, preservación del envío y descuento, y cambios de descuento.calculateSalesStats: Agregados y ventas del día, utilizandovi.useFakeTimerspara un control preciso del tiempo.sale.actions: Persistencia con y sin sesión.- Regresión
checkout: Se aseguró que el envío persista correctamente en el flujo de checkout.
Este riguroso proceso de pruebas, junto con la integración con emuladores de Firebase/Firestore, nos permite garantizar que el módulo de ventas funcione de manera predecible y precisa, ofreciendo datos financieros fiables.
Lección Aprendida
La clave para un sistema financiero robusto reside en la definición precisa de los modelos de datos y en la implementación de una lógica de negocio que contemple todos los escenarios posibles, especialmente en operaciones de actualización. Una suite de pruebas de integración exhaustiva no es solo una buena práctica, es una necesidad crítica para validar la lógica de negocio y asegurar la integridad de los datos, especialmente cuando se trata de cálculos monetarios. Siempre invierta tiempo en definir claramente sus esquemas y en la cobertura de pruebas para evitar “hallazgos de dinero” inesperados.
Generated with Gitvlg.com