Inspiración
En el taller, una máquina se detiene porque nadie sabe si la pieza ya llegó, a qué estante fue o si otra orden se la llevó.
Qué hace
- Reserva automáticamente las piezas de cada orden aprobada en inspección.
- Muestra faltantes por orden y una lista de compra agrupada por pieza.
- Asigna cada compra primero a su orden y luego al faltante más antiguo.
- Compras con número de parte desconocido quedan "por revisar" y el almacenista las relaciona con un clic.
- Desde el celular: retirar, transferir y contar escaneando etiquetas Code 128 (botón de cámara en cada campo).
- Kardex inmutable: cada movimiento queda registrado con saldo corrido.
Cómo lo construimos
Spring Boot 4 + Java 21, PostgreSQL 16 con Flyway, Kafka (Redpanda) para los eventos del taller, frontend HTML/CSS/JS servido por el mismo backend, html5-qrcode para la cámara y Docker Compose para levantar todo con un comando.
Retos
- Idempotencia: cada evento se procesa una sola vez (processed_events en la misma transacción).
- Eventos en desorden: compras que llegan antes que su orden o su catálogo (eventos pendientes + lectura del catálogo antes de cada compra).
- Disponible nunca negativo, incluso con conteos con merma y salidas simultáneas (bloqueo por pieza).
Qué aprendimos
Usar un libro mayor como fuente de verdad simplifica todo lo demás: existencias, faltantes y compras son vistas del mismo historial.
Decisiones de diseño: ver DECISIONES.md en el repositorio.
Built With
- html5
- html5-qrcode
- javascript
- kafka
- postgresql
- redpanda
- spring-boot
Log in or sign up for Devpost to join the conversation.