arcadiasuite/ARCADIA_AUDIT_EXECUCAO.md

19 KiB

Arcádia Suite — Auditoria Completa e Plano de Execução

Data: 2026-03-13 | Versão: 1.0 | Auditores: Claude Code (4 agentes paralelos)


1. NÚMEROS DO SISTEMA

Dimensão Métrica
Tabelas no schema 337
Migration formal 1 arquivo (4.602 linhas) — cobre todas as tabelas
Tabelas COM tenantId ~147 (44%)
Tabelas SEM tenantId ~190 (56%) — risco de isolamento
Tabelas sem timestamps ~40
Tabelas sem insert schema 36 (11%)
Módulos backend auditados 25 módulos / 400+ endpoints
Páginas frontend auditadas 64 páginas
Páginas reais e funcionais 48 (75%)
Páginas parciais 12 (19%)
Páginas placeholder 4 (6%)
Ferramentas Manus definidas 79
Credenciais hardcoded 3 locais
Rotas sem autenticação (4 módulos) 102+ endpoints expostos
Serviços Python com CORS aberto 6 de 6

2. SCORE POR DIMENSÃO

Dimensão Score Status
Funcionalidade 7/10 75% real, 25% parcial/placeholder
Segurança 3/10 CORS aberto, auth ausente, credentials hardcoded
Multi-tenancy 4/10 56% das tabelas sem isolamento
Inteligência (IA) 5/10 Manus funciona, embeddings vazios, ciclo quebrado
Integrações ERP 4/10 25 conectores definidos, zero chamadas reais
Infraestrutura 2/10 No Replit, sem containers, sem CI/CD
Qualidade de código 5/10 Sem testes, sem logging estruturado, sem rate limit
Maturidade de produto 6/10 Boa visão, execução inconsistente entre módulos

Score geral: 4.5/10 — Excelente para MVP. Precisa de fundação antes de escalar.


3. ACHADOS CRÍTICOS (🔴 Resolver antes de qualquer deploy público)

SEC-01 — XOS: 100% das rotas sem autenticação e sem tenantId

server/xos/routes.ts — 40+ endpoints:
  GET /api/xos/contacts, /companies, /deals, /tickets, /conversations
  → Qualquer request não autenticado lista dados de qualquer tenant

Risco: Vazamento total de dados de CRM, tickets e conversas entre clientes.

SEC-02 — LMS: 8+ rotas sem autenticação

server/lms/routes.ts:
  GET  /api/lms/courses     → público (todos os tenants)
  POST /api/lms/courses     → qualquer pessoa cria cursos
  POST /api/lms/:id/enroll  → matrícula sem login

SEC-03 — Quality: 50+ rotas sem autenticação

server/quality/routes.ts — amostras, laudos, RNCs, documentos, treinamentos → todos públicos

SEC-04 — Credenciais hardcoded em produção

server/metaset/routes.ts:7-8:
  ADMIN_EMAIL    = "admin@arcadia.app"      ← aparece em logs
  ADMIN_PASSWORD = "Arcadia2026!BI"         ← exposição crítica

server/auth.ts:34:
  SESSION_SECRET = "arcadia-browser-secret-key-2024"  ← fallback fraco

SEC-05 — CORS aberto com credentials em TODOS os serviços Python

server/python/{automation,bi,contabil,fisco,people,bi_analysis}_service.py:
  allow_origins=["*"] + allow_credentials=True

  → Viola spec CORS (Chrome/Firefox rejeitam e o sistema quebra em prod)
  → Qualquer site pode fazer requisições autenticadas se bypassed

SEC-06 — /api/tenants exposto sem autenticação

server/routes.ts:139 — GET /api/tenants → PUBLIC
→ Qualquer pessoa enumera todos os clientes do Arcádia

SEC-07 — Manus com ferramentas perigosas sem sandboxing

server/manus/tools.ts — 79 ferramentas, incluindo:
  shell         → qualquer comando no servidor
  write_file    → escreve qualquer arquivo (incluindo .env)
  read_file     → lê qualquer arquivo
  python_execute → código Python arbitrário

BLOCKED_COMMANDS: rm, sudo, wget (bom)
ALLOWED_COMMANDS: npm, git, node ← ainda podem executar código arbitrário

SEC-08 — Zero timeout em chamadas externas críticas

manus/service.ts     → OpenAI sem timeout → hang indefinido
crm/frappe-service.ts:45 → fetch sem timeout → hang indefinido
→ Cenário: OpenAI lento → requests acumulam → servidor trava

SEC-09 — PipelineOrchestrator com risco de loop infinito

server/blackboard/PipelineOrchestrator.ts:171:
  setInterval(async () => { ... }, 2000ms)
  → operação async sem guard → múltiplas execuções simultâneas
  → agentes tentando processar a mesma task em loop

SEC-10 — 190 tabelas sem isolamento multi-tenant

Tabelas críticas: knowledge_base, conversations, chatThreads, chatMessages, whatsappContacts, whatsappMessages, whatsappSessions, whatsappTickets, manusRuns, workspacePages, pageBlocks, activityFeed


4. ACHADOS DE ALTO IMPACTO (🟠 Funcionalidade core quebrada)

FUNC-01 — Knowledge Graph: embeddings vazios — ciclo de aprendizado quebrado

O campo embedding em graph_nodes existe mas nunca é preenchido. A busca semântica do Manus retorna vazio. O sistema não aprende de nenhuma interação.

FUNC-02 — AppCenter e Marketplace não se conversam

48 apps hardcoded no AppCenter. Marketplace tem billing e subscriptions funcionando. Nenhuma relação entre os dois — qualquer tenant vê todos os 58 apps independente do plano.

FUNC-03 — 4 páginas placeholder das mais estratégicas

CentralApis.tsx → PLACEHOLDER (central de integrações)
ApiHub.tsx      → PLACEHOLDER (hub de APIs)
Agent.tsx       → PLACEHOLDER (página do agente principal)
ArcadiaNext.tsx → PLACEHOLDER

FUNC-04 — 25 conectores ERP definidos, zero fazem chamadas reais

A Central de API tem UI completa com logs e métricas. Todos os dados são mockados. TOTVS, SAP, Omie, PIX — nenhum conecta de verdade.

FUNC-05 — Python services não suportam uvicorn module-style (Docker)

docker/python-entrypoint.sh chama python -m uvicorn server.python.X:app, mas os arquivos usam if __name__ == "__main__": uvicorn.run(app). Containers Python não sobem.

FUNC-06 — Process Compass sem inteligência AI

PDCA, SWOT, Canvas modelados corretamente. Zero chamadas ao Manus. 100% manual.

FUNC-07 — WhatsApp auto-reply só em memória

server/whatsapp/service.ts:50, 60-70
  autoReplyConfig: Map (in-memory)
  → Restart = perda total de configuração sem aviso ao cliente

FUNC-08 — Dois sistemas de comunicação duplicados e divergentes

Legacy (sem tenantId):   whatsapp_*, chat_*, conversations, messages
Moderno (com tenantId):  comm_*, xosConversations, crmThreads
→ Rota de dados inconsistente, manutenção dupla

5. ACHADOS DE MÉDIO IMPACTO (🟡 Qualidade e maturidade)

QUAL-01 — Zero testes automatizados em todo o repositório

QUAL-02 — Sem paginação real (límites hardcoded: LIMIT 100)

QUAL-03 — Sem error boundaries globais no React

QUAL-04 — Sem rate limiting nas rotas da API

QUAL-05 — Logging não estruturado (só console.log/console.error)

QUAL-06 — 36 tabelas sem insert schema (11% do schema)

QUAL-07 — 40+ tabelas sem timestamps createdAt/updatedAt

QUAL-08 — Tokens WhatsApp no filesystem sem criptografia

QUAL-09 — Connection pooling ausente nos serviços Python (nova conexão por request)

QUAL-10 — Governance com endpoints públicos sem decisão documentada


6. ACHADOS DE ORGANIZAÇÃO (🔵 Arquitetura e estrutura)

ARQ-01 — ERP integrations em 4 lugares diferentes

server/erpnext/          → adapter ERPNext
server/crm/frappe-service.ts → sync Frappe
server/api-central/      → conectores REST
server/migration/        → importação one-time
→ Deveriam estar: server/integrations/erp/

ARQ-02 — Migration module escondido como tool técnica

Estratégico para onboarding de clientes mas sem fluxo guiado para consultores.

ARQ-03 — Metabase e Superset sem estratégia definida

Dois sistemas de BI sem critério de quando usar cada um.

ARQ-04 — IDE.tsx é só um wrapper <Suspense>

Nenhuma integração com backend de projetos ou contexto de desenvolvimento.

ARQ-05 — Boolean/integer/varchar misturados para campos de status

Inconsistência: isActive (boolean) vs is_active (integer 0/1) vs status (varchar).


7. STATUS POR MÓDULO

Backend (25 módulos auditados)

Módulo Rotas Auth Multi-tenant Status
Automations CRUD completo Completo
BI 30+ endpoints Completo
Blackboard Pipeline completo Completo
Communities 15+ endpoints Completo
CRM CRUD completo Completo
DevAgent/IDE File+code ops N/A Completo
Engine Room Health+control N/A Completo
Financeiro 40+ endpoints Completo
Governance 20+ endpoints ⚠️ alguns públicos ⚠️ Revisar
Graph (NOVO) CRUD + search Adicionado
LMS 20+ endpoints 8+ sem auth ⚠️ 🔴 Corrigir
Lowcode 30+ endpoints ⚠️ intencional? ⚠️ Revisar
Marketplace CRUD subs ⚠️ público N/A ⚠️ Revisar
MetaSet 12 endpoints ⚠️ credentials 🔴 Corrigir
Migration 12 endpoints Completo
Para 30+ endpoints Completo
People CRUD+proxy Completo
Production 60+ endpoints Completo
Quality 50+ endpoints maioria sem auth ⚠️ 🔴 Corrigir
Retail CRUD completo Completo
Support 25+ endpoints Completo
Valuation 25+ endpoints Completo
XOS 40+ endpoints ZERO auth sem tenant 🔴 Crítico
ERPNext 10 endpoints N/A Completo
GitHub 9 endpoints ⚠️ parcial N/A ⚠️ Revisar

Frontend (64 páginas auditadas)

Grupo Páginas Status
Completas com API real 48 AppCenter, Automations, BI, Canvas, Communities, Financeiro, Knowledge, LMS, Marketplace, Migration, People, ProcessCompass, Production, Quality, Retail, Scientist, Support, Valuation, WhatsApp, XOS (todos), Cockpit, e mais 25
⚠️ Parciais 12 IDE, CRM, DevCenter, ERP, Admin, Plus, Retail, Contabil, Fisco, Chat, WorkflowBuilder, MetabaseProxy
Placeholder 4 ArcadiaNext, Agent, ApiHub, CentralApis

Schema (337 tabelas)

Módulo Tabelas tenantId Status
Retail 40 Completo
Valuation/PDCA 30 Completo
Production/Compass 35 Completo
CRM 28 Completo
XOS 25 ⚠️ parcial Corrigir
Fiscal 18 Completo
HR/People 15 Completo
Quality 10 ⚠️ Corrigir
Financeiro 7 Completo
Comunicação legacy 30+ Corrigir
Comunicação moderna 9 Completo
LMS ⚠️ parcial N/A lms_courses criado dinamicamente
Knowledge/AI 10+ ⚠️ parcial Corrigir

8. PLANO DE EXECUÇÃO — SPRINTS

🔴 Sprint S — Segurança (Pré-requisito absoluto) — 1 semana

# Tarefa Arquivo Esforço
S1 Auth em todas as rotas XOS (40+) server/xos/routes.ts M
S2 Auth em LMS (8 rotas) server/lms/routes.ts P
S3 Auth em Quality (50+ rotas) server/quality/routes.ts M
S4 Remover credentials hardcoded; SESSION_SECRET obrigatório server/auth.ts, server/metaset/routes.ts P
S5 CORS: ["*"][APP_URL] nos 6 serviços Python server/python/*.py P
S6 Proteger /api/tenants server/routes.ts:139 P
S7 requires_approval + audit log nas tools shell e write_file server/manus/tools.ts M
S8 Timeout 30s + retry 3x em OpenAI e Frappe server/manus/service.ts, server/crm/frappe-service.ts P
S9 Guard anti-overlap no setInterval do PipelineOrchestrator server/blackboard/PipelineOrchestrator.ts:171 P
S10 tenantId nas tabelas de comunicação legacy shared/schema.ts G

Esforço: P=Pequeno(<2h) M=Médio(2-4h) G=Grande(4-8h)


🟠 Sprint 0 — Deploy no Coolify — 1 semana (paralelo ao Sprint S)

# Tarefa Esforço
0.1 Corrigir Python services para exportar app (uvicorn module) P
0.2 Testar docker compose up local — todos sobem e /health retorna 200 M
0.3 Exportar banco do Replit (pg_dump) antes de encerrar o plano P
0.4 Deploy no Coolify com domínio real + SSL automático M
0.5 Persistir config auto-reply WhatsApp no banco P
0.6 Validar: NF-e, Manus, WhatsApp funcionando em produção M

🟠 Sprint 1 — Fechar o Ciclo de Inteligência — 2 semanas

# Tarefa Esforço
1.1 Subir serviço de embeddings com pgvector P
1.2 Popular embeddings com histórico de learnedInteractions M
1.3 Configurar LiteLLM (OpenAI → Ollama fallback) P
1.4 Validar ciclo: Manus aprende → armazena → recupera em contexto M
1.5 Adicionar insert schemas nas 36 tabelas faltantes M
1.6 Padronizar timestamps nas 40+ tabelas sem createdAt/updatedAt M

🟠 Sprint 2 — App Store Real — 1 semana

# Tarefa Esforço
2.1 Endpoint GET /api/marketplace/my-apps por tenant P
2.2 AppCenter consulta subscriptions → apps aparecem/somem por plano M
2.3 Apps sem subscription → cadeado + CTA de ativar inline M
2.4 Billing engine: MRR calculado por tenant automaticamente M

🟡 Sprint 3 — Process Compass com IA — 2 semanas

# Tarefa Esforço
3.1 Brief automático: notas brutas → Manus extrai ações/responsáveis/prazos M
3.2 Diagnóstico AI: Manus + BI cruzam dados → relatório de empresa G
3.3 Health score automático de projeto (PDCA completude + prazo) M
3.4 Gerador de proposta via Scientist (DOCX/PDF) G

🟡 Sprint 4 — Integrações ERP Reais — 3 semanas

# Tarefa Esforço
4.1 Reorganizar server/integrations/erp/ (unificar 4 módulos) G
4.2 Adaptador Omie (REST mais simples) G
4.3 Adaptador TOTVS RM (segundo mais comum PMEs BR) G
4.4 UI de onboarding: ERP → espelhamento → BI em 5 passos G
4.5 Dashboard de saúde das integrações (sync status, erros) M
4.6 Completar páginas placeholder: CentralApis.tsx, ApiHub.tsx, Agent.tsx G

🟢 Sprint 5 — Soberania de IA — 1 semana

# Tarefa Esforço
5.1 Ollama + Open WebUI no Coolify (--profile ai) P
5.2 Baixar modelos: Llama 3.3, Qwen 2.5 Coder P
5.3 RAG no Open WebUI conectado ao Knowledge Graph M
5.4 Manus → LiteLLM em vez de OpenAI direto M

🔵 Sprint 6 — Qualidade de Engenharia — 2 semanas

# Tarefa Esforço
6.1 Rate limiting nas rotas da API (express-rate-limit) P
6.2 Logging estruturado com Winston (JSON + correlation ID) M
6.3 Paginação em todas as listagens principais G
6.4 Error boundaries globais no React M
6.5 Primeiros testes de integração (auth, fiscal, Manus) G
6.6 Connection pooling nos serviços Python M
6.7 Consolidar sistemas de comunicação duplicados G

🟢 Sprint 7 — ERPNext como Container de Regras — 2 semanas

# Tarefa Esforço
7.1 Container ERPNext no Coolify (MariaDB separado) M
7.2 Configurar empresa + plano de contas BR M
7.3 Bridge de autenticação (API Key por tenant) M
7.4 Expandir server/erpnext/: GL, Estoque, RH, Projetos G
7.5 Primeiro caso de uso real: pedido → lançamento GL no ERPNext G

9. LINHA DO TEMPO

Semanas →  1    2    3    4    5    6    7    8    9   10   11   12   13   14
          ┌─────────────────────────────────────────────────────────────────────
Sprint S  │████ ████                                    Segurança (obrigatório)
Sprint 0  │████ ████                                    Deploy Coolify
Sprint 1  │          ████ ████                          Inteligência + Schema
Sprint 2  │               ████                          App Store Real
Sprint 3  │                    ████ ████                Process Compass IA
Sprint 4  │                              ████ ████ ████ Integrações ERP reais
Sprint 5  │                                        ████ Soberania IA
Sprint 6  │                                             ████ ████ Qualidade
Sprint 7  │                                                       ████ ████ ERPNext

10. TOP 10 — MAIORES ALAVANCAS POR IMPACTO

Rank O que fazer Impacto Esforço
1 Autenticar rotas XOS, LMS, Quality Segurança crítica Baixo
2 Corrigir CORS nos serviços Python Segurança crítica Baixo
3 Deploy no Coolify com Docker Infra — tudo depende disso Médio
4 Fechar ciclo de embeddings (pgvector) IA aprende de verdade Médio
5 Conectar Marketplace → AppCenter Modelo de negócio funciona Médio
6 Adaptador Omie real na Central de API Primeira integração ERP real Médio
7 tenantId nas tabelas de comunicação Isolamento de dados correto Alto
8 Brief automático no Process Compass Produto para consultores Médio
9 Timeout + retry em chamadas externas Estabilidade em produção Baixo
10 Completar Agent.tsx, CentralApis.tsx Páginas estratégicas com UI Alto

11. DECISÕES ARQUITETURAIS PENDENTES

Estas decisões precisam de resposta antes de codificar:

# Decisão Opções
D1 BI padrão do sistema? Metabase (já existe) vs Superset (no docker-compose)
D2 LMS usa tabelas dinâmicas ou schema.ts? Hoje cria tabelas em runtime — inconsistente
D3 Sistema de comunicação canônico? Legacy whatsapp_* vs moderno comm_* vs XOS
D4 Marketplace é público ou requer auth? Hoje público (intencional?)
D5 Governance/Lowcode são públicos? Sem auth (intencional para parceiros?)
D6 Usuários são globais ou por tenant? Hoje global (users sem tenantId) — documentar

Documento gerado em 2026-03-13 via auditoria paralela com 4 agentes Claude Code. Cobre: 25 módulos backend, 64 páginas frontend, 337 tabelas de schema, segurança e integrações.