El criterio único de facturación que tienen que compartir todos los monitores, si no discrepan entre sí
Todo monitor que muestre facturación propia (B2B + B2C) tiene que usar exactamente el pipeline del Pulso, o los tableros se contradicen y el número deja de servir:
$lookupappricelistspara resolver el nombre de la lista (pln) y recién ahí aplicarEXCL— usardata.priceListNamedirecto deja pasar listas que hay que excluir.- Excluir
shipmentStatecancelado además destatuscancelado. - Excluir carritos impagos:
$or: [host == business.plant.com.ar, status != "pending_payment"]. En B2B el pendiente es normal (se factura a plazo); en B2C es un carrito sin pagar y no es facturación. - Excluir
priceListque matcheeluz_azul|^ml$— ML entra aparte. - ML siempre desde nuestra integración (KV
mlv:d:*vía/api/mlv), nunca del espejo DEV.
Por qué: el 25-ago-2026 Finanzas marcaba $957,7 M y el Pulso $899 M para el mismo agosto. La diferencia era 100% de filtros (carritos impagos + envíos cancelados + lista resuelta por lookup), no de datos. Replicado el pipeline, dieron igual.
Cómo aplicarlo: al crear un monitor nuevo, copiar plantRango() de worker/build_finanzas.py, que ya es el pipeline canónico. Si un número no cuadra con el Pulso, el bug está en los filtros.
Ver plant-datos-endpoints y monitores-en-vivo-proyecto.
Datos/plant-criterio-facturacion