Análisis de causa del reclamo "Promoción tipo 27 se dispara con monto menor al establecido" y mitigación aplicada en el servicio de generación de promociones.
No es un error del POS ni del servicio de generación de promociones. La lista de artículos de la promo se cargó con EAN repetidos: 79 de los 156 EAN Dove figuran dos veces. El POS suma cada artículo una vez por cada fila de la lista que lo contiene, así que los artículos repetidos se computaron doble.
El origen es de carga de datos: el operador cargó dos veces parte de la lista. El sistema de configuración de promociones no tenía ninguna protección contra esa repetición, y ni el servicio de generación ni el POS la detectaban.
Ticket 32, PV 1369, POS 21, sucursal 390 (Tadicor San Martín), 06/10/2026. Total del comprobante 301.281,71 $. El cliente llevó tres artículos de la lista Dove:
Con 57.000 computados se supera el mínimo y sale el cupón. El reclamo indicaba 21.600 $ de artículos Dove; la crema de tratamiento, que también está en la lista, no se había contado.
La hipótesis inicial ("el cupón sale por el total del ticket") no es correcta: hubo tickets de más de 590.000 $ con artículos Dove que no recibieron el cupón.
Se revisaron los logs completos de dos días: POS 29 (04/10) y POS 21 (06/10). Cada cupón impreso se identificó por su texto: Cine 2x1 (vigencia a 30 días), cortador de verduras (válido el mismo día) y bata de baño (sin línea de vigencia). Hubo 31 tickets con artículos Dove.
| Ticket | Total ticket | Dove real | Dove computado | Cupón bata |
|---|---|---|---|---|
| 181549 | 381.042,95 | 51.950,00 | 94.010,00 | Sí |
| 73902 | 299.749,00 | 31.050,00 | 62.100,00 | Sí |
| 181566 (ticket 32) | 310.469,00 | 28.500,00 | 57.000,00 | Sí |
| 73968 | 261.583,11 | 21.600,00 | 43.200,00 | No |
| 73952 | 599.659,56 | 21.600,00 | 43.200,00 | No |
| 73965 | 440.239,50 | 17.700,00 | 35.400,00 | No |
| 181562 | 514.186,76 | 15.690,00 | 31.380,00 | No |
Se muestran los 7 tickets con más monto Dove; los 24 restantes tampoco recibieron el cupón. Montos Dove calculados con los precios de lista de la planilla enviada por el cliente; el número de ticket es el interno del POS.
En un POS de prueba se cargó una promo idéntica en estructura, con un artículo de 2.750 $ y un mínimo de 5.000 $:
Con la promo configurada sin repetidos, el POS evalúa correctamente el mínimo sobre los artículos de la promo.
Las filas repetidas no son una segunda importación completa: se repitieron 52 artículos enteros, con todos sus EAN, dentro de la misma carga. El sistema de configuración (TiBackPos) lo permite por tres motivos:
PromocionDetalle solo tiene clave primaria sobre Id. No existe un índice único sobre (IdPromocion, TipoDato, Dato).
El control "el EAN ya está en la promo" está desactivado (comentado) en PromocionDetalleHome.java.
UploadArchivos.java compara cada línea solo contra lo ya grabado, valida todo antes de grabar y compara el texto exacto (un EAN con y sin ceros a la izquierda cuenta como distinto).
La carga manual por PLU sí evita repetidos: solo agrega los EAN del artículo que todavía no están en la promo.
Sobre las 954.805 filas de detalle de promociones:
| Tipo de dato | Valores repetidos | Filas sobrantes | Promos | Vigentes al 14/10 |
|---|---|---|---|---|
| EAN incluido | 284 | 347 | 11 | 2 (15749 y 6304) |
| EAN en listas de combo | 1.263 | 2.483 | 56 | 0 |
| Exclusiones | 4.435 | 5.379 | 45 | 1 |
| Textos e imágenes | 63 | 89 | 62 | 0 |
En total, 1.358 EAN distintos repetidos en 67 promociones, la mayoría vencidas (2016 a 2019). Hoy solo las dos promos de la bata tienen efecto visible.
Mientras se depuran los datos y se agregan los controles en el backoffice, el servicio que genera las tablas de promociones del POS (SrvPOS_Promo) descarta las filas repetidas al armar dM_ProAr. Así el POS recibe una fila por artículo aunque la lista de origen tenga repetidos.
SrvPOS_Promo_Novedades.cpp, función AppendProAr, por donde pasan todas las altas de dM_ProAr. Marcador //20261015 PROAR-DEDUP.[SRVPROMO] dM_ProAr fila repetida omitida (iId=157490000 EAN=7506306241176) [SRVPROMO] Suc:380 dM_ProAr: 79 filas repetidas omitidas (detalle de promo con EAN cargado mas de una vez)
Generación de la sucursal 380 con la promo 15749 tal como está hoy en la base de promociones, sobre una copia de la base y con la salida a archivos de prueba:
Compilado con la configuración del proyecto: sin errores ni advertencias. La prueba usó una capa de simulación en lugar del motor Btrieve; antes de pasar a producción conviene generar una sucursal piloto con el motor real y verificar la cantidad de filas de la promo.
Eliminar los EAN repetidos de la lista y republicar. Resuelve el caso aunque la mitigación todavía no esté instalada.
Primero en una sucursal piloto; verificar en el log el total de filas omitidas y en dM_ProAr la cantidad de filas de la promo.
Reactivar el control de EAN repetido en la carga manual, detectar repetidos dentro del archivo importado y normalizar los ceros a la izquierda del EAN.
Sobre PromocionDetalle (IdPromocion, TipoDato, Dato), después de limpiar las aproximadamente 8.300 filas sobrantes; con esas filas la creación del índice falla.