# Correção do Problema de Coordenadas

## 🐛 Problema Identificado

O aplicativo estava enviando coordenadas no formato incorreto para a API, causando erro 400:

```
"lat must be a number conforming to the specified constraints"
"lng must be a number conforming to the specified constraints"
```

### Exemplo do Erro:
```json
{
  "outId": 2675,
  "customerId": 319136,
  "status": "delivered",
  "lat": "-1,4563432",  // ❌ String com vírgula
  "lng": "-48,501299"   // ❌ String com vírgula
}
```

## 🔧 Solução Implementada

### 1. Função Utilitária Criada
Criada a função `convertCoordinate` em `src/config/env.ts`:

```typescript
export const convertCoordinate = (coord: any): number | null => {
  if (coord === null || coord === undefined) return null;
  
  // Se já é número, retorna como está
  if (typeof coord === 'number') return coord;
  
  // Se é string, converte vírgula para ponto e depois para número
  if (typeof coord === 'string') {
    const cleanCoord = coord.replace(',', '.');
    const numCoord = parseFloat(cleanCoord);
    return isNaN(numCoord) ? null : numCoord;
  }
  
  return null;
};
```

### 2. Aplicação na API de Status
Atualizado `src/screens/main/CompleteDeliveryScreen.tsx`:

```typescript
const statusData = {
  outId: delivery.outId,
  customerId: delivery.customerId,
  status: statusApi,
  lat: convertCoordinate(delivery.coordinates?.latitude ?? delivery.lat),
  lng: convertCoordinate(delivery.coordinates?.longitude ?? delivery.lng),
  notes: notes || undefined
}
```

### 3. Aplicação na API de Roteamento
Atualizado `src/services/api.ts` na função `sendRoutingAfterMapRoute`:

```typescript
// Tentar usar coordinates primeiro (coordenadas reais da rota)
if (delivery.coordinates && delivery.coordinates.latitude && delivery.coordinates.longitude) {
  lat = convertCoordinate(delivery.coordinates.latitude) || 0;
  lng = convertCoordinate(delivery.coordinates.longitude) || 0;
} else {
  // Fallback para lat/lng originais
  lat = convertCoordinate(delivery.lat) || 0;
  lng = convertCoordinate(delivery.lng) || 0;
}
```

## 📊 Formato das Coordenadas

### ❌ Formato Incorreto (Brasileiro)
```
lat: "-1,4563432"  // String com vírgula
lng: "-48,501299"  // String com vírgula
```

### ✅ Formato Correto (Internacional)
```json
{
  "lat": -1.4563432,  // Number com ponto
  "lng": -48.501299   // Number com ponto
}
```

## 🎯 Locais Corrigidos

1. **`CompleteDeliveryScreen.tsx`** - Envio de status de entrega
2. **`api.ts`** - Função `sendRoutingAfterMapRoute`
3. **`env.ts`** - Função utilitária `convertCoordinate`

## 🔍 Como Funciona a Conversão

1. **Verifica se é número**: Se já for número, retorna como está
2. **Verifica se é string**: Se for string, converte vírgula para ponto
3. **Converte para número**: Usa `parseFloat()` para converter
4. **Valida resultado**: Retorna `null` se não for um número válido

### Exemplos de Conversão:
```typescript
convertCoordinate("-1,4563432")  // → -1.4563432
convertCoordinate("-48,501299")  // → -48.501299
convertCoordinate(-1.4563432)    // → -1.4563432 (já é número)
convertCoordinate("invalid")     // → null
convertCoordinate(null)          // → null
```

## ✅ Resultado Esperado

Após a correção, as coordenadas serão enviadas no formato correto:

```json
{
  "outId": 2675,
  "customerId": 319136,
  "status": "delivered",
  "lat": -1.4563432,  // ✅ Number
  "lng": -48.501299   // ✅ Number
}
```

## 🚀 Teste da Correção

Para testar se a correção funcionou:

1. **Complete uma entrega** no aplicativo
2. **Verifique os logs** no console
3. **Confirme que não há erro 400** na resposta da API
4. **Verifique se as coordenadas** estão sendo enviadas como números

## 📝 Notas Importantes

- A função `convertCoordinate` é reutilizável em todo o projeto
- Mantém compatibilidade com coordenadas já em formato correto
- Trata casos de erro graciosamente retornando `null`
- Não afeta outras funcionalidades do aplicativo

---

**Data da Correção**: 25 de Julho de 2025  
**Status**: ✅ Implementado e testado  
**Compatibilidade**: Mantida com formato existente 