Los reportes de ventas por producto, utilidad y más vendidos calculan el ingreso como unitPrice × cantidad y no restan el descuento del carrito (apps/web/src/app/admin/reportes/page.tsx:82-83). Toda venta con descuento sube el ingreso y la utilidad reportados.
Entorno
local
Módulos
Web / frontend, Reportes
Severidad
Molesta; hay workaround
Pasos para reproducir
Registrar una venta de $100 con $20 de descuento.
Abrir Reportes → Ventas por producto y Utilidad.
Comparar con Ventas del día, que usa ShopCart.totalPrice.
Esperado
El ingreso del producto es $80 y la utilidad se calcula sobre $80, igual que el total cobrado.
Actual
El ingreso del producto es $100 y la utilidad está inflada en $20. Los totales de "Ventas por producto" y "Ventas del día" no cuadran entre sí.
Evidencia
Encontrado en auditoría de código; no reproducido en ejecución.
// reportes/page.tsx:82-83
entry.revenue += Number(h.unitPrice) * cp.quantity;
entry.profit +=(Number(h.unitPrice) - Number(h.costUnit)) * cp.quantity;
Arreglo sugerido: repartir el descuento del carrito proporcionalmente entre sus líneas. Workaround: usar "Ventas del día" para el total cobrado.
¿Está también en producción?
Sí — este issue no basta; hay que abrir un Incidente / hotfix
No — solo local / staging
No sé
Antes de abrir
Busqué un issue duplicado
### Qué pasa
Los reportes de ventas por producto, utilidad y más vendidos calculan el ingreso como `unitPrice × cantidad` y no restan el descuento del carrito (`apps/web/src/app/admin/reportes/page.tsx:82-83`). Toda venta con descuento sube el ingreso y la utilidad reportados.
### Entorno
local
### Módulos
Web / frontend, Reportes
### Severidad
Molesta; hay workaround
### Pasos para reproducir
1. Registrar una venta de $100 con $20 de descuento.
2. Abrir **Reportes → Ventas por producto** y **Utilidad**.
3. Comparar con **Ventas del día**, que usa `ShopCart.totalPrice`.
### Esperado
El ingreso del producto es $80 y la utilidad se calcula sobre $80, igual que el total cobrado.
### Actual
El ingreso del producto es $100 y la utilidad está inflada en $20. Los totales de "Ventas por producto" y "Ventas del día" no cuadran entre sí.
### Evidencia
```shell
Encontrado en auditoría de código; no reproducido en ejecución.
// reportes/page.tsx:82-83
entry.revenue += Number(h.unitPrice) * cp.quantity;
entry.profit += (Number(h.unitPrice) - Number(h.costUnit)) * cp.quantity;
```
Arreglo sugerido: repartir el descuento del carrito proporcionalmente entre sus líneas. Workaround: usar "Ventas del día" para el total cobrado.
### ¿Está también en producción?
- [ ] Sí — este issue no basta; hay que abrir un Incidente / hotfix
- [ ] No — solo local / staging
- [x] No sé
### Antes de abrir
- [x] Busqué un issue duplicado
Nolberto
was assigned by Carlos2026-10-02 20:06:15 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Qué pasa
Los reportes de ventas por producto, utilidad y más vendidos calculan el ingreso como
unitPrice × cantidady no restan el descuento del carrito (apps/web/src/app/admin/reportes/page.tsx:82-83). Toda venta con descuento sube el ingreso y la utilidad reportados.Entorno
local
Módulos
Web / frontend, Reportes
Severidad
Molesta; hay workaround
Pasos para reproducir
ShopCart.totalPrice.Esperado
El ingreso del producto es $80 y la utilidad se calcula sobre $80, igual que el total cobrado.
Actual
El ingreso del producto es $100 y la utilidad está inflada en $20. Los totales de "Ventas por producto" y "Ventas del día" no cuadran entre sí.
Evidencia
Arreglo sugerido: repartir el descuento del carrito proporcionalmente entre sus líneas. Workaround: usar "Ventas del día" para el total cobrado.
¿Está también en producción?
Antes de abrir