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 martdw_emplacamento_mart.emplacamento_kpi_fabricante_diaviafabricante_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. Verdocs/belite/pendencias_marts.mdSeção 4.3.
- Exportar CSV: não implementado (Títulos já tem; Monitor F&I não).
| Pendência | Status | Depende 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 mapearnome_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 comdepartamento = 'VENDAS DIRETA'ANDfinalidade_recebimento = 'Recebimento'ANDnome_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á existe —
titulos-filter-bar-client.tsxtem o multi-selecttt_tipo/TT_LABELS['Título'], alimentado porqueryTitulosFilterOptions, e a query já filtra portp.nome_recebimento = ANY(filters.tipos). - Cód. Operação vem de um join com
fandi_fat_envioviaid_envio; quando não casa, cai pro próprioid_enviocomo fallback. Validar se isso é aceitável ou se precisa de um join melhor.
| Pendência | Status | Depende de |
|---|---|---|
| Perfil / seletor de Título com rótulo canônico | ❌ Usa nome bruto do ERP | Sessã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_envio | Validar 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_diajá existe, tenant-linked (grupo_skde primeira classe), em produção e em hml. O levantamento de 2026-07-25 só checou os schemasdw_dms/dw_dms_marte não olhoudw_concessionarias_mart, onde essa mart já estava. Vendas, RPUV, Penetração e Margem por carro agora são reais — verone-page/_lib/server/one-page-dms-queries.tse a nota de ambientes empendencias_marts.md§3 (hml =ocduzdhgldtogpihdpmb, prod =tmyxcpfhmupflbwikfcw— o dev local usa hml). Atenção: existe uma mart adicionalkpi_onepage_dia(só em hml, não em prod) cuja colunarpuvcalcula 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 (verpendencias_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_kindainda 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 empage.tsx:- 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_diaviafabricante_dw_mapping) — alerta quando o FANDI cresce menos que o mercado. - Concentração de rentabilidade: % da Rentabilidade C/ Produto do grupo vindo de um único fabricante (o maior).
- 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).
- Fabricante x mercado: maior Total Financiado do grupo no mês, crescimento MoM no FANDI x crescimento MoM do mesmo fabricante no mercado (
| Indicador / bloco | Status | Depende 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 ligada | goals / 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ência | Status | Depende de |
|---|---|---|
| Especificação do relatório | ❌ Não existe | Definição de negócio |
| Implementação | ❌ Não iniciada | Spec acima |
5. Dashboard Elite
Item de menu vazio, sem página, sem especificação.
| Pendência | Status | Depende de |
|---|---|---|
| Especificação da tela | ❌ Não existe | Definição de negócio |
| Implementação | ❌ Não iniciada | Spec 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 denumericpuro pros campos de meta; marcarcan_manage_goalscomostable(perf).
| Pendência | Status | Depende 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_emplacamentosencontrou 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ência | Status | Depende 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ência | Onde falta | Status |
|---|---|---|
| Testes automatizados (unit/E2E) | Monitor F&I, Títulos, One Page, Metas | ❌ Nenhum |
| Exportar CSV | Monitor F&I, One Page | ❌ Só Títulos tem |
| Régua Objetivo | Monitor F&I | ✅ Ligada — One Page (bloco Grupo) ❌ ainda não |
| Régua Evolução do Fabricante | Monitor F&I | ✅ Ligada — One Page (bloco Grupo) ❌ ainda não (Insight 1 já usa o mart) |
Prioridade sugerida
Ligar— ✅ feito.goalsna régua de comparação (Objetivo) do Monitor F&IEscrever a query de Evolução do Fabricante via— ✅ feito (Monitor F&I + Insight 1 do One Page). Falta religar na régua do bloco Grupo do One Page.fabricante_dw_mapping+ mart de Emplacamento, religar no Monitor F&I- Sessão com negócio pra categorizar
nome_recebimentodo 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). 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 colunarpuvdekpi_onepage_dia(pendencias_marts.md §3).- Specs de Fluxos e Dashboard Elite.