Volver a proyectos
Captura de LogiMatch

LogiMatch

Del pedido al mapa del conductor: rutas optimizadas, asignación inteligente y seguimiento en tiempo real.

Coordinar pedidos, flota y entregas con planillas y mensajes sueltos genera rutas ineficientes y entregas fuera de horario. LogiMatch centraliza el proceso: recibe pedidos, arma rutas según capacidad, prioridades y ventanas horarias, y sugiere el conductor más conveniente para cada entrega. El equipo sigue el avance desde un panel y el conductor recibe su recorrido en el móvil, con mapa y actualizaciones en tiempo real. Así se detectan demoras antes de que ocurran y se reprograma lo necesario sin perder trazabilidad.

  • .NET 9
  • ASP.NET Core
  • C#
  • EF Core
  • SQL Server
  • React 19
  • TypeScript
  • Tailwind CSS
  • SignalR
  • Google OR-Tools
  • OpenRouteService
  • Docker
  • GitHub Actions

Imágenes del proyecto

Captura de LogiMatch 1
Captura de LogiMatch 2
Captura de LogiMatch 3
Captura de LogiMatch 4
Captura de LogiMatch 5
Captura de LogiMatch 6

Qué lo hace interesante

Planificación CVRPTW con OR-Tools

El preview toma todos los envíos pendientes, arma el problema de ruteo con capacidad, ventanas horarias y un horizonte de 12 horas con OpenRouteService. Luego Google OR-Tools decide qué vehículo sirve cada envío y en qué orden, con un costo de arco ponderado por prioridad y sin descartar envíos de forma silenciosa ya que los envíos y conductores no viables aparecen apartados con su motivo.

Asignación de conductores con scoring

Cada candidato se filtra primero por factibilidad de ventana horaria y capacidad, y luego se rankea con siete métricas normalizadas: entregas exitosas del día, envíos pendientes, en progreso, distancia, duración, capacidad libre y costo estimado de operación. El costo combina salario, consumo, combustible, mantenimiento y peajes, y la política de elegibilidad evita que los umbrales recorten la flota por debajo de la carga a transportar. Cada descarte se explica con su motivo y su score.

Riesgo de demora y prioridad automática

Un job recurrente de Hangfire recalcula cada 10 minutos el riesgo de demora del envío actual de cada ruta activa combinando holgura de la ventana, velocidad implícita restante y envíos en cola, y lo expone como índice 0–100 en el dashboard. En paralelo, un scoring del dominio recalcula la prioridad de los envíos pendientes ante altas, cancelaciones de ruta y fallos de entrega. Así la operación prioriza por urgencia real y no por orden de carga.

Panel del conductor en tiempo real

La vista mobile-first usa React Leaflet con OpenStreetMap, geolocalización por `watchPosition` y SignalR para recibir rutas asignadas o canceladas sin recargar. Las paradas se ordenan con una política de secuencia del dominio y las acciones respetan la máquina de estados del envío (iniciar, detener, reanudar, llegar, registrar intento). Un bottom sheet con Vaul y modales accesibles mantienen los controles al alcance del pulgar.

Arquitectura

LogiMatch implementa una variante de Clean Architecture con una regla de dependencia estricta: API → Application → Domain, mientras Infrastructure implementa las abstracciones que Application declara. El repositorio separa `src/Domain`, `src/Application`, `src/Infrastructure`, `src/API`, los proyectos de test y `front/`; Domain no conoce EF Core, ASP.NET ni JSON, y los controladores no contienen lógica de negocio. FluentValidation valida cada request y la inyección de dependencias se registra por capa.

src/Domain/

Entidades ricas, value objects y enums. Concentra invariantes, la máquina de estados del envío, la política de secuencia de paradas, los cálculos puros de scoring, costos de operación y riesgo de demora, sin dependencias externas.

src/Application/

Casos de uso por agregado que orquestan validación, repositorios e IUnitOfWork. Declara los contratos de persistencia e integraciones externas, los DTOs y el modelo del problema de ruteo (CVRPTW).

src/Infrastructure/

Implementaciones EF Core (DbContext, configuraciones, repositorios, migraciones e interceptor de auditoría), clientes de OpenRouteService, email con MailKit, solver OR-Tools y seed de datos demo.

src/API/

Composición raíz y entrada HTTP: controladores REST, Identity + JWT, policies AdminOnly/DriverOnly, hub de SignalR, manejo global de excepciones, OpenAPI/Scalar, health checks y jobs de Hangfire.

Frontend

React 19 + TypeScript + Vite con Tailwind CSS, React Router 7 con guards por rol, Zustand para la sesión y un cliente `fetch` tipado con `ApiError`. La organización es por features (`auth`, `admin/dashboard|orders|shipments|routes|route-planning`, `driver/home`), con `components/ui` como design system, `hooks`, `lib` (tipos, formato y realtime) y `config`. El panel del conductor suma Leaflet, SignalR, geolocalización y Vaul; el build verifica TypeScript y Oxlint.

Características principales

  • Pedidos y envíos: alta de pedidos con items, peso, precio y ventana horaria; cada pedido genera un envío con prioridad calculada automáticamente.
  • Máquina de estados del envío: Pending → InProgress → Stopped → Arrived → Finalized/DeliveryFailed/Cancelled, con hasta 3 intentos separados por 5 minutos e historial de cada transición.
  • Planificación de rutas: preview read-only de todos los pendientes con selección driver → vehículo y depósito opcional, propuesta óptima y commit que persiste las paradas en el orden planificado.
  • Sugerencia y reasignación de conductores: ranking explicable por factibilidad, capacidad, distancia, carga y costo de operación, con soporte para cancelar y reprogramar una ruta completa.
  • Panel del conductor: mapa con ubicación y paradas, pedido actual con acciones por estado, próximos envíos y cancelación de ruta con reprogramación automática y aviso por email a administradores.
  • Monitoreo operativo: dashboard con envíos pendientes, prioridad urgente y riesgo de demora, más catálogos de clientes, vehículos y depósitos activos para la planificación.
  • Seguridad y roles: Identity + JWT con claims y policies que separan la administración de la operación en terreno; secretos fuera del repositorio y CORS restringido por origen en producción.

Calidad y despliegue

  • Testing con xUnit 2.9, Moq y coverlet: más de 550 casos sobre reglas de dominio, servicios, validadores, clientes ORS y solver. La suite de integración usa WebApplicationFactory contra SQL Server real, dobles de geocoding/routing/email y un servidor SMTP falso.
  • C# con nullable e implicit usings, FluentValidation en cada request y un handler global que mapea excepciones a 400/404/409/500. El frontend usa TypeScript estricto y Oxlint (`pnpm lint`, `tsc -b` + Vite en `pnpm build`), aunque esa verificación todavía corre local y no en CI.
  • CI en GitHub Actions con dos jobs: build-and-test (restore, build Release, unit tests e integration tests con SQL Server 2022 como service container, artefactos TRX) y docker-build (valida la imagen multi-stage de la API).
  • Deploy: entorno reproducible con Docker Compose (API .NET en :8080 + SQL Server 2022 con volumen y healthcheck en `/health`). El workflow de despliegue a Oracle Cloud VM y Vercel está preparado pero deshabilitado a propósito; todavía no hay URL pública.

¿Querés ver el resto?

Explorá otros proyectos donde aplico buenas prácticas de arquitectura, rendimiento y experiencia de usuario.

Ver todos los proyectos