diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..95d7cc2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules +dist +.DS_Store +server/public +vite.config.ts.* +*.tar.gz +metabase/metabase-data.* +metabase/plugins/ \ No newline at end of file diff --git a/.replit b/.replit new file mode 100644 index 0000000..16452d5 --- /dev/null +++ b/.replit @@ -0,0 +1,88 @@ +modules = ["nodejs-20", "web", "python-3.11", "python3", "postgresql-16"] +run = "npm run dev" +hidden = [".config", ".git", "generated-icon.png", "node_modules", "dist"] + +[nix] +channel = "stable-24_05" +packages = ["cairo", "cargo", "ffmpeg-full", "freetype", "ghostscript", "gitFull", "glibcLocales", "gobject-introspection", "gtk3", "libiconv", "libxcrypt", "mysql80", "openssl", "php82", "php82Packages.composer", "pkg-config", "playwright-driver", "qhull", "rustc", "tcl", "tk", "unzip", "xcodebuild", "zlib", "jdk21"] + +[[ports]] +localPort = 5000 +externalPort = 80 + +[[ports]] +localPort = 8001 +externalPort = 3001 + +[[ports]] +localPort = 8002 +externalPort = 3000 + +[[ports]] +localPort = 8003 +externalPort = 3003 + +[[ports]] +localPort = 8004 +externalPort = 4200 + +[[ports]] +localPort = 8005 +externalPort = 3002 + +[[ports]] +localPort = 8006 +externalPort = 5173 + +[[ports]] +localPort = 8080 +externalPort = 8080 + +[[ports]] +localPort = 8088 +externalPort = 5000 + +[env] +PORT = "5000" + +[deployment] +deploymentTarget = "autoscale" +build = ["npm", "run", "build"] +publicDir = "dist/public" +run = ["node", "./dist/index.cjs"] + +[workflows] +runButton = "Project" + +[[workflows.workflow]] +name = "Project" +mode = "parallel" +author = "agent" + +[[workflows.workflow.tasks]] +task = "workflow.run" +args = "Start application" + +[[workflows.workflow]] +name = "Start application" +author = "agent" + +[[workflows.workflow.tasks]] +task = "shell.exec" +args = "npm run dev" +waitForPort = 5000 + +[agent] +mockupState = "FULLSTACK" +integrations = ["javascript_openai_ai_integrations:2.0.0", "github:1.0.0"] + +[userenv] + +[userenv.shared] +FISCO_PYTHON_URL = "http://localhost:8002" +FISCO_PORT = "8002" +CONTABIL_PYTHON_URL = "http://localhost:8003" +PEOPLE_PYTHON_URL = "http://localhost:8004" +CONTABIL_PORT = "8003" +PEOPLE_PORT = "8004" +SSO_SECRET = "arcadia-sso-secret-2024-plus-integration-key-secure" diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md new file mode 100644 index 0000000..af4aedd --- /dev/null +++ b/DOCUMENTATION.md @@ -0,0 +1,553 @@ +# Arcádia Suite - Documentação Técnica Completa + +**Versão:** 1.0 +**Data:** Janeiro 2026 +**Desenvolvido por:** Arcádia Technology + +--- + +## Sumário + +1. [Visão Geral](#visão-geral) +2. [Arquitetura do Sistema](#arquitetura-do-sistema) +3. [Módulos do Sistema](#módulos-do-sistema) +4. [Modelo de Dados](#modelo-de-dados) +5. [APIs e Endpoints](#apis-e-endpoints) +6. [Integrações Externas](#integrações-externas) +7. [Segurança e Autenticação](#segurança-e-autenticação) +8. [Guia de Implantação](#guia-de-implantação) + +--- + +## Visão Geral + +O **Arcádia Suite** é um Sistema Operacional Empresarial (Business Operating System) alimentado por Inteligência Artificial, projetado para revolucionar operações empresariais. O sistema integra cinco pilares fundamentais: + +### Os 5 Pilares + +1. **Knowledge Graph** - Grafo de conhecimento para dados empresariais interconectados +2. **Central Intelligence (Scientist)** - Módulo de IA para geração automática de soluções +3. **Manus (Agente Autônomo)** - Execução de tarefas e automação +4. **Centro de Comunicação Unificado** - Interação com clientes via múltiplas plataformas +5. **IDE Completa** - Ambiente de desenvolvimento multi-modal + +### Segmentação de Produtos + +| Produto | Público-Alvo | Stack Tecnológica | +|---------|-------------|-------------------| +| **Arcádia Plus** | Pequenas empresas | Node.js + Python + PostgreSQL | +| **Arcádia Next** | Médias/Grandes empresas | Frappe Framework + PostgreSQL | + +Ambos compartilham o **Arcádia Fisco** como motor fiscal centralizado. + +--- + +## Arquitetura do Sistema + +### Arquitetura em 4 Camadas + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ CAMADA DE APRESENTAÇÃO │ +│ React 18 + TypeScript + Tailwind CSS + shadcn/ui │ +│ Interface estilo navegador com abas e omnibox │ +│ Porta: 5000 │ +└─────────────────────────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ CAMADA DE ORQUESTRAÇÃO │ +│ Express.js + Socket.IO + Manus Agent │ +│ API REST + WebSocket em tempo real │ +│ Porta: 5000 │ +└─────────────────────────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ CAMADA DE INTELIGÊNCIA │ +│ FastAPI (Python) + OpenAI API │ +│ Scientist, Embeddings, RPA, Workflows │ +│ Porta: 8001 (IA) / 8002 (Fisco) │ +└─────────────────────────────────────────────────────────────────┘ + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ CAMADA DE DADOS │ +│ PostgreSQL + Knowledge Graph + ChromaDB │ +│ Drizzle ORM + Session Store │ +└─────────────────────────────────────────────────────────────────┘ +``` + +### Estrutura de Diretórios + +``` +arcadia-suite/ +├── client/ # Frontend React +│ └── src/ +│ ├── components/ # Componentes reutilizáveis +│ ├── hooks/ # React hooks customizados +│ ├── lib/ # Utilitários e configurações +│ └── pages/ # Páginas da aplicação +├── server/ # Backend Node.js +│ ├── admin/ # Rotas administrativas +│ ├── api-central/ # Central de APIs +│ ├── automations/ # Motor de automações +│ ├── bi/ # Business Intelligence +│ ├── chat/ # Chat interno +│ ├── compass/ # Process Compass (clientes/projetos) +│ ├── crm/ # Gestão de relacionamento +│ ├── email/ # Serviço de e-mail +│ ├── erp/ # Integração ERP +│ ├── fisco/ # Motor fiscal (NF-e) +│ ├── ide/ # IDE integrada +│ ├── learning/ # Sistema de aprendizado +│ ├── login-bridge/ # Bridge de autenticação +│ ├── manus/ # Agente autônomo +│ ├── production/ # Gestão de produção +│ ├── productivity/ # Hub de produtividade +│ ├── proxy/ # Proxy reverso +│ ├── python/ # Serviços Python (FastAPI) +│ ├── support/ # Central de suporte +│ ├── valuation/ # Precificação e valuation +│ └── whatsapp/ # Integração WhatsApp +└── shared/ # Código compartilhado + └── schema.ts # Schemas do banco de dados +``` + +--- + +## Módulos do Sistema + +### 1. Cockpit (Dashboard Principal) +**Arquivo:** `client/src/pages/Cockpit.tsx` + +Painel central com visão geral do sistema: +- Widgets configuráveis +- Métricas em tempo real +- Atividades recentes +- Atalhos para módulos + +### 2. Process Compass +**Arquivo:** `client/src/pages/ProcessCompass.tsx` +**API:** `/api/compass/*` + +Gestão completa de processos empresariais: +- **Clientes:** Cadastro, histórico, segmentação +- **Projetos:** Cronograma, tarefas, milestones +- **Contratos:** Gestão de contratos e renovações +- **Timesheet:** Controle de horas trabalhadas + +### 3. Comunicação Unificada +**Arquivo:** `client/src/pages/Comunicacao.tsx` +**API:** `/api/whatsapp/*` + +Centro de comunicação multi-canal: +- **WhatsApp Business:** Atendimento via Baileys +- **Chat Interno:** Comunicação da equipe +- **E-mail:** Integração IMAP/SMTP +- **Tickets:** Sistema de filas de atendimento + +### 4. CRM (Customer Relationship Management) +**Arquivo:** `client/src/pages/Crm.tsx` +**API:** `/api/crm/*` + +Gestão de relacionamento com clientes: +- Pipeline de vendas +- Funil de conversão +- Gestão de oportunidades +- Comissionamento automático +- Integração com Google Calendar + +### 5. Business Intelligence (Arcádia Insights) +**Arquivo:** `client/src/pages/BiWorkspace.tsx` +**API:** `/api/bi/*` + +Análise e visualização de dados: +- Upload de arquivos (CSV, Excel) +- Gráficos interativos (Recharts) +- Dashboards personalizáveis +- Conexão com múltiplas fontes + +### 6. Scientist (Central de Inteligência) +**Arquivo:** `client/src/pages/Scientist.tsx` +**API:** `/api/scientist/*` + +Módulo de auto-programação com IA: +- Análise de dados automatizada +- Geração de código (Python/SQL) +- Execução em sandbox +- Armazenamento de soluções reutilizáveis + +### 7. Manus (Agente Autônomo) +**Arquivo:** `client/src/pages/Agent.tsx` +**API:** `/api/manus/*` + +Executor de tarefas autônomo: +- Loop pensamento-ação-observação +- Ferramentas disponíveis: + - Busca web + - Consulta ao Knowledge Graph + - Consulta ERP + - Cálculos + - Envio de mensagens + - Geração de relatórios + - Agendamentos + +### 8. Arcádia Fisco (Motor Fiscal) +**Arquivo:** `client/src/pages/Fisco.tsx` +**API:** `/api/fisco/*` + +Motor fiscal centralizado para compliance brasileiro: +- **NCM:** Nomenclatura Comum do Mercosul +- **CFOP:** Código Fiscal de Operações +- **CEST:** Código Especificador da Substituição Tributária +- **Grupos de Tributação:** Configuração de impostos +- **Certificados Digitais:** Gestão de A1/A3 +- **NF-e/NFC-e:** Emissão de notas fiscais eletrônicas +- **IBS/CBS:** Campos para Reforma Tributária + +#### Integração nfelib (Python) +**Arquivo:** `server/python/fisco_service.py` + +Serviço FastAPI para processamento de NF-e: +- Geração de XML (layout 4.00) +- Assinatura digital com certificado A1 +- Comunicação com SEFAZ (homologação/produção) +- Consulta, cancelamento e inutilização + +### 9. Produção +**Arquivo:** `client/src/pages/Production.tsx` +**API:** `/api/production/*` + +Gestão de produção e manufatura: +- Ordens de produção +- Controle de estoque +- Rastreabilidade +- Custos de produção + +### 10. Valuation (Precificação) +**Arquivo:** `client/src/pages/Valuation.tsx` +**API:** `/api/valuation/*` + +Sistema de precificação inteligente: +- Cálculo de custos +- Margem de contribuição +- Markup +- Simulações de preço + +### 11. Suporte +**Arquivo:** `client/src/pages/Support.tsx` +**API:** `/api/support/*` + +Central de atendimento: +- Tickets de suporte +- Base de conhecimento +- SLA e prioridades +- Histórico de atendimentos + +### 12. Automações +**Arquivo:** `client/src/pages/Automations.tsx` +**API:** `/api/automations/*` + +Motor de automações: +- Triggers e ações +- Workflows visuais +- Integrações via webhooks +- Agendamentos (cron) + +### 13. Knowledge Base +**Arquivo:** `client/src/pages/Knowledge.tsx` +**API:** `/api/knowledge/*` + +Base de conhecimento: +- Artigos e documentação +- Categorização +- Busca semântica +- Integração com IA + +### 14. IDE +**Arquivo:** `client/src/pages/IDE.tsx` +**API:** `/api/ide/*` + +Ambiente de desenvolvimento integrado: +- Monaco Editor +- Terminal (Xterm.js) +- Execução de código +- Gerenciamento de arquivos + +### 15. Administração +**Arquivo:** `client/src/pages/Admin.tsx` +**API:** `/api/admin/*` + +Painel administrativo: +- **Usuários:** Gestão de contas +- **Perfis:** Controle de acesso +- **Parceiros:** Hierarquia multi-tenant +- **Módulos:** Configuração de funcionalidades +- **Configurações:** Parâmetros do sistema + +### 16. API Hub +**Arquivo:** `client/src/pages/ApiHub.tsx` + +Documentação interativa de APIs: +- Listagem de endpoints +- Testes em tempo real +- Exemplos de uso +- Geração de código + +--- + +## Modelo de Dados + +### Entidades Principais + +#### Usuários e Autenticação +```sql +users -- Usuários do sistema +profiles -- Perfis de acesso +roles -- Papéis (RBAC) +permissions -- Permissões granulares +role_permissions -- Associação papel-permissão +user_roles -- Associação usuário-papel +module_access -- Controle de acesso a módulos +``` + +#### Produtividade +```sql +workspace_pages -- Páginas estilo Notion +page_blocks -- Blocos de conteúdo +page_links -- Links bidirecionais +dashboard_widgets -- Widgets do dashboard +quick_notes -- Notas rápidas +activity_feed -- Feed de atividades +user_favorites -- Favoritos +command_history -- Histórico de comandos +``` + +#### Conversação e IA +```sql +conversations -- Conversas com agente +messages -- Mensagens +chat_attachments -- Anexos +knowledge_base -- Base de conhecimento +``` + +#### ERP e Integrações +```sql +erp_connections -- Conexões com ERPs +agent_tasks -- Tarefas do agente +task_executions -- Execuções de tarefas +``` + +#### Comunicação +```sql +chat_threads -- Threads de chat +chat_participants -- Participantes +chat_messages -- Mensagens de chat +whatsapp_sessions -- Sessões WhatsApp +whatsapp_contacts -- Contatos WhatsApp +whatsapp_messages -- Mensagens WhatsApp +whatsapp_queues -- Filas de atendimento +whatsapp_tickets -- Tickets de atendimento +``` + +#### Process Compass +```sql +compass_clients -- Clientes +compass_projects -- Projetos +compass_project_members -- Membros de projeto +compass_project_phases -- Fases de projeto +compass_contracts -- Contratos +compass_timesheet -- Timesheet +compass_invoices -- Faturas +compass_payments -- Pagamentos +``` + +#### CRM +```sql +crm_leads -- Leads +crm_opportunities -- Oportunidades +crm_activities -- Atividades +crm_pipelines -- Pipelines +crm_stages -- Estágios +crm_commissions -- Comissões +``` + +#### Fisco +```sql +fisco_ncm -- NCMs +fisco_cest -- CESTs +fisco_cfop -- CFOPs +fisco_grupos_tributacao -- Grupos de tributação +fisco_natureza_operacao -- Naturezas de operação +fisco_ibpt -- Tabela IBPT +fisco_certificados -- Certificados digitais +fisco_configuracoes -- Configurações fiscais +fisco_notas -- Notas fiscais +fisco_nota_itens -- Itens das notas +fisco_nota_eventos -- Eventos fiscais +``` + +#### Multi-Tenant +```sql +partners -- Parceiros +partner_invites -- Convites de parceiros +tenant_clients -- Clientes dos tenants +``` + +--- + +## APIs e Endpoints + +### Estrutura Base + +| Módulo | Base URL | Descrição | +|--------|----------|-----------| +| Admin | `/api/admin` | Administração do sistema | +| Compass | `/api/compass` | Process Compass | +| CRM | `/api/crm` | Gestão de relacionamento | +| WhatsApp | `/api/whatsapp` | Comunicação WhatsApp | +| Fisco | `/api/fisco` | Motor fiscal | +| BI | `/api/bi` | Business Intelligence | +| Production | `/api/production` | Gestão de produção | +| Valuation | `/api/valuation` | Precificação | +| Support | `/api/support` | Central de suporte | +| Automations | `/api/automations` | Automações | +| IDE | `/api/ide` | Ambiente de desenvolvimento | +| Learning | `/api/learning` | Sistema de aprendizado | + +### Exemplos de Endpoints + +#### Fisco - NF-e +``` +GET /api/fisco/nfe/service-status # Status do serviço +POST /api/fisco/nfe/validar-certificado # Validar certificado A1 +POST /api/fisco/nfe/gerar-xml # Gerar XML preview +POST /api/fisco/nfe/emitir # Emitir NF-e +POST /api/fisco/nfe/consultar # Consultar na SEFAZ +POST /api/fisco/nfe/cancelar # Cancelar NF-e +POST /api/fisco/nfe/inutilizar # Inutilizar numeração +``` + +#### Compass - Clientes +``` +GET /api/compass/clients # Listar clientes +GET /api/compass/clients/:id # Detalhes do cliente +POST /api/compass/clients # Criar cliente +PUT /api/compass/clients/:id # Atualizar cliente +DELETE /api/compass/clients/:id # Excluir cliente +``` + +#### Admin - Usuários +``` +GET /api/admin/users # Listar usuários +GET /api/admin/users/:id # Detalhes do usuário +POST /api/admin/users # Criar usuário +PUT /api/admin/users/:id # Atualizar usuário +DELETE /api/admin/users/:id # Excluir usuário +``` + +--- + +## Integrações Externas + +### OpenAI API +- **Uso:** Agente de IA, Scientist, auto-replies +- **Modelo:** gpt-4o-mini +- **Configuração:** Via Replit Secrets + +### Baileys (WhatsApp) +- **Uso:** Conexão multi-sessão WhatsApp +- **Recursos:** QR Code, mensagens em tempo real +- **Armazenamento:** Sessões no banco de dados + +### nfelib (Python) +- **Uso:** Emissão de NF-e/NFC-e +- **Recursos:** XML, assinatura digital, SEFAZ +- **Certificados:** A1 (PFX) + +### Frappe Framework +- **Uso:** Arcádia Next (futuro) +- **Recursos:** ERPNext integration + +### Google Calendar +- **Uso:** Sincronização de eventos CRM +- **OAuth:** Configurável por usuário + +--- + +## Segurança e Autenticação + +### Autenticação +- **Método:** Session-based com Passport.js +- **Hash:** bcrypt para senhas +- **Sessões:** PostgreSQL session store + +### Controle de Acesso (RBAC) +``` +Hierarquia: +├── Master (Arcádia) +│ └── Parceiros +│ └── Clientes +``` + +### Permissões +- Baseadas em módulos e ações +- Código formato: `modulo.recurso.acao` +- Exemplo: `compass.clients.write` + +### Certificados Digitais +- Tipo A1 (arquivo PFX) +- Armazenamento seguro com senha +- Validação de expiração + +--- + +## Guia de Implantação + +### Requisitos +- Node.js 20+ +- Python 3.11+ +- PostgreSQL 15+ +- Certificado SSL (produção) + +### Variáveis de Ambiente +```env +DATABASE_URL=postgresql://... +SESSION_SECRET=... +OPENAI_API_KEY=... +FISCO_PYTHON_URL=http://localhost:8002 +FISCO_PORT=8002 +``` + +### Comandos de Inicialização +```bash +# Instalar dependências +npm install + +# Iniciar em desenvolvimento +npm run dev + +# Serviço Python Fisco (separado) +cd server/python && python fisco_service.py +``` + +### Portas +| Serviço | Porta | +|---------|-------| +| Frontend + API | 5000 | +| Python Fisco | 8002 | +| Python IA | 8001 | + +--- + +## Changelog + +### Janeiro 2026 +- Integração nfelib para NF-e +- Módulo Fisco completo +- Sistema de aprendizado automático +- Validação Zod em todas as rotas fiscais + +--- + +**Arcádia Suite** - Transformando a gestão empresarial com Inteligência Artificial + +*Documentação gerada automaticamente pelo sistema.* diff --git a/PLANO_EVOLUCAO_ARCADIA.md b/PLANO_EVOLUCAO_ARCADIA.md new file mode 100644 index 0000000..8268535 --- /dev/null +++ b/PLANO_EVOLUCAO_ARCADIA.md @@ -0,0 +1,421 @@ +# PLANO ESTRATÉGICO DE EVOLUÇÃO +## Arcádia Suite → Frappe Framework +### Versão 1.0 - Janeiro 2026 + +--- + +## 1. VISÃO GERAL + +### 1.1 Objetivo +Evoluir o Arcádia Suite para um **Business Operating System** completo, inspirado em três referências: + +| Referência | O que Inspira | +|------------|---------------| +| **Notion** | Blocos modulares, banco de dados relacional, personalização | +| **Replit** | IDE no navegador, colaboração em tempo real, deploy instantâneo | +| **Discord** | Comunidades, canais contextuais, comunicação em tempo real | + +### 1.2 Estratégia de Migração: Strangler Fig + +A estratégia Strangler Fig permite: +- Manter WhatsApp, Manus, CRM funcionando durante toda a migração +- Construir o novo sistema em paralelo +- Migrar módulo a módulo até o sistema legado "desaparecer" + +``` +Sistema Atual (Express/React) continua funcionando + ↓ +Você vai adicionando "camadas Frappe" por cima + ↓ +Cada módulo migrado substitui o antigo + ↓ +No final, o "núcleo antigo" sumiu naturalmente +``` + +### 1.3 Stack Técnico + +| Camada | Atual | Futuro | +|--------|-------|--------| +| Frontend | React 18 + TypeScript | Frappe Desk + React | +| Backend | Express.js | Frappe Framework | +| Database | PostgreSQL | PostgreSQL (mesmo) | +| Real-time | Socket.IO | Frappe Realtime + Socket.IO | +| WhatsApp | Baileys | Frappe App (Baileys) | +| IDE | Monaco + Terminal | IDE 3 Modos | + +--- + +## 2. ESTRUTURA MULTI-TENANT + +### 2.1 Hierarquia de 3 Níveis + +``` +NÍVEL 1: MASTER (Arcádia) +═════════════════════════ +• Equipe de desenvolvimento +• Acesso total ao sistema +• IDE Pro-Code completa +• Central de Bibliotecas (publica apps) +• Suporte N3 (acessa tenants para debug) +• Gerencia parceiros e planos + │ + ├───────────────────────┬───────────────────────┐ + ▼ ▼ ▼ +NÍVEL 2: PARCEIROS +══════════════════ +• Consultorias, integradores, revendas +• IDE Low-Code +• Gerencia seus clientes +• Comissões sobre vendas +• Suporte N2 aos clientes +• Baixa apps da biblioteca + │ + ┌────┴────┐ + ▼ ▼ +NÍVEL 3: CLIENTES +═════════════════ +• Empresas usuárias finais +• Cockpit personalizado +• CRM/ERP operacional +• WhatsApp (N sessões conforme plano) +• BI próprio +• Manus com tools básicas +``` + +### 2.2 Matriz de Permissões por Tipo de Tenant + +| Módulo | Master | Parceiro | Cliente | +|--------|--------|----------|---------| +| **IDE Pro-Code** | ✅ | ❌ | ❌ | +| **IDE Low-Code** | ✅ | ✅ | ❌ | +| **IDE No-Code** | ✅ | ✅ | ✅ (se habilitado) | +| **Central de Bibliotecas** | ✅ Publicar | ✅ Baixar | ❌ | +| **Central de APIs** | ✅ Gerenciar | ⚠️ Seus conectores | ⚠️ Leitura | +| **WhatsApp** | ✅ Ilimitado | ✅ N sessões | ✅ N sessões | +| **CRM/ERP** | ✅ Global | ✅ Próprio | ✅ Próprio | +| **Manus (IA)** | ✅ Todas tools | ✅ Tools permitidas | ✅ Básicas | +| **BI/Relatórios** | ✅ Global | ✅ Próprio | ✅ Próprio | +| **Suporte N3** | ✅ Acessa tenants | ❌ | ❌ | +| **Ver Parceiros** | ✅ | ✅ Seus clientes | ❌ | +| **Comissões** | ✅ Gerencia | ✅ Visualiza suas | ❌ | + +### 2.3 Alterações no Schema + +```sql +-- Alterações na tabela tenants +ALTER TABLE tenants ADD COLUMN tenant_type TEXT DEFAULT 'client'; +-- master = Arcádia, partner = Parceiros, client = Clientes + +ALTER TABLE tenants ADD COLUMN parent_tenant_id INTEGER REFERENCES tenants(id); +-- Referência ao tenant pai (hierarquia) + +ALTER TABLE tenants ADD COLUMN partner_code TEXT; +-- Código do parceiro para rastreamento + +ALTER TABLE tenants ADD COLUMN max_users INTEGER DEFAULT 5; +ALTER TABLE tenants ADD COLUMN max_storage_mb INTEGER DEFAULT 1000; +ALTER TABLE tenants ADD COLUMN features JSONB; +ALTER TABLE tenants ADD COLUMN commission_rate NUMERIC(5,2); +ALTER TABLE tenants ADD COLUMN trial_ends_at TIMESTAMP; + +-- Nova tabela: Planos +CREATE TABLE tenant_plans ( + id SERIAL PRIMARY KEY, + code TEXT NOT NULL UNIQUE, + name TEXT NOT NULL, + tenant_type TEXT NOT NULL, + max_users INTEGER DEFAULT 5, + max_storage_mb INTEGER DEFAULT 1000, + features JSONB, + monthly_price INTEGER DEFAULT 0, + yearly_price INTEGER DEFAULT 0, + is_active TEXT DEFAULT 'true', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- Nova tabela: Relacionamento Parceiro-Cliente +CREATE TABLE partner_clients ( + id SERIAL PRIMARY KEY, + partner_id INTEGER NOT NULL REFERENCES tenants(id), + client_id INTEGER NOT NULL REFERENCES tenants(id), + commission_rate NUMERIC(5,2), + status TEXT DEFAULT 'active', + started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + ended_at TIMESTAMP +); + +-- Nova tabela: Comissões +CREATE TABLE partner_commissions ( + id SERIAL PRIMARY KEY, + partner_id INTEGER NOT NULL REFERENCES tenants(id), + client_id INTEGER NOT NULL REFERENCES tenants(id), + reference_month TEXT NOT NULL, + client_plan_value INTEGER NOT NULL, + commission_rate NUMERIC(5,2) NOT NULL, + commission_value INTEGER NOT NULL, + status TEXT DEFAULT 'pending', + paid_at TIMESTAMP, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +``` + +--- + +## 3. CRONOGRAMA GERAL (6-9 Meses) + +``` + Mês 1 Mês 2 Mês 3 Mês 4 Mês 5 Mês 6+ + ├──────────┼──────────┼──────────┼──────────┼──────────┼────────► + +FASE 0 ████████████████████ + FUNDAÇÃO + Setup + Tenants + SSO + +FASE 1 ████████████████████████████ + INFRAESTRUTURA + CRM/ERP + Central APIs + Manus + +FASE 2 ████████████████████████████████ + EXPERIÊNCIA + Cockpit + Comunidades + IDE + +FASE 3 ████████████████████► + AUTOMAÇÃO + WhatsApp + RPA + Decommission +``` + +--- + +## 4. FASE 0: FUNDAÇÃO (Semanas 1-8) + +### 4.1 Objetivo +Preparar a base técnica sem quebrar nada do sistema atual. + +### 4.2 Entregas + +| # | Entrega | Descrição | Semana | +|---|---------|-----------|--------| +| 0.1 | **Setup Frappe Bench** | Instalar Frappe em servidor paralelo | 1-2 | +| 0.2 | **Hierarquia de Tenants** | Novos campos e tabelas no PostgreSQL | 2-3 | +| 0.3 | **SSO Bridge** | Login unificado (usuário loga uma vez) | 3-4 | +| 0.4 | **CDC Pipeline** | Sincronização de dados PostgreSQL ↔ Frappe | 4-6 | +| 0.5 | **Vault de Secrets** | Gerenciamento seguro de API keys | 5-6 | +| 0.6 | **Feature Flags** | Sistema de features por plano/tenant | 6-7 | +| 0.7 | **Planos e Preços** | Tabela de planos (free, starter, pro, enterprise) | 7-8 | + +### 4.3 Resultado +- ✅ Frappe rodando em paralelo +- ✅ Hierarquia master/partner/client funcionando +- ✅ Login único nos dois sistemas +- ✅ Dados sincronizados em tempo real +- ✅ Planos e features configuráveis + +--- + +## 5. FASE 1: INFRAESTRUTURA (Semanas 6-16) + +### 5.1 Objetivo +Migrar dados mestres e criar a Central de APIs. + +### 5.2 Entregas + +| # | Entrega | Descrição | Semana | +|---|---------|-----------|--------| +| 1.1 | **DocTypes CRM** | Clientes, Leads, Oportunidades no Frappe | 6-8 | +| 1.2 | **DocTypes ERP** | Produtos, Pedidos, Faturas no Frappe | 8-10 | +| 1.3 | **Central de APIs (MVP)** | Dashboard visual de integrações | 9-12 | +| 1.4 | **Conectores Básicos** | Interface para SEFAZ, Bancos (dados demo) | 12-14 | +| 1.5 | **Manus Frappe** | Agente IA via background jobs | 13-15 | +| 1.6 | **Knowledge Graph** | Migração do grafo para DocTypes | 14-16 | + +### 5.3 Central de APIs - Detalhamento + +**IMPORTANTE:** A Central de APIs é uma interface visual de gerenciamento. Os dados de integrações (SEFAZ, Bancos, Mercado Livre) são ILUSTRATIVOS/DEMO. Não fazemos integração real com APIs externas nesta fase. + +O que construímos: +- ✅ Interface visual (React) +- ✅ CRUD de conectores (cadastrar, editar, remover) +- ✅ Status visual (online, warning, error) +- ✅ Logs fictícios para demonstração +- ✅ Configurações por conector +- ✅ Permissões por tenant type + +O que NÃO fazemos: +- ❌ Conectar à SEFAZ real +- ❌ Conectar a bancos reais +- ❌ Chamadas API externas + +### 5.4 Resultado +- ✅ CRM/ERP acessível via Frappe Desk +- ✅ Central de APIs funcionando (dados demo) +- ✅ Manus consultando dados do Frappe +- ✅ Knowledge Graph migrado + +--- + +## 6. FASE 2: EXPERIÊNCIA (Semanas 12-24) + +### 6.1 Objetivo +Construir a nova interface (Cockpit, Comunidades, IDE). + +### 6.2 Entregas + +| # | Entrega | Descrição | Semana | +|---|---------|-----------|--------| +| 2.1 | **Cockpit PARA** | Navegação Projetos/Áreas/Recursos/Arquivo | 12-15 | +| 2.2 | **Dashboard Tríade** | Importante/Urgente/Circunstancial | 14-16 | +| 2.3 | **Widgets Sistema** | Tarefas, Calendário, Gráficos | 15-17 | +| 2.4 | **Comunidades MVP** | Canais por projeto (Socket.IO via Frappe) | 16-19 | +| 2.5 | **IDE No-Code** | DocType Builder visual | 18-20 | +| 2.6 | **IDE Low-Code** | Templates de scripts | 20-22 | +| 2.7 | **IDE Pro-Code** | Monaco + Terminal + Live Preview | 21-23 | +| 2.8 | **Central de Bibliotecas** | Repositório de apps Frappe | 22-24 | + +### 6.3 Cockpit PARA + Tríade + +O Cockpit é a interface principal do usuário, baseado em duas metodologias: + +**Método PARA (Tiago Forte):** +- **P**rojetos: Todos os projetos ativos com metas e prazos +- **Á**reas: Áreas de responsabilidade contínua (Vendas, Financeiro, RH) +- **R**ecursos: Base de conhecimento, templates, manuais +- **A**rquivo: Tudo concluído ou inativo, para consulta futura + +**Tríade do Tempo (Christian Barbosa):** +- 🟢 **Importante** (70% do tempo): Atividades que geram valor +- 🟡 **Urgente** (20% do tempo): Atividades com prazo apertado +- 🔴 **Circunstancial** (10% do tempo): Atividades que não agregam + +### 6.4 IDE 3 Modos + +| Modo | Quem Usa | O que Faz | +|------|----------|-----------| +| **No-Code** | Clientes | Criar formulários arrastando, workflows visuais, relatórios com filtros | +| **Low-Code** | Parceiros | Server Scripts com templates, validações, webhooks, fórmulas | +| **Pro-Code** | Arcádia | Monaco Editor completo, Terminal, Git, Deploy de apps | + +### 6.5 Resultado +- ✅ Cockpit PARA + Tríade funcionando +- ✅ Comunidades com canais por projeto +- ✅ IDE com 3 modos operando +- ✅ Central de Bibliotecas publicando apps + +--- + +## 7. FASE 3: AUTOMAÇÃO E DECOMMISSION (Semana 20+) + +### 7.1 Objetivo +Migrar serviços restantes e desligar o legado. + +### 7.2 Entregas + +| # | Entrega | Descrição | Semana | +|---|---------|-----------|--------| +| 3.1 | **WhatsApp Frappe App** | Reconstruir Baileys como app nativo | 20-24 | +| 3.2 | **Motor de Workflows** | Automações visuais (RPA) | 22-26 | +| 3.3 | **Scientist Frappe** | Migrar para Frappe Workers | 24-28 | +| 3.4 | **Validação de Paridade** | Testes A/B, métricas | 26-30 | +| 3.5 | **Decommission Express** | Desligar endpoints legados | 30+ | + +### 7.3 Resultado +- ✅ Sistema 100% unificado no Frappe +- ✅ Express/React desligado +- ✅ Uma única plataforma para manter + +--- + +## 8. MAPEAMENTO DE MÓDULOS + +| Módulo Atual | O que Acontece | Fase | +|--------------|----------------|------| +| **users, tenants** | Expande com hierarquia | 0 | +| **profiles, roles, permissions** | Migra para Frappe RBAC | 0 | +| **whatsapp_contacts, messages, tickets** | Mantém → Migra na Fase 3 | 3 | +| **pc_crm_leads, stages, opportunities** | Migra para Frappe DocTypes | 1 | +| **pc_clients, projects, tasks** | Migra para Frappe DocTypes | 1 | +| **graph_nodes, graph_edges** | Migra para Frappe Knowledge Graph | 1 | +| **internal_chat_*** | Evolui para Comunidades | 2 | +| **manus_*** | Integra via background jobs | 1 | +| **bi_*** | Mantém + novos widgets Cockpit | 2 | +| **ide_*** | Evolui para 3 modos | 2 | + +--- + +## 9. RISCOS E MITIGAÇÕES + +| Risco | Probabilidade | Impacto | Mitigação | +|-------|---------------|---------|-----------| +| **Drift de dados** | Média | Alto | CDC com validação contínua | +| **Performance chat** | Média | Médio | Load test antes de migrar | +| **Tokens WhatsApp** | Baixa | Alto | Vault de secrets | +| **Curva aprendizado Frappe** | Alta | Médio | Treinamento na Fase 0 | +| **Regressões funcionais** | Média | Alto | Testes A/B, telemetria | +| **Resistência usuários** | Média | Médio | Piloto gradual: Master → Partners → Clients | + +--- + +## 10. QUICK WINS (Entregas Rápidas) + +| Item | Tempo | Valor | +|------|-------|-------| +| **Hierarquia de Tenants** | 2 semanas | Estrutura para parceiros | +| **SSO unificado** | 2 semanas | Login único | +| **Central de APIs (UI)** | 3 semanas | Visibilidade integrações | +| **Dashboard Tríade** | 2 semanas | Consciência sobre tempo | +| **Planos e Features** | 2 semanas | Monetização estruturada | + +--- + +## 11. OS 5 PILARES DO SISTEMA + +### Pilar 1: Knowledge Graph +- Todos os dados do negócio conectados e pesquisáveis +- Navegação visual entre entidades relacionadas +- Base para IA contextual + +### Pilar 2: Central Intelligence (Scientist) +- IA que aprende com interações do sistema +- Gera e executa código automaticamente +- Detecta padrões e sugere otimizações + +### Pilar 3: Autonomous Agent (Manus) +- Executa tarefas multi-step de forma autônoma +- Acessa ferramentas e APIs +- Deep research com planejamento + +### Pilar 4: Unified Communication +- WhatsApp integrado com CRM +- Chat interno com canais por projeto +- Email (futuro) +- Todos os canais em um lugar + +### Pilar 5: Complete IDE +- 3 modos de desenvolvimento (No/Low/Pro Code) +- Central de Bibliotecas +- Deploy integrado + +--- + +## 12. DOCUMENTOS DE REFERÊNCIA + +Os documentos originais que basearam este plano estão em: +- `attached_assets/cocpti_docs/cocpti/` - Cockpit e DNA Notion +- `attached_assets/cocpti_docs/Ide Arcadia/` - Proposta IDE +- `attached_assets/cocpti_docs/Rota de desenvolviento/` - Roadmap original +- `attached_assets/cocpti_docs/Central de API/` - Central de APIs + +--- + +## 13. PRÓXIMOS PASSOS + +1. [ ] Implementar hierarquia de tenants no schema +2. [ ] Criar tabelas de planos e comissões +3. [ ] Documentar arquitetura CDC +4. [ ] Provisionar servidor Frappe +5. [ ] Implementar Central de APIs (UI com dados demo) +6. [ ] Construir Cockpit PARA + Tríade + +--- + +*Documento criado em Janeiro 2026* +*Última atualização: Janeiro 2026* diff --git a/README.md b/README.md deleted file mode 100644 index d50e9f4..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# Arcadia Suite\nOffice Estratégico Empresarial diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..89057ed --- /dev/null +++ b/client/index.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + Arcádia Suite + + +
+ + + \ No newline at end of file diff --git a/client/public/favicon.ico b/client/public/favicon.ico new file mode 100644 index 0000000..7b615d4 Binary files /dev/null and b/client/public/favicon.ico differ diff --git a/client/public/favicon.png b/client/public/favicon.png new file mode 100644 index 0000000..7b615d4 Binary files /dev/null and b/client/public/favicon.png differ diff --git a/client/public/opengraph.jpg b/client/public/opengraph.jpg new file mode 100644 index 0000000..3b8b7dc Binary files /dev/null and b/client/public/opengraph.jpg differ diff --git a/client/src/App.tsx b/client/src/App.tsx new file mode 100644 index 0000000..cd2629a --- /dev/null +++ b/client/src/App.tsx @@ -0,0 +1,152 @@ +import { Switch, Route } from "wouter"; +import { queryClient } from "./lib/queryClient"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { Toaster } from "@/components/ui/toaster"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { AuthProvider } from "@/hooks/use-auth"; +import { ErpProfileProvider } from "@/contexts/ErpProfileContext"; +import { ProtectedRoute } from "@/lib/protected-route"; +import { CommandPalette } from "@/components/CommandPalette"; +import { KnowledgeCollectorInit } from "@/components/KnowledgeCollectorInit"; +import NotFound from "@/pages/not-found"; +import AuthPage from "@/pages/auth-page"; +import Agent from "@/pages/Agent"; +import Admin from "@/pages/Admin"; +import Chat from "@/pages/Chat"; +import WhatsApp from "@/pages/WhatsApp"; +import Automations from "@/pages/Automations"; +import BiWorkspace from "@/pages/BiWorkspace"; +import ProcessCompass from "@/pages/ProcessCompass"; +import WorkspacePage from "@/pages/WorkspacePage"; +import AppViewer from "@/pages/AppViewer"; +import Crm from "@/pages/Crm"; +import Production from "@/pages/Production"; +import Support from "@/pages/Support"; +import Valuation from "@/pages/Valuation"; +import Canvas from "@/pages/Canvas"; +import IDE from "@/pages/IDE"; +import Scientist from "@/pages/Scientist"; +import Knowledge from "@/pages/Knowledge"; +import CentralApis from "@/pages/CentralApis"; +import ApiTesterPage from "@/pages/ApiTesterPage"; +import ApiHub from "@/pages/ApiHub"; +import Cockpit from "@/pages/Cockpit"; +import Fisco from "@/pages/Fisco"; +import People from "@/pages/People"; +import Contabil from "@/pages/Contabil"; +import ERP from "@/pages/ERP"; +import Financeiro from "@/pages/Financeiro"; +import Communities from "@/pages/Communities"; +import ArcadiaNext from "@/pages/ArcadiaNext"; +import QualityModule from "@/pages/QualityModule"; +import CommercialEnv from "@/pages/CommercialEnv"; +import FieldOperations from "@/pages/FieldOperations"; +import TechnicalModule from "@/pages/TechnicalModule"; +import SuppliersPortal from "@/pages/SuppliersPortal"; +import NPSSurvey from "@/pages/NPSSurvey"; +import EngineeringHub from "@/pages/EngineeringHub"; +import DocTypeBuilder from "@/pages/DocTypeBuilder"; +import PageBuilder from "@/pages/PageBuilder"; +import DevelopmentModule from "@/pages/DevelopmentModule"; +import ArcadiaRetail from "@/pages/ArcadiaRetail"; +import Plus from "@/pages/Plus"; +import SuperAdmin from "@/pages/SuperAdmin"; +import Marketplace from "@/pages/Marketplace"; +import LMS from "@/pages/LMS"; +import AppCenter from "@/pages/AppCenter"; +import XosCentral from "@/pages/XosCentral"; +import XosCrm from "@/pages/XosCrm"; +import XosInbox from "@/pages/XosInbox"; +import XosTickets from "@/pages/XosTickets"; +import Migration from "@/pages/Migration"; +import DevCenter from "@/pages/DevCenter"; +import XosCampaigns from "@/pages/XosCampaigns"; +import XosAutomations from "@/pages/XosAutomations"; +import XosSites from "@/pages/XosSites"; +import XosGovernance from "@/pages/XosGovernance"; +import XosPipeline from "@/pages/XosPipeline"; + + +function Router() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} + +function App() { + return ( + + + + + + + + + + + + + ); +} + +export default App; diff --git a/client/src/components/ApiTester.tsx b/client/src/components/ApiTester.tsx new file mode 100644 index 0000000..3a1b709 --- /dev/null +++ b/client/src/components/ApiTester.tsx @@ -0,0 +1,651 @@ +import { useState } from "react"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Textarea } from "@/components/ui/textarea"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { + Plus, + Play, + Save, + Trash2, + Edit, + Send, + Clock, + CheckCircle, + XCircle, + RefreshCw, + Copy, + Eye, + EyeOff, + PlugZap, + Code, + FileJson, +} from "lucide-react"; + +interface ApiConnection { + id: number; + name: string; + type: string; + base_url: string; + api_key?: string; + status: string; + last_sync_at?: string; +} + +interface ApiEndpoint { + id: number; + connection_id: number; + name: string; + method: string; + path: string; + description?: string; + headers?: Record; + body_template?: string; +} + +interface ApiLog { + id: number; + method: string; + url: string; + response_status: number; + latency_ms: number; + created_at: string; +} + +export default function ApiTester() { + const queryClient = useQueryClient(); + const [showNewConnectionDialog, setShowNewConnectionDialog] = useState(false); + const [showNewEndpointDialog, setShowNewEndpointDialog] = useState(false); + const [showExecuteDialog, setShowExecuteDialog] = useState(false); + const [selectedConnection, setSelectedConnection] = useState(null); + const [showApiKey, setShowApiKey] = useState(false); + + const [newConnection, setNewConnection] = useState({ + name: "", + type: "rest", + baseUrl: "", + apiKey: "", + apiSecret: "", + }); + + const [newEndpoint, setNewEndpoint] = useState({ + name: "", + method: "GET", + path: "", + description: "", + bodyTemplate: "", + }); + + const [executeRequest, setExecuteRequest] = useState({ + method: "GET", + url: "", + headers: "{}", + body: "", + }); + + const [executeResponse, setExecuteResponse] = useState<{ + status?: number; + body?: string; + latency?: number; + error?: string; + } | null>(null); + + const { data: connections = [] } = useQuery({ + queryKey: ["/api/api-central/connections"], + queryFn: async () => { + const res = await fetch("/api/api-central/connections", { credentials: "include" }); + if (!res.ok) return []; + return res.json(); + }, + }); + + const { data: endpoints = [] } = useQuery({ + queryKey: ["/api/api-central/endpoints", selectedConnection?.id], + queryFn: async () => { + if (!selectedConnection) return []; + const res = await fetch(`/api/api-central/connections/${selectedConnection.id}/endpoints`, { credentials: "include" }); + if (!res.ok) return []; + return res.json(); + }, + enabled: !!selectedConnection, + }); + + const { data: logs = [] } = useQuery({ + queryKey: ["/api/api-central/logs"], + queryFn: async () => { + const res = await fetch("/api/api-central/logs?limit=20", { credentials: "include" }); + if (!res.ok) return []; + return res.json(); + }, + }); + + const createConnectionMutation = useMutation({ + mutationFn: async (data: typeof newConnection) => { + const res = await fetch("/api/api-central/connections", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + name: data.name, + type: data.type, + baseUrl: data.baseUrl, + apiKey: data.apiKey, + apiSecret: data.apiSecret, + }), + credentials: "include", + }); + if (!res.ok) throw new Error("Falha ao criar conexão"); + return res.json(); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["/api/api-central/connections"] }); + setShowNewConnectionDialog(false); + setNewConnection({ name: "", type: "rest", baseUrl: "", apiKey: "", apiSecret: "" }); + }, + }); + + const deleteConnectionMutation = useMutation({ + mutationFn: async (id: number) => { + const res = await fetch(`/api/api-central/connections/${id}`, { + method: "DELETE", + credentials: "include", + }); + if (!res.ok) throw new Error("Falha ao deletar"); + return res.json(); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["/api/api-central/connections"] }); + setSelectedConnection(null); + }, + }); + + const createEndpointMutation = useMutation({ + mutationFn: async (data: typeof newEndpoint) => { + if (!selectedConnection) throw new Error("Selecione uma conexão"); + const res = await fetch(`/api/api-central/connections/${selectedConnection.id}/endpoints`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(data), + credentials: "include", + }); + if (!res.ok) throw new Error("Falha ao criar endpoint"); + return res.json(); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["/api/api-central/endpoints", selectedConnection?.id] }); + setShowNewEndpointDialog(false); + setNewEndpoint({ name: "", method: "GET", path: "", description: "", bodyTemplate: "" }); + }, + }); + + const executeMutation = useMutation({ + mutationFn: async (data: typeof executeRequest) => { + const res = await fetch("/api/api-central/execute", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + connectionId: selectedConnection?.id, + method: data.method, + url: data.url, + headers: JSON.parse(data.headers || "{}"), + body: data.body ? JSON.parse(data.body) : undefined, + }), + credentials: "include", + }); + return res.json(); + }, + onSuccess: (result) => { + setExecuteResponse({ + status: result.status, + body: result.body, + latency: result.latency, + error: result.error, + }); + queryClient.invalidateQueries({ queryKey: ["/api/api-central/logs"] }); + }, + onError: (error: any) => { + setExecuteResponse({ error: error.message }); + }, + }); + + const testConnectionMutation = useMutation({ + mutationFn: async (id: number) => { + const res = await fetch(`/api/api-central/connections/${id}/test`, { + method: "POST", + credentials: "include", + }); + return res.json(); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["/api/api-central/connections"] }); + }, + }); + + const getMethodColor = (method: string) => { + switch (method) { + case "GET": return "bg-green-500/20 text-green-400"; + case "POST": return "bg-blue-500/20 text-blue-400"; + case "PUT": return "bg-amber-500/20 text-amber-400"; + case "DELETE": return "bg-red-500/20 text-red-400"; + default: return "bg-slate-500/20 text-slate-400"; + } + }; + + const getStatusColor = (status: number) => { + if (status >= 200 && status < 300) return "bg-green-500/20 text-green-400"; + if (status >= 400) return "bg-red-500/20 text-red-400"; + return "bg-amber-500/20 text-amber-400"; + }; + + return ( +
+ {/* Sidebar - Conexões */} +
+
+
+

+ + Minhas Conexões +

+ +
+
+ + +
+ {connections.map((conn) => ( +
setSelectedConnection(conn)} + className={`p-3 rounded-lg cursor-pointer transition-colors ${ + selectedConnection?.id === conn.id + ? "bg-cyan-500/20 border border-cyan-500/30" + : "hover:bg-slate-800/50" + }`} + > +
+ {conn.name} +
+
+

{conn.base_url}

+
+ ))} + {connections.length === 0 && ( +
+ +

Nenhuma conexão

+

Clique em + para adicionar

+
+ )} +
+ +
+ + {/* Main Content */} +
+ {selectedConnection ? ( + +
+
+
+

{selectedConnection.name}

+

{selectedConnection.base_url}

+
+
+ + +
+
+ + Endpoints + Executar + Logs + +
+ + +
+

Endpoints Salvos

+ +
+
+ {endpoints.map((endpoint) => ( + + +
+ + {endpoint.method} + + {endpoint.path} + {endpoint.name && ( + - {endpoint.name} + )} +
+ +
+
+ ))} + {endpoints.length === 0 && ( +
+ +

Nenhum endpoint salvo

+

Adicione endpoints para reutilizar

+
+ )} +
+
+ + +
+
+
+ + setExecuteRequest({ ...executeRequest, url: e.target.value })} + placeholder="https://api.exemplo.com/endpoint" + className="flex-1 bg-slate-800 border-slate-700 text-white" + /> + +
+
+ +