Home Projects Portfolio Dashboard Export PDF Log in

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 total se realizaba como subtotal - descuento, ignorando por completo cualquier deliveryFee. 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 — updateSale reseteaba el descuento a cero: Cuando se editaban los ítems de una venta sin reenviar explícitamente los campos totals (incluyendo discount), 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:

  1. Actualización del Esquema de Totales (saleTotalsSchema): Introdujimos un nuevo campo deliveryFee en el esquema, con un valor por defecto de 0 para 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)
    });
    
  2. Recálculo Correcto del Total: Modificamos la lógica en createSale y updateSale para que el total se 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
      }
    };
    
  3. Preservación de Descuentos y Envíos en updateSale: Para evitar el reseteo del descuento, la lógica de updateSale ahora hace un fallback a los valores ya persistidos de discount y deliveryFee si 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, deliveryFee y generación de orderNumber.
  • getSales y getSaleById: 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, utilizando vi.useFakeTimers para 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

Refinando la Gestión de Ventas: Integración Robusta y Corrección de Cálculos en TuTiendaWeb
MAXIMILIANO EXEQUIEL ARAMAYO LAZO

MAXIMILIANO EXEQUIEL ARAMAYO LAZO

Author

Share: