13 KiB
13 KiB
📋 Documentação Técnica - Módulo de Rotas
ERP SAAS para Transportadoras
🎯 Visão Geral do Módulo
O módulo Rotas é o núcleo operacional do sistema, conectando todos os elementos já existentes (motoristas, veículos, rastreamento) em um fluxo completo de gestão de viagens de transporte.
Integração com Módulos Existentes:
- ✅ Motoristas: Atribuição automática e manual
- ✅ Veículos: Vinculação com telemetria em tempo real
- ✅ Rastreamento: Monitoramento GPS contínuo
- ✅ App Mobile: Sincronização bidirecional de status
Localização no Sistema:
- Sidebar: "Rotas"
- Ícone:
fa-route - Ordem: Após "Veículos" e "Motoristas"
🏗️ Estrutura de Dados (camelCase)
📊 Entidade Principal: Route
interface Route {
// Identificação
id: string;
routeNumber: string; // Ex: "RT-2024-001234"
// Classificação
type: 'firstMile' | 'lineHaul' | 'lastMile';
modal: 'rodoviario' | 'aereo' | 'aquaviario';
priority: 'normal' | 'express' | 'urgent';
// Participantes
driverId: string;
vehicleId: string;
companyId: string;
customerId: string;
// Trajeto
origin: {
address: string;
coordinates: { lat: number; lng: number };
contact: string;
phone: string;
};
destination: {
address: string;
coordinates: { lat: number; lng: number };
contact: string;
phone: string;
};
// Cronograma
scheduledDeparture: Date;
actualDeparture?: Date;
estimatedArrival: Date;
actualArrival?: Date;
// Status operacional
status: 'pending' | 'inProgress' | 'completed' | 'delayed' | 'cancelled';
currentLocation?: { lat: number; lng: number };
// Financeiro
contractId: string;
tablePricesId: string;
totalValue: number;
totalWeight: number; // em kg
estimatedCost: number;
actualCost?: number;
// Produto
productType: string; // Ex: "Medicamentos", "Eletrônicos", "Alimentos"
// Metadados
createdAt: Date;
updatedAt: Date;
createdBy: string;
}
📦 Entidades Relacionadas
RouteStop (Paradas da Rota) ⚠️ ATUALIZADO - Ver especificação completa
interface RouteStop {
id: string;
routeId: string;
sequence: number;
type: 'pickup' | 'delivery' | 'rest' | 'fuel';
location: {
address: string;
coordinates: { lat: number; lng: number };
contact?: string;
phone?: string;
cep?: string;
city?: string;
state?: string;
};
scheduledTime: Date;
actualTime?: Date;
status: 'pending' | 'completed' | 'failed' | 'skipped';
// Dados específicos de entrega/coleta
packages?: number;
weight?: number;
volume?: number;
referenceNumber?: string;
// 📄 NOVO: Documento Fiscal Integrado
fiscalDocument?: FiscalDocument;
// Evidências do app mobile
photos?: string[];
signature?: string;
notes?: string;
completionEvidence?: {
photoPackage: string;
photoReceipt: string;
digitalSignature: string;
recipientName: string;
completionTime: Date;
};
}
// 📄 NOVA Interface para Documentos Fiscais
interface FiscalDocument {
fiscalDocumentId: string;
documentType: 'NFe' | 'NFCe';
documentNumber: string;
series: string | null;
accessKey: string | null;
issueDate: Date;
totalValue: number;
productType: string;
status: 'pending' | 'validated' | 'error';
createdAt: Date;
updatedAt: Date;
}
📋 Especificação Completa: Ver ROUTE_STOPS_MODULE_SPECIFICATION.md
RouteCost (Custos da Rota)
interface RouteCost {
id: string;
routeId: string;
type: 'fuel' | 'toll' | 'parking' | 'fine' | 'maintenance' | 'other';
description: string;
amount: number;
currency: 'BRL';
// Vinculação automática por telemetria
autoDetected: boolean;
vehicleTrackingEventId?: string;
// Dados da transação
transactionDate: Date;
location?: { lat: number; lng: number };
receiptPhoto?: string;
// Aprovação
status: 'pending' | 'approved' | 'rejected';
approvedBy?: string;
approvedAt?: Date;
}
RouteDocument (Documentos da Rota)
interface RouteDocument {
id: string;
routeId: string;
type: 'cte' | 'nfe' | 'deliveryProof' | 'receipt' | 'fine' | 'other';
name: string;
fileUrl: string;
fileSize: number;
mimeType: string;
uploadedBy: string;
uploadedAt: Date;
source: 'web' | 'mobile' | 'automatic';
}
🖥️ Interface do Usuário
📋 Tela Principal - Lista de Rotas
Layout baseado nas imagens de referência:
Filtros Avançados:
interface RouteFilters {
dateRange: { start: Date; end: Date };
status: RouteStatus[];
driverId?: string;
vehicleId?: string;
type?: RouteType[];
modal?: RouteModal[];
originCity?: string;
destinationCity?: string;
customerId?: string;
productType?: string;
}
Colunas da Tabela:
- Ações (checkbox, editar)
- ID (routeNumber)
- Tipo (badge colorido: First Mile 🟢, Line Haul 🟠, Last Mile 🔵)
- Cliente/Embarcador
- Origem → Destino
- Status (badge: Pendente, Em Trânsito, Entregue, Atrasada)
- Data/Hora Início
- Motorista
- Veículo (placa)
- Valor (totalValue)
- Peso (totalWeight)
- Produto (productType)
Estados de Status:
- 🟡 Pending: Rota criada, aguardando início
- 🔵 InProgress: Veículo em movimento
- 🟢 Completed: Rota finalizada com sucesso
- 🔴 Delayed: Passou do prazo estimado
- ⚫ Cancelled: Rota cancelada
📍 Tela de Detalhes da Rota
Estrutura em abas (baseada no padrão do sistema):
Aba 1: Dados Básicos
- Informações gerais da rota
- Origem e destino
- Cronograma planejado vs real
- Status atual
- Dados do contrato e tabela de preços
Aba 2: Localização
- Mapa em tempo real com posição atual do veículo
- Histórico de trajeto
- Paradas planejadas vs realizadas
- Alertas de desvio de rota
Aba 3: Paradas
- Lista de todas as paradas (coletas/entregas)
- Status de cada parada
- Evidências fotográficas do app mobile
- Assinaturas digitais
Aba 4: Custos
- Custos automáticos (combustível, pedágios)
- Custos manuais inseridos
- Aprovação de custos
- Margem de lucro da rota
Aba 5: Documentos
- CT-e, NF-e
- Fotos de entrega
- Comprovantes de custos
- Relatórios gerados
Aba 6: Histórico
- Log de alterações de status
- Comunicações com motorista
- Eventos de telemetria relevantes
📱 Integração com App Mobile
Sincronização Bidirecional:
Do Web para Mobile:
- Nova rota atribuída ao motorista
- Alterações no cronograma
- Novas paradas adicionadas
- Instruções especiais
Do Mobile para Web:
- Início/fim da rota
- Check-in em paradas
- Fotos de entrega
- Assinaturas digitais
- Ocorrências (atraso, problema)
Eventos do App Mobile:
interface MobileRouteEvent {
id: string;
routeId: string;
driverId: string;
type: 'routeStarted' | 'stopArrived' | 'deliveryCompleted' |
'pickupCompleted' | 'routeCompleted' | 'incidentReported';
timestamp: Date;
location: { lat: number; lng: number };
data: {
photos?: string[];
signature?: string;
recipientName?: string;
notes?: string;
incidentType?: string;
};
}
🔄 Fluxo Operacional
1. Criação da Rota
- Planejamento: Definir origem, destino, paradas
- Atribuição: Selecionar motorista e veículo
- Cronograma: Definir horários de partida e chegada
- Contrato: Vincular contractId e tablePricesId
- Aprovação: Validar rota antes do envio
2. Execução da Rota
- Notificação: Motorista recebe rota no app
- Início: Motorista confirma saída
- Monitoramento: Tracking GPS contínuo
- Paradas: Check-in/out em cada localização
- Evidências: Fotos e assinaturas coletadas
3. Finalização
- Chegada: Confirmação de entrega final
- Custos: Reconciliação de gastos
- Documentação: Upload de comprovantes
- Fechamento: Análise financeira da rota
💰 Gestão Financeira
Custos Automáticos (via Telemetria):
- Combustível: Baseado em consumo real do veículo
- Pedágios: Detecção automática por localização
- Tempo de motor ligado: Custos operacionais
Custos Manuais:
- Estacionamentos
- Refeições
- Manutenções emergenciais
- Multas
Receitas:
- Valor do frete (totalValue)
- Taxas adicionais
- Bonificações por performance
Indicadores:
- Margem da Rota: (totalValue - actualCost) / totalValue
- Custo por KM: actualCost / Distância percorrida
- Custo por KG: actualCost / totalWeight
- ROI por Veículo: Análise de rentabilidade
🚨 Alertas e Notificações
Alertas Automáticos:
- Atraso: Rota com mais de 30min de atraso
- Desvio: Veículo fora da rota planejada
- Parada Prolongada: Mais de 2h parado sem justificativa
- Combustível: Nível baixo detectado
Notificações para Stakeholders:
- Cliente: Status de entrega atualizado
- Motorista: Novas instruções ou alterações
- Gestor: Relatórios de performance
- Financeiro: Custos que excedem orçamento
📊 Relatórios e Analytics
Dashboards:
- Operacional: Rotas em andamento, atrasos, performance
- Financeiro: Custos, receitas, margens por período
- Motoristas: Ranking, eficiência, cumprimento de prazos
- Veículos: Utilização, consumo, manutenções
Relatórios Exportáveis:
- Relatório de rota individual (PDF)
- Planilha de custos por período
- Análise de performance de motoristas
- Relatório de compliance (documentação)
🔧 Aspectos Técnicos
APIs Necessárias:
- Geocoding: Conversão endereço ↔ coordenadas
- Routing: Cálculo de rotas otimizadas
- Telemetria: Integração com rastreadores
- CTe/NFe: Integração com SEFAZ para documentos fiscais
Integrações:
- ERP Clientes: Importação automática de pedidos
- Sistemas de Pagamento: Cobrança automática
- WhatsApp Business: Notificações para clientes
- Sistemas de Combustível: Cartões corporativos
Performance:
- Cache de rotas ativas para consulta rápida
- Indexação por data, status, motorista, veículo
- Compressão de imagens do mobile
- Sincronização offline no app mobile
🎯 Próximos Passos de Implementação
Fase 1 - MVP:
- ✅ CRUD básico de rotas
- ✅ Atribuição motorista/veículo
- ✅ Tracking GPS básico
- ✅ Status manual no app mobile
Fase 2 - Operacional:
- 🔄 Sistema de paradas
- 🔄 Upload de evidências (fotos/assinaturas)
- 🔄 Gestão de custos
- 🔄 Relatórios básicos
Fase 3 - Avançado:
- ⏳ Alertas automáticos
- ⏳ Otimização de rotas
- ⏳ Integração fiscal (CTe)
- ⏳ Analytics avançados
📋 Checklist de Funcionalidades
Interface Web:
- Lista de rotas com filtros avançados
- Formulário de criação/edição de rota
- Visualização em mapa (tempo real)
- Gestão de paradas
- Upload de documentos
- Relatórios financeiros
- Dashboard operacional
App Mobile:
- Lista de rotas do motorista
- Navegação integrada
- Check-in/out em paradas
- Captura de fotos
- Assinatura digital
- Relatório de ocorrências
- Modo offline
Integrações:
- API de rastreamento
- Geocoding/routing
- Sincronização web ↔ mobile
- Notificações push
- Integração financeira
- Backup automático
📈 Dados Mockados (500 Rotas)
Distribuição por Tipo:
- First Mile: 60% (300 rotas) - Coleta em centros de distribuição
- Line Haul: 25% (125 rotas) - Transporte entre cidades
- Last Mile: 15% (75 rotas) - Entrega final (Mercado Livre, Shopee, Amazon)
Distribuição por Modal:
- Rodoviário: 95% (475 rotas)
- Aéreo: 3% (15 rotas)
- Aquaviário: 2% (10 rotas)
Distribuição por Status:
- Pending: 10% (50 rotas)
- InProgress: 40% (200 rotas)
- Completed: 35% (175 rotas)
- Delayed: 10% (50 rotas)
- Cancelled: 5% (25 rotas)
Regiões Contempladas:
- Rio de Janeiro: 30% (150 rotas)
- São Paulo: 35% (175 rotas)
- Minas Gerais: 25% (125 rotas)
- Vitória/ES: 10% (50 rotas)
Tipos de Produtos:
- Medicamentos
- Eletrônicos
- Alimentos Perecíveis
- Alimentos Não Perecíveis
- Roupas e Acessórios
- Livros e Papelaria
- Casa e Decoração
- Cosméticos
- Automotive
- Brinquedos
Características das Rotas Last Mile:
- Endereços residenciais em bairros urbanos
- Marketplace: Mercado Livre (40%), Shopee (35%), Amazon (25%)
- Veículos menores: Van, Veículo de Passeio, Rental Utilitário
- Peso médio: 2-15kg por entrega
- Valor médio: R$ 25,00 - R$ 150,00
Placas de Veículos Reais:
Utilizando dados do arquivo mercado-lives_export.csv:
- TAS4J92, MSO5821, TAS2F98, RJZ7H79, TAO3J98
- TAN6I73, SGD4H03, NGF2A53, TAS2F32, RTT1B46
- EZQ2E60, TDZ4J93, SGL8D98, TAS2F83, RVC0J58
- E mais 250+ placas reais do sistema
Esta documentação serve como base para o desenvolvimento do módulo de Rotas, mantendo consistência com os padrões já estabelecidos no sistema e aproveitando as integrações existentes.