Mapa de Regras
Raio-X ao Vivo
O que Mudou

🗺️ Mapa Completo de Regras — FinSight v8.5

Cada item da API OMIE passa por estas etapas. Se falhar em qualquer ponto, o valor é descartado.

RECEITAS (Contas a Receber)

🚪 Gate 1 — Filtro por Ano (omie.js → _filtrarPorAno)

Verifica se QUALQUER campo de data do item pertence ao ano selecionado (2026).

Campos checados: data_previsao data_baixa dDtCredito data_vencimento data_emissao data_registro

Se NENHUM campo tiver o ano → DESCARTADO antes de chegar ao DataEngine

🚪 Gate 2 — Status: É RECEBIDO? (data-engine.js → _isRecebido)

Verifica status_titulo = "RECEBIDO" | "LIQUIDADO" | "BAIXADO" | "QUITADO"

Se NÃO → vai para Avaliação de Passivo (vencido >30 dias)

💰 Valor Caixa (data-engine.js → _valorCaixa)

Prioridade: nValorPagonValorLiquidovalor_documento

Se valor ≤ 0 → DESCARTADO

📅 Cascade de Datas — RECEBER (regime caixa)

Determina o MÊS em que a receita será contabilizada.

data_previsao — campo principal (OMIE preenche com data de crédito)
data_baixa | dDtCredito | data_credito
data_vencimento (fallback)
data_emissao | data_registro (último recurso)

Se NENHUM campo tiver data no ano → DESCARTADO (pagSemData++)

✅ Contabilizado como RECEITA no mês correspondente

receita[segmento][mes] += valorCaixa
caixaEntradas[segmento][mes] += valorCaixa

CUSTOS + DESPESAS (Contas a Pagar)

🚪 Gate 1 — Filtro por Ano (omie.js → _filtrarPorAno)

Idêntico ao receber — verifica se qualquer data pertence ao ano.

🚪 Gate 2 — Cancelado? (data-engine.js → _isCancelado)

Se status_titulo = "CANCELADO" | "DEVOLVIDO" → DESCARTADO

🚪 Gate 3 — Valor > 0? (data-engine.js → _valor)

Se valor_documento ≤ 0 → DESCARTADO

🚪 Gate 4 — Status: É PAGO? (data-engine.js → _isPago)

Verifica status_titulo = "PAGO" | "LIQUIDADO" | "BAIXADO" | "QUITADO"

Se NÃO → vai para Avaliação de Passivo

📅 Cascade de Datas — PAGAR (regime caixa)

Determina o MÊS em que o custo/despesa será contabilizado.

data_previsao — campo principal (OMIE preenche com data de pagamento)
data_baixa | dDtPagamento | data_pagamento
data_vencimento (fallback)
data_emissao | data_registro (último recurso)

Se NENHUM campo tiver data no ano → DESCARTADO (pagSemData++)

🏷️ Classificação — Custo vs Despesa

1) Resolve categoria: _extrairCategoria(item) → código + descrição
2) Normaliza: _catNorm(item)
3) Testa custo direto: _isCustoDireto(cat) → códigos 2.* ou keywords (custo, projeto, etc.)
4) Se não custo: _mapTipoDespesa(cat) → pessoal | admin | comercial | financeiro | impostos | investimento

✅ Contabilizado como CUSTO ou DESPESA no mês correspondente

Custo: custos[segmento][mes] += valorCaixa
Despesa: despesas[tipo][mes] += valorCaixa

DRE — Regime de Competência

📅 Data base: EMISSÃO (não pagamento)

Cascade: data_emissaodata_registrodata_vencimento
Aplica-se a itens PAGOS, RECEBIDOS e EM ABERTO (todos contam no DRE).

🔬 Raio-X ao Vivo — Cada Item do Cache

Carrega o cache OMIE (IndexedDB/localStorage) e reproduz EXATAMENTE a lógica do DataEngine para cada item, mostrando onde cada R$ foi contabilizado ou descartado.

📜 O que Mudou — Cronologia v8.1 → v8.5

Explicação completa do que aconteceu entre sexta-feira e agora.

Diagnóstico da Causa Raiz

Na sexta-feira o sistema funcionava porque usava data_previsao como campo principal para determinar a data de pagamento/recebimento.

O que aconteceu: foi solicitado "desconsiderar data_previsao e usar data de pagamento/recebimento". Isso foi interpretado como remover data_previsao do cascade de datas.

O problema: Na API OMIE, o campo data_previsao — apesar do nome — contém a data efetiva de crédito/pagamento para títulos PAGOS/RECEBIDOS. Ao removê-lo, muitos itens ficaram sem data válida no ano 2026, causando:

  • • Custos + Despesas caiu de ~R$ 1.5M para ~R$ 63 mil
  • • Receitas podem ter sido afetadas também (depende de quais campos estão preenchidos)

Correção (v8.5): data_previsao restaurada como campo principal. Comentários limpos e documentação atualizada para refletir que o nome é enganoso.

Linha do Tempo
v8.1 — Funcionando ✓
Sistema estável. data_previsao era o campo principal no cascade de datas.
Cascade: data_previsao → data_baixa → data_vencimento → data_emissao → data_registro
v8.2 — Correção de bugs menores
Corrigiu precedência do operador DRE (dre.js:44), _valorCaixa, carry-forward limitado.
18/18 testes passaram. Cascade mantido inalterado.
v8.3 — Quebrou ✗
Removido data_previsao de 6 arquivos. Substituído por data_baixa como principal.
⚠️ PROBLEMA: data_baixa está VAZIO em muitos registros OMIE.
Resultado: Custos + Despesas caiu de ~R$ 1.5M para ~R$ 63 mil.
v8.4 — Reversão parcial
data_previsao restaurada no cascade, mas comentários ficaram contraditórios.
Código correto, documentação confusa. Header dizia "NÃO USAR" mas código usava.
v8.5 — Correção definitiva ✓ (13/04/2026)
Comentários limpos e consistentes. Header documenta corretamente que data_previsao é o campo principal.
✅ Cascade correto em TODOS os 5 arquivos:
data-engine.js (processOmieData + getTopLancamentos) | omie.js (_filtrarPorAno) | drill-down.js | lancamentos.js | receitas.js

✅ Explicação clara: data_previsao na OMIE = data de crédito/pagamento para itens liquidados.
Arquivos Alterados v8.3 → v8.5
Arquivo Função v8.3 (quebrou) v8.5 (corrigido)
js/data-engine.js processOmieData — RECEBER data_baixa como 1º data_previsao como 1º
js/data-engine.js processOmieData — PAGAR data_baixa como 1º data_previsao como 1º
js/data-engine.js getTopLancamentos data_baixa como 1º data_previsao como 1º
js/omie.js _filtrarPorAno Sem alteração destrutiva Checa data_previsao no filtro
js/drill-down.js _processar data_baixa como 1º data_previsao como 1º
js/pages/lancamentos.js _montar data_baixa como 1º data_previsao como 1º
js/pages/receitas.js filtro receitas sem data_previsao data_previsao restaurado