6.4 KiB
6.4 KiB
Correção do Erro "Nota Fiscal não encontrada"
🚨 Problema Identificado
Erro:
Alert.alert("Erro", "Nota fiscal não encontrada")
Causa Raiz:
O erro estava ocorrendo porque a busca da nota fiscal na função handleSubmit ainda estava usando o campo incorreto invoiceId em vez de invoiceDeliveryId.
🔍 Análise do Problema
1. Inconsistência de Campos
- Seleção: Usava
invoice.invoiceDeliveryId✅ - Busca: Usava
invoice.invoiceId❌ - Resultado: IDs diferentes causavam falha na busca
2. Localização do Erro
// ❌ CÓDIGO INCORRETO (ANTES)
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceId}-${inv.transactionId}` === currentInvoiceId
)
// ✅ CÓDIGO CORRETO (DEPOIS)
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceDeliveryId}-${inv.transactionId}` === currentInvoiceId
)
3. Fluxo do Problema
1. Usuário seleciona nota → invoiceDeliveryId usado ✅
2. Sistema gera uniqueId → invoiceDeliveryId-transactionId ✅
3. Busca da nota → invoiceId usado ❌
4. Comparação falha → "Nota fiscal não encontrada" ❌
🛠️ Solução Implementada
1. Correção da Busca
// Antes: Busca incorreta
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceId}-${inv.transactionId}` === currentInvoiceId
)
// Depois: Busca correta
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceDeliveryId}-${inv.transactionId}` === currentInvoiceId
)
2. Logs de Debug Adicionados
console.log('=== DEBUG: BUSCANDO NOTA FISCAL ===')
console.log('selectedInvoiceIds:', selectedInvoiceIds)
console.log('currentInvoiceIndex:', currentInvoiceIndex)
console.log('currentInvoiceId:', currentInvoiceId)
console.log('customerInvoices:', customerInvoices)
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceDeliveryId}-${inv.transactionId}` === currentInvoiceId
)
console.log('currentInvoice encontrada:', currentInvoice)
if (!currentInvoice) {
console.error('=== ERRO: NOTA FISCAL NÃO ENCONTRADA ===')
console.error('ID buscado:', currentInvoiceId)
console.error('Notas disponíveis:', customerInvoices.map(inv =>
`${inv.invoiceDeliveryId}-${inv.transactionId}`
))
console.error('selectedInvoices:', Array.from(selectedInvoices))
Alert.alert("Erro", "Nota fiscal não encontrada")
return
}
3. Verificação da Estrutura dos Dados
// Verificar estrutura das notas fiscais
if (Array.isArray(invoices) && invoices.length > 0) {
console.log('=== DEBUG: ESTRUTURA DA PRIMEIRA NOTA ===')
const firstInvoice = invoices[0]
console.log('Primeira nota completa:', firstInvoice)
console.log('Campos disponíveis:', Object.keys(firstInvoice))
console.log('invoiceDeliveryId:', firstInvoice.invoiceDeliveryId)
console.log('transactionId:', firstInvoice.transactionId)
console.log('Tipo invoiceDeliveryId:', typeof firstInvoice.invoiceDeliveryId)
console.log('Tipo transactionId:', typeof firstInvoice.transactionId)
}
📋 Campos Corrigidos
Antes (Incorreto):
invoice.invoiceId→ Usado incorretamente na buscainv.invoiceId→ Usado incorretamente no find
Depois (Correto):
invoice.invoiceDeliveryId→ Campo correto para identificaçãoinv.invoiceDeliveryId→ Campo correto usado na busca
🔄 Fluxo Corrigido
1. Seleção da Nota
onPress={() => {
console.log('=== DEBUG: CLIQUE NA NOTA ===')
console.log('InvoiceDeliveryId clicado:', invoice.invoiceDeliveryId)
console.log('TransactionId clicado:', invoice.transactionId)
toggleInvoiceSelection(invoice.invoiceDeliveryId, invoice.transactionId)
}}
2. Geração do UniqueId
const uniqueId = `${invoiceDeliveryId}-${transactionId}`
// Exemplo: "12345-67890"
3. Busca da Nota
const currentInvoice = customerInvoices.find(inv =>
`${inv.invoiceDeliveryId}-${inv.transactionId}` === currentInvoiceId
)
// Agora a busca usa o mesmo campo usado na seleção
🧪 Testes de Validação
1. Teste de Seleção
# Verificar se a seleção gera o ID correto
# UniqueId deve ser: invoiceDeliveryId-transactionId
2. Teste de Busca
# Verificar se a busca encontra a nota selecionada
# currentInvoice deve ser encontrada
3. Teste de Consistência
# Verificar se os campos usados são consistentes
# Seleção e busca devem usar invoiceDeliveryId
📊 Logs de Debug
Logs Adicionados:
- Busca da Nota: Mostra IDs e dados da busca
- Estrutura da API: Verifica campos retornados
- Erro Detalhado: Mostra dados quando falha
- Consistência: Confirma campos usados
Exemplo de Log:
=== DEBUG: BUSCANDO NOTA FISCAL ===
selectedInvoiceIds: ["12345-67890", "12346-67891"]
currentInvoiceIndex: 0
currentInvoiceId: "12345-67890"
customerInvoices: [Array(2)]
currentInvoice encontrada: {invoiceDeliveryId: 12345, transactionId: 67890, ...}
✅ Resultado Esperado
Antes da Correção:
- ❌ Erro "Nota fiscal não encontrada"
- ❌ Falha na finalização da entrega
- ❌ Inconsistência entre seleção e busca
Depois da Correção:
- ✅ Nota fiscal encontrada corretamente
- ✅ Finalização da entrega funciona
- ✅ Consistência entre seleção e busca
- ✅ Logs detalhados para troubleshooting
🔮 Prevenção Futura
1. Validação de Campos
- Sempre usar
invoiceDeliveryIdpara identificação - Verificar consistência entre seleção e busca
- Validar estrutura dos dados da API
2. Logs de Debug
- Manter logs detalhados para troubleshooting
- Verificar estrutura dos dados retornados
- Monitorar IDs gerados e buscados
3. Testes
- Testar seleção de múltiplas notas
- Verificar busca em diferentes índices
- Validar fluxo completo de finalização
📝 Resumo da Correção
O erro "Nota Fiscal não encontrada" foi causado por uma inconsistência entre os campos usados na seleção (invoiceDeliveryId) e na busca (invoiceId).
Solução implementada:
- ✅ Corrigir busca para usar
invoiceDeliveryId - ✅ Adicionar logs de debug detalhados
- ✅ Verificar estrutura dos dados da API
- ✅ Garantir consistência em todo o fluxo
A aplicação agora deve funcionar corretamente, permitindo a finalização das entregas sem erros de busca de notas fiscais.