Pular para o conteúdo principal

Pendências dos Relatórios Belite

Estado técnico em 2026-07-19, depois da v1 de Monitor F&I, Títulos e One Page (TEC-466). Complementa docs/belite/definicoes_belite.md — aqui é o que falta pra bater 100% com a especificação, não a especificação em si.


1. Monitor F&I

Já com dados reais (dw_concessionarias_gold.fandi_fat_contrato / dw_concessionarias_mart.fandi_kpi_contrato_dia), nomenclatura da Seção 3 do doc já corrigida (Fabricante, Contratos, Cód. Operação, Veículo, coluna Chassi removida). Os 5 big numbers do doc (Total Financiado, Total Rentabilidade C/ Produto, Clientes, Envios, Contratos) estão implementados.

  • Régua de comparação (revisada TEC-472, 2026-07-21): "Mês anterior" (badge no topo do card) aparece nos 5 big numbers. "Objetivo" e "Fabricante" (Evolução do Fabricante) aparecem como linhas abaixo de um divisor — mas "Fabricante" só aparece no card de Contratos (decisão de produto confirmada 2026-07-21; o Figma mostrava nos 5, está desatualizado, ajuste pedido pro time de UI). Objetivo consome goals; Fabricante consome o mart dw_emplacamento_mart.emplacamento_kpi_fabricante_dia via fabricante_dw_mapping — com 1+ Fabricantes filtrados, soma o mercado só deles; sem filtro nenhum, soma as marcas que o próprio grupo vende (queryGrupoMarcas), não mais o mercado nacional inteiro (mudou 2026-07-21 — comparar com todos os ~58 fabricantes mapeados não era um comparativo justo pra um grupo que só opera 5-6 marcas). Só fica oculta se não houver mês em tela ou dado de mercado pro recorte.
    • Decisão registrada: quando não há filtro de Fabricante aplicado, "Objetivo" vira a soma de todas as metas cadastradas pro recorte em tela (mês/banco/etc.). Quando filtrado por um Fabricante específico, compara com a meta daquele Fabricante.
    • Limitação da granularidade mensal resolvida (2026-07-21): o mart migrou pra grão diário (emplacamento_kpi_fabricante_dia) — a régua de "Fabricante" agora aplica o mesmo corte de "mesmo período" que a régua de mês anterior do FANDI usa. Ver docs/belite/pendencias_marts.md Seção 4.3.
  • Exportar CSV: não implementado (Títulos já tem; Monitor F&I não).
PendênciaStatusDepende de
Big number Clientes✅ Implementado
Big number Envios✅ Implementado
Rentabilidade C/ Produto no big number✅ Implementado
Régua — Objetivo✅ Ligada
Régua — Fabricante (só no card Contratos)✅ Ligada (2026-07-20, revisada 2026-07-21)— (granularidade diária resolvida)
Exportar CSV❌ Não existe

2. Relatório de Títulos

Dados reais via dw_concessionarias_gold.fandi_fat_recebimento.

  • Coluna "Perfil" e seletor de "Título" mostram o nome bruto da origem (nome_recebimento, ex. "VL.FINANC. IR", "COMIS.VENDEDOR.MENU"), não a categorização canônica do dicionário (Comissão Vendedor, Comissão Consultor F&I, Valor Financiado, Retorno, Plus, Bônus, Comissão Produto Banco, Comissão Produto Loja). Precisa de uma sessão com o time de negócio pra mapear nome_recebimento → rótulo canônico antes de ir pra produção — os valores brutos incluem quebras fiscais (VL.FINANC. IBS/PIS/COFINS/IR/CBS...) que não têm um "vencedor" óbvio.
  • Regra de Venda Direta (6.2 do doc: excluir Valor Financiado de Títulos a Receber) implementada (2026-07-20) em buildRecebimentoConditions — exclui linhas com departamento = 'VENDAS DIRETA' AND finalidade_recebimento = 'Recebimento' AND nome_recebimento LIKE 'VL.FINANC%' (cobre a linha base e as 6 quebras fiscais: CBS/COFINS/IBS/IR/ISS/PIS). Aplica-se nos 3 pontos (big number, gráfico, tabela) por estar na função compartilhada. "A Pagar" não é afetado. Validado via SQL direto no DW: R$130.391.610,72 excluídos de "A Receber" pra um grupo_sk de amostra, "A Pagar" inalterado.
  • Seletor de "filtro de títulos" (mecanismo pra incluir/excluir cada tipo de título da visão, pedido no doc) já existetitulos-filter-bar-client.tsx tem o multi-select tt_tipo/TT_LABELS['Título'], alimentado por queryTitulosFilterOptions, e a query já filtra por tp.nome_recebimento = ANY(filters.tipos).
  • Cód. Operação vem de um join com fandi_fat_envio via id_envio; quando não casa, cai pro próprio id_envio como fallback. Validar se isso é aceitável ou se precisa de um join melhor.
PendênciaStatusDepende de
Perfil / seletor de Título com rótulo canônico❌ Usa nome bruto do ERPSessão com negócio pra categorizar nome_recebimento
Regra de Venda Direta (excluir Valor Financiado)✅ Implementada (2026-07-20)
Seletor de filtro de títulos (incluir/excluir tipo)✅ Já existia
Cód. Operação sempre correto⚠️ Fallback pro id_envioValidar cobertura do join com negócio

3. One Page

Estrutura da Seção 5 do doc (filtros, Insights, blocos Grupo/Por Fabricante/Por Banco, 9 indicadores). Boletim Diário (e-mail) foi removido da tela por decisão do produto — não faz mais parte do escopo. Os indicadores que só dependem do FANDI já são reais (mesma mart fandi_kpi_contrato_dia do Monitor F&I, régua "mês anterior" incluída no bloco Grupo). Donut de Share por Banco foi substituído por coluna "Share (FANDI)" nas linhas do bloco Por Banco (decisão de produto, 2026-07-20).

  • DMS ingerido, com mart purpose-built (2026-07-26, TEC-475): dw_concessionarias_mart.dms_kpi_venda_dia já existe, tenant-linked (grupo_sk de primeira classe), em produção e em hml. O levantamento de 2026-07-25 só checou os schemas dw_dms/dw_dms_mart e não olhou dw_concessionarias_mart, onde essa mart já estava. Vendas, RPUV, Penetração e Margem por carro agora são reais — ver one-page/_lib/server/one-page-dms-queries.ts e a nota de ambientes em pendencias_marts.md §3 (hml = ocduzdhgldtogpihdpmb, prod = tmyxcpfhmupflbwikfcw — o dev local usa hml). Atenção: existe uma mart adicional kpi_onepage_dia (só em hml, não em prod) cuja coluna rpuv calcula errado (margem de compra/venda, não Rentabilidade C/Produto ÷ Vendas) — não é usada pelo código, mas fica registrada como pedido de correção pro time de dados (ver pendencias_marts.md §3). Só há integração DMS ativa pra 1 grupo hoje; os demais continuam vendo "—" (não é ingestão piloto/temporária, é o único grupo com o ERP integrado até agora), e mesmo esse grupo tem lacunas de ingestão em alguns meses.
  • Régua Objetivo (bloco Grupo): ainda não ligada — depende de goals (pronta, falta só o consumo). Diferente do Insight 1, que já usa o mart de Emplacamento (ver abaixo) — a régua Objetivo/Evolução do Fabricante do bloco Grupo em si não foi religada nesta rodada. Vendas/Penetração também não têm Objetivo: goals.kpi_kind ainda não tem um tipo pra Vendas.
  • Share por banco: implementado, mas só a parcela FANDI (rótulo diz isso na tela) — a fórmula completa (2.17) inclui financiamento externo (DMS), fora do escopo do TEC-475 (precisa de de-para de banco FANDI×DMS, não validado com o negócio).
  • Insights (2026-07-20): implementados, 3 reais_lib/build-insights.ts, calculados em page.tsx:
    1. Fabricante x mercado: maior Total Financiado do grupo no mês, crescimento MoM no FANDI x crescimento MoM do mesmo fabricante no mercado (dw_emplacamento_mart.emplacamento_kpi_fabricante_dia via fabricante_dw_mapping) — alerta quando o FANDI cresce menos que o mercado.
    2. Concentração de rentabilidade: % da Rentabilidade C/ Produto do grupo vindo de um único fabricante (o maior).
    3. Share de banco: banco com maior variação de Share (FANDI) mês a mês, relatada como percentual simples (não pontos percentuais). Cada insight só aparece quando os dados necessários existem (fabricante sem de-para, sem mês anterior, etc. omitem o insight, não mostram "—" — a faixa só encolhe).
Indicador / blocoStatusDepende de
Vendas✅ Real (só p/ grupo com integração DMS; "—" nos demais)
Contratos✅ Real
Total Financiado✅ Real
RPUV✅ Real (mesma condição de Vendas)
RPUF✅ Real
Rentabilidade C/ Produto✅ Real
Penetração✅ Real (mesma condição de Vendas)
Share por banco (parcial FANDI, coluna na linha)✅ Real (parcial)Financiamento externo (DMS) pra fórmula completa — fora do escopo TEC-475
Margem por carro✅ Real (só p/ grupo com integração DMS; "—" nos demais)
Régua mês anterior (bloco Grupo)✅ Real
Régua Objetivo / Evolução do Fabricante (bloco Grupo)🔴 Não ligadagoals / mart de Emplacamento (prontos, falta religar no bloco Grupo)
Insights (fabricante x mercado, concentração, share banco)✅ Implementados (2026-07-20)

4. Fluxos

Item de menu vazio, sem página, sem especificação — não existe no documento de definições. Precisa de spec antes de qualquer implementação.

PendênciaStatusDepende de
Especificação do relatório❌ Não existeDefinição de negócio
Implementação❌ Não iniciadaSpec acima

5. Dashboard Elite

Item de menu vazio, sem página, sem especificação.

PendênciaStatusDepende de
Especificação da tela❌ Não existeDefinição de negócio
Implementação❌ Não iniciadaSpec acima

6. Metas (Objetivos)

CRUD completo funcionando (owner/admin_associacao/consultor_fi gerenciam, demais só leem), grupo_sk derivado com segurança no banco via trigger.

  • Não é consumida por nenhum relatório ainda — é o maior item pendente pra fechar a régua de comparação "Objetivo" em Monitor F&I e One Page (itens 1 e 3).
  • Sugestões de baixa prioridade do revisor de migration (não bloqueantes): numeric(12,2)/numeric(10,2) em vez de numeric puro pros campos de meta; marcar can_manage_goals como stable (perf).
PendênciaStatusDepende de
CRUD (criar/editar/excluir/listar)✅ Pronto
Consumo na régua "Objetivo"❌ Não ligada— (é o próximo passo)
Precisão numérica (numeric(12,2))⚠️ Sugestão baixa prioridade
can_manage_goals como stable⚠️ Sugestão baixa prioridade (perf)

7. Fabricante DW Mapping (de-para)

Tabela criada e populada (37 automáticos, 7 manuais, 14 sem correspondência — moto/maquinário pesado que o Emplacamento não cobre).

  • Não consumida em nenhum relatório ainda — próximo passo natural é usar em "Evolução do Fabricante" (itens 1 e 3).
  • Precisa de revisão periódica: quando o FANDI ganhar cliente com fabricante novo, ele entra sem correspondência até alguém rodar a reconciliação de novo. Não há alerta automático pra isso.
  • Correção aplicada (2026-07-20): a reconciliação original batia só por nome normalizado — achava o código com nome idêntico, mas não conferia se aquele código tinha volume real de emplacamento. Validação contra fato_emplacamentos encontrou 2 casos onde o nome batia mas o volume estava quase todo num código com nome diferente:
    • CHEVROLET: código 255 "CHEVROLET" tinha 17 emplacamentos; o volume real (308.579) estava no código 499 "GM". Corrigido.
    • MORRIS GARAGES: código 874 "MORRIS" tinha 1 emplacamento; o volume real (364) estava no código 840 "MG". Corrigido.
    • GMC (14) e JAGUAR (22) foram checados também — sem código alternativo, volume baixo é real (marcas de nicho no Brasil), não erro de mapeamento.
    • Lição pra próxima reconciliação: sempre validar por volume em fato_emplacamentos, não só por nome — bater o nome não garante que o código tem dado de verdade.
PendênciaStatusDepende de
Tabela criada e populada✅ Pronto
Validação por volume (não só nome)✅ Feita — 2 correções aplicadas (CHEVROLET→GM, MORRIS→MG)
Consumo em "Evolução do Fabricante" / Insight 1✅ Ligada (2026-07-20)dw_emplacamento_mart.emplacamento_kpi_fabricante_dia (entregue)
Revisão periódica (fabricantes novos)❌ Processo manual, sem alerta

8. Transversal

  • Testes: nenhum teste automatizado (unitário ou E2E) foi escrito pra nenhum dos três relatórios nem pro CRUD de Metas.
  • Exportar CSV: só existe no Títulos.
  • Régua "Objetivo" e "Evolução do Fabricante": implementadas no Monitor F&I (2026-07-20). No One Page, só a régua "mês anterior" do bloco Grupo está ligada — Objetivo e Evolução do Fabricante do bloco Grupo ainda não (o mart de Emplacamento já é consumido no Insight 1, mas não na régua do bloco Grupo em si).
PendênciaOnde faltaStatus
Testes automatizados (unit/E2E)Monitor F&I, Títulos, One Page, Metas❌ Nenhum
Exportar CSVMonitor F&I, One Page❌ Só Títulos tem
Régua ObjetivoMonitor F&I✅ Ligada — One Page (bloco Grupo) ❌ ainda não
Régua Evolução do FabricanteMonitor F&I✅ Ligada — One Page (bloco Grupo) ❌ ainda não (Insight 1 já usa o mart)

Prioridade sugerida

  1. Ligar goals na régua de comparação (Objetivo) do Monitor F&I — ✅ feito.
  2. Escrever a query de Evolução do Fabricante via fabricante_dw_mapping + mart de Emplacamento, religar no Monitor F&I — ✅ feito (Monitor F&I + Insight 1 do One Page). Falta religar na régua do bloco Grupo do One Page.
  3. Sessão com negócio pra categorizar nome_recebimento do Relatório de Títulos (destrava Perfil, seletor de título — a regra de Venda Direta já foi implementada via prefixo "VL.FINANC." sem depender dessa categorização).
  4. Investigar link DMS↔conta, ligar Vendas/RPUV/Penetração/Margem por carro reais no One Page — ✅ feito (TEC-475, 2026-07-26). Falta reportar pro time de dados o pedido de correção da coluna rpuv de kpi_onepage_dia (pendencias_marts.md §3).
  5. Specs de Fluxos e Dashboard Elite.