export interface ToolResult { success: boolean; output: string; error?: string; } export interface ManusToolDef { name: string; description: string; parameters: Record; } export const MANUS_TOOLS: ManusToolDef[] = [ { name: "web_search", description: "Pesquisa informações na web usando um termo de busca. Retorna resultados relevantes.", parameters: { query: { type: "string", description: "O termo de busca", required: true } } }, { name: "knowledge_query", description: "Consulta a base de conhecimento interna da empresa para encontrar documentos e informações relevantes.", parameters: { query: { type: "string", description: "A pergunta ou termo para buscar na base de conhecimento", required: true } } }, { name: "erp_query", description: "Consulta dados do sistema ERP conectado (clientes, pedidos, estoque, financeiro).", parameters: { entity: { type: "string", description: "Entidade a consultar: customers, orders, inventory, financial", required: true }, filter: { type: "string", description: "Filtro opcional (ex: 'status=active')", required: false } } }, { name: "calculate", description: "Executa cálculos matemáticos e análises numéricas.", parameters: { expression: { type: "string", description: "Expressão matemática ou descrição do cálculo", required: true } } }, { name: "send_message", description: "Envia uma mensagem para um usuário ou grupo no chat interno.", parameters: { to: { type: "string", description: "Nome ou ID do destinatário", required: true }, message: { type: "string", description: "Conteúdo da mensagem", required: true } } }, { name: "generate_report", description: "Gera um relatório estruturado com base nos dados coletados.", parameters: { title: { type: "string", description: "Título do relatório", required: true }, type: { type: "string", description: "Tipo: summary, detailed, chart", required: true }, data: { type: "string", description: "Dados ou descrição do conteúdo do relatório", required: true } } }, { name: "schedule_task", description: "Agenda uma tarefa para execução futura.", parameters: { task: { type: "string", description: "Descrição da tarefa", required: true }, when: { type: "string", description: "Quando executar (ex: 'tomorrow 9am', 'in 2 hours')", required: true } } }, { name: "web_browse", description: "Acessa e extrai informações de uma página web. Use para consultar sites, ler artigos, ou obter dados online.", parameters: { url: { type: "string", description: "URL completa da página a acessar (ex: https://example.com)", required: true }, extract: { type: "string", description: "O que extrair: 'text' (todo texto), 'summary' (resumo), 'links' (lista de links)", required: false } } }, { name: "analyze_file", description: "Analisa o conteúdo de um arquivo anexado pelo usuário.", parameters: { filename: { type: "string", description: "Nome do arquivo anexado a analisar", required: true }, question: { type: "string", description: "Pergunta específica sobre o conteúdo do arquivo", required: false } } }, { name: "crm_query", description: "Consulta dados do CRM (parceiros, contratos, comissões, conversas). Use para buscar informações de relacionamento com clientes.", parameters: { entity: { type: "string", description: "Entidade a consultar: partners, contracts, threads, events, commissions, stats", required: true }, filter: { type: "string", description: "Filtro opcional (ex: 'status=active', 'tier=gold')", required: false } } }, { name: "crm_create_event", description: "Cria um evento no calendário CRM. Use para agendar reuniões, ligações ou lembretes.", parameters: { title: { type: "string", description: "Título do evento", required: true }, type: { type: "string", description: "Tipo: meeting, call, task, reminder", required: true }, startAt: { type: "string", description: "Data/hora de início (ISO 8601 ou descrição como 'amanhã às 14h')", required: true }, description: { type: "string", description: "Descrição do evento", required: false } } }, { name: "crm_send_whatsapp", description: "Envia uma mensagem WhatsApp para um contato através do canal CRM conectado.", parameters: { phone: { type: "string", description: "Número de telefone do destinatário (com DDD)", required: true }, message: { type: "string", description: "Conteúdo da mensagem", required: true } } }, { name: "generate_chart", description: "Gera um gráfico visual a partir de dados estruturados. O gráfico será renderizado na interface. Use esta ferramenta quando o usuário pedir um gráfico ou visualização.", parameters: { type: { type: "string", description: "Tipo do gráfico: 'bar' (barras), 'line' (linha), 'pie' (pizza), 'area' (área)", required: true }, title: { type: "string", description: "Título do gráfico", required: true }, data: { type: "string", description: "JSON array com os dados. Ex: [{\"name\":\"2023\",\"valor\":1000},{\"name\":\"2024\",\"valor\":1500}]", required: true }, xKey: { type: "string", description: "Nome do campo para o eixo X (ex: 'name', 'ano', 'mes')", required: true }, yKeys: { type: "string", description: "Nomes dos campos para o eixo Y separados por vírgula (ex: 'ativo,passivo' ou 'valor')", required: true }, colors: { type: "string", description: "Cores para cada série separadas por vírgula (ex: '#4caf50,#f44336')", required: false } } }, { name: "finish", description: "Finaliza a execução do agente com uma resposta final para o usuário.", parameters: { answer: { type: "string", description: "Resposta final para o usuário", required: true }, chart: { type: "string", description: "JSON opcional com dados de gráfico gerado anteriormente", required: false } } }, { name: "python_execute", description: "Executa código Python em um ambiente seguro. Use para cálculos complexos, análise de dados ou automações.", parameters: { code: { type: "string", description: "O código Python a ser executado", required: true }, timeout: { type: "number", description: "Tempo limite em segundos (padrão: 30)", required: false } } }, { name: "semantic_search", description: "Busca informações no grafo de conhecimento por significado semântico. Use para encontrar documentos, mensagens ou dados relacionados.", parameters: { query: { type: "string", description: "A pergunta ou termo para buscar semanticamente", required: true }, n_results: { type: "number", description: "Número de resultados (padrão: 5)", required: false } } }, { name: "read_file", description: "Lê o conteúdo de um arquivo do sistema.", parameters: { path: { type: "string", description: "Caminho do arquivo a ser lido", required: true } } }, { name: "write_file", description: "Escreve conteúdo em um arquivo. Cria o arquivo se não existir.", parameters: { path: { type: "string", description: "Caminho do arquivo a ser escrito", required: true }, content: { type: "string", description: "Conteúdo a ser escrito no arquivo", required: true } } }, { name: "list_files", description: "Lista arquivos e diretórios em um caminho.", parameters: { path: { type: "string", description: "Caminho do diretório a listar", required: true } } }, { name: "shell", description: "Executa um comando no terminal. Use com cuidado para comandos seguros.", parameters: { command: { type: "string", description: "Comando a ser executado", required: true } } }, { name: "ask_human", description: "Pede aprovação do usuário para uma ação crítica antes de prosseguir.", parameters: { prompt: { type: "string", description: "Pergunta ou descrição da ação que precisa de aprovação", required: true }, options: { type: "string", description: "Opções de resposta separadas por vírgula (ex: 'sim,não')", required: false } } }, { name: "analyze_data", description: "Analisa um conjunto de dados usando o Módulo Cientista. Detecta padrões, gera insights e estatísticas.", parameters: { data: { type: "string", description: "Dados em formato JSON para análise", required: true } } }, { name: "add_to_knowledge", description: "Adiciona um documento ao grafo de conhecimento para futuras buscas semânticas.", parameters: { doc_id: { type: "string", description: "ID único do documento", required: true }, content: { type: "string", description: "Conteúdo do documento", required: true }, type: { type: "string", description: "Tipo do documento: email, message, project, note, etc", required: true } } }, { name: "run_workflow", description: "Executa um workflow BPMN automatizado. Use para processos com múltiplos passos, decisões e ações.", parameters: { workflow_type: { type: "string", description: "Tipo: approval, data_processing, notification ou spec JSON customizado", required: true }, data: { type: "string", description: "Dados de entrada para o workflow em formato JSON", required: false } } }, { name: "rpa_execute", description: "Executa automação RPA (robotic process automation) em navegador. Use para preencher formulários, extrair dados de sites, ou automatizar tarefas web.", parameters: { template: { type: "string", description: "Template: login, scrape_table, form_fill, download_report, nfe_consulta, ou script JSON customizado", required: true }, params: { type: "string", description: "Parâmetros para o script RPA em formato JSON (ex: {\"url\": \"...\", \"username\": \"...\"})", required: false } } }, { name: "fiscal_emit", description: "Emite documento fiscal (NFe, NFCe) através do Arcadia Plus ERP.", parameters: { type: { type: "string", description: "Tipo de documento: nfe (nota fiscal) ou nfce (cupom fiscal)", required: true }, data: { type: "string", description: "Dados da nota fiscal em formato JSON (emitente, destinatario, itens, pagamento)", required: true } } }, { name: "fiscal_query", description: "Consulta situação de documento fiscal no SEFAZ.", parameters: { chave: { type: "string", description: "Chave de acesso da NFe/NFCe (44 dígitos)", required: true } } }, { name: "plus_clientes", description: "Consulta clientes cadastrados no Arcádia Plus ERP. Use para buscar informações de clientes, contatos, histórico.", parameters: { filtro: { type: "string", description: "Filtro de busca: nome, CPF/CNPJ, telefone ou email", required: false } } }, { name: "plus_produtos", description: "Consulta produtos cadastrados no Arcádia Plus ERP. Use para verificar estoque, preços, códigos.", parameters: { filtro: { type: "string", description: "Filtro de busca: nome, código, categoria ou marca", required: false } } }, { name: "plus_vendas", description: "Consulta vendas realizadas no Arcádia Plus ERP. Use para verificar pedidos, faturamento, histórico de vendas.", parameters: { filtro: { type: "string", description: "Filtro: periodo (hoje, semana, mes), cliente, status", required: false } } }, { name: "plus_estoque", description: "Consulta situação do estoque no Arcádia Plus ERP. Use para verificar quantidades, produtos em falta, movimentações.", parameters: {} }, { name: "plus_financeiro", description: "Consulta dados financeiros do Arcádia Plus ERP: contas a pagar, contas a receber, fluxo de caixa.", parameters: { tipo: { type: "string", description: "Tipo: pagar, receber, todos", required: false } } }, { name: "plus_fornecedores", description: "Consulta fornecedores cadastrados no Arcádia Plus ERP.", parameters: { filtro: { type: "string", description: "Filtro de busca: nome, CNPJ, cidade", required: false } } }, { name: "plus_dashboard", description: "Obtém dados do dashboard do Arcádia Plus ERP: resumo de vendas, estoque, financeiro.", parameters: {} }, { name: "learn_url", description: "Aprende o conteúdo de uma URL e adiciona ao grafo de conhecimento. Use para absorver informações de artigos, documentações, notícias, etc.", parameters: { url: { type: "string", description: "A URL para aprender (ex: https://exemplo.com/artigo)", required: true }, priority: { type: "string", description: "Prioridade do aprendizado: low, normal, high", required: false } } }, { name: "deep_research", description: "Pesquisa profunda sobre um tema: busca na web, extrai conteúdo dos melhores resultados, analisa e sintetiza. Use quando precisar de informações completas sobre um assunto.", parameters: { topic: { type: "string", description: "O tema ou pergunta para pesquisar em profundidade", required: true }, depth: { type: "number", description: "Quantidade de fontes para analisar (1-5). Padrão: 3", required: false } } }, { name: "detect_opportunities", description: "Analisa o grafo de conhecimento para detectar padrões e oportunidades de negócio.", parameters: { domain: { type: "string", description: "Domínio de análise (ex: vendas, produto, suporte, clientes)", required: true }, min_confidence: { type: "number", description: "Confiança mínima (0-1). Padrão: 0.7", required: false } } }, { name: "scientist_generate_code", description: "Usa o Módulo Cientista para gerar código Python automaticamente baseado em um objetivo. Use para criar análises, transformações ou processamentos de dados.", parameters: { goal: { type: "string", description: "Objetivo do código (ex: 'agregar vendas por mês', 'filtrar clientes inativos', 'gerar relatório')", required: true }, data_description: { type: "string", description: "Descrição dos dados de entrada (colunas, tipos)", required: false } } }, { name: "scientist_generate_automation", description: "Gera código de automação para tarefas repetitivas como enviar emails, fazer requisições API, processar arquivos ou agendar tarefas.", parameters: { task: { type: "string", description: "Descrição da tarefa de automação (ex: 'enviar email de lembrete', 'buscar dados de API')", required: true } } }, { name: "scientist_detect_patterns", description: "Detecta padrões, correlações e tendências em um conjunto de dados.", parameters: { data: { type: "string", description: "Dados em formato JSON para análise de padrões", required: true } } }, { name: "scientist_suggest_improvements", description: "Analisa dados e sugere melhorias de qualidade, otimizações e correções automáticas.", parameters: { data: { type: "string", description: "Dados em formato JSON para análise de melhorias", required: true } } }, { name: "bi_stats", description: "Obtém estatísticas do módulo de Business Intelligence (fontes de dados, datasets, gráficos, dashboards, backups).", parameters: {} }, { name: "bi_list_data_sources", description: "Lista todas as fontes de dados configuradas no BI (PostgreSQL, MySQL, MongoDB).", parameters: {} }, { name: "bi_create_data_source", description: "Cria uma nova fonte de dados para conectar o BI a um banco de dados externo.", parameters: { name: { type: "string", description: "Nome da fonte de dados", required: true }, type: { type: "string", description: "Tipo: postgresql, mysql ou mongodb", required: true }, host: { type: "string", description: "Host do servidor de banco de dados", required: true }, port: { type: "number", description: "Porta do servidor", required: true }, database: { type: "string", description: "Nome do banco de dados", required: true }, username: { type: "string", description: "Usuário de acesso", required: true }, password: { type: "string", description: "Senha de acesso", required: true } } }, { name: "bi_list_datasets", description: "Lista todos os datasets (consultas salvas) configurados no BI.", parameters: {} }, { name: "bi_create_dataset", description: "Cria um novo dataset (consulta SQL ou seleção de tabela) no BI.", parameters: { name: { type: "string", description: "Nome do dataset", required: true }, type: { type: "string", description: "Tipo: sql (consulta SQL) ou table (tabela inteira)", required: true }, dataSourceId: { type: "number", description: "ID da fonte de dados (use bi_list_data_sources para obter)", required: false }, query: { type: "string", description: "Consulta SQL (para type=sql)", required: false }, tableName: { type: "string", description: "Nome da tabela (para type=table)", required: false } } }, { name: "bi_execute_query", description: "Executa um dataset e retorna os dados resultantes.", parameters: { datasetId: { type: "number", description: "ID do dataset a executar", required: true } } }, { name: "bi_list_charts", description: "Lista todos os gráficos criados no BI.", parameters: {} }, { name: "bi_create_chart", description: "Cria um novo gráfico no módulo de BI baseado em um dataset existente.", parameters: { name: { type: "string", description: "Nome do gráfico", required: true }, type: { type: "string", description: "Tipo: bar, line, pie, area, scatter, table", required: true }, datasetId: { type: "number", description: "ID do dataset fonte dos dados", required: true }, config: { type: "string", description: "Configuração JSON: {xAxis, yAxis, groupBy, aggregation, colors}", required: true } } }, { name: "bi_list_dashboards", description: "Lista todos os dashboards do BI.", parameters: {} }, { name: "bi_create_dashboard", description: "Cria um novo dashboard no BI para organizar gráficos.", parameters: { name: { type: "string", description: "Nome do dashboard", required: true }, description: { type: "string", description: "Descrição do dashboard", required: false } } }, { name: "bi_add_chart_to_dashboard", description: "Adiciona um gráfico existente a um dashboard.", parameters: { dashboardId: { type: "number", description: "ID do dashboard", required: true }, chartId: { type: "number", description: "ID do gráfico a adicionar", required: true }, position: { type: "string", description: "Posição JSON: {x, y, width, height}", required: false } } }, { name: "bi_list_tables", description: "Lista todas as tabelas disponíveis no banco de dados interno.", parameters: {} }, { name: "bi_get_table_columns", description: "Obtém as colunas de uma tabela específica.", parameters: { tableName: { type: "string", description: "Nome da tabela", required: true } } }, { name: "bi_analyze_with_pandas", description: "Analisa dados de um dataset usando Python/Pandas. Retorna estatísticas avançadas: média, mediana, desvio padrão, correlações, outliers, e sugestões de gráficos. Use para análises profundas de dados.", parameters: { datasetId: { type: "number", description: "ID do dataset a analisar (use bi_list_datasets para obter)", required: true }, question: { type: "string", description: "Pergunta específica sobre os dados (opcional)", required: false } } }, { name: "metaset_query", description: "Executa uma consulta SQL via motor de BI (MetaSet). Motor robusto para análises complexas, gráficos e dashboards. Retorna dados estruturados.", parameters: { query: { type: "string", description: "Consulta SQL (apenas SELECT)", required: true }, limit: { type: "number", description: "Limite de linhas (padrão: 100)", required: false } } }, { name: "metaset_create_question", description: "Cria uma pergunta/consulta persistente no motor de BI (MetaSet). A pergunta fica salva e pode ser adicionada a dashboards e visualizada como gráfico.", parameters: { name: { type: "string", description: "Nome da pergunta/consulta", required: true }, query: { type: "string", description: "Consulta SQL da pergunta", required: true }, chartType: { type: "string", description: "Tipo de visualização: table, bar, line, pie, area, scatter, row, scalar", required: false }, description: { type: "string", description: "Descrição da pergunta", required: false } } }, { name: "metaset_list_questions", description: "Lista todas as perguntas/consultas salvas no motor de BI (MetaSet).", parameters: {} }, { name: "metaset_run_question", description: "Executa uma pergunta salva no motor de BI e retorna dados atualizados.", parameters: { questionId: { type: "number", description: "ID da pergunta a executar", required: true } } }, { name: "metaset_create_dashboard", description: "Cria um novo dashboard no motor de BI (MetaSet) para organizar consultas e gráficos.", parameters: { name: { type: "string", description: "Nome do dashboard", required: true }, description: { type: "string", description: "Descrição do dashboard", required: false } } }, { name: "metaset_list_dashboards", description: "Lista todos os dashboards do motor de BI (MetaSet).", parameters: {} }, { name: "metaset_add_to_dashboard", description: "Adiciona uma pergunta/gráfico a um dashboard no motor de BI.", parameters: { dashboardId: { type: "number", description: "ID do dashboard", required: true }, questionId: { type: "number", description: "ID da pergunta a adicionar", required: true } } }, { name: "metaset_suggest_analysis", description: "Sugere consultas e tipos de gráfico para uma tabela. Útil para descoberta automática de insights.", parameters: { tableName: { type: "string", description: "Nome da tabela para analisar", required: true } } }, { name: "fin_query_payables", description: "Consulta contas a pagar do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.", parameters: { status: { type: "string", description: "Filtro por status: pending, paid, overdue, cancelled (opcional)", required: false }, supplier_id: { type: "number", description: "Filtro por ID do fornecedor (opcional)", required: false } } }, { name: "fin_query_receivables", description: "Consulta contas a receber do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.", parameters: { status: { type: "string", description: "Filtro por status: pending, received, overdue, cancelled (opcional)", required: false }, customer_id: { type: "number", description: "Filtro por ID do cliente (opcional)", required: false } } }, { name: "fin_query_bank_accounts", description: "Consulta contas bancárias e saldos do módulo Financeiro.", parameters: { active_only: { type: "boolean", description: "Retornar apenas contas ativas (padrão: true)", required: false } } }, { name: "fin_query_cashflow", description: "Consulta fluxo de caixa (transações) do módulo Financeiro em um período.", parameters: { start_date: { type: "string", description: "Data inicial no formato YYYY-MM-DD", required: false }, end_date: { type: "string", description: "Data final no formato YYYY-MM-DD", required: false }, account_id: { type: "number", description: "Filtro por conta bancária (opcional)", required: false } } }, { name: "fin_summary", description: "Obtém resumo financeiro: total a pagar, total a receber, saldo em contas, vencimentos próximos.", parameters: {} }, { name: "fin_register_payable", description: "Registra uma nova conta a pagar no módulo Financeiro.", parameters: { supplier_id: { type: "number", description: "ID do fornecedor", required: true }, description: { type: "string", description: "Descrição do título", required: true }, amount: { type: "number", description: "Valor do título", required: true }, due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true }, category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false } } }, { name: "fin_register_receivable", description: "Registra uma nova conta a receber no módulo Financeiro.", parameters: { customer_id: { type: "number", description: "ID do cliente", required: true }, description: { type: "string", description: "Descrição do título", required: true }, amount: { type: "number", description: "Valor do título", required: true }, due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true }, category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false } } }, { name: "fin_pay_account", description: "Registra o pagamento de uma conta a pagar.", parameters: { payable_id: { type: "number", description: "ID da conta a pagar", required: true }, bank_account_id: { type: "number", description: "ID da conta bancária de saída", required: true }, payment_date: { type: "string", description: "Data do pagamento (YYYY-MM-DD)", required: false }, amount_paid: { type: "number", description: "Valor pago (se diferente do valor original)", required: false } } }, { name: "fin_receive_account", description: "Registra o recebimento de uma conta a receber.", parameters: { receivable_id: { type: "number", description: "ID da conta a receber", required: true }, bank_account_id: { type: "number", description: "ID da conta bancária de entrada", required: true }, receive_date: { type: "string", description: "Data do recebimento (YYYY-MM-DD)", required: false }, amount_received: { type: "number", description: "Valor recebido (se diferente do valor original)", required: false } } }, { name: "call_agent", description: "Envia uma mensagem para outro agente de IA externo via protocolo A2A. Use para delegar tarefas especializadas, consultar agentes especializados ou orquestrar múltiplos agentes.", parameters: { agent_id: { type: "string", description: "ID do agente a chamar (use list_agents para ver disponíveis)", required: true }, message: { type: "string", description: "Mensagem/pergunta a enviar ao agente", required: true }, wait_response: { type: "boolean", description: "Aguardar resposta completa (padrão: true)", required: false } } }, { name: "list_agents", description: "Lista todos os agentes de IA externos registrados e disponíveis para comunicação via A2A.", parameters: {} }, { name: "register_agent", description: "Registra um novo agente externo para comunicação. Descobre automaticamente o Agent Card do agente.", parameters: { name: { type: "string", description: "Nome amigável para o agente", required: true }, url: { type: "string", description: "URL base do agente (ex: https://agent.exemplo.com)", required: true }, api_key: { type: "string", description: "API Key para autenticação (se necessário)", required: false } } }, { name: "discover_agent", description: "Descobre as capacidades de um agente externo lendo seu Agent Card. Use para saber o que um agente pode fazer antes de chamá-lo.", parameters: { url: { type: "string", description: "URL base do agente para descoberta", required: true } } }, { name: "export_to_excel", description: "Exporta dados para um arquivo Excel (.xlsx). Retorna o caminho do arquivo gerado para download. Use quando o usuário pedir para exportar dados, gerar planilha ou criar Excel.", parameters: { data: { type: "string", description: "Dados em formato JSON array para exportar (ex: [{\"coluna1\":\"valor1\"}])", required: true }, filename: { type: "string", description: "Nome do arquivo sem extensão (ex: 'relatorio-vendas')", required: true }, sheet_name: { type: "string", description: "Nome da aba/planilha (padrão: 'Dados')", required: false } } }, { name: "send_to_bi_dataset", description: "Envia dados para criar ou atualizar um dataset no módulo de BI (Arcádia Insights). Os dados ficam disponíveis para criar gráficos e dashboards.", parameters: { name: { type: "string", description: "Nome do dataset no BI", required: true }, data: { type: "string", description: "Dados em formato JSON array para o dataset", required: true }, description: { type: "string", description: "Descrição do dataset (opcional)", required: false }, update_if_exists: { type: "boolean", description: "Atualizar se já existir (padrão: true)", required: false } } }, { name: "market_research", description: "Faz pesquisa de mercado sobre um setor, concorrentes ou tendências. Busca dados comparativos, benchmarks do setor e informações competitivas.", parameters: { topic: { type: "string", description: "O tema da pesquisa (ex: 'concorrentes no setor de logística', 'benchmarks de margem de lucro varejo')", required: true }, company_context: { type: "string", description: "Contexto da empresa para comparação (setor, tamanho, região)", required: false }, focus: { type: "string", description: "Foco da pesquisa: competitors, benchmarks, trends, all (padrão: all)", required: false } } }, { name: "compare_with_market", description: "Compara dados financeiros ou operacionais da empresa com benchmarks de mercado. Útil para análise de desempenho relativo.", parameters: { metric: { type: "string", description: "Métrica a comparar (ex: 'margem_lucro', 'ticket_medio', 'crescimento_receita')", required: true }, value: { type: "number", description: "Valor atual da empresa para a métrica", required: true }, sector: { type: "string", description: "Setor de atuação para benchmark", required: true }, period: { type: "string", description: "Período de referência (ex: '2024', 'Q1 2024')", required: false } } }, // ERPNext Integration Tools { name: "erpnext_status", description: "Verifica o status da conexão com o ERPNext. Retorna se está conectado e o usuário autenticado.", parameters: {} }, { name: "erpnext_list_doctypes", description: "Lista todos os DocTypes (entidades) disponíveis no ERPNext. Use para descobrir quais dados podem ser consultados.", parameters: { limit: { type: "number", description: "Número máximo de DocTypes a retornar (padrão: 50)", required: false } } }, { name: "erpnext_get_documents", description: "Busca documentos de um DocType específico no ERPNext. Use para consultar clientes, vendas, produtos, etc.", parameters: { doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice', 'Item')", required: true }, filters: { type: "string", description: "Filtros em formato JSON (ex: '{\"status\":\"Active\"}')", required: false }, fields: { type: "string", description: "Campos a retornar separados por vírgula (ex: 'name,customer_name,status')", required: false }, limit: { type: "number", description: "Número máximo de registros (padrão: 20)", required: false } } }, { name: "erpnext_get_document", description: "Busca um documento específico do ERPNext pelo nome/ID.", parameters: { doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice')", required: true }, name: { type: "string", description: "Nome/ID do documento", required: true } } }, { name: "erpnext_create_document", description: "Cria um novo documento no ERPNext.", parameters: { doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Item')", required: true }, data: { type: "string", description: "Dados do documento em formato JSON", required: true } } }, { name: "erpnext_update_document", description: "Atualiza um documento existente no ERPNext.", parameters: { doctype: { type: "string", description: "Nome do DocType", required: true }, name: { type: "string", description: "Nome/ID do documento a atualizar", required: true }, data: { type: "string", description: "Dados a atualizar em formato JSON", required: true } } }, { name: "erpnext_search", description: "Pesquisa documentos no ERPNext por texto. Busca em campos de texto do DocType.", parameters: { doctype: { type: "string", description: "Nome do DocType para pesquisar", required: true }, search_term: { type: "string", description: "Termo de busca", required: true }, limit: { type: "number", description: "Número máximo de resultados (padrão: 20)", required: false } } }, { name: "erpnext_run_report", description: "Executa um relatório do ERPNext. Use para obter dados agregados e análises.", parameters: { report_name: { type: "string", description: "Nome do relatório (ex: 'Accounts Receivable', 'Stock Balance')", required: true }, filters: { type: "string", description: "Filtros do relatório em formato JSON", required: false } } }, { name: "erpnext_call_method", description: "Chama um método/API customizado do ERPNext/Frappe.", parameters: { method: { type: "string", description: "Nome do método (ex: 'frappe.client.get_count')", required: true }, args: { type: "string", description: "Argumentos em formato JSON", required: false } } }, // ========== ARCÁDIA RETAIL TOOLS ========== { name: "retail_query", description: "Consulta dados do módulo Arcádia Retail (vendas PDV, dispositivos/celulares, avaliações Trade-In, ordens de serviço, comissões, créditos de clientes).", parameters: { entity: { type: "string", description: "Entidade: sales, devices, evaluations, service_orders, commissions, credits, sellers, stores", required: true }, filter: { type: "string", description: "Filtro opcional (ex: 'status=completed', 'date=today', 'customer_id=4')", required: false }, limit: { type: "number", description: "Limite de resultados (padrão: 20)", required: false } } }, { name: "retail_stats", description: "Obtém estatísticas e KPIs do Retail em tempo real: vendas do dia, estoque, O.S. abertas, avaliações pendentes.", parameters: { period: { type: "string", description: "Período: today, week, month, year (padrão: today)", required: false }, storeId: { type: "number", description: "ID da loja para filtrar (opcional)", required: false } } }, { name: "retail_report", description: "Gera relatórios analíticos do Retail com insights e recomendações.", parameters: { type: { type: "string", description: "Tipo: sales_summary, inventory_status, commission_report, trade_in_analysis, service_orders_pending", required: true }, dateFrom: { type: "string", description: "Data inicial (YYYY-MM-DD)", required: false }, dateTo: { type: "string", description: "Data final (YYYY-MM-DD)", required: false }, storeId: { type: "number", description: "ID da loja para filtrar", required: false } } } ]; export function getToolsDescription(): string { return MANUS_TOOLS.map(tool => { const params = Object.entries(tool.parameters) .map(([name, p]) => ` - ${name} (${p.type}${p.required ? ', obrigatório' : ', opcional'}): ${p.description}`) .join('\n'); return `${tool.name}: ${tool.description}\n${params}`; }).join('\n\n'); }