feat: sync all plugins, skills, agents updates
New plugins: core-tools New skills: auto-expense, ticket-triage, design, security-check, aiktop-tasks, daily-digest, imap-triage, index-update, mindmap, notebooklm, proc-creator, tasks-overview, validate-component, perfex-module, report, calendar-manager New agents: design-critic, design-generator, design-lead, design-prompt-architect, design-researcher, compliance-auditor, metabase-analyst, gitea-integration-specialist Updated: all plugin configs, knowledge datasets, existing skills Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
{
|
||||
"name": "crm-ops",
|
||||
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by 2 Dify KB datasets.",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"author": {
|
||||
"name": "Descomplicar - Crescimento Digital",
|
||||
"url": "https://descomplicar.pt"
|
||||
},
|
||||
"homepage": "https://git.descomplicar.pt/ealmeida/descomplicar-plugins",
|
||||
"license": "MIT",
|
||||
"keywords": ["crm", "vendas", "leads", "facturacao", "tickets", "orcamento"]
|
||||
"keywords": [
|
||||
"crm",
|
||||
"vendas",
|
||||
"leads",
|
||||
"facturacao",
|
||||
"tickets",
|
||||
"orcamento"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,6 +5,15 @@ role: Especialista em orçamentos e propostas comerciais
|
||||
domain: Business
|
||||
model: sonnet
|
||||
tools: Read, Write, Edit, Glob, ToolSearch
|
||||
|
||||
# Dependencies
|
||||
primary_mcps:
|
||||
- desk-crm-v3
|
||||
- google-workspace
|
||||
recommended_mcps:
|
||||
- moloni
|
||||
- memory-supabase
|
||||
- dify-kb
|
||||
skills:
|
||||
- _core
|
||||
- orcamento
|
||||
@@ -161,7 +170,17 @@ Você é um especialista comercial responsável por:
|
||||
| SEO/Conteúdo | 300€ - 1.500€/mês | Artigos, optimização, keywords, linkbuilding |
|
||||
| Manutenção | 150€ - 500€/mês | Updates, backups, monitoring, suporte |
|
||||
|
||||
## Datasets Dify (Consultar SEMPRE)
|
||||
## Knowledge Sources (Consultar SEMPRE)
|
||||
|
||||
### NotebookLM (Primario - usar PRIMEIRO)
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"orcamento proposta pricing"
|
||||
mcp__notebooklm__notebook_query notebook_id:"0c9c079c-a426-486c-99eb-1564d42d37ad" query:"projectos estimativa custos"
|
||||
mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb7721601" query:"desenvolvimento custos"
|
||||
```
|
||||
|
||||
### Dify KB (Secundario - se NotebookLM insuficiente)
|
||||
|
||||
```
|
||||
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Vendas" query:"orcamento proposta pricing"
|
||||
|
||||
@@ -7,6 +7,15 @@ role: USAR PROATIVAMENTE para estratégia de abordagem de leads - análise de pe
|
||||
domain: Marketing
|
||||
model: sonnet
|
||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||
|
||||
# Dependencies
|
||||
primary_mcps:
|
||||
- desk-crm-v3
|
||||
- google-workspace
|
||||
recommended_mcps:
|
||||
- dify-kb
|
||||
- memory-supabase
|
||||
- imap
|
||||
skills:
|
||||
- _core
|
||||
desk_task: null
|
||||
@@ -66,7 +75,20 @@ Especialista em estratégia de abordagem de leads - análise de perfil, definiç
|
||||
- Script de chamada
|
||||
- Follow-up sequence
|
||||
|
||||
## Datasets Dify
|
||||
## Knowledge Sources (Consultar SEMPRE)
|
||||
|
||||
### NotebookLM (Primario - usar PRIMEIRO)
|
||||
|
||||
- Marketing Digital Avancado (`76647e0f`)
|
||||
- Copywriting e Persuasao (`7b8fec17`)
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"<tema>"
|
||||
mcp__notebooklm__notebook_query notebook_id:"7b8fec17-d34f-4e3f-a8c6-8231e51f6323" query:"<tema>"
|
||||
```
|
||||
|
||||
### Dify KB (Secundario)
|
||||
|
||||
- Vendas
|
||||
- Marketing Digital
|
||||
- Copywriting
|
||||
@@ -125,7 +147,7 @@ Estrategista comercial especializado em análise de leads e criação de abordag
|
||||
|
||||
## MCPs Relevantes
|
||||
- `desk-crm-v3`: Dados de leads e histórico
|
||||
- `dify-kb`: KB Vendas, Marketing Digital, Copywriting
|
||||
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | `dify-kb`: KB Vendas, Marketing Digital, Copywriting
|
||||
- `memory-supabase`: Padrões de abordagem bem-sucedidos
|
||||
|
||||
## Colaboracao
|
||||
@@ -140,7 +162,11 @@ Estrategista comercial especializado em análise de leads e criação de abordag
|
||||
- Clientes, projectos, facturas, time tracking
|
||||
- Usage: `mcp__desk-crm-v3__*`
|
||||
|
||||
✓ **dify-kb** (knowledge)
|
||||
✓ **notebooklm** (knowledge primaria)
|
||||
- Gemini 2.5 RAG
|
||||
- Usage: `mcp__notebooklm__notebook_query`
|
||||
|
||||
✓ **dify-kb** (knowledge fallback)
|
||||
- Knowledge base AI
|
||||
- Usage: `mcp__dify-kb__*`
|
||||
|
||||
|
||||
@@ -7,6 +7,14 @@ role: Lead Qualifier especializado em avaliacao e priorizacao de leads para gara
|
||||
domain: Marketing
|
||||
model: sonnet
|
||||
tools: Read, Glob, Grep, ToolSearch
|
||||
|
||||
# Dependencies
|
||||
primary_mcps:
|
||||
- desk-crm-v3
|
||||
recommended_mcps:
|
||||
- dify-kb
|
||||
- google-workspace
|
||||
- memory-supabase
|
||||
skills:
|
||||
- _core
|
||||
desk_task: 1505
|
||||
@@ -42,7 +50,17 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
|
||||
- Nurturing de leads nao prontos para vendas
|
||||
- Manutencao da base de dados de leads actualizada
|
||||
|
||||
## Datasets Dify (Consultar SEMPRE)
|
||||
## Knowledge Sources (Consultar SEMPRE)
|
||||
|
||||
### NotebookLM (Primario - usar PRIMEIRO)
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"lead qualification scoring criteria"
|
||||
mcp__notebooklm__notebook_query notebook_id:"df4688bb-c2c0-4aba-98c1-38c3b50a353c" query:"lead management pipeline"
|
||||
```
|
||||
|
||||
### Dify KB (Secundario - se NotebookLM insuficiente)
|
||||
|
||||
```
|
||||
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Vendas" query:"lead qualification scoring criteria"
|
||||
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Marketing Digital" query:"lead generation conversion funnel"
|
||||
@@ -102,7 +120,7 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
|
||||
|
||||
## MCPs Relevantes
|
||||
- `desk-crm-v3`: Gestão de leads e pipeline
|
||||
- `dify-kb`: KB Vendas (qualification), Marketing Digital
|
||||
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | `dify-kb`: KB Vendas (qualification), Marketing Digital
|
||||
- `memory-supabase`: Histórico de qualificações bem-sucedidas
|
||||
|
||||
## Colaboracao
|
||||
@@ -116,7 +134,8 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
|
||||
- Clientes, projectos, facturas, time tracking
|
||||
- Usage: `mcp__desk-crm-v3__*`
|
||||
|
||||
✓ **dify-kb** (knowledge)
|
||||
✓ **notebooklm** (knowledge primaria)
|
||||
✓ **dify-kb** (knowledge fallback)
|
||||
- Knowledge base AI
|
||||
- Usage: `mcp__dify-kb__*`
|
||||
|
||||
|
||||
@@ -82,7 +82,17 @@ Gestor comercial especializado em estrategias de vendas, gestao de CRM, qualific
|
||||
- Criar forecasting de receita e relatorios de performance
|
||||
- Coordenar equipas de vendas e territorios comerciais
|
||||
|
||||
## Datasets Dify (Consultar SEMPRE)
|
||||
## Knowledge Sources (Consultar SEMPRE)
|
||||
|
||||
### NotebookLM (Primario - usar PRIMEIRO)
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"estrategias comerciais leads conversao"
|
||||
mcp__notebooklm__notebook_query notebook_id:"df4688bb-c2c0-4aba-98c1-38c3b50a353c" query:"CRM clientes pipeline"
|
||||
```
|
||||
|
||||
### Dify KB (Secundario - se NotebookLM insuficiente)
|
||||
|
||||
```
|
||||
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Vendas" query:"estrategias comerciais leads conversao"
|
||||
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Marketing Digital" query:"funil vendas qualificacao"
|
||||
|
||||
@@ -1,8 +1,48 @@
|
||||
{
|
||||
"description": "Dify KB datasets for CRM Operations domain",
|
||||
"query_tool": "mcp__dify-kb__dify_kb_retrieve_segments",
|
||||
"datasets": [
|
||||
{"id": "43354eb6-f0b2-40cc-aa53-44e375ab347c", "name": "PerfexCRM", "priority": 1, "document_count": 144, "word_count": 1547186},
|
||||
{"id": "bd65f36e-6004-4584-b478-129b2c21b4d2", "name": "Servicos Descomplicar", "priority": 1, "document_count": 11, "word_count": 1095103}
|
||||
]
|
||||
}
|
||||
"description": "Knowledge sources (NotebookLM + Dify KB) for CRM Operations domain",
|
||||
"sources": {
|
||||
"notebooklm": {
|
||||
"description": "NotebookLM - conhecimento curado profundo via Gemini 2.5 RAG (PRIMARIO)",
|
||||
"query_tool": "mcp__notebooklm__notebook_query",
|
||||
"notebooks": [
|
||||
{
|
||||
"id": "df4688bb-c2c0-4aba-98c1-38c3b50a353c",
|
||||
"title": "Perfex CRM: Gestao de Clientes e Projetos",
|
||||
"topics": [
|
||||
"perfexcrm"
|
||||
],
|
||||
"maps_from_dify": "PerfexCRM"
|
||||
},
|
||||
{
|
||||
"id": "f29c8457-f16d-4fb3-979d-6e5901de1b20",
|
||||
"title": "Descomplicar: Marketing Digital",
|
||||
"topics": [
|
||||
"servicos",
|
||||
"descomplicar"
|
||||
],
|
||||
"maps_from_dify": "Servicos Descomplicar"
|
||||
}
|
||||
]
|
||||
},
|
||||
"dify_kb": {
|
||||
"description": "Dify KB - datasets tematicos (FALLBACK)",
|
||||
"query_tool": "mcp__dify-kb__dify_kb_retrieve_segments",
|
||||
"datasets": [
|
||||
{
|
||||
"id": "43354eb6-f0b2-40cc-aa53-44e375ab347c",
|
||||
"name": "PerfexCRM",
|
||||
"priority": 1,
|
||||
"document_count": 144,
|
||||
"word_count": 1547186
|
||||
},
|
||||
{
|
||||
"id": "bd65f36e-6004-4584-b478-129b2c21b4d2",
|
||||
"name": "Servicos Descomplicar",
|
||||
"priority": 1,
|
||||
"document_count": 11,
|
||||
"word_count": 1095103
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
208
crm-ops/skills/auto-expense/SKILL.md
Normal file
208
crm-ops/skills/auto-expense/SKILL.md
Normal file
@@ -0,0 +1,208 @@
|
||||
---
|
||||
name: auto-expense
|
||||
description: >
|
||||
Criacao automatica de despesas a partir de facturas detectadas no IMAP e tickets. Le ficheiros JSON de /imap-triage e /ticket-triage, extrai dados das facturas, cria despesas no Desk CRM com PDF. Use when "auto despesa", "processar facturas", "auto-expense", "despesas automaticas".
|
||||
author: Descomplicar® Crescimento Digital
|
||||
version: 1.0.0
|
||||
quality_score: 85
|
||||
user_invocable: true
|
||||
category: finance
|
||||
tags: [expense, auto, invoices, imap, tickets, pdf, desk-crm]
|
||||
desk_task: 1710
|
||||
desk_project: 65
|
||||
allowed-tools: Read, Write, mcp__desk-crm-v3, mcp__imap, mcp__ssh-unified
|
||||
mcps: desk-crm-v3, imap, ssh-unified
|
||||
dependencies:
|
||||
mcps: [desk-crm-v3, imap, ssh-unified]
|
||||
skills: [imap-triage, ticket-triage]
|
||||
files:
|
||||
- /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
triggers:
|
||||
- "User asks to process invoices as expenses"
|
||||
- "User mentions 'auto despesa', 'processar facturas'"
|
||||
- "Invoked by /today orchestrator after /imap-triage and /ticket-triage"
|
||||
---
|
||||
|
||||
# /auto-expense v1.0
|
||||
|
||||
Cria despesas automaticamente a partir de facturas detectadas pelo IMAP e tickets.
|
||||
|
||||
---
|
||||
|
||||
## Protocolo
|
||||
|
||||
### Passo 1: Carregar inputs
|
||||
|
||||
```
|
||||
1. Ler ficheiro fornecedores:
|
||||
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
|
||||
2. Ler facturas IMAP (se existir):
|
||||
Read: ~/.claude-work/today-imap-{date}.json → campo "facturas"
|
||||
|
||||
3. Ler facturas tickets (se existir):
|
||||
Read: ~/.claude-work/today-tickets-{date}.json → campo "facturas"
|
||||
|
||||
4. Se nenhum ficheiro existe E invocado standalone:
|
||||
→ Perguntar ao utilizador: "processar IMAP, tickets ou ambos?"
|
||||
→ Se IMAP: executar /imap-triage primeiro
|
||||
→ Se tickets: executar /ticket-triage primeiro
|
||||
```
|
||||
|
||||
### Passo 2: Para cada factura, processar
|
||||
|
||||
```
|
||||
Para cada factura na lista:
|
||||
|
||||
1. DETECTAR FORNECEDOR:
|
||||
a. Fornecedor directo: dominio remetente na tabela
|
||||
→ categoria, tax e moeda ja conhecidos
|
||||
b. Plataforma multi-fornecedor (toconline, stripe, paypal, fastspring, payproglobal):
|
||||
→ LER email completo → EXTRAIR emitente real
|
||||
→ Procurar emitente na tabela "Emitentes Conhecidos por Plataforma"
|
||||
→ SE desconhecido: registar como priority_flagged, PARAR este email
|
||||
|
||||
2. LER EMAIL/TICKET:
|
||||
- IMAP: imap_read_email(account, uid) → HTML + anexos
|
||||
- Ticket: mcp__desk-crm-v3__get_ticket(ticket_id) → HTML
|
||||
|
||||
3. EXTRAIR DO HTML:
|
||||
- Valor (padroes: $XX.XX, XX,XX EUR, USD XX.XX, Total: XX.XX)
|
||||
- Referencia/Invoice number
|
||||
- Data da factura
|
||||
|
||||
4. VERIFICAR DUPLICADO (2 camadas):
|
||||
Camada 1 - Desk CRM:
|
||||
Pesquisar: mesmo fornecedor + mesmo valor (±0.05) + mesma data (±3 dias)
|
||||
Se match → NAO criar, registar como duplicado
|
||||
|
||||
5. CRIAR DESPESA:
|
||||
mcp__desk-crm-v3__create_expense({
|
||||
category: [cat_id da tabela],
|
||||
amount: [valor],
|
||||
date: [data factura YYYY-MM-DD],
|
||||
expense_name: "[Fornecedor] - [Referencia]",
|
||||
note: "Auto-criado via /auto-expense",
|
||||
currency: [2=USD ou 3=EUR],
|
||||
tax: [0 ou 1],
|
||||
send_invoice_to_customer: 0
|
||||
})
|
||||
```
|
||||
|
||||
### Passo 3: PDF (se existir anexo)
|
||||
|
||||
```
|
||||
a. GUARDAR LOCAL:
|
||||
Path: /media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/MM-NomeMes/
|
||||
Criar pasta: mkdir -p
|
||||
Nome: YYYY-MM-DD_Fornecedor_Referencia.pdf
|
||||
Meses PT: 01-Janeiro, 02-Fevereiro, 03-Marco, 04-Abril, 05-Maio, 06-Junho,
|
||||
07-Julho, 08-Agosto, 09-Setembro, 10-Outubro, 11-Novembro, 12-Dezembro
|
||||
|
||||
b. UPLOAD ao Desk servidor:
|
||||
mcp__ssh-unified__sftp_upload(server="desk", local_path, remote_path="/tmp/")
|
||||
mcp__ssh-unified__ssh_execute(server="desk", command="
|
||||
mkdir -p /home/ealmeida/desk24/uploads/expenses/{expense_id}/
|
||||
cp /tmp/{filename} /home/ealmeida/desk24/uploads/expenses/{expense_id}/
|
||||
chown -R ealmeida:ealmeida /home/ealmeida/desk24/uploads/expenses/{expense_id}/
|
||||
rm /tmp/{filename}
|
||||
")
|
||||
|
||||
c. REGISTAR no Desk BD:
|
||||
mcp__ssh-unified__ssh_execute(server="desk", command="
|
||||
mysql -u ealmeida -p'9qPRdCGGqM4o' ealmeida_desk24 -e \"
|
||||
INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, attachment_key, staffid, dateadded)
|
||||
VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', MD5(RAND()), 25, NOW());
|
||||
\"
|
||||
")
|
||||
|
||||
d. LIMPAR temporarios
|
||||
```
|
||||
|
||||
### Passo 4: Actualizar CSV
|
||||
|
||||
```
|
||||
CSV Path: /media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/MAPA-DESPESAS-YYYY.csv
|
||||
Formato linha: id_desk;data;categoria;fornecedor;descricao;valor;SIM;ficheiro;email;Auto /auto-expense
|
||||
```
|
||||
|
||||
### Passo 5: Escrever output JSON
|
||||
|
||||
```
|
||||
Escrever em ~/.claude-work/today-expenses-{date}.json:
|
||||
{
|
||||
"despesas_criadas": [
|
||||
{"id": 1180, "fornecedor": "MEO", "valor": 76.26, "moeda": "EUR", "referencia": "FT A/861215955"}
|
||||
],
|
||||
"duplicados": 0,
|
||||
"flagged": [
|
||||
{"fornecedor": "Desconhecido", "nota": "TOConline - emitente desconhecido: XPTO LDA"}
|
||||
],
|
||||
"erros": [],
|
||||
"total_processadas": 1
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Plataformas Multi-Fornecedor - Padroes de Extracao
|
||||
|
||||
> Ver tabela completa em: Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
|
||||
| Plataforma | Padrao no Subject/HTML |
|
||||
|-----------|----------------------|
|
||||
| TOConline | "Emitido por:", "Emitente:" no HTML |
|
||||
| Stripe | "Receipt from [Empresa]" ou "Your receipt from [Empresa]" no subject |
|
||||
| PayPal | "You paid [Empresa]" no subject |
|
||||
| FastSpring | "Order from [Empresa]" no subject/corpo |
|
||||
| PayPro Global | Nome produto/empresa no corpo |
|
||||
|
||||
---
|
||||
|
||||
## Campos Criticos Desk CRM
|
||||
|
||||
```
|
||||
currency = 3 (EUR) → Fornecedores EUR
|
||||
currency = 2 (USD) → Fornecedores USD (manter valor original, NAO converter)
|
||||
currency = 1 → NAO EXISTE - causa despesas invisiveis
|
||||
|
||||
tax = 1 → Fornecedores PT (MEO, Moloni, PTisp, Staples)
|
||||
tax = 0 → Fornecedores estrangeiros
|
||||
|
||||
send_invoice_to_customer = 0 → OBRIGATORIO (sem default na BD)
|
||||
|
||||
reference_no → coluna correcta (NAO "reference")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Output Standalone
|
||||
|
||||
```markdown
|
||||
## Auto-Despesas - DD-MM-YYYY
|
||||
|
||||
### Despesas Criadas (X)
|
||||
| # Desk | Fornecedor | Valor | Moeda | Ref | PDF |
|
||||
|--------|-----------|-------|-------|-----|-----|
|
||||
|
||||
### Duplicados Detectados (Y)
|
||||
- [Fornecedor] [Valor] - ja existe como #ID
|
||||
|
||||
### Pendentes Revisao (Z)
|
||||
- [Plataforma] - emitente desconhecido: [nome]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
- NUNCA usar currency=1 (nao existe)
|
||||
- NUNCA converter USD para EUR (manter original com currency=2)
|
||||
- NUNCA criar despesa sem verificar duplicado primeiro
|
||||
- NUNCA omitir send_invoice_to_customer=0
|
||||
- SEMPRE ler o email/ticket HTML para extrair valor real (nunca assumir)
|
||||
- SEMPRE incluir reference_no quando disponivel
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
@@ -145,7 +145,7 @@ Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes data
|
||||
|
||||
```javascript
|
||||
// Pesquisar funcionalidades Perfex
|
||||
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
|
||||
dataset_id: "43354eb6-f0b2-40cc-aa53-44e375ab347c",
|
||||
query: "modulo facturas automaticas"
|
||||
})
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
---
|
||||
name: expense
|
||||
description: >
|
||||
Gestão de despesas Desk CRM v1.3. Registar, categorizar e analisar despesas com verificação obrigatória de categorias existentes. Processa despesas de tickets de contabilidade com anexos PDF. Conversão USD→EUR automática. NUNCA cria categoria duplicada. Use when "despesa", "expense", "gasto", "custo", "categoria despesa", "registar despesa", "expense report", "processar tickets contabilidade".
|
||||
Gestão de despesas Desk CRM v2.0. Documento PDF obrigatório para cada despesa. Registar, categorizar e analisar despesas com verificação de categorias e duplicados. Upload SFTP + arquivo mensal automatico. NUNCA cria sem PDF (excepto bypass explicito). Use when "despesa", "expense", "gasto", "custo", "categoria despesa", "registar despesa", "expense report", "processar tickets contabilidade", "recibo", "factura fornecedor".
|
||||
author: Descomplicar® Crescimento Digital
|
||||
version: 1.5.0
|
||||
quality_score: 88
|
||||
version: 2.0.0
|
||||
quality_score: 90
|
||||
user_invocable: true
|
||||
category: finance
|
||||
tags: [expense, despesas, finance, categories, desk-crm, costs, reporting, tickets, receipts]
|
||||
desk_task: null
|
||||
tags: [expense, despesas, finance, categories, desk-crm, costs, reporting, tickets, receipts, pdf, sftp]
|
||||
desk_task: 1710
|
||||
desk_project: 65
|
||||
allowed-tools: Read, mcp__desk-crm-v3
|
||||
mcps: desk-crm-v3
|
||||
allowed-tools: Read, mcp__desk-crm-v3, mcp__ssh-unified
|
||||
mcps: desk-crm-v3, ssh-unified
|
||||
dependencies:
|
||||
mcps: [desk-crm-v3]
|
||||
mcps: [desk-crm-v3, ssh-unified]
|
||||
triggers:
|
||||
- "User wants to create expense"
|
||||
- "User mentions 'despesa', 'expense', 'gasto', 'custo'"
|
||||
@@ -46,9 +46,9 @@ performance:
|
||||
Skill para gestão de despesas com verificação obrigatória de categorias existentes.
|
||||
|
||||
## Metadata
|
||||
- **Version**: 1.3.0
|
||||
- **Version**: 2.0.0
|
||||
- **Author**: Descomplicar
|
||||
- **Date**: 2026-02-05
|
||||
- **Date**: 2026-02-12
|
||||
- **Status**: Active
|
||||
|
||||
---
|
||||
@@ -92,40 +92,20 @@ Esta regra é INVIOLÁVEL. SEMPRE:
|
||||
|
||||
---
|
||||
|
||||
## Categorias Existentes (Referência)
|
||||
## Categorias Activas (top 8 - consolidacao 12-02-2026)
|
||||
|
||||
| ID | Nome | Uso |
|
||||
|----|------|-----|
|
||||
| 1 | Telecomunicações | Net+móvel |
|
||||
| 2 | Serviços Bancários | Comissões, taxas |
|
||||
| 3 | Material de Escritório | Consumíveis |
|
||||
| 4 | FB e Google ADS | Publicidade |
|
||||
| 5 | E-mail MKT | ElasticEmail |
|
||||
| 6 | Seguros | Apólices |
|
||||
| 7 | Equipamento Informático e Audiovisual | Hardware |
|
||||
| 8 | Remunerações | Salários pagos |
|
||||
| 9 | Plugins e Recursos de Design | FULL, Freepik, etc |
|
||||
| 10 | Alojamento de Servidores | Hetzner |
|
||||
| 11 | Software Faturação | Moloni |
|
||||
| 12 | Softwares Gestão | Everhour |
|
||||
| 13 | Registo de Domínios | Ptisp, NameCheap |
|
||||
| 14 | Impostos | SS, IRS, IVA |
|
||||
| 15 | Planos Prestacionais | Pagamentos acordados |
|
||||
| 16 | Manutenção e Suporte | Serviços técnicos |
|
||||
| 17 | Outras | Não classificadas |
|
||||
| 18 | Ofertas a Clientes | Brindes |
|
||||
| 19 | Plataformas Armazenamento | Vimeo, MyAirBridge |
|
||||
| 21 | Contabilidade | GONDOOFFICE |
|
||||
| 22 | Salários e Vencimentos | Recibos vencimento |
|
||||
| 23 | IRC - Imposto sobre Rendimento | Pagamentos IRC |
|
||||
| 24 | IRS - Imposto sobre Rendimento | Retenções IRS |
|
||||
| 25 | Contribuições Segurança Social | SS mensal |
|
||||
| 26 | Hosting e Servidores | Alojamento web |
|
||||
| 28 | Licenças Software | Painéis controlo |
|
||||
| 29 | Reembolsos e Créditos | Valores recebidos |
|
||||
| 38 | Serviços IA e APIs | Anthropic, OpenAI, CapSolver |
|
||||
| ID | Nome | Fornecedores tipicos |
|
||||
|----|------|---------------------|
|
||||
| 1 | Telecomunicacoes | MEO |
|
||||
| 4 | Alojamento web (Hosting) | Hetzner, CWP |
|
||||
| 6 | Servicos Externos | Make/Celonis, Gamma |
|
||||
| 14 | Subscricoes e Servicos Digitais | YouTube Premium, BdThemes |
|
||||
| 28 | Licencas Software | Canva, Cursor, Descript, GitHub, Softaculous |
|
||||
| 30 | Servicos Cloud e Infraestrutura | Google One, Google Workspace, ElasticEmail |
|
||||
| 37 | Dominios | PTisp, Namecheap |
|
||||
| 38 | Servicos IA e APIs | Anthropic, OpenRouter, CapSolver, Replicate |
|
||||
|
||||
**NOTA:** Esta lista pode estar desactualizada. SEMPRE usar `get_expense_categories()` para lista actual.
|
||||
**NOTA:** Existem ~30 categorias na BD mas apenas 8 sao usadas regularmente. SEMPRE usar `get_expense_categories()` para lista completa e actual.
|
||||
|
||||
---
|
||||
|
||||
@@ -133,24 +113,47 @@ Esta regra é INVIOLÁVEL. SEMPRE:
|
||||
|
||||
### 1. Registar Despesa
|
||||
|
||||
> **Gate PDF obrigatorio:** Sem documento, nao regista. Unica excepcao: bypass explicito do utilizador (AT/Salario sem recibo).
|
||||
|
||||
```
|
||||
1. OBRIGATÓRIO: get_expense_categories(with_stats=true)
|
||||
2. Identificar categoria correcta na lista
|
||||
3. SE categoria não existe: PERGUNTAR antes de criar
|
||||
4. SE dados vêm de PDFs: ler CADA ficheiro individualmente com pdftotext
|
||||
1. GATE PDF: Verificar que existe ficheiro PDF
|
||||
- SE utilizador forneceu PDF: prosseguir
|
||||
- SE nao forneceu: PEDIR o ficheiro
|
||||
- SE nao tem e pede bypass: PERGUNTAR "Confirmas despesa sem documento?"
|
||||
- Bypass valido apenas para: AT, Salarios, transferencias bancarias
|
||||
2. LER O PDF: Extrair dados reais do documento
|
||||
- NUNCA copiar valor de um PDF para outro, mesmo com nomes semelhantes
|
||||
- Cada documento tem o seu valor próprio
|
||||
5. Recolher dados:
|
||||
- category_id (obrigatório)
|
||||
- amount (obrigatório - valor REAL extraído do documento)
|
||||
- date (obrigatório, YYYY-MM-DD)
|
||||
- note (obrigatório, descrição)
|
||||
- Cada documento tem o seu valor proprio
|
||||
3. OBRIGATORIO: get_expense_categories(with_stats=true)
|
||||
4. Identificar categoria correcta na lista
|
||||
- SE categoria nao existe: PERGUNTAR antes de criar
|
||||
5. VERIFICAR DUPLICADOS:
|
||||
- get_expenses(search: "<fornecedor>")
|
||||
- Mesmo fornecedor + valor + data = duplicado
|
||||
- Mesmo numero factura = duplicado
|
||||
6. Recolher dados:
|
||||
- category_id (obrigatorio)
|
||||
- amount (obrigatorio - valor REAL extraido do documento)
|
||||
- currency (obrigatorio - EUR=3, USD=2)
|
||||
- date (obrigatorio, YYYY-MM-DD)
|
||||
- note (obrigatorio, incluir numero factura)
|
||||
- send_invoice_to_customer = 0 (obrigatorio na BD)
|
||||
- client_id (opcional)
|
||||
- project_id (opcional)
|
||||
- billable (opcional, default false)
|
||||
- tax (opcional)
|
||||
6. create_expense com dados validados
|
||||
7. Confirmar criação ao utilizador
|
||||
7. CONFIRMAR com utilizador (mostrar resumo)
|
||||
8. create_expense (ou SQL directo se MCP indisponivel)
|
||||
9. UPLOAD PDF ao Desk via SFTP:
|
||||
a. mkdir -p no servidor: /home/ealmeida/desk.descomplicar.pt/uploads/expenses/<id>
|
||||
b. mcp__ssh-unified__sftp_upload(server:"desk", local_path, remote_path)
|
||||
c. chown -R ealmeida:ealmeida
|
||||
d. INSERT INTO tblfiles (rel_id, rel_type='expense', file_name, filetype='application/pdf',
|
||||
visible_to_customer=0, staffid=1, contact_id=0, dateadded=NOW())
|
||||
10. ARQUIVO MENSAL: Mover PDF para pasta correspondente a data da factura:
|
||||
/media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/NN-NomeMes/
|
||||
(mkdir -p se pasta nao existir)
|
||||
11. Confirmar criacao ao utilizador
|
||||
```
|
||||
|
||||
### 2. Criar Categoria (APENAS se necessário)
|
||||
@@ -209,14 +212,18 @@ Esta regra é INVIOLÁVEL. SEMPRE:
|
||||
- Do HTML do ticket (valor, data, referência)
|
||||
- OU usar script Python: python3 /home/ealmeida/scripts/extract_invoice_data.py {pdf_path}
|
||||
6. APRESENTAR resumo ao utilizador e AGUARDAR confirmação
|
||||
7. Após confirmação:
|
||||
a. create_expense(category_id, amount, date, note, tax=1, reference)
|
||||
7. Apos confirmacao:
|
||||
a. SQL: INSERT INTO tblexpenses (..., send_invoice_to_customer, ...) VALUES (..., 0, ...)
|
||||
OU create_expense via MCP (se disponivel)
|
||||
b. UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {id}
|
||||
c. mkdir -p uploads/expenses/{expenseid}
|
||||
d. cp uploads/ticket_attachments/{ticketid}/*.pdf uploads/expenses/{expenseid}/
|
||||
e. chown -R ealmeida:ealmeida uploads/expenses/{expenseid}
|
||||
f. INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, ...)
|
||||
8. Confirmar ao utilizador e passar ao próximo
|
||||
c. mcp__ssh-unified__ssh_execute: mkdir -p uploads/expenses/{expenseid}
|
||||
d. mcp__ssh-unified__sftp_upload: PDF para uploads/expenses/{expenseid}/
|
||||
e. mcp__ssh-unified__ssh_execute: chown -R ealmeida:ealmeida uploads/expenses/{expenseid}
|
||||
f. SQL: INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype,
|
||||
visible_to_customer, staffid, contact_id, dateadded)
|
||||
VALUES ({id}, 'expense', '{file}', 'application/pdf', 0, 1, 0, NOW())
|
||||
g. Mover PDF para arquivo mensal: Contabilidade/YYYY/NN-NomeMes/
|
||||
8. Confirmar ao utilizador e passar ao proximo
|
||||
```
|
||||
|
||||
#### Script Python para Extracção de PDFs
|
||||
@@ -229,22 +236,17 @@ python3 /home/ealmeida/scripts/extract_invoice_data.py /path/to/invoice.pdf
|
||||
|
||||
Retorna JSON com: vendor, cat_id, total, date, invoice, currency, text
|
||||
|
||||
#### Conversão USD → EUR
|
||||
#### Moedas e Valores
|
||||
|
||||
> **OBRIGATÓRIO:** Todas as despesas devem ser registadas em EUR.
|
||||
> **Despesas em USD:** Manter valor original em USD com `currency = 2`. **Nao converter** manualmente.
|
||||
> **Despesas em EUR:** Usar `currency = 3`.
|
||||
|
||||
Taxa aproximada: **1 USD ≈ 0.92 EUR** (verificar taxa actual se necessário)
|
||||
| Moeda | currency ID | Exemplo |
|
||||
|-------|------------|---------|
|
||||
| EUR | **3** | Anthropic 180.00 EUR |
|
||||
| USD | **2** | Cursor 20.00 USD |
|
||||
|
||||
Exemplos:
|
||||
- $19.99 USD → €18.39 EUR
|
||||
- $100.00 USD → €92.00 EUR
|
||||
|
||||
```sql
|
||||
-- Após criar despesa em USD, actualizar para EUR
|
||||
UPDATE tblexpenses SET amount = {valor_eur}, currency = 2 WHERE id = {expense_id};
|
||||
```
|
||||
|
||||
> **CRÍTICO:** O ID da moeda EUR é **2** (não 1). Usar currency=1 faz despesas não aparecerem nos relatórios.
|
||||
> **CRITICO:** `currency = 1` nao existe e causa despesas invisiveis nos relatorios. SEMPRE usar 2 (USD) ou 3 (EUR).
|
||||
|
||||
#### Tickets a Saltar
|
||||
|
||||
@@ -276,43 +278,60 @@ Se utilizador pedir "criar todas" ou "processar em lote":
|
||||
5. Copiar PDFs em batch
|
||||
6. Registar ficheiros em batch via SQL INSERT múltiplo
|
||||
|
||||
#### Mapeamento Fornecedor → Categoria (consolidado 12-02-2026)
|
||||
|
||||
| Fornecedor | Categoria ID | Nome |
|
||||
|-----------|-------------|------|
|
||||
| Anthropic, OpenRouter, CapSolver, Replicate | 38 | Servicos IA e APIs |
|
||||
| Canva, Cursor, Descript, GitHub, Softaculous, CWP | 28 | Licencas Software |
|
||||
| Google One, Google Workspace, ElasticEmail | 30 | Servicos Cloud e Infraestrutura |
|
||||
| Hetzner | 4 | Alojamento web (Hosting) |
|
||||
| MEO | 1 | Telecomunicacoes |
|
||||
| PTisp, Namecheap | 37 | Dominios |
|
||||
| Make/Celonis, Gamma | 6 | Servicos Externos |
|
||||
| YouTube Premium, BdThemes | 14 | Subscricoes e Servicos Digitais |
|
||||
|
||||
#### Mapeamento Email → Categoria
|
||||
|
||||
| Domínio Email | Categoria ID | Nome |
|
||||
|---------------|--------------|------|
|
||||
| anthropic.com | 38 | Serviços IA e APIs |
|
||||
| openai.com | 38 | Serviços IA e APIs |
|
||||
| payproglobal.com | 38 | Serviços IA e APIs (CapSolver) |
|
||||
| elasticemail.com | 5 | E-mail MKT |
|
||||
| hetzner.com | 10 | Alojamento de Servidores |
|
||||
| meoempresas.pt | 1 | Telecomunicações |
|
||||
| centos-webpanel.com | 28 | Licenças Software |
|
||||
| canva.com | 9 | Plugins e Recursos de Design |
|
||||
| freepik.com | 9 | Plugins e Recursos de Design |
|
||||
| namecheap.com | 13 | Registo de Domínios |
|
||||
| ptisp.pt | 13 | Registo de Domínios |
|
||||
| vimeo.com | 19 | Plataformas Armazenamento |
|
||||
| everhour.com | 12 | Softwares Gestão |
|
||||
| cursor.com | 38 | Serviços IA e APIs (Cursor) |
|
||||
| Dominio Email | Categoria ID | Fornecedor |
|
||||
|---------------|--------------|------------|
|
||||
| anthropic.com | 38 | Anthropic |
|
||||
| openrouter.ai | 38 | OpenRouter |
|
||||
| payproglobal.com | 38 | CapSolver |
|
||||
| replicate.com | 38 | Replicate |
|
||||
| cursor.com, anysphere.dev | 28 | Cursor |
|
||||
| canva.com | 28 | Canva |
|
||||
| descript.com | 28 | Descript |
|
||||
| github.com | 28 | GitHub |
|
||||
| softaculous.com | 28 | Softaculous |
|
||||
| centos-webpanel.com | 28 | CWP |
|
||||
| elasticemail.com | 30 | ElasticEmail |
|
||||
| google.com (One/Workspace) | 30 | Google Cloud |
|
||||
| hetzner.com | 4 | Hetzner |
|
||||
| meoempresas.pt | 1 | MEO |
|
||||
| namecheap.com | 37 | Namecheap |
|
||||
| ptisp.pt | 37 | PTisp |
|
||||
| make.com, celonis.com | 6 | Make/Celonis |
|
||||
| gamma.app | 6 | Gamma |
|
||||
|
||||
> **NOTA:** `moloni.com` NÃO incluído - é plataforma de facturação, emails podem ser de qualquer fornecedor. Verificar conteúdo do PDF para identificar o fornecedor real.
|
||||
> **NOTA:** `moloni.com` NAO incluido - e plataforma de facturacao, emails podem ser de qualquer fornecedor.
|
||||
|
||||
#### Mapeamento Fornecedor (PDF) → Categoria
|
||||
#### Mapeamento Padrao PDF → Categoria
|
||||
|
||||
Para documentos financeiros transferidos (não tickets), identificar fornecedor pelo conteúdo do PDF:
|
||||
Para documentos financeiros, identificar fornecedor pelo conteudo do PDF:
|
||||
|
||||
| Padrão no PDF | Fornecedor | Categoria ID | Nome |
|
||||
| Padrao no PDF | Fornecedor | Categoria ID | Nome |
|
||||
|---------------|-----------|--------------|------|
|
||||
| `Gondooffice`, `Cubic Choices`, `GONDOOFFICE` | Gondooffice (Cubic Choices) | 21 | Contabilidade |
|
||||
| `Autoridade Tributária`, `emiteDoc`, `AT -` | AT - Autoridade Tributária | 15 | Planos Prestacionais |
|
||||
| `Staples`, `STAPLES`, `STP_ECOFACTURA` | Staples | 3 | Material de Escritório |
|
||||
| `MEO`, `Serviços _ Compras`, `meoempresas` | MEO Empresas | 1 | Telecomunicações |
|
||||
| `TOConline`, `metta`, `Recibo de Vencimento` | Salário/Vencimento | 22 | Salários e Vencimentos |
|
||||
| `NOS Comunicações`, `NOS ` | NOS | 1 | Telecomunicações |
|
||||
| `Vodafone` | Vodafone | 1 | Telecomunicações |
|
||||
| `EDP`, `E-REDES` | EDP | 17 | Outras |
|
||||
| `Segurança Social`, `Seg. Social` | Segurança Social | 25 | Contribuições SS |
|
||||
| `Cursor`, `Anysphere`, `cursor.com` | Cursor (Anysphere) | 38 | Serviços IA e APIs |
|
||||
| `Gondooffice`, `Cubic Choices` | Gondooffice | 21 | Contabilidade |
|
||||
| `Autoridade Tributaria`, `emiteDoc`, `AT -` | AT | 15 | Planos Prestacionais |
|
||||
| `Staples`, `STP_ECOFACTURA` | Staples | 3 | Material de Escritorio |
|
||||
| `MEO`, `meoempresas` | MEO | 1 | Telecomunicacoes |
|
||||
| `TOConline`, `Recibo de Vencimento` | Salario | 22 | Salarios e Vencimentos |
|
||||
| `Seguranca Social` | SS | 25 | Contribuicoes SS |
|
||||
| `Cursor`, `Anysphere` | Cursor | 28 | Licencas Software |
|
||||
| `Anthropic` | Anthropic | 38 | Servicos IA e APIs |
|
||||
| `Hetzner` | Hetzner | 4 | Alojamento web (Hosting) |
|
||||
| `ElasticEmail` | ElasticEmail | 30 | Servicos Cloud e Infraestrutura |
|
||||
|
||||
#### Extracção de Dados de PDFs
|
||||
|
||||
@@ -353,9 +372,9 @@ SELECT id, file_name, filetype FROM tblticket_attachments WHERE ticketid = {ID}
|
||||
-- 3. Actualizar nome fornecedor
|
||||
UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {expense_id}
|
||||
|
||||
-- 4. Registar anexo na despesa
|
||||
INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, visible_to_customer, staffid, dateadded)
|
||||
VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', 0, 1, NOW())
|
||||
-- 4. Registar anexo na despesa (contact_id obrigatorio!)
|
||||
INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, visible_to_customer, staffid, contact_id, dateadded)
|
||||
VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', 0, 1, 0, NOW())
|
||||
```
|
||||
|
||||
#### Campos para Rastreio de Duplicados
|
||||
@@ -415,8 +434,9 @@ VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', 0, 1, NOW())
|
||||
| project_id | number | - | Projecto associado |
|
||||
| billable | boolean | - | Facturável (default: false) |
|
||||
| tax2 | number | - | Segunda taxa imposto |
|
||||
| currency | number | - | ID moeda (**EUR = 2**) |
|
||||
| payment_mode | string | - | Método pagamento |
|
||||
| currency | number | ✓ | ID moeda (**EUR = 3**, USD = 2) |
|
||||
| payment_mode | string | - | Metodo pagamento (default: 'online') |
|
||||
| send_invoice_to_customer | number | ✓ | **Obrigatorio na BD** (sem default). Usar sempre **0** |
|
||||
|
||||
### Campo expense_name (via SQL)
|
||||
|
||||
@@ -436,9 +456,10 @@ UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {expense_id};
|
||||
|
||||
| ID | Nome | Símbolo | Default |
|
||||
|----|------|---------|---------|
|
||||
| 2 | EUR | € | Sim |
|
||||
| 2 | USD | $ | Nao |
|
||||
| 3 | EUR | € | Sim |
|
||||
|
||||
> **CRÍTICO:** Usar sempre `currency = 2` para EUR. O ID 1 não existe e causa despesas invisíveis nos relatórios.
|
||||
> **CRITICO:** EUR = **3**, USD = **2**. Usar currency=1 causa despesas invisiveis nos relatorios. Para despesas em USD manter valor original com currency=2 (nao converter).
|
||||
|
||||
---
|
||||
|
||||
@@ -521,6 +542,23 @@ User: Registar 150€ de domínio para cliente TechStart
|
||||
|
||||
## Changelog
|
||||
|
||||
### v2.0.0 (2026-02-12) - Sistema Robusto 2026
|
||||
- **Gate PDF obrigatorio:** Despesa sem documento nao e registada (bypass explicito para AT/Salario)
|
||||
- **Upload SFTP:** Substituido `cp` local por `mcp__ssh-unified__sftp_upload` (Regra #41)
|
||||
- **Arquivo mensal:** PDF organizado em `Contabilidade/YYYY/NN-NomeMes/` automaticamente
|
||||
- **Campo `send_invoice_to_customer`:** Documentado como obrigatorio na BD (valor 0)
|
||||
- **Correccao currency:** EUR = **3** (nao 2), USD = **2**. Corrigido em toda a skill
|
||||
- **Categorias alinhadas com consolidacao:** 8 categorias activas com mapeamento correcto
|
||||
- Cursor/Canva/Descript/GitHub/Softaculous/CWP → 28 (Licencas Software)
|
||||
- Hetzner → 4 (Alojamento web)
|
||||
- ElasticEmail/Google → 30 (Servicos Cloud)
|
||||
- PTisp/Namecheap → 37 (Dominios)
|
||||
- YouTube/BdThemes → 14 (Subscricoes)
|
||||
- Make/Gamma → 6 (Servicos Externos)
|
||||
- **Verificacao duplicados reforçada:** Integrada no passo 5 do protocolo
|
||||
- **MCP ssh-unified adicionado** a dependencias
|
||||
- **Procedimento:** `06-Operacoes/Procedimentos/PROC-Skill-Expense.md`
|
||||
|
||||
### v1.5.0 (2026-02-05)
|
||||
- Adicionado mapeamento **Cursor (Anysphere)** → categoria 38 (Serviços IA e APIs)
|
||||
- Email: `cursor.com`
|
||||
@@ -569,5 +607,5 @@ User: Registar 150€ de domínio para cliente TechStart
|
||||
---
|
||||
|
||||
**Criado:** 2026-02-05
|
||||
**Actualizado:** 2026-02-05
|
||||
**Motivo:** Prevenção de categorias duplicadas + processamento de tickets
|
||||
**Actualizado:** 2026-02-12
|
||||
**Motivo:** Sistema robusto 2026 - PDF obrigatorio, SFTP, arquivo mensal, correccoes consolidacao
|
||||
|
||||
@@ -411,7 +411,7 @@ Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes data
|
||||
|
||||
```javascript
|
||||
// Pesquisar serviços e preços
|
||||
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
|
||||
dataset_id: "bd65f36e-6004-4584-b478-129b2c21b4d2",
|
||||
query: "pacote website ecommerce"
|
||||
})
|
||||
|
||||
189
crm-ops/skills/ticket-triage/SKILL.md
Normal file
189
crm-ops/skills/ticket-triage/SKILL.md
Normal file
@@ -0,0 +1,189 @@
|
||||
---
|
||||
name: ticket-triage
|
||||
description: >
|
||||
Auto-processamento de tickets abertos no Desk CRM. Fecha SPAM, identifica facturas para /auto-expense, protege notificacoes de sistema. Use when "tickets", "triagem tickets", "limpar tickets", "ticket triage", "processar tickets".
|
||||
author: Descomplicar® Crescimento Digital
|
||||
version: 1.0.0
|
||||
quality_score: 85
|
||||
user_invocable: true
|
||||
category: crm
|
||||
tags: [tickets, triage, spam, invoices, notifications, desk-crm]
|
||||
desk_task: 1710
|
||||
desk_project: 65
|
||||
allowed-tools: Read, Write, mcp__desk-crm-v3
|
||||
mcps: desk-crm-v3
|
||||
dependencies:
|
||||
mcps: [desk-crm-v3]
|
||||
files:
|
||||
- /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
triggers:
|
||||
- "User asks to process tickets"
|
||||
- "User mentions 'tickets', 'triagem', 'limpar tickets'"
|
||||
- "Invoked by /today orchestrator"
|
||||
---
|
||||
|
||||
# /ticket-triage v1.0
|
||||
|
||||
Auto-processamento de tickets abertos no Desk CRM.
|
||||
|
||||
---
|
||||
|
||||
## Protocolo
|
||||
|
||||
### Passo 1: Recolher tickets abertos
|
||||
|
||||
```
|
||||
mcp__desk-crm-v3__get_tickets({ status: 1, limit: 50 })
|
||||
```
|
||||
|
||||
### Passo 2: Carregar tabela de fornecedores
|
||||
|
||||
```
|
||||
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
Extrair dominios de fornecedores e plataformas multi-fornecedor
|
||||
```
|
||||
|
||||
### Passo 3: Classificar cada ticket
|
||||
|
||||
> Aplicar por ordem de prioridade. Primeiro match ganha.
|
||||
|
||||
```
|
||||
Para cada ticket aberto:
|
||||
|
||||
1. NOTIFICACAO SISTEMA? (verificar PRIMEIRO)
|
||||
Subject contem padrao protegido E remetente conhecido
|
||||
→ NAO fechar. Guardar para "Requer Accao" no output.
|
||||
|
||||
2. DESPESA? (verificar SEGUNDO)
|
||||
Email do remetente contem dominio de fornecedor conhecido
|
||||
Subject contem: payment, pagamento, invoice, factura, recibo, receipt, paid, renewed
|
||||
→ Registar no output como factura para /auto-expense
|
||||
→ Fechar ticket (status 5) com nota "Factura flagged para /auto-expense"
|
||||
|
||||
3. SPAM? (verificar TERCEIRO)
|
||||
→ Fechar (status 5) com motivo
|
||||
|
||||
4. NEWSLETTER/INFORMATIVO?
|
||||
→ Fechar (status 5) com motivo
|
||||
|
||||
5. NENHUM MATCH
|
||||
→ Manter aberto para revisao
|
||||
```
|
||||
|
||||
### Passo 4: Escrever output JSON
|
||||
|
||||
```
|
||||
Escrever em ~/.claude-work/today-tickets-{date}.json:
|
||||
{
|
||||
"spam_fechados": 3,
|
||||
"newsletters_fechadas": 1,
|
||||
"facturas": [
|
||||
{"ticket_id": 456, "fornecedor": "Anthropic", "subject": "Receipt", "sender": "..."}
|
||||
],
|
||||
"notificacoes": [
|
||||
{"ticket_id": 789, "subject": "Security Alert", "sender": "..."}
|
||||
],
|
||||
"mantidos_abertos": 2,
|
||||
"total_processados": 12
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Padroes SPAM (fechar status 5)
|
||||
|
||||
```
|
||||
Keywords no subject (case-insensitive):
|
||||
- Guest Post, SEO services, backlinks, partnership
|
||||
- link building, dofollow, collaboration opportunity
|
||||
- Purchase Order (de desconhecidos)
|
||||
- WeTransfer (phishing), Prestige Awards
|
||||
- lottery, winner, urgent money, bitcoin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notificacoes de Sistema (NUNCA auto-fechar)
|
||||
|
||||
```
|
||||
Padroes protegidos no subject (case-insensitive):
|
||||
- Legal Update, Legal Notice, Policy Change, Policy Update
|
||||
- Deprecation, End of Life, EOL, Breaking Change
|
||||
- Migration Required, Action Required, Action Needed
|
||||
- Security Alert, Security Advisory, Security Notice
|
||||
- API Change, API Update, Terms Update, Terms Change
|
||||
- Service Disruption, Maintenance Required
|
||||
- Compliance, GDPR, Data Processing
|
||||
- Infrastructure Change, Platform Update, Product Update
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Tickets a Saltar (NAO criar despesa)
|
||||
|
||||
| Tipo | Indicador | Accao |
|
||||
|------|-----------|-------|
|
||||
| Payment Confirmation | "Payment Confirmation" de CWP | Fechar (confirmacao, nao factura) |
|
||||
| Payment Receipt | "Payment Was Successfully Processed" de elasticemail | Fechar (recibo sem dados) |
|
||||
| Notificacao bancaria | "Notificacao de transferencia" de bancobpi | Fechar |
|
||||
| Duplicado | Mesmo subject que ticket ja processado | Fechar como duplicado |
|
||||
|
||||
> **Nota:** Receipts de Anthropic e Canva contem invoice number e valor -> SAO despesas.
|
||||
> "Receipt" so e motivo para saltar quando e apenas confirmacao sem dados de factura.
|
||||
|
||||
---
|
||||
|
||||
## Tickets para ELIMINAR (notificacoes sem valor)
|
||||
|
||||
```
|
||||
Subject contem:
|
||||
- "Your Elastic Email Account was successfully re-charged"
|
||||
- "Account re-charged", "Auto-recharge successful"
|
||||
- "Credit added to your account"
|
||||
- "[BOT] Ativacao realizada com sucesso"
|
||||
|
||||
→ mcp__desk-crm-v3__delete_ticket({ ticket_id: ID, confirm: true })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Remetentes Conhecidos (whitelist facturas)
|
||||
|
||||
> Ver tabela completa em: Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||
> Verificar pelo DOMINIO do email remetente, nao pelo departamento.
|
||||
|
||||
---
|
||||
|
||||
## Output Standalone
|
||||
|
||||
```markdown
|
||||
## Triagem Tickets - DD-MM-YYYY
|
||||
|
||||
**Total: X tickets processados**
|
||||
|
||||
### SPAM Fechado (Y)
|
||||
- #123 - "Guest Post SEO" - spam@dominio.com
|
||||
|
||||
### Facturas Identificadas (Z)
|
||||
- #456 - "Receipt" - billing@anthropic.com -> /auto-expense
|
||||
|
||||
### Notificacoes Sistema (W)
|
||||
- #789 - "Security Alert" - noreply@n8n.io -> requer accao
|
||||
|
||||
### Mantidos Abertos (N)
|
||||
- #012 - "Pedido de suporte" - cliente@empresa.pt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
- NUNCA eliminar tickets de remetentes desconhecidos com facturas
|
||||
- NUNCA fechar notificacoes protegidas automaticamente
|
||||
- NUNCA processar despesas directamente (delegar para /auto-expense)
|
||||
- SEMPRE verificar dominio do remetente na tabela de fornecedores
|
||||
- SEMPRE usar staff_id: 25 (AikTop) nos comentarios
|
||||
|
||||
---
|
||||
|
||||
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*
|
||||
Reference in New Issue
Block a user