Plant Cerebro
← datos
datoactivotablerosJuan BussoIgnacio Ramón29/10

ML: Pulse vs Mongo DEV de Juan

<!-- ESTADO-VIVO:INICIO -->

⚡ ÚLTIMO ESTADO VIVO (Actualizado: 2026-10-29 16:48 · Orden Cronológico Inverso: Más Nuevo Arriba)

<!-- ESTADO-VIVO:FIN -->

Pedido: Nacho marcó el 1-oct que el dashboard de Juan da $413M para agosto y el Pulse/monitor ML más

(en Resultados tenían anotado 414). Pregunta: ¿error nuestro o de él?

Veredicto: el error es NUESTRO. El Mongo DEV de Juan está bien.

Re-bajé de la API de Mercado Libre todas las órdenes de agosto y septiembre, con el estado que tienen

hoy, y las crucé pack por pack contra DEV. Neto sin IVA, por fecha de creación (ART):

mesKV mlv:idx (Pulse/monitor ML)API ML hoy, sin canceladas, sin duplicadosDEV (mismas órdenes)DEV por fecha (lo de Juan)
ago-2026$424,8M$411,0M$411,05M$413,1M
sep-2026$399,2M$379,3M$379,6M$382,4M

(unas 50 órdenes con reintegro parcial o pack con una orden cancelada adentro). Es ruido.

timestamp, la API con date_created). No es error de nadie.

Las dos causas, las dos en ventasDelDia() de worker/build_ml.py

  1. Congela el día y nunca descuenta las cancelaciones posteriores. El worker recalcula sólo HOY (y ayer

hasta las 3 AM). Una orden que se cancela o devuelve días después ya quedó sumada en mlv:d:<fecha> para

siempre. Ejemplo 9-sep: KV $20,1M, la API hoy $19,3M. Por eso el número de agosto "se movía" de 414 a 425

en el Pulse y el de Juan no: DEV actualiza el estado de cada orden.

  1. Suma órdenes repetidas por la paginación de ML. /orders/search con offset devuelve la misma orden

en dos páginas (medido hoy: ~1.000 repetidas por mes, ~$9-10M de neto). El código usa el set vistos

sólo para contar órdenes; el neto, las unidades, it y sk se suman igual en cada aparición.

No se puede separar al peso cuánto pesa cada una en lo ya guardado (las repeticiones son aleatorias en cada

corrida), pero las dos inflan y juntas explican toda la diferencia.

A qué afecta

todo lo que lea mlv:idx / mlv:d:* está 3-5% arriba. El cierre de agosto que figura en el CLAUDE.md

($424,8M) es el inflado; el real es ~$411-413M.

esto confirma que no tiene que ser la fuente.

miden distinto. No comparar órdenes entre los dos.

se rellenó).

Arreglo propuesto (no aplicado: el deploy es de Gabriel/Juanchi)

  1. En ventasDelDia(): si vistos.has(oid) → continue antes de sumar ítems (hoy sólo evita el ords++).
  2. Recalcular los días anteriores para tomar cancelaciones tardías: p. ej. re-bajar los últimos 30 días una

vez por noche (≈1.000 llamadas, cabe en un cron nocturno), o como mínimo los últimos 7 días.

  1. Una vez hecho, regenerar mlv:d:* de jul-sep y el obj:serie de ml, y corregir el $424,8M del CLAUDE.md.
  2. Alternativa: pasar Pulse/monitor ML a leer de DEV para días cerrados y dejar la API sólo para HOY.

Scripts de la verificación (descartables): /tmp/mes.py <AAAA-MM>, /tmp/match.py <fecha>.

Datos/ml-diferencia-pulse-vs-dev-juan