entregas_app/docs/CORRECAO_COORDENADAS.md

147 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

# 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