Analytics Dashboard
- CONTEXTO E OBJETIVOS
- Experiência Unificada: Substituir o dashboard anterior por uma experiência única, responsiva e completa no admin.
- Consolidação: Consolidar métricas de uso, engajamento e desempenho em um único painel.
- Exportação Fiel: Entregar exports fiéis aos dados exibidos, incluindo snapshot completo em PDF.
- Compatibilidade: Garantir compatibilidade com o tema claro/escuro do Unfold e navegação simplificada (menu lateral atualizado).
- IMPLEMENTAÇÕES PRINCIPAIS
- Visualização: Dois grids de KPIs, nove visualizações e tabelas responsivas.
- Tema Adaptativo: Gráficos Chart.js são recriados quando o usuário troca o tema.
- Tooltip de Crescimento: Descritivo no card de "Crescimento" explicando comparações com/sem filtro de data.
- Export Dashboard: Rotina com
html2canvas+jsPDFque oculta controles, exibe resumo de filtros e gera PDF. - Exports Individuais: CSV/XLSX/TSV/JSON/YAML/HTML com colunas alinhadas ao que aparece na UI (sem redundâncias, com percentuais quando relevante).
- Limpeza: Remoção do menu "Dashboard" legado e da view antiga de Métricas.
- FILTROS E CONTROLES
- Data Inicial / Data Final: Intervalos absolutos; aplicam-se a praticamente todas as métricas baseadas em datas.
- Tipo de Análise: Filtra por
RegisteredAnalysis.name, afetando cards e gráficos orientados a execuções. - Perfil de Usuário: Restringe queries por
User.profile_id; impacta métricas de usuários, SLAs, crescimento, brackets e recência. - Granularidade: Seletor Diário/Mensal/Anual exclusivo do gráfico de "Volume Temporal" (também influencia o export temporal).
- Notas: Com filtro de data, o Crescimento compara períodos equivalentes; sem filtro, considera 30 dias atuais vs. 30 dias anteriores.
- KPIS
- Usuários Ativos: Contagem de
User.is_activerespeitandodate_toe perfil. - Total de Análises: Volume de
Analysisno intervalo filtrado. - Tempo Médio de Sessão: Média de
UserSession.duration. - Crescimento: Variação percentual de novos usuários ativos frente ao período anterior equivalente.
- Total de Usuários: Soma de ativos + inativos + pendentes (pendentes limitados por
date_toe perfil quando houver ligação). - SLA Ativação: Média entre
PendingUser.created_ateupdated_atquando status = ativo. - SLA Primeira Análise: Tempo médio entre ativação e primeira análise concluída.
- Taxa de Sucesso: Distribuição sucesso/erro/pendente das análises filtradas.
- VISUALIZAÇÕES E TABELAS
- Top 15 Usuários por Análises: Ranking pelo número de execuções.
- Distribuição de Status: Barras empilhadas mostrando ativos com/sem análise e pendentes por status.
- Top 15 Análises Mais Usadas: Ranking por quantidade de execuções por tipo registrado.
- Taxa de Sucesso das Análises: Gráfico de pizza com sucesso/erro/pendente.
- Usuários Ativos x Quantidade de Análises: Faixas (0, 1-2, 3-10, etc.) com contagem e percentual.
- Análises Realizadas por Período: Faixas de recência (30 dias, 31-90, etc.) com contagem e percentual.
- Range de Horário: Série 24h com quantidade de análises por hora.
- Volume Temporal de Análises: Série temporal diária/mensal/anual dependendo da granularidade.
- Top 15 Análises por Tempo de Execução: Média de duração para análises bem-sucedidas (até 24h).
- DETALHAMENTO POR ANÁLISE
- Top 15 Usuários por Análises: Usa
get_top_users_by_analysis, anotaanalysis_countpor usuário ativo, aplica filtros de data/tipo/perfil e ordena de forma decrescente limitando a 15 nomes. - Distribuição de Status: Combina
get_user_status_distribution(ativos com/sem análise + pendentes por status) eget_user_status_distribution_stacked, ambos filtrando por perfil e datas quando aplicável. - Top 15 Análises Mais Usadas:
get_top_analysesagregaAnalysisportype, aplica filtros, cruza comRegisteredAnalysispara exibir descrição e retorna os 15 maiores contadores. - Taxa de Sucesso das Análises:
get_analysis_success_rateconta sucessos/erros/pendentes, calcula percentual relativo ao total filtrado e monta o dataset do gráfico de pizza. - Usuários Ativos x Quantidade de Análises:
get_users_by_analysis_brackets_tableclassifica usuários ativos (com filtros) em faixas de execução e calcula o percentual de cada bracket sobre o total. - Análises Realizadas por Período (Recência):
get_analysis_recency_tableconta análises concluídas em janelas de dias (30, 31-90, etc.) e gera percentual relativo ao volume total do intervalo. - Range de Horário:
get_hourly_usagetruncaAnalysis.created_atpor hora, preenche as 24 posições com zero quando necessário e aplica filtros de tipo/perfil. - Volume Temporal de Análises:
get_temporal_volumeusaTruncDate/TruncMonth/TruncYearde acordo com a granularidade selecionada, ordena por período e devolve labels/valores para gráfico e export. - Top 15 Análises por Tempo de Execução:
get_avg_execution_timefiltra apenas análises com sucesso (e tempo entre start/finish), descarta durações >24h, calcula média por tipo e converte para texto amigável.
- EXPORTAÇÕES
- Formato: Dropdown "Exportar" em cada card gera arquivos em CSV, XLSX, TSV, JSON, YAML ou HTML.
- Mapeamento:
_handle_analytics_exportmapeia cada análise para a função de serviço correspondente e define cabeçalhos. - Customização: Exportações customizadas (status, sucesso, faixas, recência, horário, temporal) usam
_get_custom_export_rowspara formatar linhas. - Melhorias Recentes: Brackets e recência incluem percentual; rankings removem a coluna "tipo" redundante; tempos de execução exportam descrição + tempo médio + quantidade.
- Export Completo (PDF): Usa
exportDashboard()para capturar snapshot do painel respeitando o tema atual e exibindo os filtros aplicados.
8. IMPACTO DOS FILTROS
