# 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