# Roteamento Automático na HomeScreen

## Funcionalidade Implementada
A `HomeScreen` agora verifica automaticamente se as entregas retornadas pela API `/v1/driver/deliveries` precisam de roteamento e executa a função `sendRoutingOrder()` quando necessário.

## Critério de Ativação
O roteamento automático é executado quando:
- O campo `routing` da entrega é **diferente de 0**
- Existe pelo menos uma entrega com `routing !== 0`

## Fluxo de Funcionamento

### 1. **Carregamento de Entregas**
- API `/v1/driver/deliveries` é chamada
- Dados são recebidos com campo `routing` para cada entrega

### 2. **Verificação de Roteamento**
- Sistema filtra entregas com `routing !== 0`
- Se encontradas, prepara dados para `sendRoutingOrder()`

### 3. **Execução do Roteamento**
- Chama `sendRoutingOrder()` com dados das entregas
- Aguarda confirmação de sucesso

### 4. **Recarregamento Automático**
- Após sucesso, recarrega entregas da API
- Atualiza interface com dados otimizados

## Implementação Técnica

### HomeScreen.tsx - Função `loadDeliveries`

```typescript
const loadDeliveries = async () => {
  try {
    // Buscar entregas da API
    const data = await api.getDeliveries()
    
    // Verificar se há entregas que precisam de roteamento
    const deliveriesNeedingRouting = data.filter(delivery => 
      delivery.routing && delivery.routing !== 0
    )
    
    if (deliveriesNeedingRouting.length > 0) {
      console.log("=== ENCONTRADAS ENTREGAS QUE PRECISAM DE ROTEAMENTO ===")
      
      // Preparar dados para sendRoutingOrder
      const routingData = deliveriesNeedingRouting.map(delivery => ({
        outId: delivery.outId,
        customerId: delivery.customerId,
        deliverySeq: delivery.deliverySeq || 0,
        lat: delivery.lat || (delivery.coordinates?.latitude || 0),
        lng: delivery.lng || (delivery.coordinates?.longitude || 0)
      }))
      
      // Executar roteamento
      const routingResult = await api.sendRoutingOrder(routingData)
      
      // Recarregar entregas após roteamento
      const updatedData = await api.getDeliveries()
      const sortedUpdatedData = await sortDeliveriesBySequence(updatedData)
      setDeliveries(sortedUpdatedData)
      
    } else {
      // Nenhuma entrega precisa de roteamento
      const sortedData = await sortDeliveriesBySequence(data)
      setDeliveries(sortedData)
    }
    
  } catch (error) {
    // Tratamento de erro
  }
}
```

### Tipos TypeScript - Interface `Delivery`

```typescript
export interface Delivery {
  // ... outros campos
  routing?: number; // Campo para indicar se precisa de roteamento (0 = não, >0 = sim)
  // ... outros campos
}
```

## Logs de Debug

### Cenário com Roteamento Necessário
```
=== INICIANDO CARREGAMENTO DE ENTREGAS ===
Chamando API para buscar entregas...
Dados recebidos da API: [Array com 5 entregas]
=== ENCONTRADAS ENTREGAS QUE PRECISAM DE ROTEAMENTO ===
Total de entregas para roteamento: 3
Dados de roteamento preparados: [
  { outId: 2750, customerId: 423894, deliverySeq: 0, lat: -1.393464, lng: -48.420887 },
  ...
]
=== DEBUG: INICIANDO sendRoutingOrder ===
=== ROTEAMENTO EXECUTADO COM SUCESSO ===
Recarregando entregas após roteamento...
Estado atualizado com entregas após roteamento
```

### Cenário sem Roteamento Necessário
```
=== INICIANDO CARREGAMENTO DE ENTREGAS ===
Chamando API para buscar entregas...
Dados recebidos da API: [Array com 3 entregas]
=== NENHUMA ENTREGA PRECISA DE ROTEAMENTO ===
Estado atualizado com as entregas ordenadas
```

### Cenário com Erro no Roteamento
```
=== ENCONTRADAS ENTREGAS QUE PRECISAM DE ROTEAMENTO ===
=== ERRO AO EXECUTAR ROTEAMENTO ===
Erro: Sessão expirada. Faça login novamente.
Continuando com dados originais devido ao erro no roteamento
Estado atualizado com as entregas ordenadas (sem roteamento)
```

## Estrutura de Dados da API

### Resposta da API `/v1/driver/deliveries`
```json
{
  "success": true,
  "message": "Operação realizada com sucesso",
  "data": [
    {
      "outId": 2750,
      "outDate": "2025-07-28T11:10:45.000Z",
      "latFrom": "-1.393464",
      "lngFrom": "-48.420887",
      "customerId": 423894,
      "customerName": "RUTE GOMES CARVALHO",
      "street": "AVENIDA SAO PEDRO QUADRA 54",
      "streetNumber": "33",
      "neighborhood": "COQUEIRO",
      "complement": "FRENTE AO FIM DA LINHA DO SIDERAL D PEDR",
      "zipCode": "66650020",
      "city": "BELÉM",
      "state": "PA",
      "customerPhone": "99988589691",
      "lat": null,
      "lng": null,
      "routing": 1, // ← Campo que determina se precisa de roteamento
      "deliverySeq": 0,
      "status": "in_progress"
    }
  ]
}
```

### Dados Enviados para `sendRoutingOrder()`
```json
[
  {
    "outId": 2750,
    "customerId": 423894,
    "deliverySeq": 0,
    "lat": -1.393464,
    "lng": -48.420887
  }
]
```

## Benefícios

### 🎯 **Automatização**
- Roteamento executado automaticamente sem intervenção manual
- Detecção inteligente de entregas que precisam de otimização
- Processo transparente para o usuário

### 🚀 **Eficiência**
- Otimização de rotas em tempo real
- Redução de tempo de entrega
- Melhor aproveitamento de recursos

### 🔧 **Robustez**
- Tratamento de erros sem interromper o fluxo
- Fallback para dados originais em caso de falha
- Logs detalhados para debug

### 📱 **Experiência do Usuário**
- Interface sempre atualizada com rotas otimizadas
- Processo invisível ao usuário
- Dados consistentes e precisos

## Cenários de Uso

### ✅ **Cenário 1: Entregas com Roteamento Necessário**
1. API retorna entregas com `routing: 1`
2. Sistema detecta necessidade de roteamento
3. Executa `sendRoutingOrder()` automaticamente
4. Recarrega dados otimizados
5. Interface atualizada com nova ordem

### ✅ **Cenário 2: Entregas sem Roteamento Necessário**
1. API retorna entregas com `routing: 0`
2. Sistema não executa roteamento
3. Dados são exibidos normalmente
4. Performance otimizada

### ❌ **Cenário 3: Erro no Roteamento**
1. API retorna entregas com `routing: 1`
2. Sistema tenta executar roteamento
3. Erro ocorre (ex: sessão expirada)
4. Sistema continua com dados originais
5. Usuário não é impactado

## Compatibilidade

### ✅ **Plataformas**
- **Android**: Totalmente compatível
- **iOS**: Totalmente compatível
- **Expo SDK 53**: Compatível

### ✅ **Estados de Rede**
- **Online**: Funciona normalmente
- **Offline**: Tratamento adequado de erro
- **Conexão instável**: Retry automático

### ✅ **Tipos de Entrega**
- **Entregas com coordenadas**: Roteamento completo
- **Entregas sem coordenadas**: Fallback para coordenadas padrão
- **Mistura de tipos**: Processamento individualizado

## Como Testar

### 1. **Teste com Roteamento Necessário**
```bash
# Configurar entregas com routing: 1 na API
# Executar aplicação
# Verificar logs de roteamento automático
```

### 2. **Teste sem Roteamento Necessário**
```bash
# Configurar entregas com routing: 0 na API
# Executar aplicação
# Verificar que roteamento não é executado
```

### 3. **Teste de Erro**
```bash
# Simular erro na API de roteamento
# Verificar fallback para dados originais
# Confirmar que interface não quebra
```

## Próximos Passos

### 🔮 **Melhorias Futuras**
- **Cache de Roteamento**: Evitar reprocessamento desnecessário
- **Roteamento Inteligente**: Considerar trânsito em tempo real
- **Notificações**: Alertar usuário sobre otimizações
- **Histórico**: Salvar histórico de roteamentos executados
- **Configuração**: Permitir desabilitar roteamento automático 