Plant Cerebro
← datos
datoactivo21/09

Endpoints de datos de Plant/Vívet (mongoAggregate GCP), contrato de API y planillas fuente

Backend de datos de los dashboards Plant (proyecto GCP vivet-web, NO está en Cloudflare):

x-plant-key cuando todos los consumidores pasen por el Worker — ver monitores-en-vivo-proyecto).

Planillas fuente:

OBJETIVO (b2c=PLANT, b2b=PLANT BUSINESS, ml=MERCADO LIBRE, total=TOTALES PLANT).

Hardcodeados en el máster; build_panel.py no los toca.

fileId 1xSmDG9E2ezPnFYUEQczX5jOfEJdHgjklGXPV0RjkCmg → seguimiento.xlsx.

1VDNFAg6_MriVYXxvtM4JSkXD3s6uGpdWBu2cuHl9dnE. Laddubar en ML = "GOLDEN MONKEY".

Reglas de datos críticas (corrección 03-ago-2026): canceladas = shipmentState in

(canceled,cancelled); B2C excluye pending_payment (en B2B es normal por cta cte);

NET = q*price*(1-disc), sin IVA. Deploy encriptado legacy: clave 3339 (débil, se retira

con la migración a Access).

VENTAS DE ML DIRECTO DE LA API (24/08/2026) — reemplaza el espejo DEV

El espejo de Juan (mongoaggregate DEV) se frena solo (24/08 se cortó 14:31). Fuente nueva:

`GET /orders/search?seller=<user_id>&order.date_created.from=YYYY-MM-DDT00:00:00.000-03:00

&order.date_created.to=...&sort=date_asc&limit=50&offset=N` (50 por página, ~0,4s).

Cada order_item trae item.seller_custom_field = producto madre nuestro (por el mapeo

que escribimos) → consolidación a madre sin depender de mapas externos.

Almacén en KV (namespace ML):

(it y sk recortados a top 300 por día)

Cron (en build_ml.py → refrescarVentasML): recalcula HOY entero cada 15 min (idempotente,

sin dedup frágil) y también AYER si son <03:00 ART. El seller sale de leer(env).user_id.

Backfill histórico: scratchpad/backfill_ml.py <desde YYYY-MM-DD> (63.576 órdenes desde

2026-07-01; ~1.270 páginas). OJO: la API de ML tira 429 si corren dos procesos a la vez.

Deploy de plant-ml: los secretos van como {"type":"inherit"} o se pierden.

⚠️ IVA: LA CONVENCIÓN DE PLANT ES SIN IVA A NIVEL ÍTEM (medido 24/08/2026)

Descubierto al comparar la API de ML contra el espejo (daba +23%). Verificación exacta,

orden por orden:

O sea: net = q*price*(1-disc) en Mongo (PROD y espejo) está SIN IVA; data.total

está CON IVA. La API de ML devuelve unit_price CON IVA (es lo que pagó el comprador).

Para que ML sea comparable hay que dividir por (1+iva).

Tasa por producto: products.data.iva → 7.993 al 0.21, 82 al 0.105, 23 en 0, 347 sin dato.

Guardado en KV ivamap SOLO los que difieren de 0,21 (82 productos, 2 KB); el resto usa 0,21

por defecto. Se resuelve por seller_custom_field (producto madre) de cada order_item.

El espejo además estaba INCOMPLETO: 15/07 tenía 617 órdenes pagas vs 750 de la API

(-17,7%), aunque en plata la diferencia era solo 2,4% (le faltaban órdenes chicas).

✅ VERIFICACIÓN DE LA FUENTE NUEVA DE ML (24/08/2026) — APROBADA

Backfill con IVA corregido: julio $378,1M · agosto (1-23) $302,1M (55 días en KV).

Comparación día a día contra el espejo, misma convención (sin IVA):

15/07 +1,9% · 12/08 +0,7% · 19/08 +1,9% · 22/08 +0,2%.

La fuente nueva da SIEMPRE un poco más porque está completa (al espejo le faltaban órdenes).

Sin escalón: se puede enchufar sin romper el histórico. (Algunas consultas mensuales al

espejo devuelven 0 por timeout — otro motivo para dejar de depender de él.)

Endpoint para los monitores: GET https://ml.plantinterno.com/api/mlv?desde=&hasta=&items=1

→ {dias:{f:{net,ords,u,h[]}}, net, ords, u, items:{MLA:{q,net,t}}, sk:{sku:{q,net}}, act}.

Sirve desde KV (rápido) y tiene CORS abierto para que lo consuma el Pulso.

Datos/plant-datos-endpoints