La flota que dejó de llamar
El problema lo describió la dueña con una frase: 'paso la mitad del día llamando para saber dónde están mis camiones.' Era 2022 y una empresa de transporte mediana todavía coordinaba toda su flota por llamadas y un grupo de WhatsApp.
El dolor
Cuando el cliente preguntaba a qué hora llegaba su pedido, no había respuesta inmediata. Había que llamar al chofer, esperar que contestara, calcular mentalmente el tiempo en ruta, y responder. A veces el chofer no contestaba. A veces el GPS del teléfono no tenía señal. A veces simplemente no sabían.
Las planillas de Excel controlaban la asignación de viajes, pero cuando algo cambiaba en ruta — un atraso, una entrega fallida, un camión detenido — actualizar la planilla era lo último en la mente de todos. Al final del día nadie sabía exactamente qué había pasado con cada despacho.
Lo que cambió
Construí una plataforma con tracking en tiempo real usando PostGIS para consultas geoespaciales eficientes, geocercas que alertan automáticamente cuando un camión entra o sale de una zona, y una app Android para los choferes que registra la ubicación en segundo plano sin que tengan que hacer nada.
El operador ve toda la flota en un panel. El cliente puede consultar el estado de su despacho sin llamar a nadie. Los roles están separados: el administrador configura zonas y asigna viajes, el operador ve el estado en tiempo real, el chofer solo ve lo que le corresponde. Multi-tenant para manejar más de un cliente desde la misma plataforma.
Cero llamadas para saber dónde está un camión. Visibilidad completa de la flota en tiempo real.
Arquitectura
El problema de tracking en tiempo real no es guardar posiciones — es cuánto guardar y cuándo. Con ocho camiones enviando GPS cada 10 segundos son 48 filas por minuto, casi 3.000 por hora. La solución fue una tabla de posiciones actuales con una fila por vehículo que se sobreescribe siempre, más una tabla de historial con retención de 90 días. Las consultas del panel operacional van a la primera. Los reportes históricos van a la segunda con índice temporal.
Las geocercas requirieron PostGIS desde el inicio. Calcular si un punto está dentro de un polígono es matemática básica y se puede hacer en la aplicación. Pero PostGIS tiene índices GIST que hacen esa consulta en microsegundos aunque haya mil zonas definidas. Sin eso, cada ping de GPS dispararía N consultas en Python, una por geocerca. No escala.
La app Android usa un Foreground Service para GPS en background. Es la única forma de garantizar que Android no mate el proceso cuando el teléfono entra en modo ahorro de energía. Android 8 en adelante exige que el servicio muestre una notificación persistente. Los choferes la veían como algo extraño al inicio y apagaban el servicio pensando que era un error.
Multi-tenant se implementó con Row Level Security de PostgreSQL. Cada registro tiene un tenant_id y las políticas RLS garantizan que un operador de una empresa nunca vea datos de otra, independiente de si la aplicación hace la query correcta o no. La base de datos lo impone.
Stack
Qué aprendimos
La conectividad de los choferes fue el problema que no anticipé. En zonas fuera de Santiago hay sectores con 2G o sin señal por minutos. El sistema asumía conectividad constante. Tuve que agregar una cola local en la app Android que acumula posiciones cuando no hay red y las envía en batch cuando vuelve la conexión. Suena simple, pero cambiar la arquitectura después de lanzar cuesta mucho más que haberlo considerado antes.
La integración inicial usó Google Maps para el panel de operaciones. El billing con una flota activa todo el día sorprende. Migramos a MapLibre con tiles de OpenStreetMap, que es gratis y permite personalización visual. La migración fue un día de trabajo, pero fue un día que no estaba planificado.
El scope de multi-tenant lo definimos mal al inicio. La dueña quería manejar su empresa más dos clientes desde la misma plataforma. Eso cambia bastante el modelo de datos y la lógica de roles. Suerte que lo agarré temprano y no después de tres meses de desarrollo con un esquema pensado para empresa única.
Servicios relacionados
¿Tienes un problema parecido?
Cuéntame qué duele en tu operación. Un mensaje directo a Telegram y respondemos en el día.
Abrir Telegram