Integraciones

Un ERP de transporte que habla con el puerto de Valencia

Órdenes que llegan solas del PCS, datos del transporte que vuelven al puerto desde la propia aplicación y albaranes que pasan a Sage 50. Así lo montamos.

El reto
Coordinar cada día los contenedores que mueve una empresa de transporte para el puerto, con los trámites del PCS y la contabilidad en Sage 50 al día.
La solución
Una aplicación a medida que importa sola las órdenes del PCS, devuelve al puerto el camión, el conductor y el precinto de cada transporte, y crea los albaranes en Sage 50.
El resultado
La operación del puerto y la contabilidad conectadas, con el panel de tráfico al día en tiempo real.

Una empresa de transporte que trabaja con el puerto de Valencia vive pendiente del PCS (Port Community System), la plataforma por la que la comunidad portuaria se intercambia las órdenes. Desarrollamos para ella una aplicación de gestión que habla directamente con el PCS y con su contabilidad en Sage 50.

Qué hace la aplicación

  • Pedidos de puerto, de importación y de exportación, que se crean solos a partir de los mensajes del PCS. Y viajes refrigerados, con varias cargas y descargas.
  • Cada pedido se divide en tramos, y cada tramo avanza por sus estados: recogida del contenedor, paso por escáner o inspección, carga o descarga en el cliente, regreso…
  • Flota: cabezas tractoras y remolques que se enganchan y desenganchan, mantenimientos con aviso por fecha o por kilómetros, y gastos.
  • Incidencias con fotos y conversación en directo entre el conductor y tráfico.
  • Documentos: la carta de porte, rellena con los datos que llegan del puerto, y la impresión de las órdenes con código de barras y QR.

Hablar con el PCS

El PCS ofrece una API de mensajería: cada orden es un mensaje XML que se descarga de un buzón, y las respuestas se suben al mismo sistema. La autenticación es OAuth2 con credenciales de cliente, y el token se renueva solo cuando caduca.

Lo que entra. Un proceso descarga los mensajes pendientes y los convierte en pedidos. El documento único de transporte (DUT) y las órdenes de admisión y de entrega crean o actualizan el pedido y sus tramos; las confirmaciones del puerto los dan por terminados y fijan la matrícula real. Si llega una cancelación, el pedido se cancela, y si una orden caduca sin usarse, también. Cada mensaje se guarda con su número para no procesarlo nunca dos veces.

Lo que sale. Cuando tráfico asigna camión y conductor, o cambia la hora prevista, la aplicación genera el mensaje con los detalles del transporte (matrícula, conductor y precinto, o la hora estimada) y lo sube al PCS.

El acuse de recibo, el detalle que más guerra dio

Subir el mensaje no basta: el PCS contesta con un acuse que dice si lo acepta o lo rechaza, y ese acuse llega al buzón unos segundos después.

La primera versión esperaba un tiempo fijo antes de mirar. Como a veces no bastaba, la espera creció hasta los 20 segundos, y cada envío tardaba eso, hiciera falta o no. La solución final fue consultar el buzón cada segundo, buscar el acuse que responde exactamente a nuestro mensaje, retirarlo del buzón y enseñar el resultado: aceptado, o el motivo del rechazo tal como lo da el puerto. Si en 30 segundos no ha llegado, se avisa.

Dos ajustes más salieron del uso real:

  • Órdenes reemitidas. Si el puerto vuelve a emitir una orden, el tramo cancelado se sustituye conservando su número, y uno ya terminado no se reabre.
  • Importación en segundo plano. Al principio se hacía mientras el usuario esperaba; pasó a una cola que avisa con una notificación al terminar.

Sage 50: albaranes sin teclear

La contabilidad sigue en Sage 50. La aplicación se conecta a su servicio web para traer los clientes y las formas de pago. Cuando los pedidos terminan, desde la pantalla de albaranes se seleccionan, se indican cliente, forma de pago e importe, y los albaranes se crean en Sage de una vez. Cada pedido queda marcado para no enviarlo dos veces.

Tiempo real en el panel de tráfico

El panel de tráfico es un tablero por columnas (orden de entrega, en ruta, en cliente, regresando…) que se actualiza solo con Laravel Reverb. Lo que cambia un conductor desde el móvil, o lo que llega del puerto, aparece al momento sin recargar la página.

Una decisión poco habitual: en lugar de enviar datos y montar la tarjeta en el navegador, el servidor envía la tarjeta ya montada. Así hay una sola plantilla para todo, la misma que se ve al cargar la página.

El conductor usa la misma aplicación adaptada al móvil. Avanza paso a paso, con las fotos que pide cada paso (la puerta del contenedor, el precinto, la temperatura del frigorífico…) y los kilómetros. Si su hora estimada de llegada supera la de descarga, se abre una incidencia automáticamente.

Lo que aprendimos

Con un sistema externo, lo difícil no es enviar: es saber qué ha pasado con lo que enviaste. El acuse de recibo merece tanto cuidado como el propio mensaje.

  • Cada mensaje, entrante o saliente, queda guardado con su número y su resultado. Cuando algo no cuadra, se mira en el registro y no en la memoria de nadie.
  • Lo que llega de fuera se trata con desconfianza: cancelaciones, órdenes reemitidas y órdenes caducadas son el día a día, no la excepción.

¿Te pasa algo parecido?

Cuéntamelo y te digo cómo lo haría, cuánto tardaría y cuánto costaría, sin compromiso.

Sigue leyendo

Correo Cómo dejé el correo de mi dominio en 10/10 en mail-tester Desarrollo web Sala de espera virtual: que la web aguante el día de la venta
Contacto

¿Hablamos?

¿Tienes una idea por construir, una plataforma que se ha quedado corta o una red que da sustos? Cuéntamelo. Te digo cómo lo haría, cuánto tardaría y cuánto costaría, sin compromiso.

O escríbeme directamente: