- Adiciona deepseek-r1:14b e alias arcadia-agent no litellm-config.yaml
- arcadia-default agora aponta para R1 14B (era llama3.2:3b)
- Timeout LiteLLM aumentado de 120s para 300s
- Adiciona rede ollama-net (external) ao serviço litellm no compose
para comunicação com container Ollama via hostname estável
- .gitignore: ignora arquivos .aider*
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Adiciona AbortSignal.timeout(8s) em todas as chamadas fetch ao Superset
- Limpa cache de token automaticamente em caso de erro (clearTokenCache)
para que próxima requisição force novo login ao invés de usar token stale
- Reduz TTL do cache de 50 para 45 min como margem de segurança
- Força iframe do SupersetDashboard a 100% width/height via classe CSS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- superset_config.py: adiciona FLASK_APP_MUTATOR que seta g.user a partir
do Bearer JWT quando o usuário está como anônimo (necessário porque o
papel Public com can_read on Dashboard faz protect() pular verificação JWT)
- superset_config.py: TALISMAN_ENABLED=False, X_FRAME_OPTIONS=ALLOWALL
para permitir embedding cross-origin via iframe
- routes.ts: adiciona session cookie nas chamadas de busca do dashboard
além de incluir X-CSRFToken + Cookie no guest token request
- SupersetDashboard.tsx: usa bi.onboardbi.com.br como supersetDomain,
tela de unavailable com UI adequada (sem iframe de fallback)
- BiWorkspace.tsx: link "Abrir em Nova Aba" aponta para bi.onboardbi.com.br
- docker-compose.prod.yml: labels HTTP→HTTPS redirect para Superset
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
db/index.ts está na raiz do projeto, não dentro de server/.
- server/soe/event-bus.ts: ../db → ../../db
- server/soe/handlers/*: ../../db → ../../../db
- server/soe/rule-engine/index.ts: ../../db → ../../../db
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
O SDK do Superset exige o UUID do embedded config (não o slug) tanto no
embedDashboard quanto no guest token. Agora o backend resolve:
slug → dashboard ID → embedded UUID → guest token com UUID
E retorna { token, embeddedId } para o frontend usar no embedDashboard.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
init.sh tentava conectar ao banco 'superset' (inexistente) para o health
check, causando loop infinito. Agora usa banco 'postgres' para verificar
se o PostgreSQL está disponível, depois cria o banco 'superset' antes de
rodar as migrações.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Aplica soeRuleEngine.apply() antes de inserir sales orders e antes
de emitir NF-e, validando e enriquecendo o payload via motor de regras.
Retorna 422 com detalhes de validação se regras SOE falharem.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create client/src/contexts/SoeMotorContext.tsx with SoeMotorProvider
- Create client/src/pages/SOE.tsx (re-export of Plus/ERP module)
- Fix ProtectedRoute component type to accept LazyExoticComponent
Resolves TS2307 for @/contexts/SoeMotorContext and @/pages/SOE,
and TS2322 for all lazy-loaded routes.
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
3 novas páginas XOS + rotas + navegação central:
XosSupervisor (/xos/supervisor):
- KPI cards em tempo real: em atendimento, resolvidos hoje, tickets urgentes, agentes ativos
- Tab Filas: ocupação, aguardando, TMA, agentes por fila com Progress bar
- Tab Agentes: tabela com conversas ativas, resolvidos hoje, CSAT médio, TMA, filas
- Tab Ao Vivo: lista de conversas abertas com nome, canal, fila, agente, tempo de espera
- Auto-refresh a cada 30s, filtro por fila, indicador de horário de atualização
- Conversas > 30min destacadas em vermelho
XosReports (/xos/reports):
- Seletor de período (7d / 30d / 90d / 1 ano)
- Tab Visão Geral: KPI de conversas, tickets, receita ganha, novos contatos
+ cards de detalhe com TMA, canais, pipeline com taxa de conversão
- Tab CSAT: nota média, taxa de satisfação, distribuição de notas com barras visuais
- Tab SLA: compliance rate com badge colorido, violações, tickets por prioridade
- Tab Agentes: tabela com conversas, resolução, CSAT, TMA, tickets
XosProtocols (/xos/protocols):
- KPI: abertos, resolvidos, SLA violados
- Lista com número do protocolo (clicável para copiar), status badge, SLA restante
- Protocolos com SLA violado destacados em vermelho
- Dialog de detalhes: todos os campos, ações (Resolver, Registrar CSAT)
- Dialog de CSAT: stars interativas 1-5 + comentário
- Dialog de criação: assunto, ID do contato, SLA em minutos
- Busca e filtro por status
App.tsx:
- 3 novas rotas: /xos/supervisor, /xos/reports, /xos/protocols
XosCentral.tsx:
- 3 novos módulos no grid: Supervisor, Relatórios, Protocolos
- Grid expandido de 6 para 9 colunas
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Schema (shared/schema.ts):
- xos_protocols: protocolo numerado por atendimento com SLA deadline, breach flag e CSAT
- xos_sla_policies: políticas de SLA por fila (first_response + resolution em minutos)
- Export dos novos types: XosProtocol, XosSlaPolicy
XOS Routes (server/xos/routes.ts) — 40 novos endpoints:
Supervisor Monitor:
GET /supervisor/overview → KPIs globais em tempo real (conversas, tickets, agentes)
GET /supervisor/queues → Filas com ativos, aguardando, TMA, agentes
GET /supervisor/agents → Agentes com conversas ativas, CSAT, TMA por período
GET /supervisor/conversations/live → Conversas ao vivo por fila/agente/status
CSAT:
POST /conversations/:id/csat → Registra nota 1-5 + comentário (conversa)
POST /tickets/:id/csat → Registra nota 1-5 + comentário (ticket)
GET /csat/summary → Distribuição de notas + satisfaction_rate_pct por período
Protocolos:
GET /protocols → Lista protocolos com filtros (status, contato, busca)
POST /protocols → Cria protocolo com número YYYYMMDD-XXXXXX + SLA
PATCH /protocols/:id → Atualiza status/assignee do protocolo
POST /conversations/:id/protocol → Auto-gera protocolo para conversa + herda SLA da fila
Business Hours:
GET /queues/:id/business-hours → Retorna horários configurados
PUT /queues/:id/business-hours → Atualiza schedules [{dayOfWeek, startTime, endTime}]
GET /queues/:id/is-open → Verifica se a fila está aberta agora + mensagem fora de hora
SLA Policies:
GET /sla-policies → Lista políticas ativas por fila
POST /sla-policies → Cria política (first_response + resolution em minutos)
PATCH /sla-policies/:id → Atualiza política
POST /sla-policies/check-breaches → Marca violações de SLA + emite crm.sla.breached
Reports/Analytics:
GET /reports/overview → Visão geral: conversas, tickets, contatos, deals por período
GET /reports/agents → Performance por agente: conversas, CSAT, TMA, tickets
GET /reports/sla → Compliance de SLA por protocolo + tickets por prioridade
Automation Engine (automation_engine.py):
Novos event types: crm.csat.received, crm.sla.breached, crm.protocol.created
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Inclui:
- .env real de produção (repo privado, auditoria total)
- docker-compose.prod.yml atualizado (LiteLLM/LLMFit, Superset)
- docker/superset/superset_config.py
- client/src/pages/BiWorkspace.tsx
- server/superset/routes.ts
- .gitignore: remove .env da lista de ignorados
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create client/src/contexts/SoeMotorContext.tsx with SoeMotorProvider
- Create client/src/pages/SOE.tsx (re-export of Plus/ERP module)
- Fix ProtectedRoute component type to accept LazyExoticComponent
Resolves TS2307 for @/contexts/SoeMotorContext and @/pages/SOE,
and TS2322 for all lazy-loaded routes.
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
3 novas páginas XOS + rotas + navegação central:
XosSupervisor (/xos/supervisor):
- KPI cards em tempo real: em atendimento, resolvidos hoje, tickets urgentes, agentes ativos
- Tab Filas: ocupação, aguardando, TMA, agentes por fila com Progress bar
- Tab Agentes: tabela com conversas ativas, resolvidos hoje, CSAT médio, TMA, filas
- Tab Ao Vivo: lista de conversas abertas com nome, canal, fila, agente, tempo de espera
- Auto-refresh a cada 30s, filtro por fila, indicador de horário de atualização
- Conversas > 30min destacadas em vermelho
XosReports (/xos/reports):
- Seletor de período (7d / 30d / 90d / 1 ano)
- Tab Visão Geral: KPI de conversas, tickets, receita ganha, novos contatos
+ cards de detalhe com TMA, canais, pipeline com taxa de conversão
- Tab CSAT: nota média, taxa de satisfação, distribuição de notas com barras visuais
- Tab SLA: compliance rate com badge colorido, violações, tickets por prioridade
- Tab Agentes: tabela com conversas, resolução, CSAT, TMA, tickets
XosProtocols (/xos/protocols):
- KPI: abertos, resolvidos, SLA violados
- Lista com número do protocolo (clicável para copiar), status badge, SLA restante
- Protocolos com SLA violado destacados em vermelho
- Dialog de detalhes: todos os campos, ações (Resolver, Registrar CSAT)
- Dialog de CSAT: stars interativas 1-5 + comentário
- Dialog de criação: assunto, ID do contato, SLA em minutos
- Busca e filtro por status
App.tsx:
- 3 novas rotas: /xos/supervisor, /xos/reports, /xos/protocols
XosCentral.tsx:
- 3 novos módulos no grid: Supervisor, Relatórios, Protocolos
- Grid expandido de 6 para 9 colunas
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Schema (shared/schema.ts):
- xos_protocols: protocolo numerado por atendimento com SLA deadline, breach flag e CSAT
- xos_sla_policies: políticas de SLA por fila (first_response + resolution em minutos)
- Export dos novos types: XosProtocol, XosSlaPolicy
XOS Routes (server/xos/routes.ts) — 40 novos endpoints:
Supervisor Monitor:
GET /supervisor/overview → KPIs globais em tempo real (conversas, tickets, agentes)
GET /supervisor/queues → Filas com ativos, aguardando, TMA, agentes
GET /supervisor/agents → Agentes com conversas ativas, CSAT, TMA por período
GET /supervisor/conversations/live → Conversas ao vivo por fila/agente/status
CSAT:
POST /conversations/:id/csat → Registra nota 1-5 + comentário (conversa)
POST /tickets/:id/csat → Registra nota 1-5 + comentário (ticket)
GET /csat/summary → Distribuição de notas + satisfaction_rate_pct por período
Protocolos:
GET /protocols → Lista protocolos com filtros (status, contato, busca)
POST /protocols → Cria protocolo com número YYYYMMDD-XXXXXX + SLA
PATCH /protocols/:id → Atualiza status/assignee do protocolo
POST /conversations/:id/protocol → Auto-gera protocolo para conversa + herda SLA da fila
Business Hours:
GET /queues/:id/business-hours → Retorna horários configurados
PUT /queues/:id/business-hours → Atualiza schedules [{dayOfWeek, startTime, endTime}]
GET /queues/:id/is-open → Verifica se a fila está aberta agora + mensagem fora de hora
SLA Policies:
GET /sla-policies → Lista políticas ativas por fila
POST /sla-policies → Cria política (first_response + resolution em minutos)
PATCH /sla-policies/:id → Atualiza política
POST /sla-policies/check-breaches → Marca violações de SLA + emite crm.sla.breached
Reports/Analytics:
GET /reports/overview → Visão geral: conversas, tickets, contatos, deals por período
GET /reports/agents → Performance por agente: conversas, CSAT, TMA, tickets
GET /reports/sla → Compliance de SLA por protocolo + tickets por prioridade
Automation Engine (automation_engine.py):
Novos event types: crm.csat.received, crm.sla.breached, crm.protocol.created
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
- docker-compose.yml: adiciona serviços `erpnext` (frappe/erpnext:version-15)
e `erpnext-db` (MariaDB 10.6) no perfil `erpnext`
Volumes: erpnext_db, erpnext_sites, erpnext_logs
Porta exposta: 8090 (→ :8080 interno)
- docker/erpnext/init.sh: script de inicialização que aguarda MariaDB,
cria o site `erpnext.local` com bench new-site, instala app erpnext
e sobe o servidor na porta 8080
- server/erpnext/proxy.ts: proxy transparente /erpnext-app/* → container
(ativo em DOCKER_MODE=true ou ERPNEXT_PROXY_ENABLED=true)
Reescreve Location headers, forward X-Forwarded-* e X-Site-Name
Endpoint: GET /api/erpnext/container-status
- server/soe/erpnext-rule-importer.ts: importa regras de negócio do ERPNext
(campos obrigatórios por DocType + Workflows ativos) e salva em soe_regras
13 DocTypes mapeados para triggers SOE correspondentes
Endpoint: POST /api/soe/erpnext/import-rules
- server/routes.ts: registra setupErpNextProxy e endpoint de import-rules
- .env.example: documenta variáveis para modo container e modo externo
Uso: docker compose --profile erpnext up
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Análise do código real revelou que:
- Superset já está no docker-compose.yml (profile: bi)
- MetaSet = Metabase com nome customizado (server/metaset/*)
- Falta apenas a integração gateway + guest token + componente React
Plano cobre:
- docker/superset/superset_config.py + init.sh
- server/superset/proxy.ts + routes.ts (guest token para embedding)
- SupersetDashboard.tsx (componente React reutilizável em qualquer tela)
- @superset-ui/embedded-sdk para embedding nativo
- Roadmap em 5 fases (1-2 dias de implementação real)
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Análise profunda do MAPA_SOE_ARCADIA.md revelou que o SOE já tem:
- SOE.tsx com 2.414 linhas funcionando
- 60+ endpoints /api/soe/* já existindo
- ArcadiaPlusClient e ArcadiaNextClient já implementados
- Padrão motor/adaptador já operacional
O plano v2 foca no que realmente falta:
- SOE Rule Engine (middleware entre rota e adaptador)
- Event Bus (lançamentos contábeis automáticos)
- Ocultação de Plus/ERPNext do usuário final
- Regras fiscais centralizadas no SOE
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
Documenta a arquitetura e roadmap para transformar o Arcádia em um
SOE Central que orquestra Plus (Laravel) e ERPNext de forma invisível,
com regras fiscais, contábeis e financeiras centralizadas.
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
- Conecta Manus ao LiteLLM via AI_INTEGRATIONS_OPENAI_BASE_URL (era hardcoded para OpenAI)
- Adiciona OLLAMA_BASE_URL ao serviço litellm no docker-compose.prod.yml (fix crítico: sem isso o fallback para Ollama não funcionava)
- Adiciona DATABASE_URL ao litellm para logging/auditoria de chamadas LLM
- Open WebUI agora também aponta para LiteLLM (acesso a todos os modelos na interface)
- litellm-config.yaml: slot comentado para LLMFit (TIER 1), Ollama como padrão soberano (TIER 2), externos como opt-in (TIER 3)
- Adiciona modelo nomic-embed-text para embeddings locais via Ollama
- .env.example: documenta AI_INTEGRATIONS_*, LLMFIT_BASE_URL, providers externos opcionais
- arcadia-default agora aponta para llama3.3 (Ollama) por padrão — soberania total sem configuração adicional
Estratégia de soberania:
Dados NUNCA saem sem configuração explícita de API key externa.
LLMFit turbocharge: quando ativado, modelos fine-tuned têm prioridade sobre Ollama.
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
QUALIDADE:
- Rate limiting: 500 req/15min em /api; 20 req/15min em login/register
- Winston logger: JSON em prod, colorido em dev; HTTP middleware com user_id/tenant_id
- Paginacao: XOS (conversations, tickets, activities) e Quality (9 endpoints) recebem offset
MULTI-TENANCY:
- tenantId adicionado a 7 tabelas criticas: workspace_pages, quick_notes,
activity_feed, conversations, knowledge_base, chat_threads, manus_runs
- Migration 0002_tenant_isolation.sql com indices de performance
PROCESS COMPASS COM IA:
- POST /api/compass/projects/:id/ai-brief
Gera briefing executivo via GPT-4o-mini: situação, riscos, ações prioritárias,
health score — baseado em tasks, PDCA e status do projeto
- GET /api/compass/projects/:id/health
Score 0-100 calculado: 40% completude de tasks + 30% pontualidade + 30% PDCA
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb
SEGURANÇA:
- Manus: ferramentas perigosas (shell, write_file, python_execute) agora
retornam requires_approval na primeira chamada e exigem confirmação via
ask_human antes de executar
MARKETPLACE → APPCENTER:
- Novo endpoint GET /api/marketplace/my-apps (autenticado):
retorna códigos de módulos ativos do tenant (core sempre incluídos)
- AppCenter consome o endpoint via useQuery
- Apps com subscriptionCode não contratados aparecem com:
- Overlay de cadeado no ícone
- Badge "Não contratado"
- Clique redireciona ao Marketplace em vez de abrir o app
CORREÇÃO DO AUDIT:
- Agent.tsx, CentralApis.tsx, ApiHub.tsx, ArcadiaNext.tsx verificados:
todos já têm implementação real (26k+ tokens) — classificação como
"placeholder" no audit estava incorreta
https://claude.ai/code/session_01DinH3VcgbAv1d9MqnNxzdb