Relatório — KPIs e Métricas para Tela de Dashboard
Projeto: tmc-records — gestão de processos jurídicos previdenciários/INSS Stack: Next.js 16 · React 19 · HeroUI v3 · Tailwind v4 · Prisma 7 / MySQL Data: 2026-06-23 Autor: análise automatizada do código e do schema do banco
1. Sumário executivo
O sistema acompanha o ciclo de vida completo de processos (administrativos e judiciais), desde o
protocolo até o resultado final, registrando cada mudança de estado como uma movimentação
(trilha de auditoria). O modelo de dados é rico em dimensões categóricas (tipo, subtipo, estado,
resultado, perícia médica, avaliação social, judicial/administrativo) e rico em dados temporais
(dataProtocolo, createdAt, ultimaMovimentacaoAt, Movimentacao.createdAt).
Isso permite um dashboard forte em três frentes:
- Volume e tendência — quantos processos entram, em que estados estão, ritmo de movimentações.
- Performance / conversão — taxa de sucesso, conversão de perícia, performance por captador/perito.
- Operação e gargalos — processos parados, tempo de tramitação, distribuição de carga.
Hoje não existe nenhuma tela de dashboard e nenhuma biblioteca de gráficos está instalada. Este relatório lista 31 KPIs (acima do mínimo de 20 pedido), agrupados por importância, cada um já com o tipo de gráfico recomendado (linha, barra ou pizza) e a fonte de dados no schema.
2. Contexto técnico e limitações dos dados
Pontos importantes que condicionam o desenho do dashboard — leia antes dos KPIs:
| # | Limitação | Impacto |
|---|---|---|
| 1 | Não há campo monetário em lugar nenhum (sem valor da causa, honorários, valor de RPV/acordo). | KPIs financeiros são impossíveis hoje. Recomenda-se adicionar um campo valorCausa/valorAcordo em Processo para habilitar faturamento, ticket médio etc. (ver §5). |
| 2 | Não há flag explícita de "ativo/encerrado". | O conceito de processo ativo precisa ser inferido: ativo = resultado IS NULL (ainda em andamento); finalizado = resultado preenchido. Os estados terminais (SENTENCA_POSITIVA/NEGATIVA, EXTINTO_SEM_MERITO, RPV) também ajudam. Essa regra deve ser definida de forma única e reutilizada. |
| 3 | periciaMedica/avaliacaoSocial podem ser nulos. | Em conversões, separar "ainda sem perícia" (nulo / AGUARDANDO_PERICIA) de "periciado". |
| 4 | O repositório (prisma-processo.repository.ts) hoje só expõe search, findById, findDetailById, feed, create, saveMovimentacao. Não há count/groupBy exposto. | Para o dashboard será necessário adicionar métodos de agregação (Prisma já suporta groupBy/aggregate). Ver §5. |
| 5 | dataProtocolo é opcional (DateTime?). | Para séries temporais por data de protocolo, tratar nulos (cair para createdAt como fallback ou excluir). |
| 6 | Movimentacao guarda snapshots de estado com createdAt. | Permite reconstruir transições de estado e medir tempo em cada estado — base para métricas de funil e gargalo. |
Convenção de "resultado favorável" usada neste relatório (favorável = ganho para o cliente):
PROCEDENTE, CONCEDIDO_ADM, CONCLUIU_ADM. Desfavorável/perda: IMPROCEDENTE,
EXTINTO_SEM_MERITO, FALTA_CUMPRIMENTO_EXIGENCIA, PENDENCIA_NAO_RESOLVIDA. Abandono/sem mérito:
DESISTIU, CANCELOU, SEM_CONTATO, FALECEU. Essa classificação deve ser confirmada com o negócio.
3. KPIs por nível de importância
Legenda de gráfico: 🟦 Card (número único) · 📈 Linha · 📊 Barra · 🥧 Pizza/Donut · 🔻 Funil.
🔴 Crítica — visão de topo (cards + gráficos principais)
São os indicadores que respondem "como o escritório está agora?". Devem ocupar o topo da tela.
| # | KPI | Cálculo / definição | Dimensão | Gráfico |
|---|---|---|---|---|
| 1 | Processos ativos | Contagem de Processo com resultado IS NULL (em andamento). | — | 🟦 Card |
| 2 | Taxa de sucesso global | favoráveis ÷ finalizados (com resultado preenchido). Favoráveis = PROCEDENTE+CONCEDIDO_ADM+CONCLUIU_ADM. | — | 🟦 Card (com gauge) |
| 3 | Distribuição por resultado | Contagem agrupada por resultado (11 valores). | resultado | 🥧 Pizza |
| 4 | Novos processos por mês | Contagem por mês de dataProtocolo (fallback createdAt). Tendência de entrada. | tempo (mês) | 📈 Linha |
| 5 | Processos por estado atual (pipeline) | Contagem agrupada por estado (13 valores). Mostra onde a carteira está concentrada. | estado | 📊 Barra |
| 6 | Atividade — movimentações por dia/semana | Contagem de Movimentacao por dia/semana (createdAt). Ritmo de trabalho. | tempo (dia) | 📈 Linha |
| 7 | Distribuição por tipo de processo | Contagem por tipo (12 valores: aposentadorias, BPC, auxílio-doença, trabalhista...). | tipo | 📊 Barra |
| 8 | Judicial × administrativo | Proporção foiJudicial = true vs false. | foiJudicial | 🥧 Pizza |
🟠 Alta — indicadores operacionais
Respondem "onde melhorar a operação e quem performa melhor?".
| # | KPI | Cálculo / definição | Dimensão | Gráfico |
|---|---|---|---|---|
| 9 | Taxa de conversão da perícia médica | periciaMedica = POSITIVO ÷ total periciado (exclui AGUARDANDO_PERICIA/MARCADA/nulo). | — | 🟦 Card |
| 10 | Distribuição de perícia médica | Contagem por periciaMedica (POSITIVO, NEGATIVO, FALTOU, MAIS_OU_MENOS, MARCADA, AGUARDANDO). | periciaMedica | 🥧 Pizza ou 📊 Barra |
| 11 | Distribuição de avaliação social | Contagem por avaliacaoSocial (POSITIVO, NEGATIVO, AGUARDANDO). | avaliacaoSocial | 🥧 Pizza |
| 12 | Top captadores por volume | Contagem de processos por captadorId, ordenado desc (Top N). Mede origem de demanda. | captador | 📊 Barra horizontal |
| 13 | Taxa de sucesso por captador | Favoráveis ÷ finalizados, agrupado por captador. Qualidade da captação, não só volume. | captador | 📊 Barra |
| 14 | Processos por competência / UF | Contagem por competenciaId (e por uf). Distribuição geográfica/jurisdicional. | competencia/uf | 📊 Barra |
| 15 | Tempo médio de tramitação | Média de (data do resultado − dataProtocolo) em dias, total e por tipo. | tipo | 🟦 Card + 📊 Barra |
| 16 | Processos estagnados | Contagem de ativos com ultimaMovimentacaoAt mais antiga que N dias (ex.: 30/60/90). Alerta de SLA. | faixa de dias | 🟦 Card + 📊 Barra |
| 17 | Carga de trabalho por perito | Contagem de processos/movimentações por peritoId. Balanceamento de carga. | perito | 📊 Barra |
| 18 | Distribuição por subtipo | Contagem por subtipo (PREV_ADM, PREV_JUD, TRABALHISTA, RECLAMACAO, DEFESA, CIVEL, LIDE_SIMULADA). | subtipo | 📊 Barra |
🟡 Média — analítica e drill-down
Para análise mais profunda, normalmente em uma segunda dobra da tela ou em telas de detalhe.
| # | KPI | Cálculo / definição | Dimensão | Gráfico |
|---|---|---|---|---|
| 19 | Top CIDs/doenças mais frequentes | Contagem de processos por CID (doencas — N:N). Top N códigos. | cid | 📊 Barra horizontal |
| 20 | Taxa de sucesso por tipo de processo | Favoráveis ÷ finalizados, agrupado por tipo. Quais ações ganham mais. | tipo | 📊 Barra |
| 21 | Taxa de absenteísmo em perícia | periciaMedica = FALTOU ÷ total agendado, ao longo do tempo. | tempo | 📈 Linha + 🟦 Card |
| 22 | Funil de conversão | Etapas: protocolado → perícia realizada → laudo positivo → sentença positiva. Quantos sobrevivem a cada etapa. | etapas | 🔻 Funil |
| 23 | Motivos de insucesso/abandono | Distribuição entre DESISTIU, SEM_CONTATO, IMPROCEDENTE, CANCELOU, EXTINTO_SEM_MERITO, FALECEU. | resultado (subset) | 🥧 Pizza |
| 24 | Sucesso judicial × administrativo | Taxa de sucesso comparada entre foiJudicial = true e false. | foiJudicial | 📊 Barra comparativa |
| 25 | Tempo médio em cada estado | Para cada estado, média do intervalo entre a movimentação que entrou nele e a próxima (Movimentacao.createdAt). Identifica gargalos. | estado | 📊 Barra |
| 26 | Atividade por usuário | Contagem de movimentações criadas por criadoPorId. Produtividade da equipe. | user | 📊 Barra |
🟢 Baixa — saúde de dados, governança e crescimento
Indicadores de qualidade e administração; baixa frequência de consulta, mas importantes para confiança nos dados.
| # | KPI | Cálculo / definição | Dimensão | Gráfico |
|---|---|---|---|---|
| 27 | Processos com dados incompletos | Contagem de processos sem captadorId, sem dataProtocolo ou sem CID associado. Qualidade do cadastro. | — | 🟦 Card + 📊 Barra |
| 28 | Crescimento da base cadastral | Captadores, peritos e competências criados por mês (createdAt). Expansão da operação. | tempo | 📈 Linha |
| 29 | Usuários ativos × inativos | Proporção User.active = true vs false. | active | 🥧 Pizza |
| 30 | Processos por usuário criador | Contagem por criadoPorId em Processo. Auditoria de origem dos cadastros. | user | 📊 Barra |
| 31 | Cobertura perícia social × médica | Quantos processos têm avaliação social vs médica preenchida (não-nula). Cobertura de etapas. | etapa | 📊 Barra empilhada |
Total: 31 KPIs — 8 críticos, 10 de alta, 8 de média e 5 de baixa importância. Os três tipos de gráfico pedidos (linha, barra, pizza) estão amplamente cobertos, além de cards e funil.
4. Mapa visual sugerido da tela
1┌──────────────────────────────────────────────────────────────────────┐
2│ [Card #1 Ativos] [Card #2 Sucesso%] [Card #9 Conv.Perícia%] [#16] │ ← cards de topo
3├───────────────────────────────────┬──────────────────────────────────┤
4│ 📈 #4 Novos processos/mês (linha) │ 🥧 #3 Resultado (pizza) │
5├───────────────────────────────────┼──────────────────────────────────┤
6│ 📊 #5 Pipeline por estado (barra) │ 🥧 #8 Judicial×Adm (pizza) │
7├───────────────────────────────────┼──────────────────────────────────┤
8│ 📈 #6 Movimentações/dia (linha) │ 📊 #7 Por tipo (barra) │
9├───────────────────────────────────┴──────────────────────────────────┤
10│ 📊 #12 Top captadores │ 📊 #14 Por UF │ 📊 #19 Top CIDs │ ← drill-down
11├────────────────────────────────────────────────────────────────────────┤
12│ 🔻 #22 Funil de conversão │ 📊 #25 Tempo médio por estado │
13└──────────────────────────────────────────────────────────────────────┘- Filtros globais sugeridos: período (data de protocolo / movimentação),
tipo,subtipo,competencia/UF,captador,foiJudicial. Reaproveitar os filtros já existentes nofeed()(clienteNome,from,to) como ponto de partida.
5. Recomendações de implementação
-
Biblioteca de gráficos — não há nenhuma instalada. Opções compatíveis com React 19/Next 16:
- Recharts (mais simples, declarativo, cobre linha/barra/pizza com facilidade);
- visx ou ECharts (mais poder, inclui funil para o KPI #22). Verificar primeiro se o HeroUI v3 já oferece componentes de chart antes de adicionar dependência (consultar a doc HeroUI via MCP).
-
Camada de agregação no repositório — adicionar métodos ao
ProcessoRepository/MovimentacaoRepositoryusandoprisma.processo.groupBy(...),counteaggregate. Sugestão de assinaturas:countByEstado(),countByResultado(),countByTipo(),countBySubtipo();countByCaptador(),countByPerito(),countByCompetencia();novosPorMes(from, to),movimentacoesPorDia(from, to);estagnados(diasSemMovimentacao: number). Encapsular tudo num use caseGetDashboardMetricsUseCaseque monta o payload da tela, seguindo o padrão de camadas (domain/application/infrastructure/presentation) já usado nos módulos existentes.
-
Definir regra única de status — criar um helper de domínio (ex.:
isAtivo(processo)/classificarResultado(resultado)) para que "ativo", "favorável" e "abandono" tenham uma única fonte de verdade reutilizada por todos os KPIs. -
Considerar um campo monetário (evolução futura) — adicionar
valorCausae/ouvalorAcordoemProcessohabilitaria uma categoria inteira de KPIs financeiros de alto valor: faturamento estimado, ticket médio por tipo, valor em RPV, valor recuperado por captador. Hoje impossível por ausência do dado. -
Performance — para dashboards com muitos
groupBy, avaliar índices adicionais (ex.: emProcesso.estado,Processo.resultado,Processo.tipo) e/ou cache leve do payload de métricas, já que esses dados mudam com baixa frequência relativa.
6. Apêndice — dimensões disponíveis no schema
| Dimensão | Campo | Cardinalidade | Bom para |
|---|---|---|---|
| Tipo de processo | Processo.tipo | 12 | Barra |
| Subtipo | Processo.subtipo | 7 | Barra |
| Estado atual | Processo.estado | 13 | Barra / Funil |
| Resultado | Processo.resultado | 11 | Pizza |
| Perícia médica | Processo.periciaMedica | 6 | Pizza |
| Avaliação social | Processo.avaliacaoSocial | 3 | Pizza |
| Judicial | Processo.foiJudicial | 2 (bool) | Pizza |
| Competência / UF | Competencia.nome / uf | muitos / 27 | Barra |
| Captador | Captador | muitos | Barra (ranking) |
| Perito | Perito | muitos | Barra |
| Doença (CID) | Cid (N:N) | muitos | Barra (ranking) |
| Usuário | User (criadoPorId) | muitos | Barra |
| Papel do usuário | User.role | 2 | Pizza |
| Datas | dataProtocolo, createdAt, ultimaMovimentacaoAt, Movimentacao.createdAt | contínuo | Linha |
Campos ausentes (oportunidades futuras): valores monetários, flag de status ativo/encerrado, data de encerramento explícita, prazos/SLA formais.