1Control de Cambios
Registro de las modificaciones sobre la documentación y el alcance del proyecto. Cada validación con Roberto que derive en un cambio de requerimiento se anota como fila nueva.
| Versión | Fecha | Responsable | Detalle del cambio |
|---|---|---|---|
| 0.1 | 04/05/2026 | Equipo | Cierre de E01 - Definición de proyecto: entrevistas al cliente (20/4 y 27/4), análisis de resultados y primera presentación. Identificación del problema y árbol de causas (sección 2). |
| 0.2 | 06/07/2026 | Equipo | Segunda presentación (cierre de E02 - Mockup): flujo de carga de boletas, primer mock-up, despliegue inicial en InfinityFree (tres-reyes-logistica.page.gd). |
| 0.3 | 25 al 28/08/2026 | D01 (Traverso) | Migración de la geocodificación (Nominatim/OSM y luego LocationIQ) y de los mapas (Leaflet/OSRM) a las APIs de Google (Geocoding API + Maps JavaScript API). Impacto evaluado sobre ISW04 e ISW06 (sección 5.4). |
| 0.4 | 06/09/2026 | PM (Varela) | Cambios de alcance acordados con Roberto en la tercera entrevista (minuta 02, 10.2): unificación de zonas con el mismo camión, paradas visibles en el mapa de Tracking, botón "Agregar parada" a viaje activo, agrupación de boletas del mismo cliente y dirección en una sola parada, estado "En viaje" de los repartidores y baja del correo con código de seguridad al cliente que recibe la entrega. |
| 0.5 | 09/2026 | D01 (Traverso) · D02 (Crupi) | El orden de paradas pasa a calcularlo Google Routes API (optimizeWaypointOrder), en reemplazo de Nearest Neighbor + Haversine (ISW04b). Google Maps JavaScript API reemplaza a Leaflet en los tres mapas del sistema (Viajes pendientes, Tracking y mapa del repartidor). Se suman puntos de finalización configurables, boletas pospuestas y el panel mobile del admin (10.3). |
| 0.6 | 22/09/2026 | Equipo | Creación de las tablas posiciones y alertas_sistema con migracion_tracking.sql: el código de tracking y alertas ya existía, pero las tablas nunca se habían creado y los errores se descartaban en silencio. Desde esta fecha RF08 y RF09 funcionan en producción. Mapa de Tracking con pin fijo de fábrica, colores por viaje para varios repartidores simultáneos e íconos propios (5.6, 10.3). |
2Diagnóstico: Árbol de Problemas y Soluciones
Diagnóstico original elaborado por el equipo a partir de la entrevista a Roberto García (Tres Reyes). A partir del problema central y sus causas se definieron las decisiones de diseño del sistema, y cada medio del árbol de soluciones dio origen a uno o más requerimientos funcionales (sección 5.1).
El árbol de problemas se lee de abajo hacia arriba: las causas producen el problema central, y el problema central produce los efectos. El árbol de soluciones es su espejo (cada causa se convierte en un medio, y cada efecto en un fin medible).
Problema central
Tres Reyes no cuenta con un sistema que calcule y controle sus rutas de reparto de forma automática. La planificación es 100% manual: se arma con Google Maps y se coordina por WhatsApp, sin optimización ni trazabilidad.
Causas
Condiciones que producen el problema central. Cada una se relevó en la entrevista y se traduce después en un requerimiento concreto.
| Causa | Qué se observó en el relevamiento |
|---|---|
| No hay ruteo automático | Las rutas se arman a mano con Google Maps, sin ningún algoritmo que las optimice. |
| Coordinación por WhatsApp | Cada hoja de ruta se comunica al repartidor por mensaje, sin registro digital ni trazabilidad. |
| Sin agrupación por zona | Las boletas no se agrupan por cercanía antes de armar el recorrido. |
| Sin control de carga por camión | No hay registro de cuántos kilos lleva cada camión en cada salida. |
| Sin visión global de los destinos del día | Las rutas se arman boleta por boleta, no con el conjunto completo del día. |
| No hay registro histórico ni trazabilidad | No existe ninguna serie de datos previa, así que no se puede comparar una salida con otra. |
| No hay alertas | Ningún mecanismo avisa si un camión se desvía o va sobrecargado. |
Efectos
Consecuencias que el problema central produce hoy en Tres Reyes. Sus valores actuales son la línea de base contra la que se mide el proyecto.
| Efecto | Cómo se manifiesta hoy (línea de base) |
|---|---|
| Dobles pasadas por el mismo punto | Frecuente: al hacer un envío, recién en el siguiente viaje se dan cuenta de que ya habían pasado por esa zona. |
| Combustible desperdiciado | Sin medir, pero reconocido como "usamos más combustible del necesario". |
| Horas perdidas armando rutas | Alto / sin medir: el armado manual consume horas del equipo cada día. |
| Riesgo de sobrecarga no detectada | Sin registro: no se sabe cuánta carga lleva cada camión por viaje. |
| Dependencia de WhatsApp | Coordinación manual, precaria, sin registro digital. |
Árbol de soluciones
Dar a Tres Reyes un sistema que calcule automáticamente la ruta óptima de cada camión, controle su carga y elimine la dependencia de Maps y WhatsApp.
Cada medio del árbol de soluciones neutraliza una causa identificada más arriba, y se convierte después en uno o varios requerimientos del sistema.
| Medio | Causa que neutraliza |
|---|---|
| Algoritmo de ruteo automático Optimización del orden de paradas con Google Routes API. | No hay ruteo automático. |
| Hoja de ruta digital y notificación al repartidor | Coordinación por WhatsApp. |
| Agrupación automática de destinos por zona | Sin agrupación por zona. |
| Control de carga (kg) por camión y salida | Sin control de carga por camión. |
| Vista de mapa con el recorrido planificado del día | Sin visión global de los destinos del día. |
| Backend con base de datos de viajes y boletas | No hay registro histórico ni trazabilidad. |
| Alerta de sobrecarga y de desvío de ruta | No hay alertas. |
Los fines son el espejo de los efectos: expresan a qué valor debería llegar cada uno con el sistema funcionando.
| Fin | Meta verificable | Punto de partida |
|---|---|---|
| Eliminar las rutas ineficientes | 0 rutas con doble pasada en los primeros 30 días. | Frecuente |
| Reducir el combustible usado | Reducción de distancia recorrida ≥ 15%. | Sin medir |
| Automatizar el armado de rutas | Menos de 2 minutos automáticos. | Manual, horas |
| Controlar la carga por camión | 100% de las salidas con registro de kg. | Sin registro |
| Dejar de depender de WhatsApp | El repartidor completa su jornada usando solo la app. | Coordinación manual |
Este diagnóstico es el que alimenta la línea de base y los OKRs del proyecto (4.6): los efectos aportan los valores de partida y los fines aportan los Key Results contra los que se evalúa el proyecto. Lo que el árbol identifica pero el sistema no resuelve en esta entrega queda declarado en las Limitaciones del alcance (5.1), y las mejoras se difieren a versiones posteriores en la Evolución previsible del sistema (4.6).
3Introducción
3.1. Propósito
El propósito del proyecto es reemplazar el método manual de planificación de repartos de Tres Reyes, que hoy se resuelve con Google Maps y coordinación por WhatsApp, por un sistema que calcule automáticamente la ruta óptima de cada camión, controle la carga por salida y le dé a Roberto García visibilidad real de la operación logística diaria.
TruckRoute busca resolver tres problemas medibles detectados en la entrevista (ver también el árbol de problemas, sección 2): el tiempo perdido armando rutas a mano, el combustible desperdiciado por rutas no optimizadas y las dobles pasadas por el mismo punto, y la falta de control de carga (kg) por camión y salida.
3.2. Alcance
El sistema incluye: importación y parseo automático de boletas en PDF, geocodificación de direcciones, agrupación de entregas por zona, cálculo de ruta óptima (Google Routes API con optimización del orden de paradas), generación de hoja de ruta digital, gestión del ciclo de vida del viaje (armar → confirmar → iniciar → finalizar), navegación GPS giro a giro para el repartidor, control de carga por camión, un panel de alertas y autenticación con roles diferenciados.
El sistema no incluye facturación ni gestión contable, gestión de stock o inventario, liquidación de sueldos, integración con sistemas de terceros ni soporte multiempresa en esta versión. El detalle completo está en las Limitaciones (dentro de 5.1) y se formaliza en el Contrato (sección 9).
3.3. Personal Involucrado
Roles del equipo de proyecto según el Gantt (6.1): PM/DUX (Varela), D01 (Traverso), D02 (Crupi), D03 (García), BD (Silva), más los encargados administrativos ADO01 (Gurschpon) y ADO02 (Rodríguez).
Rol doble desde el inicio del proyecto (01/04/2026): gestión, GANTT, control de cambios y OKRs, junto con el diseño de interfaz del dashboard y la validación de HCI con Roberto y Tomás.
API REST propia en PHP: endpoints de boletas, viajes, configuración, tracking y alertas; lógica de estados del viaje e integración del servidor con las APIs de Google Cloud (Geocoding y Routes).
Módulos del panel, agrupación por zona, optimización de rutas con Google Routes API e integraciones externas.
Modelo de datos (usuarios, repartidores, camiones, boletas, viajes, posiciones, alertas y puntos de finalización), migraciones, consultas SQL y backups.
Dashboard SPA en Vanilla JS, mapas interactivos con Google Maps JavaScript API y validación de interfaz con el usuario.
Documentación técnica, control de cambios y entregables del proyecto.
Gestión operativa y coordinación de entregas del equipo.
Dueño de Tres Reyes — Aceitunas y Encurtidos. Valida requerimientos, prioriza y firma el contrato.
3.4. Definiciones, acrónimos y abreviaturas
| Término | Definición |
|---|---|
| MVP | Minimum Viable Product: versión mínima funcional del sistema, ya en producción para Tres Reyes. |
| SPA | Single Page Application: el dashboard corre como una sola página (index.html) sin recargar el navegador. |
| API REST | Interfaz HTTP propia (sin framework) que expone boletas, viajes, configuración y alertas al frontend. |
| Google Geocoding API | Servicio pago de Google Cloud (con cuota gratuita mensual) que convierte una dirección de texto en coordenadas. Reemplazó a Nominatim/OpenStreetMap y luego a LocationIQ en el sprint 5 (25–28/08/26). |
| Google Maps JavaScript API | Librería de Google Cloud que renderiza los tres mapas del sistema: Viajes pendientes, Tracking y el mapa del repartidor. Reemplazó a Leaflet+OSRM en todas las vistas. |
| Google Routes API | Servicio de Google Cloud que calcula la ruta y, con optimizeWaypointOrder, el orden óptimo de las paradas de cada viaje. Reemplazó al cálculo local con Nearest Neighbor + Haversine. |
| Google Cloud Billing | Cuenta de facturación de Google Cloud, necesaria para habilitar las APIs de Geocoding y Maps aunque se use solo la cuota gratuita. |
| API Key | Clave de acceso a las APIs de Google, restringida por dominio/IP para evitar uso indebido si se filtra en el frontend. |
| Nominatim / OSM | Servicio gratuito de geocodificación de OpenStreetMap usado en versiones iniciales del proyecto, reemplazado primero por LocationIQ y después por Google Geocoding API. |
| LocationIQ | Servicio de geocodificación usado como paso intermedio entre Nominatim y Google Geocoding API. |
| Leaflet | Librería open-source de mapas usada en las versiones iniciales del panel y de la navegación del repartidor, reemplazada por Google Maps JavaScript API. |
| OSRM | Open Source Routing Machine: motor de cálculo de rutas usado en versiones iniciales, reemplazado por las APIs de Google. |
| Nearest Neighbor | Algoritmo de optimización que ordena las paradas eligiendo siempre el destino más cercano no visitado. Se usó en las primeras versiones del ruteo; hoy el orden lo calcula Google Routes API. |
| Haversine | Fórmula matemática para calcular la distancia entre dos coordenadas geográficas. |
| bcrypt | Algoritmo de hash usado para almacenar contraseñas sin guardarlas en texto plano. |
| JWT | JSON Web Token: mecanismo de sesión seguro pendiente de implementar (ver roadmap crítico, 4.6). |
| RF / RNF | Requerimiento Funcional / Requerimiento No Funcional. |
| OKR / KR | Objective and Key Results / Resultado Clave: métrica cuantitativa de progreso. |
| Línea de base | Medición de la situación inicial (antes del sistema), usada como referencia de comparación. |
3.5. Referencias
Formato APA 7ª edición.
- Pedaci, L. (2026). Evaluación de Proyectos - Módulo 01: El Proyecto y sus generalidades. Instituto Leonardo Murialdo.
- Pedaci, L. (2026). Evaluación de Proyectos - Módulo 02: Fases de un Proyecto. Instituto Leonardo Murialdo.
- Pedaci, L. (2026). Evaluación de Proyectos - Módulo de Documentación. Instituto Leonardo Murialdo.
- Universidad Tecnológica Nacional. (2012). Buenas Prácticas para Proyectos Informáticos. edUTecNe. ISBN 978-987-1896-01-1.
- Equipo N° 5. (2026). TruckRoute — MVP [Aplicación web]. tres-reyes-logistica.page.gd
3.6. Resumen Ejecutivo
TruckRoute es un sistema de software pensado para Tres Reyes — Aceitunas y Encurtidos (San Miguel, Buenos Aires): una empresa de distribución con más de 20 años en el rubro, 7 empleados y flota propia. El sistema reemplaza el método actual (Google Maps + WhatsApp) por un flujo digital: se cargan las boletas del día en PDF, el sistema geocodifica los destinos, agrupa por zona y calcula la ruta óptima para cada camión, respetando su capacidad de carga. El repartidor recibe la hoja de ruta y navega con GPS giro a giro; el administrador ve el estado de todos los viajes y recibe alertas de cierre.
Resultados esperados: eliminar las dobles pasadas por el mismo punto, reducir la distancia total recorrida en al menos un 15%, bajar el armado de rutas de un proceso manual a menos de 2 minutos automáticos, y que los repartidores dejen de depender de WhatsApp para coordinar su jornada.
4Descripción General
4.1. Perspectiva del producto
TruckRoute es un sistema nuevo: hoy Tres Reyes no tiene ningún sistema digital de ruteo, todo se resuelve con Google Maps y WhatsApp. No reemplaza un software existente ni es parte de un sistema mayor, aunque sí se apoya en infraestructura ya disponible: las PCs y celulares del equipo de Tres Reyes (Roberto usa iPhone, Tomás un dispositivo Android simple) y en las APIs de Google Cloud (Geocoding, Routes y Maps JavaScript).
4.2. Funcionalidad del producto
- Importar boletas en PDF y extraer automáticamente nombre, dirección y peso de cada una.
- Convertir cada dirección en coordenadas y agruparlas por zona geográfica.
- Calcular el orden óptimo de paradas para minimizar la distancia recorrida (Google Routes API), agrupando en una sola parada las boletas del mismo cliente con la misma dirección.
- Generar la hoja de ruta digital de cada camión, sin armarla a mano.
- Mostrar el recorrido en un mapa, con navegación GPS en tiempo real para el repartidor.
- Al iniciar el viaje, tomar la ubicación actual del repartidor como punto de partida y abrir Google Maps directamente con la hoja de ruta completa cargada en el orden ya optimizado, lista para navegar.
- Registrar los kilos asignados a cada camión por salida.
- Avisar cuando un viaje se cierra, con el detalle de zona y camión de los últimos 7 días.
4.3. Características de los Usuarios Buenas Prácticas UTN p.56/57
| Tipo de usuario | Formación | Actividades |
|---|---|---|
| Dueño / Administrador Roberto García |
Más de 20 años al frente de Tres Reyes. Dificultad visual: necesita fuente grande (mín. 18px). Usa iPhone y PC de escritorio. | Acceso total: rutas, control de carga, reportes y configuración. Entrevistado en Abril 2026. |
| Administrador operativo Facundo (equipo de Tres Reyes) |
Nivel tecnológico 4/5, manejo fluido. | Acceso total: puede crear, editar y eliminar rutas, clientes y configuraciones del sistema. |
| Repartidor Tomás |
Nivel tecnológico 3/5. Necesita una interfaz muy simple. | Solo uso operativo en entrega: ve la hoja de ruta del día y marca entregas completadas. No puede modificar rutas ni ver datos de otros camiones. |
4.4. Restricciones Buenas Prácticas UTN p.57
4.4.1. Políticas reguladoras
El sistema se desarrolla mayormente con software libre y de código abierto: PHP, MySQL/MariaDB, Vanilla JS, PDF.js. La excepción es la capa de mapas, geocodificación y ruteo, migrada a las APIs de Google Cloud (Geocoding API, Routes API y Maps JavaScript API) en el sprint 5: son servicios pagos con cuota gratuita mensual, que requieren una cuenta de Google Cloud con facturación habilitada (aunque el uso se mantenga dentro de la cuota gratuita). El hosting actual (InfinityFree) es un plan gratuito. El repositorio de las presentaciones está publicado en GitHub Pages.
4.4.2. Limitaciones de infraestructura
El backend corre sobre hosting compartido gratuito (InfinityFree, base de datos en sql113.infinityfree.com), sin servidor propio. No hay hardware dedicado: el sistema depende de los dispositivos que Tres Reyes ya tiene (PC administrativa, celular del repartidor).
4.4.3. Interfaces con otras aplicaciones
El sistema se integra con la Google Geocoding API para geocodificar direcciones, con la Google Routes API para optimizar el orden de las paradas, y con la Google Maps JavaScript API para los mapas del sistema (Viajes pendientes, Tracking y mapa del repartidor). La navegación giro a giro se delega a la app de Google Maps. Usa la Geolocation API del navegador para obtener la posición GPS real. Reemplaza a WhatsApp como canal de coordinación (RF07, pendiente de sprint).
4.4.4. Función de control
Autenticación con email y contraseña (bcrypt) y roles diferenciados: administrador y repartidor. El repartidor no puede modificar rutas ni ver datos de otros camiones (RNF04).
4.4.5. Requisitos del lenguaje
Toda la interfaz está en español, con tipografía de al menos 18px por la dificultad visual de Roberto (RNF02), y un flujo de uso autoevidente pensado para un nivel tecnológico medio (RNF05: aprendizaje en menos de 20 minutos).
4.4.6. Protocolos señalados
Comunicación frontend–backend por HTTP/REST (JSON). Geocodificación y mapas vía las APIs de Google Cloud, ambos por HTTPS con API Key. CORS habilitado en el backend.
4.4.7. Requisitos de fiabilidad
El algoritmo de ruteo debe responder en menos de 5 segundos para hasta 50 destinos por salida (RNF01). El repartidor puede consultar su hoja de ruta sin conexión una vez descargada (RNF03, offline parcial).
4.4.8. Credibilidad de la aplicación
El panel muestra en tiempo real las boletas cargadas, el peso total y la cantidad de direcciones geolocalizadas apenas se sube el PDF del día. Así el administrador ve al instante si alguna boleta no se pudo leer o geolocalizar.
4.4.9. Consideraciones de seguridad
Las contraseñas se almacenan con bcrypt (password_hash), nunca en texto plano. Hay pendientes críticos identificados por el propio equipo (ver 4.6): mover la contraseña de la base de datos a un archivo .env, reemplazar el sessionStorage por JWT o sesión segura, auditar el 100% de las consultas SQL con bind_param, y forzar HTTPS antes de producción real.
La recuperación de contraseña está limitada a la cuenta de administrador: el enlace se envía por correo (SMTP propio, mailer.php + recuperar.php) a una casilla fija del admin, sin exponer un campo de email a los demás usuarios.
4.5. Suposiciones y dependencias
- Se asume que el consumo de las APIs de Google (Geocoding, Routes y Maps JavaScript) se mantiene dentro de la cuota gratuita mensual; si el volumen de boletas crece, esto pasa a ser un costo real a presupuestar (ver Oferta Económica, sección 7).
- El proyecto depende de que InfinityFree mantenga activo el hosting gratuito de backend y base de datos.
- Se asume que los repartidores cuentan con datos móviles para usar la navegación GPS en tiempo real.
- Roberto García mostró intención de seguir usando el sistema al ver el prototipo funcional (KR3 del Objetivo 5), lo que sostiene la viabilidad comercial del proyecto.
4.6. Evolución previsible del sistema
Próximos pasos del equipo, agrupados por urgencia.
Crítico, antes de producción:
- Mover la contraseña de la base de datos (
DB_PASS) a un archivo.env, nunca en el código fuente. - Reemplazar
sessionStoragepor autenticación JWT o sesión real con tokens HTTP-only. - Auditar y preparar el 100% de las consultas SQL con
bind_param. - Forzar HTTPS en
.htaccessantes de producción.
Importante, próximo sprint:
- RF07 — Notificación al repartidor (reemplazo de WhatsApp) por push o SMS.
- Caché de geocodificación, para no repetir direcciones ya resueltas.
- RF10 — Completar el reporte de eficiencia: comparar tiempo real vs. estimado y km reales recorridos (la pantalla Reportes ya muestra km estimados, combustible estimado y duración del viaje).
- RF06, alerta de sobrecarga: el panel bloquea la confirmación y muestra el porcentaje de carga vs. capacidad del camión.
- RF08, alerta de desvío de ruta: la pantalla de "Alertas" muestra los metros de desvío, el camión y el repartidor en tiempo real.
- RF09, tracking en tiempo real: mapa con pin fijo de la fábrica, posición GPS en vivo de cada camión, paradas numeradas en el orden óptimo de la ruta y marcador del punto de finalización (si se eligió uno). Los marcadores desaparecen a medida que se marcan entregas. Con varios repartidores en simultáneo, cada viaje usa un color propio en todos sus marcadores.
- RF10 (parcial): la pantalla de Reportes muestra km estimados, consumo de combustible estimado (10 L/100 km) y duración de cada viaje.
- Mapas 100% Google: Viajes pendientes, Tracking y el mapa del repartidor usan Google Maps JavaScript API; el orden de paradas lo calcula Google Routes API.
- Agregar parada a viaje activo: el admin suma una boleta sin asignar a un viaje confirmado o en curso y la ruta se reoptimiza.
- Paradas del mismo cliente agrupadas: dos boletas del mismo cliente con la misma dirección cuentan como una sola parada (un solo waypoint).
- Boletas pospuestas: una sección propia para apartar boletas de un viaje armado y reasignarlas después.
- API Keys separadas y restringidas: una clave de servidor (Geocoding + Routes, restringida por tipo de API) y una clave de navegador (Maps JavaScript, restringida por dominio HTTP referrer). Ver 4.4.9.
- Unificación de zonas: al confirmar 2 o más zonas con el mismo camión, el sistema las fusiona en un solo viaje optimizado con una sola ruta de punta a punta.
- Repartidores en viaje: el perfil del repartidor se marca como "No disponible / En viaje" mientras tiene un viaje confirmado o en curso.
- Puntos de finalización configurables: el admin puede cargar destinos de llegada (nombre, dirección, CP) en Configuración; las rutas se calculan desde la fábrica hasta el destino elegido por viaje.
- Panel mobile del admin: un menú hamburguesa con overlay para navegar todas las pantallas desde el celular.
- Sin código de seguridad al cliente: por pedido de Roberto (minuta 02), el sistema ya no envía el correo con código de seguridad al cliente que recibe la entrega.
Nota: RF08 y RF09 quedaron operativos en producción el 22/09/2026, al crear las tablas posiciones y alertas_sistema con migracion_tracking.sql (ver 5.6). Antes de esa fecha el código existía, pero las tablas no, y los errores se descartaban en silencio.
Mejoras para iteraciones futuras:
- App nativa (PWA o React Native) con soporte offline para el repartidor.
- Dashboard de OKRs con métricas automáticas de adopción y ahorro.
Objetivos y Resultados Clave (OKRs)
| Objetivo | Resultados clave (KR) |
|---|---|
| 1. Eliminar las rutas ineficientes y las dobles pasadas | 0 rutas con doble pasada en 30 días · Reducción de distancia recorrida ≥15% |
| 2. Automatizar la planificación diaria | Armado de ruta <2 min automáticos · 100% de hojas de ruta generadas por el sistema antes del primer envío |
| 3. Dar visibilidad total sobre la operación | Roberto ve la ubicación de todos los camiones en tiempo real · 100% de desvíos notificados en <3 min |
| 4. Controlar la carga por camión | 100% de salidas con registro de kg · 0 casos de sobrecarga no detectada en 10 salidas de prueba |
| 5. Adopción sin depender de WhatsApp | Repartidor completa su jornada solo con la app · Aprendizaje ≤20 min con Tomás · Roberto declara intención de seguir usando el sistema |
5Requisitos Específicos
5.1. Requerimientos funcionales Buenas Prácticas UTN p.59/60
| ID | Requerimiento | Prioridad | Origen |
|---|---|---|---|
| RF01 | Generación automática de rutas por destinos. Calcula el recorrido más eficiente dado un conjunto de direcciones de entrega. | Alta | "Maps + WhatsApp para coordinar rutas" |
| RF02 | Generación de hoja de ruta digital. Produce la hoja ordenada y lista para cada repartidor, sin intervención manual. | Alta | "Armar las rutas nos lleva mucho tiempo" |
| RF03 | Vista de mapa con recorrido planificado y navegación externa a Google Maps. Paradas numeradas en orden óptimo sobre el mapa del panel; al presionar "Iniciar viaje", el sistema toma la ubicación GPS actual del repartidor como origen y abre la app de Google Maps con el destino y todas las paradas intermedias ya cargadas en el orden óptimo. | Alta | "Pasamos dos veces por el mismo lugar" |
| RF04 | Agrupación automática de destinos por zona. Elimina el backtracking al identificar zonas geográficas. | Alta | "Usamos más combustible del necesario" |
| RF05 | Control de carga (kg) por camión y salida. Registra los kilos de mercadería asignados a cada camión por viaje. | Media | "No sé cuántos kilos lleva cada camión" |
| RF06 | Alerta de sobrecarga o subutilización. Notifica cuando un camión supera su capacidad o queda muy por debajo del óptimo. | Media Implementado | Extensión de RF05 |
| RF07 | Notificación de ruta al repartidor. Envío de la hoja de ruta al dispositivo del repartidor, reemplazando el WhatsApp actual. | Alta | "Es precario, quieren automatizarlo" |
| RF08 | Alerta de desvío de ruta. Avisa a Roberto cuando un repartidor no sigue la ruta optimizada prevista (implementada: muestra los metros de desvío, el camión y el repartidor). | Alta Implementado | Control de gestión |
| RF09 | Tracking en tiempo real de camiones. Panel con la ubicación en vivo de todos los camiones activos, sus paradas pendientes y el punto de finalización. | Media Implementado | Visibilidad de la operación (OKR 3) |
| RF10 | Reporte de eficiencia por ruta. Historial de km recorridos, tiempo real vs. estimado y estimación de combustible (hoy: km estimados, combustible y duración; falta la comparación real vs. estimado). | Baja Parcial | Medición de OKRs |
Requerimientos no funcionales (RNF)
| ID | Requerimiento | Categoría |
|---|---|---|
| RNF01 | Tiempo de respuesta del algoritmo ≤ 5 segundos para un máximo de 50 destinos por salida. | Rendimiento |
| RNF02 | Fuente mínima de 18px, diseño legible en movimiento (dificultad visual de Roberto). | HCI |
| RNF03 | Offline parcial: el repartidor consulta su hoja de ruta sin conexión una vez descargada. | Conectividad |
| RNF04 | Aislamiento de permisos por perfil: el repartidor no modifica rutas ni ve otros camiones. | Seguridad |
| RNF05 | Tiempo de aprendizaje ≤ 20 minutos para repartidores. Flujo autoevidente, sin manual. | Usabilidad |
| RNF06 | Integración con Google Maps Platform (Geocoding API, Routes API y Maps JavaScript API) para cálculo y visualización sobre mapa real de Argentina. | Plataforma |
Limitaciones del alcance
Definen qué no hace el sistema en esta entrega. Se revisaron con Roberto antes de la firma del contrato (sección 9).
| Qué NO hace en esta entrega | Por qué |
|---|---|
| No gestiona facturación ni contabilidad. | No fue solicitado; queda fuera del alcance funcional acordado. |
| No gestiona stock ni inventario. | El foco del proyecto es el ruteo, no la gestión de mercadería en depósito. |
| No liquida sueldos. | Es un proceso administrativo ajeno a la logística de reparto. |
| No se integra con sistemas de terceros en esta versión. | Se prioriza primero la estabilidad del MVP propio. |
| No incluye CRM ni gestión avanzada de clientes. | Los datos de cliente hoy solo sirven para geocodificar la entrega. |
| No soporta multiempresa. | El sistema está diseñado y ajustado específicamente para la operación de Tres Reyes. |
5.2. Interfaces de usuario Buenas Prácticas UTN p.58
El único punto de contacto de Roberto, Facundo y Tomás con el sistema es el dashboard web: una SPA en negro con acentos verdes, coherente con la identidad visual del sistema. Es responsive y usa fuente grande (mín. 18px, RNF02) por la dificultad visual de Roberto. El equipo pasó de la especificación de requerimientos a un MVP funcional en producción, y la interfaz se fue ajustando directamente sobre ese panel.
5.2.1. Mockup inicial (pre-MVP)
Antes de arrancar con la base de datos real, el equipo construyó una primera versión básica de la interfaz para validar el flujo conceptual con el cliente. Era una maqueta funcional muy simple, sin base de datos ni autenticación, solo para confirmar que el flujo boletas → rutas → zonas era entendible para Roberto. A partir de la validación del 20/05/2026, la interfaz se iteró directamente sobre el MVP en producción (sin Figma), llegando al panel actual documentado en 5.2 y en la Guía de Inicio Rápido.
5.3. Interfaz de hardware
No aplica. TruckRoute es un proyecto 100% software: no incluye sensores, placas ni dispositivos propios. Se apoya en hardware que Tres Reyes ya posee (PC de escritorio, celulares de Roberto y del repartidor), sin requerir instalación física alguna.
5.4. Interfaces de software Buenas Prácticas UTN p.59
| ID | Componente | Tecnología / Stack | Rol en el sistema |
|---|---|---|---|
| ISW01 | Backend / API REST | PHP 8 sin framework. Endpoints: boletas, viajes, config, alertas, login. CORS habilitado. | Lógica de negocio: agrupación por zona, llamada a Google Routes API para el orden de paradas, estados del viaje, tracking y alertas. |
| ISW02 | Base de datos | MySQL / MariaDB en InfinityFree (sql113.infinityfree.com). Charset UTF-8 MB4. | Persistencia central. 8 tablas: usuarios, repartidores, camiones, boletas, viajes, posiciones, alertas_sistema y puntos_finalizacion. |
| ISW03 | Dashboard (Frontend) | Vanilla JS, SPA sin framework, un solo index.html. HTML5 + CSS3 responsive. Google Fonts Inter + DM Sans. | Capa de presentación: estado en tiempo real, historial, alertas y configuración. |
| ISW04 | Mapas y ruteo | Google Maps JavaScript API para la visualización de rutas, paradas y tracking en los tres mapas del sistema: Viajes pendientes, Tracking y mapa del repartidor (migrado desde Leaflet + OSRM). Handoff a la app de Google Maps (Directions URL con origin = geolocalización GPS del repartidor y waypoints en el orden óptimo calculado por Google Routes API) para la navegación giro a giro. | Visualización en tiempo real del recorrido, paradas numeradas y ubicación GPS de cada camión (un color por viaje). Navegación GPS real delegada a la app de Google Maps al iniciar el viaje. |
| ISW04b | Optimización de rutas | Google Routes API (computeRoutes con optimizeWaypointOrder: true). Clave de servidor, restringida por tipo de API. | Calcula el orden óptimo de las paradas al confirmar el viaje. Fábrica como origen; punto de finalización elegido (o última entrega si no se eligió ninguno) como destino. |
| ISW05 | Parseo de boletas | PDF.js 3.11, ejecutado en el cliente. | Extrae automáticamente nombre, dirección y peso de cada boleta cargada. |
| ISW06 | Geocodificación y mapas | Google Geocoding API + Google Maps JavaScript API (migrado desde Nominatim/OSM, luego LocationIQ, y Leaflet + OSRM; sprint 5, 25–28/08/26). | Convierte direcciones en coordenadas (servidor) y renderiza los mapas del sistema. |
| ISW07 | Autenticación | bcrypt (password_hash). | Login con email y contraseña, control de acceso por rol (admin / repartidor) y recuperación de contraseña del admin por correo. JWT pendiente (ver 4.6). |
5.5. Interfaces de comunicación Buenas Prácticas UTN p.59
| Interfaz | Protocolo / Formato | Detalle |
|---|---|---|
| Dashboard → Backend | HTTP / REST (JSON) | Endpoints para boletas, viajes, configuración, alertas y login. |
| Backend → Google Geocoding API | HTTPS + API Key | Geocodificación de direcciones de las boletas y de los puntos de finalización. |
| Backend → Google Routes API | HTTPS + API Key (servidor) | Optimización del orden de paradas al confirmar un viaje o agregar una parada. |
| Dashboard → Google Maps JavaScript API | HTTPS + API Key | Renderizado de los mapas (Viajes pendientes, Tracking y mapa del repartidor) y armado del link de navegación externa. |
| Repartidor → App Google Maps | Intent / URL Scheme | Al "Iniciar viaje", el navegador redirige a la app de Google Maps con origen (GPS actual), destino y waypoints ya cargados. |
| Backend → Base de datos | TCP / SQL | Conexión a MySQL/MariaDB en InfinityFree. |
| Navegador (repartidor) → Geolocation API | API del navegador | Obtiene la posición GPS real del repartidor, que se envía periódicamente a tracking.php para el mapa de Tracking y la detección de desvíos. |
5.6. Modelo Entidad-Relación de la base de datos
Modelo reconstruido a partir de las 8 tablas existentes en la base de datos (if0_42217493_base_datos, InfinityFree): usuarios, repartidores, camiones, boletas, viajes, posiciones, alertas_sistema y puntos_finalizacion.
if0_42217493_base_datos), incluyendo las migraciones aplicadas durante el desarrollo: migracion_zonas.sql, migracion_geo_aproximada.sql, migracion_dia_hora.sql, migracion_cp.sql, migracion_pospuesta.sql, migracion_destinos.sql y migracion_tracking.sql (22/09/2026, crea posiciones y alertas_sistema, que el código de tracking ya usaba pero nunca se habían creado).- id · PK
- nombre
- usuario (único)
- email (login)
- password_hash
- rol (admin/repartidor)
- id · PK
- usuario_id · FK → USUARIOS
- camion_id · FK → CAMIONES
- id · PK
- patente (único)
- capacidad_kg
- marca, modelo
- estado (disponible/en_viaje/mantenimiento)
- id · PK
- camion_id · FK (nullable)
- repartidor_id · FK
- destino_id · FK → PUNTOS_FIN. (nullable)
- zona, fecha
- estado (armado/confirmado/en_curso/finalizado)
- peso_total, orden_paradas (JSON)
- dia_salida, started_at, finished_at
- id · PK
- viaje_id · FK (nullable)
- cliente, direccion
- lat, lon, cp, barrio, zona
- peso_kg, geo_aproximada
- estado (pendiente/asignada/entregada/pospuesta)
- fecha_carga, entregada_at
- id · PK
- viaje_id · FK
- repartidor_id · FK
- lat, lon, accuracy
- timestamp
- id · PK
- viaje_id · FK (nullable)
- repartidor_id · FK (nullable)
- tipo (desvio/finalizacion/sobrecarga/subutilizacion)
- mensaje, leida
- timestamp
- id · PK
- nombre
- calle, altura, localidad
- provincia, cp
- lat, lon, created_at
Relaciones
| Entidad | Card. | Entidad | Significado |
|---|---|---|---|
| USUARIOS | 1 : 1 | REPARTIDORES | Cada repartidor tiene un usuario de login asociado. |
| CAMIONES | 1 : N | VIAJES | Un camión realiza muchos viajes a lo largo del tiempo. |
| REPARTIDORES | 1 : N | VIAJES | Un repartidor conduce muchos viajes. |
| VIAJES | 1 : N | BOLETAS | Un viaje agrupa varias boletas (paradas) ya ordenadas. |
| VIAJES | 1 : N | POSICIONES | Un viaje en curso genera muchos registros de posición GPS. |
| VIAJES | 1 : N | ALERTAS_SISTEMA | Un viaje puede disparar varias alertas (sobrecarga, subutilización, desvío, finalización). |
| PUNTOS_FINALIZACIÓN | 1 : N | VIAJES | Un punto de finalización puede ser el destino de muchos viajes; si el viaje no tiene uno, termina en la última entrega. |
Esquema relacional (MySQL / MariaDB)
Esquema alineado con el diagrama de arriba: tablas base más las columnas agregadas por las migraciones. Las tablas posiciones, alertas_sistema y puntos_finalizacion se transcriben tal cual de sus migraciones; en ellas las relaciones con viajes son lógicas (índices, sin restricción FK).
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(80) NOT NULL,
usuario VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(120), -- se usa para el login
password_hash VARCHAR(255) NOT NULL,
rol ENUM('admin','repartidor') NOT NULL DEFAULT 'repartidor'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE camiones (
id INT AUTO_INCREMENT PRIMARY KEY,
patente VARCHAR(10) NOT NULL UNIQUE,
capacidad_kg DECIMAL(8,2) NOT NULL,
marca VARCHAR(50),
modelo VARCHAR(50),
estado ENUM('disponible','en_viaje','mantenimiento') NOT NULL DEFAULT 'disponible'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE repartidores (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario_id INT UNIQUE,
camion_id INT NULL,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
FOREIGN KEY (camion_id) REFERENCES camiones(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- migracion_destinos.sql
CREATE TABLE IF NOT EXISTS puntos_finalizacion (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
calle VARCHAR(150) NOT NULL,
altura VARCHAR(20) NOT NULL,
localidad VARCHAR(100) NOT NULL,
provincia VARCHAR(100) NOT NULL,
cp VARCHAR(15) NULL,
lat DECIMAL(10,7) NULL,
lon DECIMAL(10,7) NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE viajes (
id INT AUTO_INCREMENT PRIMARY KEY,
camion_id INT NULL, -- nullable desde migracion_zonas.sql
repartidor_id INT,
destino_id INT NULL, -- migracion_destinos.sql
zona VARCHAR(60),
estado VARCHAR(20) NOT NULL DEFAULT 'armado', -- armado / confirmado / en_curso / finalizado
fecha DATE NOT NULL,
peso_total DECIMAL(8,2),
orden_paradas JSON,
dia_salida DATE, -- migracion_dia_hora.sql
started_at DATETIME,
finished_at DATETIME,
FOREIGN KEY (camion_id) REFERENCES camiones(id),
FOREIGN KEY (repartidor_id) REFERENCES repartidores(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE boletas (
id INT AUTO_INCREMENT PRIMARY KEY,
viaje_id INT NULL,
cliente VARCHAR(120),
direccion VARCHAR(160) NOT NULL,
lat DECIMAL(10,7),
lon DECIMAL(10,7),
cp VARCHAR(15), -- migracion_cp.sql
barrio VARCHAR(80),
zona VARCHAR(60), -- migracion_zonas.sql
peso_kg DECIMAL(8,2) NOT NULL,
geo_aproximada TINYINT(1) DEFAULT 0, -- migracion_geo_aproximada.sql
estado VARCHAR(20) NOT NULL DEFAULT 'pendiente', -- pendiente / asignada / entregada / pospuesta
fecha_carga DATETIME DEFAULT CURRENT_TIMESTAMP,
entregada_at DATETIME, -- migracion_dia_hora.sql
FOREIGN KEY (viaje_id) REFERENCES viajes(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- migracion_tracking.sql (22/09/2026)
CREATE TABLE IF NOT EXISTS posiciones (
id INT AUTO_INCREMENT PRIMARY KEY,
viaje_id INT NOT NULL,
repartidor_id INT NOT NULL,
lat DECIMAL(10,7) NOT NULL,
lon DECIMAL(10,7) NOT NULL,
accuracy FLOAT DEFAULT 0,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_viaje_id (viaje_id),
INDEX idx_timestamp (timestamp)
);
CREATE TABLE IF NOT EXISTS alertas_sistema (
id INT AUTO_INCREMENT PRIMARY KEY,
tipo VARCHAR(30) NOT NULL, -- desvio / finalizacion / sobrecarga / subutilizacion
viaje_id INT NULL,
repartidor_id INT NULL,
mensaje VARCHAR(500) NOT NULL,
leida TINYINT(1) NOT NULL DEFAULT 0,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_viaje_id (viaje_id),
INDEX idx_leida (leida),
INDEX idx_timestamp (timestamp)
);
5.7. Diagrama de flujo del proceso principal
Flujo de extremo a extremo del sistema: desde que Roberto carga las boletas del día hasta que el repartidor finaliza su turno y los datos quedan asentados.
6Oferta de Gestión
6.1. GANTT
Cronograma real de tareas, responsables y duración, organizado en 6 etapas. Inicio del proyecto: 01/04/2026 · Fin previsto: 17/10/2026 (148 días). Roles: PM/DUX (Varela), D01 (Traverso), D02 (Crupi), D03 (García), BD (Silva).
6.2. Equipo de proyecto Buenas Prácticas UTN p.62
Herramientas de gestión
Gestión de tareas
Google Sheets (GANTT y control de cambios), actualizado semana a semana.
Repositorio
GitHub Pages (presentaciones y documentación); código del MVP alojado en InfinityFree.
Diseño de interfaz
Iterada directamente en HTML/CSS sobre el MVP en producción, sin mockup previo en Figma (ver 5.2).
Comunicación interna
WhatsApp de equipo para coordinación diaria; reuniones presenciales para entrevistas con el cliente.
7Oferta Económica
La oferta económica toma como base la columna "Cantidad de trabajo en horas" del Gantt (6.1), que permite calcular las horas-hombre por rol una vez fijado el costo por hora. El stack propio (PHP, MySQL, Vanilla JS y PDF.js) es open-source, así que no hay costos de licencia, y el hosting en InfinityFree es gratuito. Los costos a considerar son las APIs de Google (Geocoding, Routes y Maps JavaScript), que hoy se usan dentro de la cuota gratuita mensual pero requieren facturación habilitada y pasan a tener costo si crece el volumen (ver 4.4.1), y un eventual servicio de SMS o push para RF07.
8Estimación Económica
Hoja de estimación de costos extraída directamente del Gantt del proyecto (6.1). Detalla rubros de horas-hombre por rol, herramientas y servicios externos.
9Contrato
Documento que explicita el acuerdo entre el equipo desarrollador y el cliente, Roberto García (Tres Reyes — Aceitunas y Encurtidos, San Miguel).
9.1. Objetivo del proyecto
Desarrollar y mantener TruckRoute, un sistema de ruteo logístico que calcula rutas óptimas, controla la carga por camión y hace seguimiento de los repartos de Tres Reyes, para eliminar el uso manual de Google Maps y WhatsApp.
9.2. Partes involucradas
Equipo desarrollador (integrantes y roles según 3.3) y cliente: Roberto García, dueño de Tres Reyes — Aceitunas y Encurtidos, San Miguel, Buenos Aires.
9.3. Alcance
Se entrega lo definido en 3.2 y 5 (RF01 a RF10, según prioridad). Queda fuera lo listado en las Limitaciones (5.1): facturación, stock, liquidación de sueldos, integración con terceros, CRM avanzado y soporte multiempresa.
9.4. Plazos
Fechas clave según el cronograma (6.1): inicio del proyecto el 01/04/2026; cierre de E01 y primera presentación el 04/05/2026; cierre de E02 y segunda presentación el 06/07/2026; cierre de E03 el 31/07/2026; tercera presentación el 25/09/2026; fin previsto del proyecto el 17/10/2026 (148 días).
9.5. Responsabilidades
El equipo: desarrollo, endurecimiento de seguridad, puesta en marcha y documentación. El cliente: validar requerimientos y prototipo, y proveer acceso a las boletas y a la operación diaria para las pruebas.
9.6. Criterios de aceptación
Se apoyan en los OKRs del proyecto (4.6): 0 rutas con doble pasada en los primeros 30 días, reducción de distancia recorrida ≥15%, armado de ruta automático en menos de 2 minutos, y que el repartidor complete su jornada usando solo la app.
9.7. Condiciones de modificación
Todo cambio de alcance solicitado durante el desarrollo se registra en el control de cambios (sección 1) y se evalúa su impacto en el GANTT antes de aceptarse.
9.8. Firmas
Firma del equipo desarrollador y de Roberto García (simbólica, en la validación del prototipo).
10Bitácora del Proyecto
Documento de trabajo del equipo. Registra la investigación de campo (entrevistas y minutas) y el seguimiento de la iteración (cambios sobre la interfaz y avances técnicos por etapa). Se actualiza a medida que avanza el proyecto.
Se anota cada instancia de contacto con el cliente y cada hito técnico cerrado, con su fecha. Cuando una de esas instancias deriva en un cambio de alcance o de requerimiento, se replica como fila nueva en el Control de Cambios (sección 1).
10.1. Registro de Entrevistas
Instancias de relevamiento con el cliente y con los usuarios de Tres Reyes. Cada entrevista alimenta un apartado concreto de esta carpeta, por eso se registra el objetivo junto a la fecha.
| Fecha | Con quién | Objetivo | Modalidad |
|---|---|---|---|
| 20/04/2026 | Roberto García | Entrevista 1. Identificación del problema real y relevamiento de la línea de base (dobles pasadas, combustible, control de carga). | Presencial |
| 27/04/2026 | Roberto García, Facundo y Tomás | Entrevista 2. Perfiles de usuario y confirmación de síntomas (formulario v2, escala Likert 1–5). | Presencial |
| 20/05/2026 | Roberto García | Validación del mock-up (E02). Feedback sobre el primer mock-up antes de empezar a programar con base de datos. | Presencial |
| 26/08/2026 | Roberto García | Pruebas con el cliente (E05). Validación del MVP con base de datos: alertas de sobrecarga y primera revisión de las alertas de desvío y del tracking en tiempo real (estos dos quedaron operativos recién el 22/09/2026, ver 5.6). | Presencial |
| 06/09/2026 | Roberto García | Tercera entrevista. Devoluciones del cliente sobre el MVP con base de datos: zonas, tracking, paradas, repartidores y código de seguridad al cliente (minuta 02). | Presencial |
10.2. Minutas de Reunión
Acta breve de cada reunión con el cliente o del equipo. Se completa una minuta por reunión, siempre con los mismos seis campos, para que cualquier participante pueda reconstruir qué se decidió y quién quedó a cargo de qué.
Plantilla de minuta
| Fecha y duración | Día de la reunión y tiempo efectivo. Permite después comparar el esfuerzo real contra el estimado. |
| Participantes | Quiénes estuvieron, con su rol (equipo de proyecto y, si corresponde, cliente). |
| Objetivo | Para qué se convocó la reunión, en una sola frase. |
| Temas tratados | Puntos recorridos durante la reunión, en el orden en que se trataron. |
| Decisiones y acuerdos | Qué quedó definido. Es el campo que puede generar una fila en el Control de Cambios (sección 1). |
| Próximos pasos y responsables | Tareas que salen de la reunión, cada una con su responsable y su fecha comprometida. |
Minuta 01 · Validación del MVP con Roberto García
| Fecha y duración | A completar. Duración estimada: 45 minutos. |
| Participantes | Roberto García (cliente, dueño de Tres Reyes), Varela (PM / UX-UI) y Facundo (Frontend) por el equipo. |
| Objetivo | Validar el panel administrativo de TruckRoute (Boletas, Viajes pendientes, Tracking) con el usuario real antes de sumar las alertas de sobrecarga y desvío. |
| Temas tratados | Recorrido de las pantallas de carga de boletas, armado de viajes y alertas de cierre; lectura de la tabla de Limitaciones del alcance (5.1); prueba del panel en el iPhone de Roberto. |
| Decisiones y acuerdos | Confirmar tipografía mínima de 18px por la dificultad visual de Roberto (RNF02); mantener el lenguaje simple sin jerga técnica; restringir la edición de configuración al perfil administrador. |
| Próximos pasos y responsables | Backend (Traverso / Crupi) implementa RF06 y RF08; el PM abre la fila correspondiente en el Control de Cambios (sección 1) y evalúa el impacto en el GANTT (6.1). |
Minuta 02 · Tercera entrevista: devoluciones del cliente sobre el MVP con BD
| Fecha y duración | 06/09/2026. Duración: ~60 minutos. |
| Participantes | Roberto García (cliente, dueño de Tres Reyes), Varela (PM / UX-UI) por el equipo. |
| Objetivo | Revisar con Roberto el estado del MVP con base de datos y relevar sus devoluciones antes de la tercera presentación. |
| Temas tratados |
|
| Decisiones y acuerdos |
|
| Próximos pasos y responsables | Traverso y Crupi implementan los 5 cambios de funcionalidad; Varela actualiza el Control de Cambios (sección 1) y evalúa impacto en el GANTT (6.1). Todos los cambios fueron implementados en los sprints posteriores a esta reunión. |
10.3. Registro de Cambios del Mockup
A diferencia de un proyecto que parte de un mockup en Figma, el equipo diseñó la interfaz iterando directamente sobre el MVP ya en producción (ver 5.2). Por eso este apartado registra los cambios reales de interfaz que surgieron de cada validación con el usuario.
| Componente modificado | Qué se modificó tras la validación | Por qué (justificación UX / usuario) |
|---|---|---|
| Comunicación de estado | Los estados del viaje se muestran en lenguaje simple (armado, confirmado, en curso, finalizado) en vez de códigos internos. | Facundo y Tomás tienen niveles tecnológicos distintos (4/5 y 3/5); Tomás necesita un flujo autoevidente (RNF05). |
| Tipografía / accesibilidad | Se aumentó el tamaño de fuente a un mínimo de 18px en las pantallas principales del panel. | Roberto declara dificultad visual (RNF02). |
| Roles y permisos | Se restringió la edición de rutas y configuración al perfil administrador; el repartidor solo ve y marca su propia hoja de ruta. | Pedido explícito en la entrevista: separar el acceso total del acceso operativo (RNF04). |
| Inicio de viaje | El botón "Iniciar viaje" pasó de abrir solo la vista de mapa interna (en ese momento con Leaflet; hoy el mapa del repartidor también usa Google Maps) a geolocalizar al repartidor y redirigirlo directamente a la app de Google Maps, con el destino y las paradas intermedias ya cargadas en el orden óptimo. | El repartidor necesitaba una navegación GPS real (giro a giro, tráfico en vivo), algo que un mapa embebido no ofrece; Google Maps ya está instalado en todos los celulares del equipo de reparto. |
| Unificación de zonas | Al confirmar 2 o más zonas con el mismo camión, el sistema las fusiona en un único viaje con una sola ruta optimizada (Google Routes API), visible como una sola fila tanto en "Viajes del día" como en el "Histórico". | Pedido explícito de Roberto en la tercera entrevista (minuta 02): al asignar zonas vecinas al mismo camión, quería verlas como un solo recorrido, no como dos separados. |
| Tracking: paradas visibles en mapa | El mapa de Tracking muestra ahora los marcadores numerados de cada parada pendiente (en el orden real de la ruta); al marcar una entrega, el marcador desaparece del mapa. Si el viaje tiene un punto de finalización configurado, se muestra también. Se agregó un pin fijo de la fábrica y, con varios repartidores en simultáneo, cada viaje usa un color propio (camión, paradas y destino) con íconos diseñados para el sistema. | La pantalla de Tracking no informaba hacia dónde iba el camión; Roberto quería ver en el mapa tanto la posición del vehículo como las paradas que faltaban. |
| Agregar parada a viaje en curso | Se agregó un selector en "Viajes del día" para sumar una boleta sin asignar a un viaje ya confirmado o en curso. La ruta se reoptimiza automáticamente respetando las entregas ya hechas. | Pedido explícito de Roberto: si se olvidó de cargar una boleta a tiempo, necesitaba poder agregarla al viaje sin cancelarlo y volver a empezar. |
| Panel mobile del admin | Se añadió un menú hamburguesa (☰) con overlay para navegar todas las pantallas del panel desde el celular. Antes el menú lateral se ocultaba en pantallas pequeñas sin reemplazo, dejando al admin sin navegación desde el teléfono. | Roberto y el equipo revisan el estado de los viajes desde el celular en tiempo real; necesitaban acceder a Tracking, Alertas y Viajes del día sin depender de una computadora. |
| Boletas pospuestas | Se creó una sección "📋 Boletas pospuestas" en el menú. Al sacar una boleta de un viaje armado (antes de confirmar), pasa a esta sección en lugar de reagruparse sola. Desde ahí se puede agregar a cualquier viaje o devolverla al flujo normal. | Antes, sacar una boleta de un viaje la devolvía al mismo viaje automáticamente. El admin necesitaba poder "apartar" una entrega para un día específico sin perderla. |
| Puntos de finalización configurables | Nueva pestaña "📍 Destinos" en Configuración. El admin carga destinos con nombre y dirección (se geocodifican automáticamente al guardar). Al confirmar un viaje, puede elegir a cuál de estos puntos debe llegar el camión al final; sin elección, termina en la última entrega. | Los camiones no siempre vuelven al mismo depósito; Roberto necesitaba poder configurar distintos puntos de llegada según el día o el viaje. |
| Paradas del mismo cliente | Dos o más boletas del mismo cliente con la misma dirección exacta se agrupan como una sola parada en la ruta y un solo waypoint en Google Maps. | Pedido de Roberto en la minuta 02: la misma dirección repetida contaba como dos paradas y rompía el cálculo de la ruta. |
| Código de seguridad al cliente | Se dejó de enviar el correo con código de seguridad al cliente que recibe la entrega. | Pedido de Roberto en la minuta 02: no lo considera necesario para su operación. |
Cada fila de esta tabla nace de una minuta (10.2) y, cuando implica un cambio de requerimiento o de alcance, se replica como fila nueva en el Control de Cambios (sección 1).
10.4. Bitácora de Avances Técnicos
Hitos técnicos cerrados, en orden cronológico, siguiendo las etapas del cronograma (6.1). Registrar la fecha real de cierre permite comparar el avance efectivo contra el GANTT planificado.
| Etapa | Hitos registrados | Fecha de cierre |
|---|---|---|
| E01 | Entrevistas a Roberto García (20/4 y 27/4), análisis de resultados y presentación de proyecto. Problema y línea de base definidos (sección 2). | 04/05/2026 |
| E02 | Primer mock-up, validación con el cliente, parser de boletas en PDF, despliegue inicial en InfinityFree, segunda presentación. | 06/07/2026 |
| E03 | Diseño y creación de la base de datos MySQL, tablas del sistema, login con roles (bcrypt), conexión BD-front-back. | 31/07/2026 |
| E04 | Geocodificación y ruteo (Nominatim/OSRM → LocationIQ → migración a Google APIs: Geocoding API + Routes API), agrupación por zona, orden de paradas con Nearest Neighbor + Haversine reemplazado por Google Routes API; inicio de viaje geolocalizado con handoff a Google Maps para navegación real; unificación de zonas con el mismo camión; boletas pospuestas; puntos de finalización configurables; agregar parada a viaje activo. | 100% |
| E05 | Alertas de sobrecarga (RF06) y desvío (RF08) implementadas; tracking en tiempo real (RF09) con paradas numeradas, pin de fábrica y colores por viaje; tablas de tracking creadas con migracion_tracking.sql (22/09/2026); panel mobile del admin (hamburguesa); marcadores de repartidor "En viaje / Disponible"; RF10 parcial (falta comparación real vs. estimado). Tercera presentación: 25/09/2026. | 85% |
| E06 | Análisis UX/UI y de accesibilidad, verificación de cumplimiento de RF/RNF, ajustes finales. | No iniciada |
Un hito se da por cerrado cuando su entregable está verificado, no cuando se termina de trabajar en él. Los desvíos respecto del GANTT (6.1) se anotan en la fila correspondiente y se revisan en la reunión siguiente, con su minuta (10.2).