5.2 KiB
5.2 KiB
🔧 Correções no Sistema de Devoluções/Trocas
Problemas Identificados e Corrigidos
❌ Problema Original:
- Devoluções acumulavam registros em vez de devolver produtos ao estoque
- Trocas não controlavam corretamente o estoque (entrada/saída)
- Possibilidade de devolver mais itens do que foi vendido
- Registros duplicados de devoluções
✅ Soluções Implementadas:
1. Controle de Estoque em Devoluções
Antes:
// Sempre retornava ao estoque, mesmo em trocas
const novoEstoque = estoqueAtual + quantidadeDevolvida;
Depois:
// Só retorna ao estoque se for devolução pura (não troca)
if (itemOriginal.variacao_id && tipo_operacao !== 'troca') {
const novoEstoque = (variacaoAtual.quantidade || 0) + parseInt(quantidade_devolvida);
// Atualizar estoque...
console.log(`✅ Estoque atualizado: +${quantidade_devolvida} unidades`);
}
2. Controle de Estoque em Trocas
Lógica Corrigida:
- Produto Original (devolvido): Volta ao estoque
- Produto Novo (trocado): Sai do estoque
- Registro: Apenas um registro de devolução + item novo na venda
Implementação:
// Para trocas, devolver produto original ao estoque
if (itemOriginal && itemOriginal.variacao_id) {
const novoEstoque = (variacaoAtual.quantidade || 0) + parseInt(quantidade_devolvida);
console.log(`✅ Produto original retornado ao estoque na troca: +${quantidade_devolvida} unidades`);
}
// Reduzir estoque do produto novo
const novoEstoque = (variacaoAtual.quantidade || 0) - parseInt(quantidade);
console.log(`✅ Estoque reduzido na troca: -${quantidade} unidades`);
3. Validação Anti-Duplicação
Verificação de Devoluções Anteriores:
// Verificar se já foi devolvido anteriormente
const { data: devolucaoExistente } = await supabase
.from('devolucoes')
.select('quantidade_devolvida')
.eq('venda_id', venda_id)
.eq('item_id', item_id);
const quantidadeJaDevolvida = devolucaoExistente?.reduce((total, dev) =>
total + parseInt(dev.quantidade_devolvida), 0) || 0;
const quantidadeDisponivel = parseInt(itemOriginal.quantidade) - quantidadeJaDevolvida;
if (parseInt(quantidade_devolvida) > quantidadeDisponivel) {
throw new Error(`Quantidade de devolução (${quantidade_devolvida}) maior que disponível (${quantidadeDisponivel})`);
}
4. API de Limpeza de Duplicatas
Nova Rota:
POST /api/devolucoes/limpar-duplicadas
Funcionalidade:
- Identifica devoluções duplicadas (mesmo venda_id, item_id, data)
- Remove registros duplicados automaticamente
- Retorna quantidade de registros removidos
5. Logs Detalhados
Monitoramento em Tempo Real:
console.log(`✅ Estoque atualizado: +${quantidade_devolvida} unidades (novo total: ${novoEstoque})`);
console.log(`✅ Estoque reduzido na troca: -${quantidade} unidades (novo total: ${novoEstoque})`);
console.log(`✅ Produto original retornado ao estoque na troca: +${quantidade_devolvida} unidades`);
📋 Fluxos Corrigidos
Devolução Simples:
- ✅ Verifica se quantidade não excede o vendido
- ✅ Retorna produto ao estoque
- ✅ Registra devolução única
- ✅ Atualiza valor da venda
Troca de Produto:
- ✅ Verifica estoque do produto novo
- ✅ Retorna produto original ao estoque
- ✅ Reduz estoque do produto novo
- ✅ Adiciona item novo à venda
- ✅ Registra devolução do item original
- ✅ Calcula diferença de valores
🧪 Como Testar
1. Teste de Devolução:
# Executar script de verificação
node scripts/fix-devolucoes.js
2. Teste Manual:
- Acesse Devoluções/Trocas
- Selecione uma venda
- Escolha "Devolução"
- Verifique se o estoque aumentou
- Tente devolver o mesmo item novamente (deve dar erro)
3. Teste de Troca:
- Selecione uma venda
- Escolha "Troca"
- Selecione produto para devolver
- Selecione produto novo
- Verifique:
- Produto original voltou ao estoque
- Produto novo saiu do estoque
- Venda foi atualizada com novo item
🔍 Verificações de Integridade
Comandos Úteis:
-- Verificar devoluções por venda
SELECT venda_id, COUNT(*) as total_devolucoes
FROM devolucoes
GROUP BY venda_id
HAVING COUNT(*) > 1;
-- Verificar estoque negativo
SELECT * FROM produto_variacoes WHERE quantidade < 0;
-- Verificar devoluções duplicadas
SELECT venda_id, item_id, data_devolucao, COUNT(*)
FROM devolucoes
GROUP BY venda_id, item_id, data_devolucao
HAVING COUNT(*) > 1;
📊 Benefícios das Correções
- ✅ Estoque Preciso: Controle real de entrada/saída
- ✅ Sem Duplicatas: Prevenção de registros duplicados
- ✅ Validação Robusta: Impossível devolver mais que vendido
- ✅ Logs Detalhados: Rastreamento completo das operações
- ✅ Trocas Corretas: Fluxo de estoque adequado
- ✅ Limpeza Automática: Ferramenta para corrigir dados históricos
🚀 Status
✅ IMPLEMENTADO E FUNCIONANDO
O sistema agora controla corretamente:
- Devoluções simples com retorno ao estoque
- Trocas com controle bidirecional de estoque
- Prevenção de duplicatas e validações
- Limpeza de dados históricos inconsistentes