WMS propio sobre pick-to-light
La gestión de pedidos y de stock dependía del software de un proveedor. La llevé a nuestro ERP y está en producción desde marzo de 2026.
Detalles
Cómo funciona
-
1 Shopify el pedido entra por webhook, verificado con HMAC
-
2 Preasignación reserva de stock por orden de llegada, con prioridades
-
3 Buffer cinco pedidos siempre listos para la lanzadera
-
4 Pick-to-light las luces del pasillo guían al operario
-
5 Validación escaneo de cada frasco: GS1-128, DataMatrix, SGTIN-96
-
6 Salida etiqueta y fulfillment en Shopify, sin pasos manuales
Contexto
La empresa prepara los pedidos en su almacén con un sistema pick-to-light de un proveedor externo: pasillos con luces, una lanzadera y cubetas. El picking físico funcionaba bien, pero la gestión de pedidos, el stock y las necesidades de fabricación vivían en el software del proveedor. En 2025 los pedidos mensuales se multiplicaron por más de seis, y cada cambio que necesitábamos tardaba semanas.
Qué hice
Llevé toda esa lógica a nuestro ERP en Flask y PostgreSQL. Los pedidos llegan por webhook desde Shopify y una preasignación reserva el stock por orden de llegada, con prioridad para recogidas y urgentes. El sistema mantiene siempre cinco pedidos listos para la lanzadera y enciende las luces a través de la API del proveedor; si esa API deja de responder, se corta solo y avisa.
En validación se escanea cada frasco, se elige la caja y salen la etiqueta y el fulfillment en Shopify sin más pasos. El stock y las ubicaciones ahora son nuestros, con un mapa de pasillos que se edita desde la propia aplicación, y cada movimiento queda registrado.
Antes de salir lo probé con 150 pedidos de prueba de extremo a extremo y con una batería que simulaba 20.000.
Resultado
Está en producción desde el 25 de marzo de 2026. Desde entonces ha gestionado cientos de miles de pedidos, con el 99,9 % servidos. El tiempo medio de preparación bajó un 90 % entre 2025 y 2026, y la empresa dejó de pagar por cada cambio al proveedor.
Lo que aprendí
Los problemas de verdad aparecieron con volumen. Primero, reservas duplicadas por concurrencia, que se acabaron con un bloqueo por pedido. Después, una promoción con miles de pedidos pendientes que lo ralentizó todo; lo arreglé ese fin de semana con varios workers, bloqueos en Redis y sesiones fijas, y desde entonces diseño pensando en el pico, no en la media.