Hermes Insights — Dashboard de Relatórios
URLs e Status
- - Site: https://insights.rochasalesseguros.com.br (antes: https://hermes.rochasalesseguros.com.br)
- - Status: ✅ Deployado e funcionando (Jun 2026)
- - Self-hosted: ✅ Migração completa (frontend + API → api.rochasalesseguros.com.br)
- - React + Vite + TanStack Router
- - TanStack Query (fetching)
- - Supabase REST API + RPC
- - Shadcn/ui components
- - TypeScript
- - Source:
/root/hermes-insights/ - - Deploy:
/var/www/hermes-insights/ - - Sync script:
/usr/local/bin/hermes-sync.py - - Relatórios legados:
/var/www/hermes-insights/relatorios/(209 arquivos HTML/MD) - - Cada inbox Chatwoot = um vendedor responsável (ex: "Rainany", "Raissa Silva", "Rocha-Sales-Oficial")
- -
chatwoot_inbox_idlinka conversa → inbox/canal - -
assignee_idnem sempre preenchido (inboxes pessoais = dono da inbox) - - RPC
get_agents_rankingconta por:assignee_idOUassignee_chatwoot_idOUchatwoot_inbox_id - -
'open'— em andamento - -
'resolved'— resolvida - -
'pending'— pendente - -
'failed'— falhou - - [ ] Motor de Score (AI) — analisar mensagens → scores table (score engine v3 ✅ rodou em Jun 2026)
- - [ ] RPC getHourlyMessages — gráfico de mensagens por hora bloqueado por RLS
- - [ ] ~560 conversas não-linkadas — agentes não-cadastrados ou sem assignee
- - Agendado a cada 5 min (verificar se ativo com
crontab -l) - - Criado: Jun 2026
- - Última atualização: 2026-06-22
- - Total conversas syncadas: 3,147 (de ~3,706 no Chatwoot)
- - Gap: ~560 conversas de agentes não-cadastrados ou fora do período de 90 dias
Stack
Paths
Arquitetura de Dados
Supabase Schema
`
Schema: insights
├── agents — corretores (chatwoot_id, name, role, team)
├── conversations — conversas (status, assignee_id, chatwoot_inbox_id)
├── messages — mensagens (content, sender_type, timestamp)
└── scores — scores AI (score_overall, 5 dimensões)
Schema: public
├── conversations — VIEW sobre insights.conversations
├── agents — VIEW sobre insights.agents
└── RPCs: get_agents_ranking, get_conversations_audit, get_dashboard_stats
`
Canal = Vendedor (regra)
Status de Conversa
Páginas Funcionais (Jun 2026)
| Página | Status | Dados |
| -------- | -------- | ------- |
| Dashboard | ✅ | Ranking, KPIs derivados do ranking |
| Equipe | ✅ | 8 agentes, contagens reais |
| Auditoria | ✅ | Lista 50 conversas recentes com busca |
| Relatórios | ✅ | Scores acumuladas (v9 RPC), 56 conversas, 3 agentes |
| Configurações | ✅ | Integrações Chatwoot + Obsidian, pesos do score |
Pendente (TODO)
RPCs Principais
get_agents_ranking()
`sql
-- Conta conversas por agente (assignee_id + inbox owner)
LEFT JOIN LATERAL ( WHERE assignee_id = a.id OR assignee_chatwoot_id = a.chatwoot_id OR chatwoot_inbox_id = a.chatwoot_id )
`
get_conversations_audit(p_limit, p_offset, p_status, p_agent_id)
`sql
-- Lista conversas com JOIN em agents
SELECT chatwoot_id::bigint, status::text, assignee_id, contact_name, ...
`
get_dashboard_stats()
`sql
-- Por enquanto derivado do ranking no frontend
-- RPC original bloqueada por RLS cross-schema
`
Sync Script — hermes-sync.py
Bugs já corrigidos (Jun 2026)
1. sb_exec() vs sb() — INSERTs retornavam [] (sucesso = falsy em Python)
2. chatwoot_inbox_id NOT NULL — adicionado aos INSERTs
3. sync_status = 'outdated' — não existe no enum (usar 'partial')
4. Limite 14 dias → 90 dias (backfill completo)
5. Limite 400 → 2000 conversas por execução
Execução
`bash
python3 /usr/local/bin/hermes-sync.py
`
Cron
Build e Deploy
`bash
cd /root/hermes-insights && npm run build
rm -rf /var/www/hermes-insights/ && cp -r dist/ /var/www/hermes-insights/
`