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)
- El KV está inflado: +$13,8M en agosto (3,4%) y +$19,9M en septiembre (5,2%) contra la verdad de la API.
<!-- 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):
| mes | KV mlv:idx (Pulse/monitor ML) | API ML hoy, sin canceladas, sin duplicados | DEV (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 |
- API vs DEV, orden por orden: coinciden en el 99,8% de los packs; lo que difiere suma ±$0,3M en el mes
(unas 50 órdenes con reintegro parcial o pack con una orden cancelada adentro). Es ruido.
- Los ~$2-3M entre «DEV mismas órdenes» y «DEV por fecha» son bordes de medianoche (DEV fecha con su
timestamp, la API con date_created). No es error de nadie.
- El KV está inflado: +$13,8M en agosto (3,4%) y +$19,9M en septiembre (5,2%) contra la verdad de la API.
Las dos causas, las dos en ventasDelDia() de worker/build_ml.py
- 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.
- Suma órdenes repetidas por la paginación de ML.
/orders/searchconoffsetdevuelve 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
- Pulse, monitor ML,
/exportde objetivos (realde ml),plant-ventas, Vívet, EERR/CMV de ML:
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.
- Liquidación Planter: NO afectada por esto, sale de DEV (que está bien). El KV es sólo respaldo — y
esto confirma que no tiene que ser la fuente.
- Conteo de órdenes: el KV cuenta órdenes (~30k/mes), DEV cuenta packs (~28k/mes). Ambos correctos,
miden distinto. No comparar órdenes entre los dos.
- Nota al margen: DEV ya tiene cargados el 24-27 sep (el corte del 23-sep, espejo-mongo-dev-corte-23sep,
se rellenó).
Arreglo propuesto (no aplicado: el deploy es de Gabriel/Juanchi)
- En
ventasDelDia(): sivistos.has(oid)→continueantes de sumar ítems (hoy sólo evita elords++). - 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.
- Una vez hecho, regenerar
mlv:d:*de jul-sep y elobj:seriede ml, y corregir el $424,8M del CLAUDE.md. - 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