
El otro día, al salir del supermercado, me fijé en que el ticket tenía algo raro. Había dos líneas para el mismo producto y en una tenía 2 unidades y en la otra 1 unidad. Aparentemente parecía un bug de presentación ya que los datos eran correctos. Pero como soy curioso quería saber qué había pasado exactamente, así que le pregunté a Claude y esto es lo que me dijo. 👇

Lo primero: las cuentas cuadran (2,99 al 21% y 2,25 al 10%), así que es un bug de presentación/agrupación, no de importes.
Las causas más probables, ordenadas por probabilidad:
1. La agrupación solo mira la última línea, no todo el carrito. Es el clásico: al insertar un artículo se hace if (ultimaLinea.codigo == nuevo.codigo) ultimaLinea.cantidad++ en vez de buscar en toda la lista. Basta con que entre medias pasara algo que rompiera la adyacencia —un artículo escaneado y luego anulado, una línea cancelada que no se imprime— para que la tercera lata abriera línea nueva. Encaja con que las dos líneas salgan juntas en el ticket: el render respeta el orden de inserción y la línea intermedia desapareció.
2. Dos caminos distintos de creación de línea. Multiplicador manual (tecla «x2» + escaneo) vs. escaneo suelto. Si el modelo distingue LineaConCantidad de LineaSimple, o marca un flag tipo cantidadIntroducidaManualmente, la clave de agrupación deja de ser solo el código de artículo y ya no fusionan.
3. Mismo texto, distinto EAN. La descripción del ticket va truncada a ~20 caracteres. Podrían ser dos referencias distintas (lote, formato, proveedor) que comparten descripción y PVP pero tienen código diferente. Aquí la agrupación funcionaría correctamente: agrupa por código, no por nombre, y son códigos distintos.
Para distinguir entre 1/2 y 3, mira el ticket digital en la app: si ahí aparecen con EAN distinto, no hay bug, hay dos referencias. Si el EAN es el mismo, es agrupación defectuosa en el TPV.
Y esta es una de las cosas que me molan de mi trabajo. Analizar y pensar en problemas de negocio, entender por qué pasan y cuáles pueden ser las posibles soluciones. En Spalopia me enfrento a este tipo de problemas a diario por lo que suele ser bastante entretenido.
