Memória Persistente — Hermes
Identidade do Usuário
- - Nome: Tecrocha Sales (Rocha Sales)
- - Perfil: Não-técnico, prefere português simples
- - Canal: Discord (DM)
- - Última atividade: Junho 2026
- - Preferência: Sempre pergunta "vai quebrar?" antes de aprovar mudanças em produção
- - Supabase Cloud:
dauftiqcvgaydddoxqhh— usado por ComercialRS e DocCorretor - - VPS: IP 31.97.243.106 — root / senha:
Marcia19671951@ - - ComercialRS: CRM de vendas —
/var/www/comercialrs - - DocCorretor: Gerenciamento de documentos —
/var/www/documentos2/app/ - - Meta WhatsApp do ComercialRS ≠ Meta WhatsApp do Chatwoot
- - ComercialRS: Supabase Edge Function
meta-webhook(URL: https://rochasal.supabase.co/functions/v1/meta-webhook, projeto: dauftiqcvgaydddoxqhh, token: comercialrs_meta_webhook_verify, ACTIVE v9) - - Chatwoot: configuração separada, outra pasta, NÃO conflitar
- - Login Painel CRM: contato@rochasalesseguros.com.br / 221109
- - Supabase: projeto
dauftiqcvgaydddoxqhh - - VPS: 31.97.243.106 / root / Marcia19671951@
- - ComercialRS — CRM de vendas (TanStack Start + Supabase)
- - DocCorretor — Gerenciamento de documentos (TanStack Start + Supabase + Google Drive)
- - Chatwoot — Atendimento (VPS)
- - n8n — Automações (VPS)
- - Obsidian Vault — Cérebro central (VPS) — MIGRADO EM JUN/2026
- - Hermes Insights — Dashboard de relatórios Chatwoot (React) — NOVO Jun/2026
- - Hermes migrando memória operacional para Obsidian Vault
- - Vault:
/var/www/obsidian-vaultno VPS - - Site: https://obsidian.rochasalesseguros.com.br
- - GitHub: https://github.com/tecrochasales-a11y/obsidian-vault
- - Sync automático: push a cada 5 min, pull a cada 1 min
- - Folder ID: 1zVhApvpFM937qxsvsz37WCcUD-7f2zUP
- - Status: 440 pastas cliente, 953+ arquivos — scan completo, migração pendente
- - gdown funciona SEM OAuth ( Drive público)
- - CRÍTICO: Supabase Cloud exceed_egress_quota — REST 401, Storage 402
- - 353 clientes já existem no DocCorretor
- - 31 clientes faltando criar (com arquivos no Drive)
- - 20 pastas sem arquivos (meses/LEADS) — ignorar
- - Opção B confirmada pelo usuário (criar faltantes + sincronizar tudo)
- -
task_alerts.py: wrapper lock 9000s (2h30) - -
reunioes_atrasadas: wrapper lock 9000s + message_log check anti-spam - - tempo_resposta.html
...: endpoint/api/response_timenão existia no api_server.py (5001). Adicionado proxy →http://127.0.0.1:9087/response_time. Também:ssl.CERT_NONE(nãossl.NONE) para Python 3.10+. - - Multi-select embaçado:
backdrop-filter: blur(12px)no globalupbar.csscriava camada de vidro. Fix: overridebackdrop-filter: none !important+ cache-bust?v=202607151530. - - Checkboxes não selecionáveis:
closeInboxOnClickOutsidefechava dropdown em todo clique (bubbling).handleInboxChange()tinha lógica invertida. Fix:stopPropagation()nos INPUTs +this.idpara detectar qual checkbox. - - KPIs dashboard não respeitavam filtro:
kpi-vendorsekpi-top-vendusavamVENDOREShardcoded em vez dewindow.vendorLabels. - -
fantasma em relatorios.html:innerHTML +=numdentro defazia browser interpretar como HTML real. Fix:textContent +=. - - Links clicáveis para Chatwoot: cada cliente em espera agora linka para
https://chat.rochasalesseguros.com.br/app/accounts/1/conversations/{id}. - - 46 arquivos órfãos →
/var/backups/hermes-insights/orphans_20260715/ - - 14 pastas backup antigas →
/var/backups/hermes-insights/old_backups_20260715/ - - API server: porta 5001 (
api_server.py), proxy/r/→ 5001 - - Waiting API: porta 9087 (
chatwoot_waiting_api.py), proxy/api/waiting→ 9087 - - Response time proxy:
/api/response_time→ 9087 (adicionado 15/jul) - - Lock:
/tmp/generate_commercial_report.lock - - Docs updates:
/var/www/obsidian-vault/01-MEMORY/PROJECTS/HERMES-INSIGHTS-UPDATES.md - - Script:
/root/hermes-insights/score_engine_v2.py - - Executa via REST API (curl) + Management API
- - Anon key: extrair de
src/lib/supabase.tsviagrep -o 'eyJ[^"\'']+' - - Liga a:
https://dauftiqcvgaydddoxqhh.supabase.co/rest/v1 - - Resultados testados (Jun 2026): 50 conversas processadas, 0 erros
- - Scores:
insights.scores(via REST POST — aceita INSERT) - - Flags: guardadas em
score_breakdownJSONB (todas as flags) - - Rubrica SOUL aplicada: playbook, response_time, communication, commercial_potential, risk
- - Scores variam: 0.1 (~Rocha Sales com 480 flags) a 6.1 (+551**9723)
- - Flag breakdown:
resposta_curta,demora_resposta,desistencia,venda_perdida,reclamacao,orcamento_nao_enviado,transferencia_sem_contexto,erro_digitacao - - Ficheiro:
/var/www/obsidian-vault/08-KNOWLEDGE/SOUL.md - - Contém: rubrica de avaliação (0-10), flags de atendimento (3 severidades), 6 perguntas essenciais de pré-venda, tipos de planos, carências, padrões de detecção por flag
- - Usar como referência para avaliar conversas, dar feedback e analisar relatórios
- - Produtos: Planos de saúde Amil, SulAmérica, Bradesco
- - Região: SP Capital, Grande SP, Interior
- - Carências: 24h urgência, 30d consultas, 90d exames, 180d procedimentos, 300d parto
- - Regra 3 vidas: Empresas 3+ vidas = isenção de carência (exceto parto/CPT)
- - Tipos: Empresarial (CNPJ), Adesão (vínculo sindical), Individual (CPF)
- - Bug: madu@rochasales.com.br não via reuniões no ComercialRS
- - Causa: role = "corretor" no banco, código só reconhece "broker" em AppDataContext.tsx
- - Fix: UPDATE profiles SET role = 'broker' WHERE email = 'madu@rochasales.com.br'
- - others with "corretor" may have same issue — check all profiles with role not in [admin,manager,broker]
- - 7 tasks com responsible_id = Madu (6d735e53...) teve created_by trocado para Rayca (1c932b6f...)
- - Tarefas: Janaina Santos, SILVIO JOSE..., Anderson..., Majo Rubenich, Leidayane..., Sandra Vasconcelos, Michelle Lima
- - Obs: Madu ainda existe no team_members e profiles (role=browser), mas não está mais ativa
- - Madu = madu@rochasales.com.br (ainda no sistema, role=browser)
- - Maju = EXCLUÍDA do ComercialRS — não achamos perfil nem team_member
- - 5 tarefas órfãs (created_by NULL) → transferidas para Rayca (1c932b6f...)
- - Obs: distinguir Maju vs Madu em todas as futuras operações
- - 185 reuniões transferidas para Rayca (1c932b6f...)
- - 1 tarefa deixada com tecrochasales@gmail.com (admin, não é da Maju)
- - Resultado: Rayca agora tem 830 tarefas como criadora
- - Atividades criadas em
/atividadescaíam no pipeline errado (Reuniões) - - Erro
PGRST204: Could not find the 'isActivity' column of 'tasks'ao criar atividade - - Atividades apareciam como "Sem projeto" na página errada
- - PostgREST é case-sensitive:
isActivity(camelCase) ≠is_activity(snake_case) - - Código usava
isActivityno INSERT mas DB usais_activity - - Filtro em Activities.tsx usava
!t.projectIdcomo diferente, nãoisActivity - - App URL:
comercialrs.rochasalesseguros.com.br(nãocomercial.) - - Build hash:
main-DxfCH9F5.js(784 KB),root-7jzVAAzf.js,main-VvUhxRWv.css - - Deploy dir:
/var/www/comercialrs/assets/+/var/www/comercialrs/index.html - - DB column:
tasks.is_activity(BOOLEAN, DEFAULT false) - - PostgREST container:
deploy-vps-rest-1 - -
/atividadese/projects→roles: ["admin"](só admin vê) - - Sidebar e Route protection ambos configurados
- - TaskCard: padding
p-2mobile /p-3tablet+ - - Fontes:
text-[12px]mobile /text-[13px]tablet+ - - GripVertical icon:
hidden sm:block - - Responsible name:
max-w-[60px]mobile /max-w-[80px]tablet+ - - Dialog:
max-h-[90vh] flex flex-colcom scroll interno - - Criar atividade no browser (Ctrl+Shift+R para limpar cache)
- - Verificar que não-admin não vê Atividades/Projetos na sidebar
- - Backfill: marcar tasks existentes com
is_activity=true/false
Sistemas Principais
⚠️ Regras Críticas
Nunca confundir
Antes de mexer em código
1. Verificar o que estava funcionando ontem
2. Confirmar que não vai quebrar nada
3. Perguntar "vai quebrar?" antes de aprovar
Dados de Acesso
Projetos Ativos (Jun 2026)
- URL: https://hermes.rochasalesseguros.com.br
- Source: /root/hermes-insights/
- Deploy: /var/www/hermes-insights/
- Sync: /usr/local/bin/hermes-sync.py
Estrutura de Identidades (Supabase)
`
auth.users.id (UUID)
→ profiles.user_id → profiles.id (mesmo valor)
→ team_members.id (diferente!)
Tasks: created_by = profile.id, responsible_id = team_members.id
`
Migração Obsidian (Jun 2026)
DocCorretor — Drive Migration (Jul 2026)
- DB direta funciona: host=db.dauftiqcvgaydddoxqhh.supabase.co, port=5432, password=tSm?p8n57f+TX5n
Spam Fix (Jun 2026)
Builds Node — Sempre NVM
`bash
nvm use 20
`
Versão correta: v20.20.2
Como o Tecrocha avalia mudanças
Sempre pergunta: "vai quebrar [sistema]?" ou "vai continuar funcionando?"
Precisa de confirmação explícita de que os fluxos mantêm funcionamento antes de aprovar.
Hermes Insights — 15/jul/2026 — Sessão Limpeza e Correções
Bugs Corrigidos
Status do Sistema (15/jul/2026)
| Página | Status |
| -------- | -------- |
| dashboard_comercial.html | ✅ OK |
| fechados_por_vendedor.html | ✅ OK |
| tempo_resposta.html | ✅ OK |
| clientes_espera.html | ✅ OK |
| relatorios.html | ✅ OK |
| sobre.html | ✅ OK |
Limpeza de Arquivos
Info Técnica
Hermes Insights — Score Engine (Jun 2026)
SOUL — Base de Conhecimento Comercial
Contexto do Negócio — Rocha Sales
Última atualização: 2026-06-22
02/jul/2026 — ComercialRS Madu role fix
02/jul/2026 — Transferência Madu → Rayca
02/jul/2026 — Correção Maju/Madu
02/jul/2026 — Transferência Maju → Rayca (definitivo)
- 5 com created_by NULL
- 180 com created_by = d3262812... (ID da conta Maju deletada)
13/jul/2026 — ComercialRS: Atividades vs Reuniões (pipeline fix)
Problema
Causa Raiz
Correções Aplicadas
1. AppDataContext.tsx (addTask): is_activity: task.isActivity ?? false (snake_case)
2. AppDataContext.tsx (mapTaskRecord): isActivity: t.is_activity ?? false (camelCase)
3. Activities.tsx filtro: if (!t.isActivity && !t.projectId) return false + branch projectFilter === 'none'
4. TaskEditDialog: título dinâmico "Actividade" / "Reunião" baseado em task.isActivity
5. useMeetingAlerts: taskTypeLabel(task) → "Actividade" ou "Reunião" nas notificações
6. TaskCreateDialog: criação com isActivity: true quando aberta via Activities
Parâmetros de Deploy
Restrições de Role
Responsivo Mobile
Pending (não testado)