WCS SURAY · ARGENTINA · WAREHOUSE CONTROL SYSTEM

Qué hace, con quién habla y cómo reconstruirlo en Node.js

VverificadoIinferido?sin confirmar
CARA 01 · QUÉ ES EL SISTEMA01 / 10

El WMS decide qué mover. El WCS decide cómo y con qué.

Es la capa entre el WMS y los equipos físicos: RGV, elevadores, puertas y transportadores. Análisis del original en Java 8 y Spring Boot 2.2.

  1. 01Recibe tareas de entrada, salida, traslado o carga.
  2. 02Asigna un RGV libre, cercano y con batería.
  3. 03Calcula la ruta (A*) y reserva los nodos.
  4. 04Coordina elevadores y transportadores vía PLC.
  5. 05Informa al WMS: inicio, recogida, depósito, fin.
52
tablas MySQL
46
controladores REST
~730
endpoints
39
pantallas
[V] Las cuatro cifras están verificadas.
CARA 02 · FUNCIONALIDADES02 / 10

Siete dominios, todos verificados

Tareas

Alta manual o desde el WMS, cancelación, recuperación, destino y prioridad.

Asignación

RGV por disponibilidad, batería, región, tipo y coste. Máximo dos tareas por RGV.

Rutas

A* que penaliza giros y nodos ocupados; elevador si cambia de piso.

Bloqueos y colisiones

Reserva por tramos, detecta bloqueos tipo 1, 2 y ciclos; tareas de evitación.

Elevadores y puertas

Un hilo por tarea ejecuta el programa del puerto según el estado del PLC.

Tiempo real

Mapa y estado de RGV, elevadores y apiladores por WebSocket cada segundo.

Administración

Usuarios, roles, menús, diccionarios, tareas programadas y auditoría.

CARA 03 · ACTORES Y CANALES03 / 10

Ocho actores, ocho canales

WMS externoREST /fromWms/* (13) · 11 callbacksAlta, cancelación, estado, destino; avisos de fase
Operador / UI VueREST con JWT (~700) y WebSocketTareas, mapas y equipos; estado en vivo
RGVSocket TCP con el RES; 6.0 con SeerMovimiento, pala, estado, latidos, batería, mapas
PLCModbus TCP cada 300 ms [V]Palabra del elevador, buzón, puertas
MySQLJDBCTareas, nodos, equipos, configuración, logs
RabbitMQAMQPCola con prioridad por puerto y por piso
RedisContadorestaskNo, cmdNo [I]; uso total [?]
AGV de tercerosHTTP / socket (Seer RDS, HK)Integración parcial [?]
El WMS entra sin autenticación propia, las salidas no van firmadas y el WebSocket no exige token.
CARA 04 · CICLO DE VIDA DE UNA TAREA04 / 10

De la orden del WMS al FINISH

wcs_task · NEW = 0

El WMS envía la tarea (o la UI la genera). Se guarda en wcs_task con estado NEW.

ESTADOS EN BD · SE GUARDA EL CÓDIGO, NO EL ORDINAL [V]
NEW0
WAIT1
ONGO2
FIN3
COMM100
CANC200
ERR500
AVOID700
CARA 05 · UN EJEMPLO QUE SE PUEDE SEGUIR05 / 10

Una orden de entrada desde el WMS

  1. 1 · WMS →POST /fromWms/taskReceive con palé, puerto y celda.
  2. 2 · WCS →Comprueba el código de barras y las reglas de ocupación.
  3. 3 · COLA ↓Crea la tarea y la publica en la cola del puerto.
  4. 4 · ASIGNACIÓN →El consumidor la asigna al RGV con menor coste.
  5. 5 · RGV →Recoge, sube al elevador si hace falta y deposita.
  6. 6 · WMS ✓El WCS reporta FINISH al WMS.
[V] Los logs de arranque y las cuatro tareas de ejemplo del SQL confirman el recorrido.[?] No hay tráfico real de un almacén en funcionamiento.
CARA 06 · LOS DIAGRAMAS06 / 10

Cinco diagramas; el modelo de datos en dos versiones

Vista de contextoQuién habla con quién.wcs-contexto.html ↗Tiempo de ejecuciónHilos, colas y flujos.wcs-runtime.html ↗Cola en RabbitMQProductores, colas, consumidor.rabbitmq-asignacion.html ↗
Modelo de datos · dos versiones
V1 · POR DOMINIOTablas con relaciones.argentina-wcs.html ↗V2 · ESQUEMA COMPLETOTodas las columnas y tipos.esquema-argentina.html ↗
Catálogo731 endpoints, 101 entradas de motor y el código que nunca se llama.wcs-catalogo.html ↗
CARA 07 · ARQUITECTURA PROPUESTA EN NODE.JS07 / 10

Puertos y adaptadores

src/
      ├─ domain/     task rgv grid lifter plc policies ports
      ├─ use-cases/  generate · assign · execute-task
      │              deadlock · charge · notify-wms
      ├─ adapters/in   http · amqp-consumer · schedulers
      ├─ adapters/out  mysql · amqp · wms · res · plc-modbus
      ├─ workers/    rgv-worker.ts · plc-poller.ts (300 ms)
      └─ infra/      config · container · logger · main
REGLASDominio y casos de uso no importan nada de adapters/ ni infra/.Los estados se guardan con el código de BD, no con el ordinal.Librerías propuestas, no verificadas en el original.
  1. 1Dominio y enums con código de BD
  2. 2A* y bloqueos sin BD
  3. 3Repositorios MySQL
  4. 4HTTP y JWT (/taskdb/*)
  5. 5RabbitMQ prefetch 1
  6. 6Worker por RGV
  7. 7PLC Modbus
  8. 8WMS y callbacks
CARA 08 · ESTRATEGIAS DE DISEÑO08 / 10

Lo que se puede aplicar

Un worker por vehículo. Bucle asíncrono y cola en memoria por RGV.
Registro inyectado. Un Map por número de RGV.
Strategy por tipo. No copiar handle() en cada subclase.
Máquina de estados. Transiciones validadas en el dominio.
Cola con prioridad. Prefetch 1, x-max-priority y cola de muertos.
Outbox e idempotencia. No se pierde un FINISH si el WMS cae.
Un cálculo por piso. WebSocket solo cuando algo cambia.
Seguridad desde el inicio. JWT en REST y WebSocket; WMS firmado.
Configuración por entorno. Ningún secreto en el repositorio.
Pruebas sobre el dominio. RGV simulado: 80 % de la lógica.
CARA 09 · LO QUE NO CONVIENE COPIAR [V]09 / 10

Problemas encontrados en el original

  • Secretos en claro en application.yml.
  • WebSocket sin autenticación.
  • WMS sin autenticación ni firma.
  • Inyección SQL en queryTaskInfo.
  • Creación no atómica de tareas.
  • checkCode no es autenticación.
  • plcId = 1000 + id % 1000 colisiona.
  • Bucle sin tope en backNode(Node).
  • Función vacía isTimeOut().
  • 90 clases muertas, 41 en PLC.
CARA 10 · QUÉ SE SABE Y QUÉ FALTA10 / 10

Estado del análisis

[V] VerificadoCon código, logs y SQL: la mayor parte de tareas, asignación, rutas, WMS, WebSocket y configuración.
  • [?] Ejecutar en vivo con MySQL, RabbitMQ y un RGV o simulador.
  • [?] Tráfico WMS real: wcs_interface_log está vacía.
  • [?] Coste del plan de elevador: wcs_connect_config vacía.
  • [?] Uso total de Redis y de los AGV de terceros.
  • [I] isWcsOnline puede estar invertida en el nombre.

Referencia: 17 de octubre de 2026 · Fuentes: project/00–16, ROADMAP-sesión.md, project/rea-artifacts/

SELECTOR · 10 CARAS
CARA 01 DE 10Qué es el sistemaEl WMS decide qué; el WCS, cómo y con qué.

También puedes hacer clic en la franja de arriba o de abajo del tambor.