Repisa — la espiral que dice qué cargar y la visita que no se hace
Hoja de carga por hueco y plan de visitas para operadores de vending: lee el DEX que la máquina ya escribe (vendidas por selección y hora de sold-out), calcula los días que cada espiral estuvo vacía, emite la orden de carga y la ruta del día, y se cobra por visita no hecha. 0,90 EUR/máquina/mes + 1,60 EUR/visita evitada. Combina VMflow (MDB/ESP32), dex-parse, Darts y OR-Tools.
Concepto
Repisa es la hoja de carga que el reponedor lee en el móvil antes de abrir la furgoneta. Casi cualquier máquina expendedora de los últimos quince años ya escribe un fichero —el DEX, el estándar EVA-DTS que el reponedor se lleva en el colector o que manda la telemetría— donde va, espiral por espiral, cuántas unidades se han vendido desde la última visita, a qué precio y en qué fecha y a qué hora se agotó cada selección. Hoy ese fichero se archiva o se sube a un panel que enseña gráficos. Repisa lo convierte en las tres cosas que el operador decide a diario: qué va en cada hueco y cuántas unidades, qué visitas no hacen falta hoy con los días que aguanta cada máquina, y qué espiral hay que cambiar porque lleva seis semanas sin vender.
Quien paga es el operador de vending —la pyme regional de 300 a 3.000 máquinas, no la marca ni el centro—: es el que tiene la furgoneta, el almacén y el reponedor, y el que pierde dinero dos veces: cuando vuelve con el maletero lleno de producto que no hacía falta y cuando una espiral lleva tres días vacía y el cliente ya se ha acostumbrado a no comprar. Segundo comprador: el operador de café en oficina (OCS), donde la visita es aún más cara porque hay que limpiar molino y circuito de leche.
Precio: 0,90 €/máquina/mes (mínimo 190 €) + 1,60 € por visita evitada, sin alta y sin permanencia. Un operador de 900 máquinas hace unas 2.250 visitas al mes; a 5,50 € por visita —jornada de reponedor más furgoneta entre 26 y 30 máquinas— eso son 12.375 €/mes de puro reparto. Si Repisa quita una de cada cinco, deja de gastar 2.475 €/mes y paga 1.530 €/mes (810 € de máquinas + 720 € de las 450 visitas no hechas). Las visitas se miden contra la línea base de las últimas ocho semanas sacada de sus propios DEX, no de una promesa: si el plan no evita una vuelta, no se cobra.
Por qué es nueva
- Novedad: el mercado vende dos mitades que no se hablan. La telemetría (Nayax, Vendon, Cantaloupe) vende dashboards de lo que se vendió, y el software de rutas repone con niveles fijos decididos hace dos años; el planograma se toca en Excel cuando viene el comercial de la marca. Nadie cierra el círculo hueco → carga → visita → euros. Y la pieza que casi nadie usa es que el DEX no solo trae unidades vendidas por selección: trae la marca de sold-out con fecha y hora. Con eso se calculan los días-espiral vacíos entre el momento en que se agotó y la visita siguiente, que es la única medida honesta de la venta que se perdió y del motivo real para ir o no ir. Repisa no es un panel más: emite la orden de trabajo y se cobra por la vuelta que no se dio.
- Dónde añadimos valor: el parque español de alimentación y bebidas es de más de 350.000 máquinas y facturó 1.480 M€ en 2025 (2.900 M€ con tabaco): 352 € por máquina y mes, con las bebidas calientes en 820 M€ (el 55,4 %) y el segmento de alimentos sólidos y mixtos en 350 M€, que es donde el yogur y el sándwich caducan. Una espiral que se agota dos días antes de la visita y vende 0,75 unidades al día deja 1,5 ventas en la calle a 1,20 €; con seis espirales flojas por máquina son 27 €/mes por máquina, entre el 3 % y el 8 % de la caja. En 900 máquinas: 9.500-25.400 €/mes perdidos en huecos vacíos, y recuperar solo un tercio ya paga Repisa diez veces. Del otro lado, cargar de más es caducidad y capital inmovilizado en el almacén: cada caja que sale de más es una caja que vuelve en la furgoneta.
- Visión: del reparto al surtido. Con el dato por hueco, la decisión deja de ser «cuánto cargo» y pasa a ser «qué merece el hueco»: experimentos por espiral medidos en ventas y no en percepciones, el canon por hueco que la marca paga por estar en el primer nivel con evidencia de uplift, precio dinámico del fresco a dos días de caducar, y el certificado por máquina que exige el Real Decreto 315/2025 en colegios e institutos desde el 16 de abril de 2026 —nada por encima de 200 kcal, 5 g de azúcares o 0,5 g de sal por porción, ni cafeína por encima de 15 mg/100 ml, y la máquina fuera del alcance de infantil y primaria—. El operador deja de vender «máquinas» y empieza a vender surtido con números, que es lo que decide un pliego.
Diagrama de secuencia
Cargando diagrama…
Lo que ve el usuario
El lunes a las 6:40 el jefe de ruta abre el correo y ve un asunto que es una decisión: «Hoy 3 rutas, 61 máquinas, 14 no se visitan». Debajo, el CSV que importa en su software de rutas de siempre y tres líneas de motivo: «4712 aguanta 4 días más (62 % de stock), 2098 va con dos espirales vacías desde el viernes, 3310 sale de la ruta: 6 semanas sin vender en 8 de 12 huecos». Nada de dashboards que hay que interpretar: un fichero y un motivo por máquina.
El reponedor abre la app en el almacén y carga el palé contra la lista, no contra la memoria: «Máquina 4712 — B. Santander, planta 2: A3 Coca-Cola 33 cl × 6; A4 Aquarius × 0 (quedan 9, no tocar); F2 cambio de planograma: fuera el chocolate con leche (0 ventas en 42 días), entra el sándwich mixto, 4 unidades». Cada línea lleva el número de hueco pintado igual que en la máquina; la app funciona sin cobertura y se sincroniza al volver a la furgoneta. Al final de la ruta, un botón: «13 visitas hechas, 2 anuladas» y una foto opcional del hueco cambiado.
El dueño abre el panel el día 1 de mes y ve el negocio en euros, no en unidades: «este mes: 428 visitas no hechas, 2.354 € de reparto ahorrados; 3.180 € recuperados de huecos que se agotaban antes de la visita; 62 huecos muertos detectados, 41 cambiados». Y en la pestaña de un centro concreto, la frase que gana la renovación: «en el colegio San Rafael, el 100 % de las selecciones está por debajo de los umbrales del RD 315/2025, con la ficha nutricional de cada producto y la fecha de la comprobación».
Imagen sugerida: interior de una furgoneta de vending a primera hora, puerta lateral abierta, estantes de snacks y latas; en primer plano una mano con un móvil mostrando una lista de carga con números de espiral grandes y un check verde; al fondo, la silueta de una máquina expendedora en el hall de una oficina con la luz encendida. Luz fría de amanecer, enfoque en la pantalla del móvil.
Repositorios utilizados
- https://github.com/nodestark/mdb-esp32-cashless (182 ⭐, MIT) — firmware ESP32 para el bus MDB que convierte una máquina antigua en un dispositivo que reporta DEX/DDCMP por Bluetooth y MQTT: es la vía para sacar dato de las máquinas que no tienen contrato de telemetría, con una placa de 15 € en vez de una cuota por máquina.
- https://github.com/mdisibio/dex-parse (41 ⭐, MIT) — lee el fichero DEX/EVA-DTS y lo convierte en ventas por selección, precio, importe y la marca de sold-out con fecha y hora: es la materia prima de todo el cálculo de huecos.
- https://github.com/unit8co/darts (9.558 ⭐, Apache-2.0) — previsión por serie (hueco × día de la semana) con intervalos, para decidir cuántas unidades aguanta una espiral hasta la próxima vuelta en vez de aplicar un mínimo fijo.
- https://github.com/google/or-tools (14.235 ⭐, Apache-2.0) — resuelve el problema de verdad: ruta con ventanas de tiempo, capacidad de la furgoneta y decisión de qué máquinas se saltan el día, con la carga por hueco calculada en la misma pasada.
Variaciones (sinergias)
- + blakeblackshear/frigate (36.765 ⭐, MIT): la espiral vacía y el atasco, vistos por la cámara. Una cámara barata frente al cristal —o la del propio local, si el operador ya tiene una— detecta qué espirales están vacías y cuáles tienen producto atascado, y lo cruza con lo que el DEX dice que se vendió. Qué emerge: la diferencia entre «vendió 0 porque no había demanda» y «vendió 0 porque el motor se comió la moneda y la espiral está llena»: hoy el operador no lo sabe hasta que abre la máquina, y el cliente tampoco compra mientras tanto. Con esa señal, el aviso sale al momento y solo se manda al técnico cuando hay atasco real, no cuando el hueco simplemente está vacío. Nicho: hospitales, empresas y estaciones con máquinas de snack de alto tránsito, donde un atasco en la espiral de agua el viernes por la tarde deja la máquina medio muerta el fin de semana y el operador se entera el lunes.
- + openfoodfacts/openfoodfacts-server (1.184 ⭐, AGPL-3.0): la ficha nutricional por código de barras y el certificado del colegio. El catálogo de producto de Open Food Facts da kcal, azúcares, sal y cafeína por 100 g y por porción a partir del código de barras que el operador ya tiene en su maestro de artículos. Cruzado con los umbrales del RD 315/2025, cada planograma se valida solo: la máquina del centro escolar no puede llevar nada que pase de 200 kcal, 5 g de azúcares o 0,5 g de sal por porción, ni cafeína por encima de 15 mg/100 ml, y tiene que estar fuera de las zonas de infantil y primaria. Qué emerge: el expediente de surtido por máquina y por centro, con la ficha de cada producto, la fecha de la comprobación y la firma del responsable: exactamente lo que pide un pliego y lo que un inspector de salud pública puede comprobar en cinco minutos. Nicho: operadores con contratos en colegios concertados, institutos y administraciones, donde el concurso se renueva cada curso, el AQS pesa y una máquina con bollería en el pasillo de primaria es motivo de rescisión.
- + gboeing/osmnx (5.880 ⭐, MIT): el estudio de emplazamiento antes de pagar el alquiler del hueco. Con la red peatonal de OpenStreetMap, los puntos de interés (oficinas, hospitales, polígonos, estaciones) y las isocronas a pie de 3, 5 y 10 minutos, se estima el tráfico potencial de un emplazamiento y se compara con las máquinas que el operador ya tiene en sitios parecidos, usando su propio histórico de ventas por ubicación como referencia. Qué emerge: el scoring de emplazamiento con el dato propio del operador —no con un estudio de mercado genérico—, que sirve para decidir si se paga la comisión de espacio que pide el centro comercial, para negociar a la baja y para defender ante el cliente por qué una máquina vende lo que vende. Nicho: operadores que pujan por emplazamientos nuevos en polígonos, hospitales y centros comerciales, donde el canon mensual se firma a dos años y una máquina mal situada se convierte en una pérdida fija que nadie se atreve a retirar.
Plan MVP completo
projects/repisa-reposicion-vending/docs/mvp/PLAN-MVP.md