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:
2026-03-05 17:16:15 +00:00
parent f2b5171ea2
commit 9404af7ac9
184 changed files with 20865 additions and 1993 deletions

View File

@@ -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