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

Share this project:

Updates

Submission history