🔬 Auditoria — Soft Delete Orçamentos

Validação real da implementação. Admin only.

📁 Arquivo canônico

lib/softDeleteOrcamento.js

Exporta: softDeleteOrcamento(), softRestoreOrcamento(), isOrcamentoVivo()

pages/LojistaClientes.jsxlinha 5softDeleteOrcamento

✅ USO ATIVO

L396 confirmarDelecao()→ Exclusão unitária via botão 🗑️ na tabela
L421 handleDeletarLoteValorZero()→ Exclusão em lote de orçamentos com valor R$0,00

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

base44.entities.Orcamento.update(id, { status: 'deletado', excluido: true, data_exclusao, excluido_por })

pages/LojistaControleOrcamentos.jsxlinha 4softDeleteOrcamentosoftRestoreOrcamento

✅ USO ATIVO

L139 confirmarDelete()→ Exclusão via botão 'Mover para lixeira' no Kanban
L127 handleReativarOrcamento()→ Restaura orçamento excluído → status rascunho

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

base44.entities.Orcamento.update(id, { status: 'deletado' }) ← BUG: não setava excluido:true

base44.entities.Orcamento.update(id, { status: 'rascunho' }) ← BUG: não limpava excluido/deleted_at

components/dashboard/FunilVendas.jsxlinha 4isOrcamentoVivo

✅ USO ATIVO

L14 orcamentos.filter(isOrcamentoVivo)→ Blindagem de entrada — filtra prop recebida

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

Sem filtro prévio — deletados contaminavam quantidades e valores do funil

components/dashboard/ClientesQuentes.jsxlinha 4isOrcamentoVivo

✅ USO ATIVO

L16 orcamentosRaw.filter(isOrcamentoVivo)→ Blindagem — deletados não entram no ranking Top 5

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

Sem filtro — orçamentos deletados inflavam valor e interações de clientes

components/dashboard/AlertasAcaoImediata.jsxlinha 4isOrcamentoVivo

✅ USO ATIVO

L141 orcamentosRaw.filter(isOrcamentoVivo)→ Blindagem — alertas urgentes não disparam para deletados

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

Sem filtro — deletados geravam alertas fantasmas de follow-up

components/lojista/IAFollowUpPanel.jsxlinha 2isOrcamentoVivo

✅ USO ATIVO

L40 (orcamentos||[]).filter(isOrcamentoVivo)→ Blindagem — painel de follow-up ignora deletados

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

Sem filtro — deletados apareciam no painel de mensagens de follow-up

components/lojista/DashboardConversao.jsxlinha 2isOrcamentoVivo

✅ USO ATIVO

L33 (orcamentos||[]).filter(isOrcamentoVivo)→ Blindagem — orcCriados e orcAprovados calculados só sobre vivos

🗑️ CÓDIGO ANTIGO SUBSTITUÍDO

orcCriados/orcAprovados contavam deletados na taxa de conversão

Implementado em: lib/softDeleteOrcamento.js · Páginas ativas: LojistaClientes, LojistaControleOrcamentos · Blindagem em: FunilVendas, ClientesQuentes, AlertasAcaoImediata, IAFollowUpPanel, DashboardConversao

🌐 Modo Web

SW: inativo