La mitad de abajo del Pulso sale de un blob horneado en el HTML, no de la API; y el último mes es parcial
En pulse.plantinterno.com sólo el monitor del día es en vivo. Todo lo de abajo —KPIs de
empresa, "Mix de canales & margen", "Evolución mensual", cascada P&L, contribución marginal
por unidad, bloque Planter— lee de const DATA = {...}, un blob de 60 KB **horneado dentro de
masters/master_pulse.html** (línea ~401), con su propio campo asof.
El 3-sep-2026 ese asof decía 2026-08-20: 14 días de atraso.
El síntoma peligroso no es el atraso, es el mes parcial. company.months termina en el mes
en curso cortado al día del snapshot. Al 20-ago la última barra decía $493,0M cuando
agosto cerró en $1.265,9M — 61% menos, y el gráfico se lee como un derrumbe. Un dato viejo
se nota; uno parcial disfrazado de completo, no.
"Ganancia bruta" del Pulso es gb2c + gb2b: no incluye Mercado Libre, porque ML no tiene
costo cargado. Está al lado de "Facturación NET", que sí lo incluye. Dividir una por otra da
un margen que no existe.
Refrescarlo son cinco pasos a mano: scripts/extract_weekly.py → scripts/weekly.json →
scripts/build_panel.py (reescribe el blob) → scripts/make_variants.py →
worker/build_worker.py → deploy. La fricción es la causa del atraso, no el olvido.
La salida de fondo: el /export de objetivos ya devuelve real por mes y por unidad,
en vivo, con el criterio canónico aplicado y el mes en curso calculado al momento. Es la misma
serie que el blob trae congelada, y además abre el gráfico por unidad de negocio. El blob
debería quedar sólo para lo que /export no tiene: marcas, Planter y la cascada P&L.
Mismo patrón que ml-tiles-sin-periodo: tablero en vivo por fuera, foto por dentro.
Datos/pulse-blob-estatico