feat: refactor 30+ skills to Anthropic progressive disclosure pattern

- All SKILL.md files now <500 lines (avg reduction 69%)
- Detailed content extracted to references/ subdirectories
- Frontmatter standardised: only name + description (Anthropic standard)
- New skills: brand-guidelines, spec-coauthor, report-templates, skill-creator
- Design skills: anti-slop guidelines, premium-proposals reference
- Removed non-standard frontmatter fields (triggers, version, author, category)

Plugins affected: infraestrutura, marketing, dev-tools, crm-ops, gestao,
core-tools, negocio, perfex-dev, wordpress, design-media

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 15:05:03 +00:00
parent 9404af7ac9
commit 6b3a6f2698
397 changed files with 67154 additions and 17257 deletions

View File

@@ -1,6 +1,6 @@
{
"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.",
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by NotebookLM notebooks.",
"version": "1.1.0",
"author": {
"name": "Descomplicar - Crescimento Digital",

View File

@@ -13,7 +13,6 @@ primary_mcps:
recommended_mcps:
- moloni
- memory-supabase
- dify-kb
skills:
- _core
- orcamento
@@ -116,7 +115,7 @@ Você é um especialista comercial responsável por:
| `desk-crm-v3` | Verificar cliente, criar estimate |
| `google-workspace` | Criar orçamento em Google Docs |
| `memory-supabase` | Consultar orçamentos similares |
| `dify-kb` | Best practices pricing |
| `` | Best practices pricing |
## Responsabilidades
@@ -180,15 +179,6 @@ mcp__notebooklm__notebook_query notebook_id:"0c9c079c-a426-486c-99eb-1564d42d37a
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"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Gestao" query:"projectos estimativa custos"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"Marketing Digital" query:"servicos pacotes"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"desenvolvimento custos"
```
## Your Available MCPs
### Recommended for business
@@ -197,16 +187,14 @@ mcp__dify-kb__dify_kb_retrieve_segments dataset:"WordPress" query:"desenvolvimen
- **google-workspace** - Email, calendário, docs, drive
- **imap** - Email IMAP
- **memory-supabase** - Memória longo prazo
- **dify-kb** - Knowledge base AI
- **** - Knowledge base AI
- **outline-api** - Outline documentation
### All Available (33 total)
### All Available (32 total)
context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -235,13 +223,11 @@ context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-re
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.
**Example:** `Skill("skill-name")` invokes the skill.
## Colaboração
- **Reports to**: Sales Manager

View File

@@ -13,7 +13,6 @@ primary_mcps:
- desk-crm-v3
- google-workspace
recommended_mcps:
- dify-kb
- memory-supabase
- imap
skills:
@@ -38,8 +37,6 @@ created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
---
# Lead Approach Strategist Descomplicar
Especialista em estratégia de abordagem de leads - análise de perfil, definição de estratégia e criação de primeiro contacto personalizado.
@@ -86,9 +83,6 @@ Especialista em estratégia de abordagem de leads - análise de perfil, definiç
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
@@ -147,7 +141,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
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | `dify-kb`: KB Vendas, Marketing Digital, Copywriting
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | ``: KB Vendas, Marketing Digital, Copywriting
- `memory-supabase`: Padrões de abordagem bem-sucedidos
## Colaboracao
@@ -166,9 +160,9 @@ Estrategista comercial especializado em análise de leads e criação de abordag
- Gemini 2.5 RAG
- Usage: `mcp__notebooklm__notebook_query`
**dify-kb** (knowledge fallback)
**** (knowledge fallback)
- Knowledge base AI
- Usage: `mcp__dify-kb__*`
- Usage: `mcp____*`
**memory-supabase** (system)
- Memória longo prazo
@@ -186,13 +180,11 @@ Estrategista comercial especializado em análise de leads e criação de abordag
- **vimeo** - Video management - upload, metadata, transcripts, analytics
- **replicate** - AI models - imagem, vídeo, áudio, LLMs
### All Available (33 total)
### All Available (32 total)
moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, imap, outline-api, wikijs, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, magic, design-systems
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -219,7 +211,7 @@ moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, imap, outline-api, w
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/billing-check, /crm-ops, /ecommerce, /orcamento, /saas, /remotion-video, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /doc-sync, /product, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /time, /today, /seo-audit, /seo-report, /archive, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.

View File

@@ -12,7 +12,6 @@ tools: Read, Glob, Grep, ToolSearch
primary_mcps:
- desk-crm-v3
recommended_mcps:
- dify-kb
- google-workspace
- memory-supabase
skills:
@@ -37,8 +36,6 @@ created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
---
# Lead Qualifier Descomplicar
Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em prospects de alta qualidade enquanto nutre os que ainda nao estao prontos para comprar.
@@ -59,14 +56,6 @@ mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf565
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"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"PerfexCRM" query:"lead management pipeline"
```
## System Prompt
### Papel
@@ -120,7 +109,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
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | `dify-kb`: KB Vendas (qualification), Marketing Digital
- `notebooklm`: KB primaria (Gemini 2.5 RAG) | ``: KB Vendas (qualification), Marketing Digital
- `memory-supabase`: Histórico de qualificações bem-sucedidas
## Colaboracao
@@ -135,9 +124,9 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
- Usage: `mcp__desk-crm-v3__*`
**notebooklm** (knowledge primaria)
**dify-kb** (knowledge fallback)
**** (knowledge fallback)
- Knowledge base AI
- Usage: `mcp__dify-kb__*`
- Usage: `mcp____*`
**memory-supabase** (system)
- Memória longo prazo
@@ -149,13 +138,11 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
- **imap** - Email IMAP
- **outline-api** - Outline documentation
### All Available (33 total)
### All Available (32 total)
context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
@@ -184,13 +171,11 @@ context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-re
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (54 total)
### All Available (53 total)
/content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
**Discovery:** Use the Skill tool to invoke skills.
**Example:** `Skill("skill-name")` invokes the skill.
## Your Team & Responsibilities
You are part of **3 SDKs** (TaskForce teams):
@@ -200,9 +185,6 @@ You are part of **3 SDKs** (TaskForce teams):
**Purpose:** NULL
**Your responsibilities in this TaskForce:**
- **Sistema de agentes especializados para delegacao de tarefas via Task tool com consulta automatica de datasets Dify.**: NULL
### TaskForce Marketing Estratégico
**Purpose:** NULL

View File

@@ -25,7 +25,6 @@ recommended_mcps:
- moloni # Invoicing
- imap # Email management
- memory-supabase # Long-term memory
- dify-kb # Knowledge base
- outline-api # Documentation
primary_skills:
@@ -91,14 +90,6 @@ mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf565
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"
mcp__dify-kb__dify_kb_retrieve_segments dataset:"PerfexCRM" query:"CRM clientes pipeline"
```
## System Prompt
### Papel

View File

@@ -1,5 +1,5 @@
{
"description": "Knowledge sources (NotebookLM + Dify KB) for CRM Operations domain",
"description": "Knowledge sources for CRM Operations domain",
"sources": {
"notebooklm": {
"description": "NotebookLM - conhecimento curado profundo via Gemini 2.5 RAG (PRIMARIO)",
@@ -10,8 +10,7 @@
"title": "Perfex CRM: Gestao de Clientes e Projetos",
"topics": [
"perfexcrm"
],
"maps_from_dify": "PerfexCRM"
]
},
{
"id": "f29c8457-f16d-4fb3-979d-6e5901de1b20",
@@ -19,30 +18,9 @@
"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
]
}
]
}
}
}
}

View File

@@ -1,26 +1,7 @@
---
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"
description: Criação automática de despesas a partir de facturas detectadas no IMAP e tickets. Extrai dados, verifica duplicados e cria despesas no Desk CRM com PDF anexo.
disable-model-invocation: true
---
# /auto-expense v1.0

View File

@@ -1,14 +1,6 @@
---
name: billing-check
description: Billing verification and invoice validation. Checks billing accuracy,
matches invoices with contracts. Use when user mentions "billing check", "invoice
verification", "billing audit", "payment verification", "billing validation".
author: Descomplicar® Crescimento Digital
version: 2.0.0
quality_score: 75
user_invocable: true
desk_task: 1464
allowed-tools: ToolSearch
description: Verificação de facturação e validação de facturas. Sincroniza facturas Moloni com horas Desk CRM para projectos 360, compara horas facturadas vs entregues e calcula saldos.
---
# Billing Check - Desk vs Moloni (v2.0)

View File

@@ -1,13 +1,7 @@
---
name: crm-admin
description: Desk CRM administration and maintenance. Manages users, permissions,
custom fields, and system configuration. Use when user mentions "crm admin", "desk
admin", "crm configuration", "user management", "crm permissions".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 75
user_invocable: true
desk_task: 1467
description: Administração e manutenção do Desk CRM. Gestão de utilizadores, permissões, campos personalizados, configuração de sistema e módulos Perfex.
disable-model-invocation: true
---
# CRM Admin Specialist

View File

@@ -1,42 +1,7 @@
---
name: crm-ops
description: >
Operações CRM seguras com verificações obrigatórias de duplicados e confirmações. Entende distinção crítica Lead vs Customer, Proposal vs Estimate. NUNCA cria entidade sem verificar existência. Use when creating leads, customers, proposals, estimates, or when user mentions "crm", "lead", "customer", "orçamento", "proposta", "estimate", "perfex".
author: Descomplicar® Crescimento Digital
version: 1.2.0
quality_score: 80
user_invocable: true
category: business
tags: [crm, leads, customers, proposals, estimates, perfex, validation, duplicates, sales-process]
desk_task: 1468
desk_project: 65
allowed-tools: Read, Bash, mcp__desk-crm-v3
mcps: desk-crm-v3
dependencies:
mcps: [desk-crm-v3]
triggers:
- "User wants to create lead, customer, proposal, estimate"
- "User mentions 'crm', 'lead', 'orçamento', 'proposta'"
- "Creating any CRM entity"
- "User says 'cliente', 'customer', 'estimate'"
anti_patterns:
critical:
- "NEVER create lead/customer without checking existence"
- "NEVER create customer automatically for estimate"
- "NEVER assume entity doesn't exist"
entities:
- "Creating customer when should be lead"
- "Using estimate for leads (use proposal)"
- "Using proposal for qualified customers (use estimate)"
technical:
- "Converting non-accepted estimate to invoice"
- "Accessing email directly in tblclients (JOIN tblcontacts)"
- "Using invented tables (verify schema first)"
performance:
baseline_duration_ms: 300000
target_duration_ms: 180000
last_run_duration_ms: null
success_rate: 0.92
description: Operações CRM seguras com verificação obrigatória de duplicados e confirmações. Distinção Lead vs Customer, Proposal vs Estimate. Criação de entidades CRM.
disable-model-invocation: true
---
# /crm-ops - Operações CRM Seguras

View File

@@ -1,22 +1,6 @@
---
name: crm
description: >
Operações CRM unificadas v2.0. Consolida crm-ops + crm-admin. Leads, customers, proposals, estimates, visão 360.
Use when "crm", "lead", "cliente", "customer", "orçamento", "proposta", "estimate", "360".
author: Descomplicar® Crescimento Digital
version: 2.0.0
quality_score: 85
user_invocable: true
category: business
tags: [crm, leads, customers, proposals, estimates, 360, sales]
desk_task: 1468
desk_project: 65
allowed-tools: Read, mcp__desk-crm-v3
mcps: desk-crm-v3
anti_patterns:
- "NUNCA criar lead/customer sem verificar duplicados"
- "NUNCA criar customer automaticamente para estimate"
- "NUNCA fechar tarefa sem autorização"
description: Operações CRM unificadas. Leads, customers, proposals, estimates e visão 360 do cliente. Consolida crm-ops e crm-admin com verificação obrigatória de duplicados.
---
# /crm v2.0 - Operações CRM Unificadas
@@ -25,6 +9,28 @@ Consolida /crm-ops + /crm-admin numa única skill com subcomandos.
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| Perfex CRM: Gestão de Clientes e Projectos | df4688bb | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "df4688bb-c2c0-4aba-98c1-38c3b50a353c",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
### Procedimentos Relacionados
- `PROC-CRM-Operacoes.md` — Operações CRM padrão
---
## Comandos
| Comando | Função |

View File

@@ -1,21 +1,6 @@
---
name: desk
description: >
Contexto de projecto via .desk-project v3.0. Integração /time, status rápido.
Use when .desk-project exists, "desk", "projecto", "contexto", "desk-task".
author: Descomplicar® Crescimento Digital
version: 3.0.0
quality_score: 90
user_invocable: true
category: productivity
tags: [desk, crm, projecto, contexto, triangulo, integration]
desk_task: 1471
desk_project: 65
allowed-tools: Read, Write, Bash, mcp__desk-crm-v3, mcp__mcp-time
mcps: desk-crm-v3, mcp-time
auto_detection:
enabled: true
file: ".desk-project"
description: Contexto de projecto via .desk-project. Auto-detecção, integração com /time, status rápido, criação de tarefas e changelog. Sistema Triângulo Desk-GDrive-Local.
---
# /desk v3.0 - Contexto de Projecto

View File

@@ -1,117 +1,49 @@
---
name: expense
description: >
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: 2.0.0
quality_score: 90
user_invocable: true
category: finance
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, mcp__ssh-unified
mcps: desk-crm-v3, ssh-unified
dependencies:
mcps: [desk-crm-v3, ssh-unified]
triggers:
- "User wants to create expense"
- "User mentions 'despesa', 'expense', 'gasto', 'custo'"
- "User wants to categorize expenses"
- "User asks about expense categories"
- "User needs expense report or analysis"
- "User wants to process expenses from tickets"
- "User mentions 'tickets contabilidade', 'recibos', 'receipts'"
anti_patterns:
critical:
- "NEVER create category without checking if exists"
- "NEVER assume category doesn't exist"
- "ALWAYS list categories before creating new one"
categories:
- "Creating duplicate categories"
- "Using similar name instead of existing category"
- "Not checking existing categories first"
technical:
- "Creating expense without category_id"
- "Using category name instead of ID"
performance:
baseline_duration_ms: 60000
target_duration_ms: 30000
last_run_duration_ms: null
success_rate: 0.95
description: Gestao de despesas Desk CRM com PDF obrigatorio. Registar, categorizar e analisar despesas com verificacao de duplicados, upload SFTP e arquivo mensal automatico.
---
# /expense - Gestão de Despesas
# /expense - Gestao de Despesas
Skill para gestão de despesas com verificação obrigatória de categorias existentes.
## Metadata
- **Version**: 2.0.0
- **Author**: Descomplicar
- **Date**: 2026-02-12
- **Status**: Active
---
Skill para gestao de despesas com verificacao obrigatoria de categorias existentes.
## Quando Usar
- Registar nova despesa
- Criar/gerir categorias de despesas
- Consultar despesas por período/categoria
- Consultar despesas por periodo/categoria
- Associar despesas a projectos/clientes
- Análise e relatórios de despesas
- **Processar despesas de tickets de contabilidade (departamento 3)**
- Importar recibos de serviços (Anthropic, Hetzner, etc.)
- Analise e relatorios de despesas
- Processar despesas de tickets de contabilidade (departamento 3)
- Importar recibos de servicos (Anthropic, Hetzner, etc.)
## Quando NÃO Usar
## Quando NAO Usar
- Para facturas a clientes (usar /invoice)
- Para orçamentos (usar /orcamento)
- Para orcamentos (usar /orcamento)
- Para pagamentos recebidos (usar /crm)
---
## REGRA CRÍTICA: CATEGORIAS
## REGRA CRITICA: CATEGORIAS
> **PROIBIDO criar categoria sem verificar se já existe.**
Esta regra é INVIOLÁVEL. SEMPRE:
> **PROIBIDO criar categoria sem verificar se ja existe.**
```
1. Listar categorias: get_expense_categories(with_stats=true)
2. Pesquisar por nome similar na lista
3. SE encontrar match ou similar:
- USAR a categoria existente
- NÃO criar duplicado
4. SE realmente não existe:
- PERGUNTAR: "Não encontrei categoria para X. Criar nova?"
5. SÓ CRIAR após confirmação explícita
3. SE encontrar match ou similar: USAR a categoria existente
4. SE realmente nao existe: PERGUNTAR "Nao encontrei categoria para X. Criar nova?"
5. SO CRIAR apos confirmacao explicita
```
**Violação desta regra causa duplicados que prejudicam relatórios financeiros.**
**Violacao desta regra causa duplicados que prejudicam relatorios financeiros.**
Para mapeamento completo de fornecedores, emails e padroes PDF para categorias: ver `references/category-mapping.md`
---
## Categorias Activas (top 8 - consolidacao 12-02-2026)
| 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:** Existem ~30 categorias na BD mas apenas 8 sao usadas regularmente. SEMPRE usar `get_expense_categories()` para lista completa e actual.
---
## Protocolo
### 1. Registar Despesa
## Protocolo: Registar Despesa
> **Gate PDF obrigatorio:** Sem documento, nao regista. Unica excepcao: bypass explicito do utilizador (AT/Salario sem recibo).
@@ -122,407 +54,101 @@ Esta regra é INVIOLÁVEL. SEMPRE:
- 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 proprio
- NUNCA copiar valor de um PDF para outro
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)
- category_id, amount, currency (EUR=3, USD=2), date (YYYY-MM-DD)
- note (incluir numero factura), send_invoice_to_customer = 0
- Opcionais: client_id, project_id, billable, tax
7. CONFIRMAR com utilizador (mostrar resumo)
8. create_expense (ou SQL directo se MCP indisponivel)
8. create_expense
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)
d. INSERT INTO tblfiles (rel_id, rel_type='expense', ...)
10. ARQUIVO MENSAL: Mover PDF para Contabilidade/YYYY/NN-NomeMes/
11. Confirmar criacao ao utilizador
```
### 2. Criar Categoria (APENAS se necessário)
## Protocolo: Criar Categoria
```
1. get_expense_categories() - listar todas
2. Verificar se existe categoria similar
3. SE existe similar: USAR ESSA, não criar
4. SE não existe nenhuma similar:
- Perguntar confirmação ao utilizador
- Aguardar resposta explícita
5. SÓ APÓS confirmação: criar via SQL ou interface
3. SE existe similar: USAR ESSA, nao criar
4. SE nao existe: perguntar confirmacao ao utilizador
5. SO APOS confirmacao: criar
```
### 3. Consultar Despesas
## Protocolo: Consultar Despesas
```
1. get_expenses com filtros:
- category (ID da categoria)
- date_from / date_to (período)
- client_id (cliente específico)
- project_id (projecto específico)
- limit (número resultados)
1. get_expenses com filtros: category, date_from/date_to, client_id, project_id, limit
2. Apresentar resumo ao utilizador
```
### 4. Análise de Despesas
## Protocolo: Analise de Despesas
```
1. expense_analytics com parâmetros:
- period: "month", "quarter", "year"
- breakdown_by: "category", "client", "project"
2. Apresentar insights:
- Total por categoria
- Tendências
- Categorias mais usadas
1. expense_analytics: period ("month"/"quarter"/"year"), breakdown_by ("category"/"client"/"project")
2. Apresentar insights: total por categoria, tendencias, categorias mais usadas
```
### 5. Processar Despesas de Tickets (Contabilidade)
## Processar Despesas de Tickets
> **REGRA 1:** Processar tickets UM A UM com confirmação do utilizador (ou em lote se solicitado).
> **REGRA 2:** Verificar SEMPRE se despesa já foi lançada (prevenir duplicados).
> **REGRA 3:** NÃO adicionar respostas aos tickets - apenas criar despesa e anexos.
> **REGRA 4:** Converter SEMPRE USD para EUR antes de criar despesa.
> **REGRA 5:** Saltar tickets que são apenas recibos de pagamento (não são facturas).
Para protocolo completo de processamento de tickets de contabilidade: ver `references/ticket-processing.md`
```
1. Obter ticket: get_ticket(ticket_id)
2. Verificar anexos: SELECT * FROM tblticket_attachments WHERE ticketid = X
3. SE não tem PDFs: SALTAR ticket (apenas notificação)
4. VERIFICAR DUPLICADOS (OBRIGATÓRIO):
SELECT id, amount, date, note FROM tblexpenses
WHERE reference_no LIKE '%{receipt_number}%' OR note LIKE '%ticket #{ticket_id}%'
SE encontrar: PARAR e informar "Despesa já existe: #ID"
5. Extrair dados:
- 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. 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. 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
Localização: `/home/ealmeida/scripts/extract_invoice_data.py`
```bash
python3 /home/ealmeida/scripts/extract_invoice_data.py /path/to/invoice.pdf
```
Retorna JSON com: vendor, cat_id, total, date, invoice, currency, text
#### Moedas e Valores
> **Despesas em USD:** Manter valor original em USD com `currency = 2`. **Nao converter** manualmente.
> **Despesas em EUR:** Usar `currency = 3`.
| Moeda | currency ID | Exemplo |
|-------|------------|---------|
| EUR | **3** | Anthropic 180.00 EUR |
| USD | **2** | Cursor 20.00 USD |
> **CRITICO:** `currency = 1` nao existe e causa despesas invisiveis nos relatorios. SEMPRE usar 2 (USD) ou 3 (EUR).
#### Tickets a Saltar
| Tipo | Descrição | Acção |
|------|-----------|-------|
| Payment Receipt | Recibo de pagamento (não é fatura) | SALTAR - não criar despesa |
| Duplicado | Mesmo nº fatura já processado | SALTAR - informar utilizador |
| Sem anexo PDF | Apenas notificação por email | SALTAR - dados insuficientes |
Exemplos de tickets a saltar:
- "Invoice Payment Confirmation" (é recibo, não fatura)
- Ticket com mesmo invoice_number de outro já processado
#### Credenciais Base de Dados
Localização: `/home/ealmeida/desk.descomplicar.pt/application/config/app-config.php`
```bash
grep -E "APP_DB" /home/ealmeida/desk.descomplicar.pt/application/config/app-config.php
```
#### Processamento em Lote
Se utilizador pedir "criar todas" ou "processar em lote":
1. Obter todos os tickets pendentes em paralelo
2. Identificar duplicados e tickets a saltar
3. Criar despesas em paralelo via `create_expense`
4. Actualizar `expense_name` e `reference_no` em batch via SQL
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
| 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` NAO incluido - e plataforma de facturacao, emails podem ser de qualquer fornecedor.
#### Mapeamento Padrao PDF → Categoria
Para documentos financeiros, identificar fornecedor pelo conteudo do PDF:
| Padrao no PDF | Fornecedor | Categoria ID | Nome |
|---------------|-----------|--------------|------|
| `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
**Método 1: Script Python (recomendado)**
```bash
python3 /home/ealmeida/scripts/extract_invoice_data.py /path/to/invoice.pdf
```
**Método 2: pdfplumber directo**
```bash
python3 -c "
import pdfplumber
with pdfplumber.open('/path/to/file.pdf') as pdf:
for p in pdf.pages:
t = p.extract_text()
if t: print(t)
" | grep -iE "total|iva|€"
```
**Método 3: pdftotext (fallback)**
```bash
pdftotext /path/to/file.pdf - | head -80
```
> **NOTA:** Se PDF não extrair texto (imagem), usar dados do HTML do ticket email.
#### Comandos SQL
```sql
-- 1. VERIFICAR DUPLICADOS (EXECUTAR PRIMEIRO!)
SELECT id, amount, date, note, reference_no FROM tblexpenses
WHERE reference_no LIKE '%{receipt_number}%'
OR note LIKE '%ticket #{ticket_id}%'
-- 2. Verificar anexos do ticket
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 (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
| Campo | Conteúdo | Exemplo |
|-------|----------|---------|
| reference | Número do recibo | `2810-3712-9577` |
| note | Incluir ticket ID | `Anthropic Max (ticket #9648)` |
#### Paths de Ficheiros
- Anexos ticket: `/uploads/ticket_attachments/{ticketid}/`
- Anexos despesa: `/uploads/expenses/{expenseid}/`
**Resumo:** Obter ticket -> verificar anexos -> verificar duplicados -> extrair dados -> confirmar -> criar despesa -> upload PDF -> arquivo mensal.
---
## Comandos
| Comando | Descrição |
| Comando | Descricao |
|---------|-----------|
| `/expense create` | Registar nova despesa |
| `/expense list` | Listar despesas recentes |
| `/expense categories` | Listar categorias disponíveis |
| `/expense report [período]` | Relatório de despesas |
| `/expense categories` | Listar categorias disponiveis |
| `/expense report [periodo]` | Relatorio de despesas |
| `/expense search [termo]` | Pesquisar despesas |
---
## MCP Tools
### Despesas
- `get_expenses` - Listar despesas com filtros
- `create_expense` - Criar nova despesa
- `update_expense` - Actualizar despesa
- `delete_expense` - Eliminar despesa
- `bill_expense_to_customer` - Facturar ao cliente
### Categorias
- `get_expense_categories` - Listar categorias (usar with_stats=true)
### Análise
- `expense_analytics` - Métricas e análise
---
## Campos create_expense
| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| category_id | number | ✓ | ID da categoria |
| amount | number | ✓ | Valor da despesa |
| date | string | ✓ | Data (YYYY-MM-DD) |
| note | string | ✓ | Descrição (incluir ticket ID) |
| reference | string | ✓ | Número fatura/recibo (para duplicados) |
| tax | number | ✓ | **ID da taxa** (1 = IVA 23%) |
| client_id | number | - | Cliente associado |
| project_id | number | - | Projecto associado |
| billable | boolean | - | Facturável (default: false) |
| tax2 | number | - | Segunda taxa imposto |
| 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)
> **IMPORTANTE:** Após criar despesa, actualizar `expense_name` com nome do fornecedor.
```sql
UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {expense_id};
```
### Taxas de Imposto (tbltaxes)
| ID | Nome | Taxa |
|----|------|------|
| 1 | IVA Tx Normal | 23% |
### Moedas (tblcurrencies)
| ID | Nome | Símbolo | Default |
|----|------|---------|---------|
| 2 | USD | $ | Nao |
| 3 | EUR | € | Sim |
> **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).
**Despesas:** `get_expenses`, `create_expense`, `update_expense`, `delete_expense`, `bill_expense_to_customer`
**Categorias:** `get_expense_categories` (usar with_stats=true)
**Analise:** `expense_analytics`
---
## Anti-Patterns (NUNCA fazer)
### Categorias
1. **NUNCA** criar categoria sem listar existentes primeiro
2. **NUNCA** assumir que categoria não existe
3. **NUNCA** criar categoria com nome similar a existente
**Categorias:**
1. Criar categoria sem listar existentes primeiro
2. Assumir que categoria nao existe
3. Criar categoria com nome similar a existente
### Despesas
**Despesas:**
4. Criar despesa sem category_id
5. Usar nome da categoria em vez do ID
6. Não validar data (formato YYYY-MM-DD)
7. Criar despesa sem note/descrição
8. **NUNCA** criar despesa sem verificar duplicados primeiro
9. **NUNCA** processar ticket sem verificar se já foi lançado
5. Nao validar data (formato YYYY-MM-DD)
6. Criar despesa sem verificar duplicados primeiro
### Valores de PDFs
10. **NUNCA** assumir que ficheiros com nomes semelhantes têm o mesmo valor
11. **SEMPRE** ler CADA PDF individualmente para extrair o valor real
12. Exemplo real: `emiteDoc.pdf` a `emiteDoc (12).pdf` tinham valores de 25,80€ a 100,53€ - todos diferentes
**Valores de PDFs:**
7. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
8. SEMPRE ler CADA PDF individualmente para extrair o valor real
### Tickets
13. Processar ticket sem verificar anexos PDF
14. Assumir que ticket com recibo = despesa não lançada
**Tickets:**
9. Processar ticket sem verificar anexos PDF
10. Assumir que ticket com recibo = despesa nao lancada
---
## Exemplos
### Exemplo 1: Registar despesa com categoria existente
```
User: Registar despesa de 50€ de telecomunicações
→ get_expense_categories()
→ Encontra ID 1 = Telecomunicações
→ create_expense(category_id=1, amount=50, date="2026-02-05", note="Telecomunicações")
→ "Despesa #X criada: 50€ em Telecomunicações"
```
### Exemplo 2: Despesa com categoria a verificar
```
User: Registar despesa de formação 200€
→ get_expense_categories()
→ NÃO encontra "Formação"
→ "Não encontrei categoria 'Formação'. Usar 'Outras' (ID 17) ou criar nova categoria?"
→ User: Usar Outras
→ create_expense(category_id=17, amount=200, date="2026-02-05", note="Formação profissional")
```
### Exemplo 3: Despesa facturável a cliente
```
User: Registar 150€ de domínio para cliente TechStart
→ get_expense_categories() → ID 13 = Registo de Domínios
→ search_customers("TechStart") → client_id=42
→ create_expense(category_id=13, amount=150, date="2026-02-05",
note="Domínio techstart.pt", client_id=42, billable=true)
→ "Despesa facturável criada para TechStart"
```
---
## Checklist Pré-Operação
## Checklist Pre-Operacao
- [ ] Listar categorias existentes
- [ ] Validar categoria correcta
@@ -532,80 +158,12 @@ User: Registar 150€ de domínio para cliente TechStart
---
## Base de Dados
## Referencias
- **Tabela categorias:** `tblexpenses_categories`
- **Tabela despesas:** `tblexpenses`
- **Campo categoria:** `category` (ID da categoria)
- `references/category-mapping.md` - Mapeamento fornecedores, emails, padroes PDF, campos, moedas, SQL
- `references/ticket-processing.md` - Protocolo completo de processamento de tickets
- `references/changelog.md` - Historico de alteracoes
---
## 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`
- PDF patterns: `Cursor`, `Anysphere`, `cursor.com`
### v1.4.0 (2026-02-05)
- **CORRECÇÃO CRÍTICA:** ID moeda EUR = **2** (não 1)
- Despesas com currency=1 não aparecem em relatórios
- Corrigidas 22 despesas existentes via `UPDATE tblexpenses SET currency = 2 WHERE currency = 1`
- Documentada tabela tblcurrencies com IDs correctos
### v1.3.0 (2026-02-05)
- **Conversão USD → EUR obrigatória** (taxa ~0.92, $19.99 → €18.39)
- **Processamento em lote** quando utilizador pede "criar todas"
- Tickets a saltar documentados (payment receipts, duplicados, sem PDF)
- Localização credenciais BD: `app-config.php`
- Regras 4 e 5 adicionadas ao protocolo de tickets
- 9 despesas processadas em sessão de teste: €857.73 total
### v1.2.0 (2026-02-05)
- Campo `expense_name` obrigatório com nome do fornecedor (via SQL UPDATE)
- Campo `tax` é ID da taxa de imposto (1 = IVA 23%), não percentagem
- Coluna BD é `reference_no`, não `reference`
- Script Python para extracção de PDFs: `/home/ealmeida/scripts/extract_invoice_data.py`
- 3 métodos de extracção PDF documentados (script, pdfplumber, pdftotext)
- Workflow actualizado: processar UM A UM com confirmação
- Removido: adicionar respostas aos tickets (apenas criar despesa + anexos)
- SQL commands actualizados com expense_name
### v1.1.0 (2026-02-05)
- Processamento de despesas a partir de tickets de contabilidade
- Mapeamento automático email domain → categoria
- Workflow completo com verificação de anexos PDF
- Cópia automática de anexos ticket → despesa
- Registo de ficheiros em tblfiles
### v1.0.0 (2026-02-05)
- Versão inicial
- Regra crítica de verificação de categorias
- Lista de categorias de referência
- Fluxos para criar/consultar despesas
- Integração com MCP desk-crm-v3
- Anti-patterns documentados
- Criada após limpeza de 9 categorias duplicadas
---
**Criado:** 2026-02-05
**Actualizado:** 2026-02-12
**Motivo:** Sistema robusto 2026 - PDF obrigatorio, SFTP, arquivo mensal, correccoes consolidacao
**Criado:** 2026-02-05 | **Actualizado:** 2026-02-12

View File

@@ -0,0 +1,187 @@
# /expense - Mapeamento de Categorias e Dados Técnicos
## Categorias Activas (consolidacao 12-02-2026)
| ID | Nome | Fornecedores típicos |
|----|------|---------------------|
| 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 |
Existem ~30 categorias na BD mas apenas 8 são usadas regularmente. SEMPRE usar `get_expense_categories()` para lista completa.
---
## Mapeamento Fornecedor → Categoria
| 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
| 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 |
> `moloni.com` NAO incluido - é plataforma de facturação.
---
## Mapeamento Padrão PDF → Categoria
| Padrão no PDF | Fornecedor | Categoria ID |
|---------------|-----------|--------------|
| `Gondooffice`, `Cubic Choices` | Gondooffice | 21 Contabilidade |
| `Autoridade Tributaria`, `emiteDoc`, `AT -` | AT | 15 Planos Prestacionais |
| `Staples`, `STP_ECOFACTURA` | Staples | 3 Material Escritorio |
| `MEO`, `meoempresas` | MEO | 1 Telecomunicacoes |
| `TOConline`, `Recibo de Vencimento` | Salario | 22 Salarios |
| `Seguranca Social` | SS | 25 Contribuicoes SS |
| `Cursor`, `Anysphere` | Cursor | 28 Licencas Software |
| `Anthropic` | Anthropic | 38 Servicos IA e APIs |
| `Hetzner` | Hetzner | 4 Alojamento web |
| `ElasticEmail` | ElasticEmail | 30 Servicos Cloud |
---
## Campos create_expense
| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| category_id | number | Sim | ID da categoria |
| amount | number | Sim | Valor da despesa |
| date | string | Sim | Data (YYYY-MM-DD) |
| note | string | Sim | Descrição (incluir ticket ID) |
| reference | string | Sim | Número fatura/recibo |
| tax | number | Sim | ID da taxa (1 = IVA 23%) |
| currency | number | Sim | EUR = **3**, USD = 2 |
| send_invoice_to_customer | number | Sim | Sempre **0** |
| client_id | number | Não | Cliente associado |
| project_id | number | Não | Projecto associado |
| billable | boolean | Não | Facturável (default: false) |
---
## Moedas
| ID | Nome | Símbolo | Default |
|----|------|---------|---------|
| 2 | USD | $ | Não |
| 3 | EUR | € | Sim |
> **CRITICO:** EUR = **3**, USD = **2**. `currency = 1` não existe e causa despesas invisíveis nos relatórios.
---
## Taxas de Imposto
| ID | Nome | Taxa |
|----|------|------|
| 1 | IVA Tx Normal | 23% |
---
## Comandos SQL
```sql
-- 1. VERIFICAR DUPLICADOS (EXECUTAR PRIMEIRO)
SELECT id, amount, date, note, reference_no FROM tblexpenses
WHERE reference_no LIKE '%{receipt_number}%'
OR note LIKE '%ticket #{ticket_id}%'
-- 2. Verificar anexos do ticket
SELECT id, file_name, filetype FROM tblticket_attachments WHERE ticketid = {ID}
-- 3. Actualizar nome fornecedor (obrigatorio apos criar)
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, contact_id, dateadded)
VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', 0, 1, 0, NOW())
```
---
## Extracção de Dados de PDFs
**Método 1: Script Python (recomendado)**
```bash
python3 /home/ealmeida/scripts/extract_invoice_data.py /path/to/invoice.pdf
```
Retorna JSON com: vendor, cat_id, total, date, invoice, currency, text
**Método 2: pdfplumber directo**
```bash
python3 -c "
import pdfplumber
with pdfplumber.open('/path/to/file.pdf') as pdf:
for p in pdf.pages:
t = p.extract_text()
if t: print(t)
" | grep -iE "total|iva|€"
```
**Método 3: pdftotext (fallback)**
```bash
pdftotext /path/to/file.pdf - | head -80
```
---
## Paths de Ficheiros
- Anexos ticket: `/uploads/ticket_attachments/{ticketid}/`
- Anexos despesa: `/uploads/expenses/{expenseid}/`
- Arquivo mensal: `/media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/NN-NomeMes/`
- Credenciais BD: `/home/ealmeida/desk.descomplicar.pt/application/config/app-config.php`
---
## Tickets a Saltar
| Tipo | Descrição | Acção |
|------|-----------|-------|
| Payment Receipt | Recibo de pagamento (não é fatura) | SALTAR |
| Duplicado | Mesmo nº fatura já processado | SALTAR |
| Sem anexo PDF | Apenas notificação por email | SALTAR |
---
## Campos para Rastreio de Duplicados
| Campo | Conteúdo | Exemplo |
|-------|----------|---------|
| reference | Número do recibo | `2810-3712-9577` |
| note | Incluir ticket ID | `Anthropic Max (ticket #9648)` |

View File

@@ -0,0 +1,56 @@
# /expense - 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 reforcada:** 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 (Servicos IA e APIs)
## v1.4.0 (2026-02-05)
- **CORRECCAO CRITICA:** ID moeda EUR = **2** (nao 1)
- Despesas com currency=1 nao aparecem em relatorios
- Corrigidas 22 despesas existentes via `UPDATE tblexpenses SET currency = 2 WHERE currency = 1`
## v1.3.0 (2026-02-05)
- **Conversao USD -> EUR obrigatoria** (taxa ~0.92, $19.99 -> 18.39 EUR)
- **Processamento em lote** quando utilizador pede "criar todas"
- Tickets a saltar documentados (payment receipts, duplicados, sem PDF)
- 9 despesas processadas em sessao de teste: 857.73 EUR total
## v1.2.0 (2026-02-05)
- Campo `expense_name` obrigatorio com nome do fornecedor (via SQL UPDATE)
- Campo `tax` e ID da taxa de imposto (1 = IVA 23%), nao percentagem
- Coluna BD e `reference_no`, nao `reference`
- Script Python para extraccao de PDFs
- 3 metodos de extraccao PDF documentados
## v1.1.0 (2026-02-05)
- Processamento de despesas a partir de tickets de contabilidade
- Mapeamento automatico email domain -> categoria
- Workflow completo com verificacao de anexos PDF
## v1.0.0 (2026-02-05)
- Versao inicial
- Regra critica de verificacao de categorias
- Criada apos limpeza de 9 categorias duplicadas

View File

@@ -0,0 +1,75 @@
# /expense - Processamento de Despesas de Tickets
## Regras
1. Processar tickets UM A UM com confirmacao do utilizador (ou em lote se solicitado)
2. Verificar SEMPRE se despesa ja foi lancada (prevenir duplicados)
3. NAO adicionar respostas aos tickets - apenas criar despesa e anexos
4. Manter valor original na moeda do documento (EUR=3, USD=2)
5. Saltar tickets que sao apenas recibos de pagamento (nao sao facturas)
---
## Protocolo Ticket a Ticket
```
1. Obter ticket: get_ticket(ticket_id)
2. Verificar anexos: SELECT * FROM tblticket_attachments WHERE ticketid = X
3. SE nao tem PDFs: SALTAR ticket (apenas notificacao)
4. VERIFICAR DUPLICADOS (OBRIGATORIO):
SELECT id, amount, date, note FROM tblexpenses
WHERE reference_no LIKE '%{receipt_number}%' OR note LIKE '%ticket #{ticket_id}%'
SE encontrar: PARAR e informar "Despesa ja existe: #ID"
5. Extrair dados:
- Do HTML do ticket (valor, data, referencia)
- OU usar script Python: python3 /home/ealmeida/scripts/extract_invoice_data.py {pdf_path}
6. APRESENTAR resumo ao utilizador e AGUARDAR confirmacao
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. 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
```
---
## Processamento em Lote
Se utilizador pedir "criar todas" ou "processar em lote":
1. Obter todos os tickets pendentes em paralelo
2. Identificar duplicados e tickets a saltar
3. Criar despesas em paralelo via `create_expense`
4. Actualizar `expense_name` e `reference_no` em batch via SQL
5. Copiar PDFs em batch
6. Registar ficheiros em batch via SQL INSERT multiplo
---
## Tickets a Saltar
| Tipo | Descricao | Accao |
|------|-----------|-------|
| Payment Receipt | Recibo de pagamento (nao e fatura) | SALTAR |
| Duplicado | Mesmo numero fatura ja processado | SALTAR |
| Sem anexo PDF | Apenas notificacao por email | SALTAR |
Exemplos:
- "Invoice Payment Confirmation" (e recibo, nao fatura)
- Ticket com mesmo invoice_number de outro ja processado
---
## Credenciais Base de Dados
Localizacao: `/home/ealmeida/desk.descomplicar.pt/application/config/app-config.php`
```bash
grep -E "APP_DB" /home/ealmeida/desk.descomplicar.pt/application/config/app-config.php
```

View File

@@ -1,17 +1,7 @@
---
name: invoice
description: >
Gestão de facturação Desk CRM v1.0. Criar, enviar, pagamentos, vencidas, timesheets.
Use when "invoice", "factura", "fatura", "pagamento", "vencida", "facturar", "billing".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 75
user_invocable: true
category: business
tags: [invoice, factura, billing, payments, desk, crm]
desk_project: 65
allowed-tools: Read, mcp__desk-crm-v3, mcp__mcp-time
mcps: desk-crm-v3, mcp-time
description: Gestão de facturação Desk CRM. Criar facturas, converter estimates, facturar timesheets, registar pagamentos e listar facturas vencidas.
disable-model-invocation: true
---
# /invoice v1.0 - Gestão de Facturação

View File

@@ -1,183 +1,172 @@
---
name: orcamento
description: >
Criação sistemática de orçamentos Descomplicar® baseados em tabela oficial de preços (tabela-geral.csv). Integração directa CRM para proposals/estimates. Suporta StarterWP, CorporateWP, CareWP, eCommerceWP, Marketing 360, Manutenção. Consulta obrigatória datasets Dify (Serviços, Vendas). Use when user asks to create, generate or elaborate budget/proposal, or mentions "orçamento", "proposta", "estimate", "pricing", "website budget".
author: Descomplicar® Crescimento Digital
version: 3.1.0
quality_score: 100
user_invocable: true
category: business
tags: [orcamento, proposta, pricing, crm, proposals, estimates, vendas, packages]
desk_task: 1415
desk_project: 65
allowed-tools: Read, Bash, mcp__desk-crm-v3, mcp__dify-kb
mcps: desk-crm-v3, dify-kb
data_sources:
- path: /media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/tabela-geral.csv
priority: 1
usage: All products/services with pricing
- path: /media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/items-subscricao.csv
priority: 2
usage: Subscription services
- path: /media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/chatbots-precos.csv
priority: 2
usage: Chatbot pricing
- path: /media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/items-faturacao-deskcrm.csv
priority: 2
usage: Billing items
datasets:
- id: bd65f36e-6004-4584-b478-129b2c21b4d2
name: Serviços Descomplicar
priority: 1
usage: Packages, pricing justification
- id: a7ba6005-517c-41ab-ac5e-da1c1a1c62ef
name: Vendas
priority: 1
usage: Proposal techniques, negotiation
- id: c1ec779f-4cb1-4ecf-ba11-6b39b93d4e24
name: Marketing Digital
priority: 2
usage: Value proposition, ROI
- id: c8489151-de94-42b2-8cee-c0b961cfac6d
name: Websites
priority: 2
usage: Website features comparison
dependencies:
skills: [crm-ops, lead-approach]
mcps: [desk-crm-v3, dify-kb]
triggers:
- "User asks to create/generate/elaborate budget"
- "User mentions 'orçamento', 'proposta', 'pricing'"
- "User asks for 'estimate', 'quote', 'proposal'"
- "Creating pricing for leads or customers"
packages:
- code: starter
name: StarterWP
base_price: 700
annual_fee: 250
timeline: 3-5 weeks
- code: corporate
name: CorporateWP
base_price: 900
annual_fee: 299
timeline: 4-6 weeks
- code: care
name: CareWP
base_price: 1300
annual_fee: 350
timeline: 4-6 weeks
- code: ecom
name: eCommerceWP
base_price: 1100
annual_fee: 349
timeline: 7-9 weeks
- code: mkt
name: Marketing 360
base_price: 459
billing: monthly
commitment: 12 months
- code: man
name: Manutenção
base_price: 150
billing: monthly
commitment: 12 months
performance:
baseline_duration_ms: 1800000
target_duration_ms: 900000
last_run_duration_ms: null
success_rate: 0.92
description: Criação sistemática de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Suporta StarterWP, CorporateWP, CareWP, eCommerceWP, Marketing 360, Manutenção, AcceleratorX, DeskCRM e Chatbots. Variantes -MEN (mensal) e -TRI (trimestral).
disable-model-invocation: true
---
# Skill /orcamento - Criação Sistemática de Orçamentos
# Skill /orcamento - Criacao Sistematica de Orcamentos
Skill para criar orçamentos profissionais baseados na tabela oficial de preços Descomplicar®, com integração directa ao CRM.
Skill para criar orcamentos profissionais baseados nos itens oficiais do Desk CRM, com integracao directa ao CRM.
## Fonte de Verdade
**IMPORTANTE**: A fonte de verdade para precos e servicos e o Desk CRM (`tblitems` + `tblitems_groups`).
- **651 itens** em **14 grupos**: Websites, DeskCRM, Licencas, Tecnologia, Servicos, Chatbots, Marketing, Suporte, Comunicacao, Design, Estrategia, Mobile, IA, Alojamento
- Cada servico pode ter variantes de facturacao: Investimento, Anuidade, Trimestral, Mensalidade
- Os precos no CRM sao actualizados pela equipa e reflectem-se automaticamente nos orcamentos
### Grupos de Itens (tblitems_groups)
| ID | Grupo | Total Itens | Tipo Principal |
|----|-------|-------------|----------------|
| 1 | Websites | 183 | Pacotes WP + funcionalidades + anuidades |
| 14 | DeskCRM | 127 | Pacotes CRM + modulos |
| 8 | Licencas | 108 | Plugins WP + renovacoes |
| 3 | Tecnologia | 63 | AcceleratorX + WhatSMS |
| 2 | Servicos | 62 | Packs de horas |
| 13 | Chatbots | 46 | Chatbots + integracoes |
| 4 | Marketing | 34 | Packs SEO, Email, Ads |
| 9 | Suporte | 8 | Bancos de horas |
| 5 | Comunicacao | 5 | Packs copywriting |
| 6 | Design | 5 | Branding |
| 7 | Estrategia | 5 | Consultoria, coaching |
| 10 | Mobile | 3 | App React Native |
| 12 | IA | 2 | Agentes virtuais |
| 11 | Alojamento Web | — | Incluido nos websites |
### Como Consultar Itens
```
# Listar itens por grupo
mcp__desk-crm-v3__price_management action="get_pricing_insights" params={"group": "Websites"}
# Pesquisar item especifico via SQL (ssh server)
mysql -u root ealmeida_desk24 -e "
SELECT i.description, i.rate, i.unit, g.name as grupo
FROM tblitems i
JOIN tblitems_groups g ON i.group_id = g.id
WHERE i.description LIKE '%StarterWP%'
ORDER BY i.description;"
# Listar todos os itens de um grupo (ex: grupo 1 = Websites)
mysql -u root ealmeida_desk24 -e "
SELECT i.description, i.rate, i.unit
FROM tblitems i
WHERE i.group_id = 1
AND i.unit NOT IN ('mensalidade','trimestral','anuidade')
ORDER BY i.description;"
```
### Variantes de Facturacao
Cada servico recorrente tem 4 variantes no CRM. Por defeito, o estimate usa o **item base**. Com os flags `-MEN` ou `-TRI`, os itens recorrentes sao incluidos directamente na variante pretendida.
| Tipo | Sufixo no CRM | Flag | Quando usar |
|------|---------------|------|-------------|
| Investimento/Projeto | (sem sufixo) | (nenhum) | Projectos unicos |
| Anuidade | "Anuidade ..." | (nenhum) | Servicos com renovacao anual |
| Trimestral | "Trimestral ..." | `-TRI` | Cliente quer facturacao trimestral |
| Mensalidade | "Mensalidade ..." | `-MEN` | Cliente quer facturacao mensal |
**Regra por defeito** (sem flag): No estimate, incluir o item base. Ao converter para invoice, seleccionar a variante de facturacao acordada.
**Regra com flag `-MEN` ou `-TRI`**: Pesquisar itens recorrentes pela variante correspondente (prefixo "Mensalidade ..." ou "Trimestral ..."). Itens pontuais (setup, configuracao) mantêm-se inalterados. Apenas itens com unit "anuidade" sao substituidos pela variante equivalente.
### Mapeamento de Variantes
Ao usar `-MEN` ou `-TRI`, para cada item recorrente (unit = "anuidade"):
1. Pesquisar no CRM o item equivalente com o prefixo da variante:
- `-MEN`: `WHERE description LIKE 'Mensalidade %' AND description LIKE '%[NOME_ITEM]%'`
- `-TRI`: `WHERE description LIKE 'Trimestral %' AND description LIKE '%[NOME_ITEM]%'`
2. Se encontrado, usar o preco e unit da variante
3. Se nao encontrado, manter item base e avisar o utilizador
**Calculo de valores com variantes:**
| Flag | Unit no estimate | Qty | Calculo |
|------|-----------------|-----|---------|
| (nenhum) | `ano` | 1 | Valor anual |
| `-TRI` | `trimestral` | 1 | Valor trimestral (tipicamente anuidade / 4 * 1.05-1.10) |
| `-MEN` | `mensalidade` | 1 | Valor mensal (tipicamente anuidade / 12 * 1.10-1.15) |
**Nota**: Os precos das variantes sao definidos no CRM e podem incluir markup sobre o valor anual. Consultar SEMPRE o CRM, nunca calcular por divisao simples.
## Quando Usar
- Criar orçamento para cliente novo ou existente
- Gerar proposta comercial (proposal ou estimate)
- Consultar preços oficiais de produtos/serviços
- Criar orcamento para cliente novo ou existente
- Gerar proposta comercial (estimate)
- Consultar precos oficiais de produtos/servicos
- Calcular valores com IVA e anuidades
- Integrar orçamento directamente no CRM
- Integrar orcamento directamente no CRM
## Quando NÃO Usar
## Quando NAO Usar
- Para análise estratégica de lead (usar /lead-approach)
- Para operações CRM genéricas (usar /crm-ops)
- Para simples consulta de preços (ler CSV directamente)
- Para analise estrategica de lead (usar /lead-approach)
- Para operacoes CRM genericas (usar /crm-ops)
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| Estratégia e Empreendedorismo | 79d43410 | Para enquadramento estratégico de preços |
```
mcp__notebooklm__notebook_query({
notebook_id: "79d43410-0e29-4be1-881d-84db6bdc239a",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
### Procedimentos Relacionados
- `PROC-Catalogo-Codificacao-Produtos.md` — Codificação e catálogo de produtos
- `PROC-CRM-Operacoes.md` — Operações CRM padrão
---
## Protocolo
### Fontes de Dados (OBRIGATÓRIO)
**IMPORTANTE**: Antes de criar qualquer orçamento, ler SEMPRE os dados actualizados de:
### Sintaxe
```
/media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/
├── tabela-geral.csv ← Todos os produtos/serviços com preços
├── items-subscricao.csv ← Serviços de subscrição
├── chatbots-precos.csv ← Preços de chatbots
└── items-faturacao-deskcrm.csv ← Items para facturação
/orcamento [cliente] [tipo] [-MEN|-TRI]
```
### Estrutura do CSV Principal (tabela-geral.csv)
**Parametros:**
- `cliente` - Nome ou ID do cliente (opcional, sera solicitado se omitido)
- `tipo` - Tipo de orcamento (opcional, sera apresentado menu se omitido)
- `-MEN` - Variante mensal: usa itens com unit "mensalidade" e calcula valor/mes
- `-TRI` - Variante trimestral: usa itens com unit "trimestral" e calcula valor/trimestre
- (sem flag) - Comportamento actual: item base (Investimento/Projeto/Anual)
| Campo | Descrição |
|-------|-----------|
| Codigo | Código único (ex: WEB-WP-001) |
| Nome | Nome do produto/serviço |
| Familia | Categoria principal (Websites, Design, Tecnologia, etc.) |
| PrecoBase | Valor em euros |
| Unidade | Tipo (Projeto, Hora, Investimento, Mês) |
| DescricaoCurta | Para orçamento |
| TempoEstimado | Em dias/semanas |
**Tipos disponiveis:**
| Codigo | Tipo | Grupo CRM |
|--------|------|-----------|
| `starter` | StarterWP | Websites |
| `corporate` | CorporateWP | Websites |
| `care` | CareWP (Clinicas) | Websites |
| `ecom` | eCommerceWP | Websites |
| `mkt` | Marketing Digital 360 | Marketing |
| `man` | Manutencao | Suporte |
| `deskcrm` | DeskCRM | DeskCRM |
| `chatbot` | Chatbot | Chatbots |
| `acceleratorx` | AcceleratorX | Tecnologia |
### Como Usar os CSVs
```python
# Exemplo de leitura
import csv
with open('/media/.../Produtos_Servicos/tabela-geral.csv') as f:
reader = csv.DictReader(f)
for row in reader:
if row['Codigo'] == 'WEB-WP-001': # StarterWP
preco = float(row['PrecoBase']) # 700
```
**Regra**: Os CSVs são a fonte de verdade. O pricing-guide.md é referência rápida.
## Sintaxe
```
/orcamento [cliente] [tipo]
```
**Parâmetros:**
- `cliente` - Nome ou ID do cliente (opcional, será solicitado se omitido)
- `tipo` - Tipo de orçamento (opcional, será apresentado menu se omitido)
**Tipos disponíveis:**
| Código | Tipo | Template | Valor Base |
|--------|------|----------|------------|
| `starter` | StarterWP | `templates/website-corporativo.md` | 700€ |
| `corporate` | CorporateWP | `templates/website-corporativo.md` | 900€ |
| `care` | CareWP (Clínicas) | `templates/website-corporativo.md` | 1.300€ |
| `ecom` | eCommerceWP | `templates/e-commerce.md` | 1.100€ |
| `mkt` | Marketing Digital 360 | `templates/marketing-digital.md` | 459€/mês |
| `man` | Manutenção | `templates/manutencao.md` | 150€/mês |
## Fluxo de Execução
### Fase 1: Identificação do Cliente
### Fase 1: Identificacao do Cliente
1. Se cliente fornecido, pesquisar no CRM:
```
mcp__desk-crm-v3__search_customers query="[nome]" fields="company,vat"
```
2. Se não encontrado ou não fornecido, solicitar dados:
2. Se nao encontrado ou nao fornecido, solicitar dados:
- Nome da empresa
- NIF (opcional)
- Email contacto
@@ -187,107 +176,161 @@ with open('/media/.../Produtos_Servicos/tabela-geral.csv') as f:
mcp__desk-crm-v3__create_customer company="..." vat="..." ...
```
### Fase 2: Selecção de Template
### Fase 2: Seleccao de Template
1. Se tipo fornecido, carregar template correspondente
2. Se não fornecido, apresentar menu interactivo via AskUserQuestion:
- StarterWP (700€ + 250€/ano)
- CorporateWP (900€ + 299€/ano)
- CareWP (1.300€ + 350€/ano)
- eCommerceWP (1.100€ + 349€/ano)
- Marketing 360 (459€/mês)
- Manutenção (150€/mês)
2. Se nao fornecido, apresentar menu interactivo:
- StarterWP | CorporateWP | CareWP | eCommerceWP
- Marketing 360 | Manutencao
- DeskCRM | Chatbot | AcceleratorX
### Fase 3: Personalização
### Fase 3: Consultar Precos no CRM
1. Ler template seleccionado de `templates/`
2. Apresentar questões de personalização específicas do tipo
3. Adicionar funcionalidades conforme requisitos
4. Calcular valores usando tabela de `references/pricing-guide.md`
**OBRIGATORIO**: Consultar precos actualizados no Desk CRM antes de calcular.
### Fase 4: Geração do Orçamento
#### Sem variante (comportamento actual)
```bash
# Buscar preco do pacote base
mysql -u root ealmeida_desk24 -e "
SELECT description, rate, unit FROM tblitems
WHERE group_id = [GROUP_ID]
AND description LIKE '%[PACOTE]%'
AND unit NOT IN ('mensalidade','trimestral','anuidade')
ORDER BY description;"
```
#### Com `-MEN` (variante mensal)
```bash
# Buscar itens base (setup/pontuais - mantêm-se iguais)
mysql -u root ealmeida_desk24 -e "
SELECT description, rate, unit FROM tblitems
WHERE group_id = [GROUP_ID]
AND description LIKE '%[PACOTE]%'
AND unit NOT IN ('mensalidade','trimestral','anuidade')
ORDER BY description;"
# Buscar itens recorrentes na variante mensal
mysql -u root ealmeida_desk24 -e "
SELECT description, rate, unit FROM tblitems
WHERE group_id = [GROUP_ID]
AND description LIKE 'Mensalidade%[PACOTE]%'
ORDER BY description;"
```
#### Com `-TRI` (variante trimestral)
```bash
# Buscar itens base (setup/pontuais - mantêm-se iguais)
mysql -u root ealmeida_desk24 -e "
SELECT description, rate, unit FROM tblitems
WHERE group_id = [GROUP_ID]
AND description LIKE '%[PACOTE]%'
AND unit NOT IN ('mensalidade','trimestral','anuidade')
ORDER BY description;"
# Buscar itens recorrentes na variante trimestral
mysql -u root ealmeida_desk24 -e "
SELECT description, rate, unit FROM tblitems
WHERE group_id = [GROUP_ID]
AND description LIKE 'Trimestral%[PACOTE]%'
ORDER BY description;"
```
Ou via MCP:
```
mcp__desk-crm-v3__price_management action="get_pricing_insights" params={"group": "[GRUPO]", "search": "[PACOTE]"}
```
### Fase 4: Personalizacao
1. Apresentar questoes de personalizacao especificas do tipo
2. Adicionar funcionalidades conforme requisitos
3. Para cada funcionalidade, buscar item correspondente no CRM
### Fase 5: Geracao do Orcamento
1. Calcular valores finais:
- Subtotal por item
- Subtotal por item (precos do CRM)
- IVA 23%
- Total
- Anuidade (se aplicável)
- Recorrencia (anuidade, trimestral ou mensal conforme variante)
2. Criar estimate no CRM:
2. Ajustar items conforme variante:
- **Sem flag**: Itens base + anuidade separada
- **`-MEN`**: Itens setup + itens "Mensalidade ..." do CRM (unit: "mensalidade")
- **`-TRI`**: Itens setup + itens "Trimestral ..." do CRM (unit: "trimestral")
3. Criar estimate no CRM:
```
mcp__desk-crm-v3__create_estimate
client_id=[id]
date=[hoje]
expiry_date=[hoje + 30 dias]
items=[items calculados]
terms="Condições de Pagamento: 50% na adjudicação + 50% na entrega"
terms="[termos ajustados a variante]"
```
3. Apresentar resumo ao utilizador com link para CRM
4. Termos ajustados por variante:
- **Sem flag**: "Condicoes de Pagamento: 50% na adjudicacao + 50% na entrega"
- **`-MEN`**: "Condicoes de Pagamento: Setup - 50% na adjudicacao + 50% na entrega | Recorrencia - facturacao mensal antecipada"
- **`-TRI`**: "Condicoes de Pagamento: Setup - 50% na adjudicacao + 50% na entrega | Recorrencia - facturacao trimestral antecipada"
## Tabela de Preços Base
5. Apresentar resumo ao utilizador com link para CRM
Ver `references/pricing-guide.md` para tabela completa.
## Pacotes Principais (referencia rapida)
**Nota**: Estes valores sao referencia. Consultar SEMPRE o CRM para precos actualizados.
### Websites
| Produto | Setup | Anuidade | Prazo |
|---------|-------|----------|-------|
| StarterWP | 700 | 250 | 3-5 sem |
| CorporateWP | 900 | 299 | 4-6 sem |
| eCommerceWP | 1.100 | 349 | 7-9 sem |
| ChallengeWP | 700 | 250 | 8-10 sem |
| CareWP | 1.300 | 350 | 4-6 sem |
| StarterWP | 700 | 250 | 3-5 sem |
| CorporateWP | 900 | 299 | 4-6 sem |
| eCommerceWP | 1100 | 349 | 7-9 sem |
| ChallengeWP | 700 | 250 | 8-10 sem |
| CareWP | 1300 | 350 | 4-6 sem |
### Funcionalidades Frequentes
### DeskCRM
| Produto | Setup | Anuidade |
|---------|-------|----------|
| DeskCRM Starter | (ver CRM) | 400 |
| DeskCRM Profissional | (ver CRM) | 800 |
| DeskCRM Avancado | (ver CRM) | 1500 |
| DeskCRM Enterprise | (ver CRM) | 3000 |
| Funcionalidade | Valor |
|----------------|-------|
| EasyAppointment | 175€ (55+120) |
| Chat da Página | 50€ + 50€/ano |
| Forms Inteligentes | 150 |
| CartRecovery | 190€ (90+100) + 90€/ano |
| Pixel + GTM | 50 |
| ShopBuilder | 5€/produto |
### AcceleratorX
| Produto | Setup |
|---------|-------|
| WP ProCMS | 650 |
| e-Commerce | 750 |
| Membership | 450 |
| Booking | 450 |
| Care | 750 |
| Meet | 650 |
| School Manager | 850 |
### Serviços Recorrentes
### Chatbots
| Produto | Setup |
|---------|-------|
| Chatbot Basico | 350 |
| Chatbot Avancado | 850 |
| Chatbot Care | 850 |
| Serviço | Valor Mensal | Compromisso |
|---------|--------------|-------------|
| Marketing 360 | 459€ | 12 meses |
| Manutenção | 150€ | 12 meses |
## Termos e Condições Padrão
```
CONDIÇÕES DE PAGAMENTO
1. Projectos: 50% na adjudicação + 50% na entrega
2. Serviços recorrentes: facturação mensal antecipada
VALIDADE
Orçamento válido por 30 dias a partir da data de emissão.
ANUIDADE
A anuidade inclui:
- Alojamento Premium SSD NVMe
- Certificado SSL
- Actualizações de segurança
- Suporte técnico básico
Descomplicar® Crescimento Digital
NIF: 514 623 168 | descomplicar.pt
```
### Design/Branding
| Produto | Valor |
|---------|-------|
| Branding WOW Digital | 400 |
| Branding WOW Essencial | 850 |
| Branding Completo | 1100 |
| Pack Rebranding | 1500 |
| Pack Premium 360 | 5000 |
## Estrutura de Items para API
Cada item do orçamento segue o formato:
Cada item do orcamento segue o formato:
```json
{
"description": "Descrição do serviço",
"description": "Descricao do servico",
"qty": 1,
"rate": 700,
"unit": "un"
@@ -295,172 +338,144 @@ Cada item do orçamento segue o formato:
```
**Unidades:**
- `un` - Unidade (projecto/item único)
- `mes` - Mês (serviço recorrente)
- `ano` - Ano (anuidade)
- `un` - Unidade (projecto/item unico)
- `mes` ou `mensalidade` - Mes (servico recorrente mensal, usado com `-MEN`)
- `trimestral` - Trimestre (servico recorrente trimestral, usado com `-TRI`)
- `ano` ou `anuidade` - Ano (anuidade, comportamento por defeito)
## Checklist de Execução
## Termos e Condicoes Padrao
```
CONDICOES DE PAGAMENTO
1. Projectos: 50% na adjudicacao + 50% na entrega
2. Servicos recorrentes: facturacao mensal antecipada
VALIDADE
Orcamento valido por 30 dias a partir da data de emissao.
ANUIDADE
A anuidade inclui:
- Alojamento Premium SSD NVMe
- Certificado SSL
- Actualizacoes de seguranca
- Suporte tecnico basico
Descomplicar Crescimento Digital
NIF: 514 623 168 | descomplicar.pt
```
## Checklist de Execucao
- [ ] Cliente identificado/criado no CRM
- [ ] Tipo de orçamento seleccionado
- [ ] Template carregado
- [ ] Tipo de orcamento seleccionado
- [ ] Precos consultados no CRM (tblitems)
- [ ] Funcionalidades adicionais identificadas
- [ ] Valores calculados (subtotal + IVA)
- [ ] Anuidade calculada (se aplicável)
- [ ] Estimate criado no CRM
- [ ] Recorrencia calculada (anuidade/trimestral/mensal conforme variante)
- [ ] Estimate criado no CRM (status: Draft)
- [ ] Resumo apresentado ao utilizador
## Exemplos de Uso
### Exemplo 1: Website simples
```
/orcamento "TechStartup Lda" starter
→ StarterWP: 700€ + IVA
→ Anuidade: 250€/ano
```
### Exemplo 2: E-commerce com funcionalidades
```
/orcamento "Loja Online SA" ecom
→ Questiona: Nº produtos? Gateways? Transportadoras?
→ Calcula com funcionalidades
→ Gera orçamento detalhado
```
### Exemplo 3: Interactivo completo
```
/orcamento
→ Solicita cliente
→ Apresenta menu de tipos
→ Questões de personalização
→ Gera orçamento no CRM
```
## MCPs Utilizados
```
mcp__desk-crm-v3__search_customers - Pesquisar cliente
mcp__desk-crm-v3__get_customer - Obter detalhes cliente
mcp__desk-crm-v3__create_customer - Criar cliente novo
mcp__desk-crm-v3__create_estimate - Criar orçamento
mcp__desk-crm-v3__get_estimates - Listar orçamentos existentes
mcp__desk-crm-v3__create_estimate - Criar orcamento
mcp__desk-crm-v3__get_estimates - Listar orcamentos existentes
mcp__desk-crm-v3__price_management - Consultar precos e itens
```
## Códigos de Produtos (tabela-geral.csv)
## Formulas de Calculo
### Websites
| Código | Produto | Preço |
|--------|---------|-------|
| WEB-WP-001 | StarterWP | 700€ |
| WEB-WP-002 | CorporateWP | 900€ |
| WEB-WP-003 | eCommerceWP | 1.100€ |
| WEB-WP-004 | ChallengeWP | 700€ |
| WEB-WP-005 | CareWP | 1.300€ |
### Website Simples
```
Total = Base + Funcionalidades + Conteudos
Anuidade = Anuidade_Base + Anuidades_Funcionalidades
```
### Branding
| Código | Produto | Preço |
|--------|---------|-------|
| DES-BRA-001 | Branding WOW Essencial | 850€ |
| DES-BRA-002 | Branding Completo | 1.100€ |
| DES-BRA-003 | Branding WOW Digital | 400€ |
### Exemplo: Website Corporativo com Agendamento (sem variante)
```
CorporateWP: 900 (item CRM: "CorporateWP")
EasyAppointment: 175 (item CRM: "EasyAppointment")
Chat da Pagina: 50 (item CRM: "Chat da Pagina")
Pixel + GTM: 50 (items CRM: "Configuracao Pixel Facebook" + "Configuracao GTM")
---------------------------------
Subtotal: 1175
IVA 23%: 270.25
TOTAL: 1445.25
### AcceleratorX
| Código | Produto | Preço |
|--------|---------|-------|
| TEC-WPC-001 | AcceleratorX WP ProCMS | 650€ |
| TEC-ECO-001 | AcceleratorX e-Commerce | 750€ |
| TEC-MEM-001 | AcceleratorX Membership | 450€ |
| TEC-BOO-001 | AcceleratorX Booking | 450€ |
| TEC-CAR-001 | AcceleratorX Care | 750€ |
Anuidade: 299 + 50 + 50 = 399 (items CRM com unit "anuidade")
```
### Consultoria
| Código | Produto | Preço |
|--------|---------|-------|
| EST-CON-001 | Consultoria Estratégica | 90€/hora |
| EST-COA-001 | Coaching e Formação | 50€/hora |
| EST-BRA-001 | Estratégia de Marca | 900€ |
### Exemplo: Mesmo orcamento com `-MEN`
```
SETUP (pagamento unico):
CorporateWP: 900
EasyAppointment: 175
Chat da Pagina: 50
Pixel + GTM: 50
---------------------------------
Subtotal Setup: 1175
IVA 23%: 270.25
TOTAL Setup: 1445.25
## Referências
RECORRENCIA MENSAL (items CRM com prefixo "Mensalidade"):
Mensalidade CorporateWP: 29.90 (item CRM: "Mensalidade CorporateWP")
Mensalidade EasyAppointment: 5.90 (item CRM: "Mensalidade EasyAppointment")
Mensalidade Chat da Pagina: 4.90 (item CRM: "Mensalidade Chat da Pagina")
---------------------------------
Subtotal Mensal: 40.70
IVA 23%: 9.36
TOTAL Mensal: 50.06/mes
- `references/pricing-guide.md` - Tabela de preços rápida
Nota: precos mensais sao exemplificativos - consultar CRM para valores reais.
```
## Referencias
- `references/pricing-guide.md` - Tabela de precos rapida (referencia, nao fonte de verdade)
- `templates/website-corporativo.md` - Templates StarterWP, CorporateWP, CareWP
- `templates/e-commerce.md` - Template eCommerceWP
- `templates/marketing-digital.md` - Template Marketing 360
- `templates/manutencao.md` - Template Manutenção
## Fonte de Dados Principal
```
/media/ealmeida/Dados/GDrive/Cloud/Docs/Produtos_Servicos/tabela-geral.csv
```
- `templates/manutencao.md` - Template Manutencao
---
## Datasets Dify (Consulta Obrigatória)
Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP:
## Datasets Dify (Consulta Complementar)
| Dataset | ID | Prioridade |
|---------|----|-----------:|
| **Serviços Descomplicar** | `bd65f36e-6004-4584-b478-129b2c21b4d2` | 1 |
| **Servicos Descomplicar** | `bd65f36e-6004-4584-b478-129b2c21b4d2` | 1 |
| **Vendas** | `a7ba6005-517c-41ab-ac5e-da1c1a1c62ef` | 1 |
| **Marketing Digital** | `c1ec779f-4cb1-4ecf-ba11-6b39b93d4e24` | 2 |
| **Desenvolvimento de WebSites** | `c8489151-de94-42b2-8cee-c0b961cfac6d` | 2 |
### Como Consultar
```javascript
// Pesquisar serviços e preços
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "bd65f36e-6004-4584-b478-129b2c21b4d2",
query: "pacote website ecommerce"
})
// Técnicas de proposta e negociação
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "a7ba6005-517c-41ab-ac5e-da1c1a1c62ef",
query: "proposta comercial fechamento"
})
// Funcionalidades de websites
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "c8489151-de94-42b2-8cee-c0b961cfac6d",
query: "funcionalidades website corporativo"
})
```
### Quando Consultar
- Definir escopo de projecto
- Justificar preços ao cliente
- Justificar precos ao cliente
- Comparar funcionalidades entre pacotes
- Criar proposta de valor diferenciada
- Tecnicas de negociacao e fechamento
---
## Instrumentação Automática
Esta skill grava métricas automaticamente para análise PDCA.
## Instrumentacao Automatica
### Baseline
| Métrica | Valor |
| Metrica | Valor |
|---------|-------|
| Tempo baseline | 30 min |
| Tempo target | 15 min |
| Melhoria esperada | -50% |
### Ao Executar Esta Skill
1. **Início:** Registar `SKILL_START = Date.now()`
2. **Consultas KB:** Rastrear consultas Dify (KB_CONSULTED, KB_HITS)
3. **Tool calls:** Contar chamadas MCP
4. **Fim:** Gravar métrica
### Query para Gravar (executar no final da skill)
```sql
-- Executar via SSH ou MCP no final da skill
INSERT INTO tblskill_agent_metrics (
type, name, duration_ms, status, staff_id,
kb_consulted, kb_cache_hit, tool_calls, project_id
@@ -470,29 +485,30 @@ INSERT INTO tblskill_agent_metrics (
);
```
### Exemplo Completo
---
```sql
-- Orçamento criado com sucesso em 20 minutos, consultou Dify, sem cache
INSERT INTO tblskill_agent_metrics (
type, name, duration_ms, status, staff_id,
kb_consulted, kb_cache_hit, tool_calls, project_id
) VALUES (
'skill', '/orcamento', 1200000, 'success', 25,
1, 0, 8, 65
);
```
## Changelog
### Ver Métricas
### v4.1.0 (2026-03-12)
- Suporte para variantes `-MEN` (mensal) e `-TRI` (trimestral) na sintaxe
- Fase 3 actualizada com queries especificas por variante
- Fase 5 actualizada com termos de pagamento ajustados por variante
- Mapeamento de variantes documentado (pesquisa por prefixo no CRM)
- Exemplo adicional com `-MEN` para demonstrar separacao setup/recorrencia
- Retrocompativel: sem flag = comportamento anterior (item base)
```bash
/metrics /orcamento
```
### v4.0.0 (2026-03-05)
- **BREAKING**: Fonte de verdade migrada de CSVs para Desk CRM (tblitems + tblitems_groups)
- Removidas referencias a tabela-geral.csv, items-subscricao.csv, chatbots-precos.csv, items-faturacao-deskcrm.csv
- Adicionados grupos DeskCRM, Chatbots, AcceleratorX como tipos de orcamento
- Protocolo actualizado para consultar precos via MCP/SQL em vez de CSVs
- Tabela de referencia rapida mantida mas marcada como "nao fonte de verdade"
- Adicionada documentacao de variantes de facturacao (Investimento/Anuidade/Trimestral/Mensalidade)
### Protocolo
Ver `~/.claude/skills/_core/instrumentation-protocol.md`
### v3.1.0 (2026-02-03)
- Instrumentacao automatica adicionada
- Datasets Dify integrados
---
**Versão**: 3.1.0 | **Data**: 2026-02-03 | **Instrumentação**: Activa
**Versao**: 4.1.0 | **Data**: 2026-03-12 | **Fonte de Verdade**: Desk CRM (tblitems)

View File

@@ -0,0 +1,367 @@
---
name: proposal-deck
description: Geracao de apresentacoes PPTX de propostas comerciais profissionais com branding Descomplicar. Integra dados do CRM, tabela de precos e template curado de 16 layouts.
---
# Skill /proposal-deck - Apresentacoes de Propostas Comerciais
Gera apresentacoes PPTX profissionais para propostas comerciais da Descomplicar, usando um template curado com 16 layouts e branding oficial.
## Triggers
- `/proposal-deck`
- "proposta", "apresentacao cliente", "deck proposta", "proposta comercial", "apresentacao proposta"
## Quando Usar
- Preparar apresentacao visual de proposta para reuniao com cliente
- Criar deck profissional para acompanhar orcamento/estimate
- Gerar proposta completa com branding para envio por email
- Complementar `/orcamento` com material visual
## Quando NAO Usar
- Para criar orcamento sem apresentacao (usar `/orcamento`)
- Para analise estrategica de lead (usar `/lead-approach`)
- Para operacoes CRM genericas (usar `/crm-ops`)
- Para apresentacoes sem contexto comercial (usar pptx-generator directamente)
---
## Template
**Localizacao:** `/media/ealmeida/Dados/Hub/90-Templates/Comercial/descomplicar-proposal-template.pptx`
### Layouts Disponiveis (16)
| # | Nome | Funcao | Quando usar |
|---|------|--------|-------------|
| 1 | capa | Titulo da proposta + subtitulo + ano | Sempre (obrigatorio) |
| 2 | divisor-seccao | Fundo escuro com titulo centrado | Entre seccoes principais |
| 3 | sobre-nos | Card texto + imagem lateral | Sempre (quem somos) |
| 4 | objectivos | Fundo escuro + objectivos + logo cliente | Sempre (o que vamos resolver) |
| 5 | processo-3-passos | 3 colunas douradas com texto | Explicar metodologia |
| 6 | fases-3-blocos | 3 blocos numerados verticais | Fases do projecto (3 items) |
| 7 | grid-4-cards | Grid 4 cards com icones | Valores, diferenciais, pilares (4 items) |
| 8 | beneficios-6 | 6 blocos com icones e setas | Beneficios (6 items) |
| 9 | pilares-engrenagens | 4 pilares em engrenagens | Solucao completa (4 pilares) |
| 10 | detalhe-servico | Titulo + features list + foto + CTA | Detalhe de um servico/pack |
| 11 | deliverables | 4 rows dourados com bullets | Lista deliverables/escopo |
| 12 | timeline-etapas | 5 etapas coloridas horizontais | Cronograma/fases com precos |
| 13 | pack-pricing | Checklist com preco e foto | Pack/avenca mensal |
| 14 | resumo-financeiro | Timeline com precos por fase | Resumo valores total |
| 15 | contacto | Foto gestor + dados | Sempre (obrigatorio) |
| 16 | encerramento | Lobo + branding nocturno | Sempre (obrigatorio) |
### Slides Obrigatorios
Toda proposta inclui **no minimo**: capa (1) + sobre-nos (3) + objectivos (4) + contacto (15) + encerramento (16).
---
## Scripts PPTX
**Base path:** `~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/`
| Script | Funcao |
|--------|--------|
| `office/unpack.py` | Descompactar PPTX em XML editavel |
| `office/pack.py` | Recompactar XML em PPTX valido |
| `clean.py` | Limpar XMLs (namespaces, refs orfas) |
| `add_slide.py` | Adicionar slides ao XML |
| `office/validate.py` | Validar estrutura do PPTX |
---
## Protocolo
### Sintaxe
```
/proposal-deck [cliente] [tipo]
```
**Parametros:**
- `cliente` - Nome ou ID do cliente (opcional, sera solicitado se omitido)
- `tipo` - Complexidade da proposta (opcional): `minima`, `standard`, `completa`
### Fase 1: Recolha de Informacao
1. **Identificar cliente no CRM:**
```
mcp__desk-crm-v3__search_customers query="[nome]" fields="company,vat"
mcp__desk-crm-v3__get_customer customer_id=[id]
```
2. **Verificar orcamentos existentes:**
```
mcp__desk-crm-v3__get_estimates status="draft" client_id=[id]
```
3. **Consultar tabela de precos** (complementar ao CRM):
- Ficheiro: `/media/ealmeida/Dados/GDrive/Cloud/Descomplicar/Servicos/tabela-geral.csv`
- CRM (fonte de verdade): `mcp__desk-crm-v3__price_management action="get_pricing_insights"`
4. **Solicitar dados em falta** (se nao disponiveis no CRM):
| Campo | Obrigatorio | Default |
|-------|:-----------:|---------|
| Nome do cliente | Sim | — |
| Sector/industria | Sim | — |
| Objectivos | Sim | — |
| Servicos a propor | Sim | — |
| Precos | Sim | CRM |
| Prazo estimado | Nao | "a definir" |
| Gestor de conta | Nao | Emanuel Almeida |
### Fase 2: Seleccao de Layouts
Seleccionar layouts com base na complexidade e servicos propostos.
#### Proposta Minima (8 slides)
Para projectos simples, orcamentos rapidos.
| Ordem | Layout | Conteudo |
|:-----:|--------|----------|
| 1 | capa | "Proposta [Servico]" + nome cliente + ano |
| 2 | sobre-nos | Apresentacao Descomplicar |
| 3 | objectivos | 3-5 objectivos do cliente |
| 4 | processo-3-passos | Metodologia de trabalho |
| 5 | deliverables | O que esta incluido |
| 6 | pack-pricing | Preco + o que inclui |
| 7 | contacto | Dados do gestor |
| 8 | encerramento | Branding Descomplicar |
#### Proposta Standard (12 slides)
Para projectos de media complexidade (websites, marketing).
| Ordem | Layout | Conteudo |
|:-----:|--------|----------|
| 1 | capa | Titulo + cliente + ano |
| 2 | sobre-nos | Apresentacao Descomplicar |
| 3 | divisor-seccao | "Desafio" |
| 4 | objectivos | Objectivos do cliente |
| 5 | processo-3-passos | Metodologia |
| 6 | fases-3-blocos | Fases do projecto |
| 7 | divisor-seccao | "Solucao" |
| 8 | beneficios-6 | Beneficios da solucao |
| 9 | deliverables | Escopo detalhado |
| 10 | timeline-etapas | Cronograma com precos |
| 11 | contacto | Dados do gestor |
| 12 | encerramento | Branding Descomplicar |
#### Proposta Completa (16 slides)
Para projectos complexos, concursos, clientes enterprise.
Usa todos os 16 layouts na ordem numerica original.
### Fase 3: Geracao do PPTX
**Directorio de trabalho:** `~/.claude-work/proposal-[cliente-slug]/`
```bash
# 1. Criar directorio e copiar template
mkdir -p ~/.claude-work/proposal-[slug]/
cp "/media/ealmeida/Dados/Hub/90-Templates/Comercial/descomplicar-proposal-template.pptx" \
~/.claude-work/proposal-[slug]/template.pptx
# 2. Descompactar template
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/office/unpack.py \
~/.claude-work/proposal-[slug]/template.pptx \
~/.claude-work/proposal-[slug]/unpacked/
# 3. Editar slides XML (ver seccao "Edicao de Conteudo XML")
# 4. Remover slides nao necessarios de presentation.xml
# (alterar rIdX refs e apagar ficheiros slideN.xml correspondentes)
# 5. Limpar XMLs
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/clean.py \
~/.claude-work/proposal-[slug]/unpacked/
# 6. Recompactar
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/office/pack.py \
~/.claude-work/proposal-[slug]/unpacked/ \
~/.claude-work/proposal-[slug]/proposta-[slug].pptx \
--original ~/.claude-work/proposal-[slug]/template.pptx
```
### Edicao de Conteudo XML
Cada slide e um ficheiro `ppt/slides/slideN.xml`. Localizar placeholders pelo texto visivel e substituir:
| Placeholder | Substituir por | Exemplo |
|-------------|----------------|---------|
| `[TITULO_PROPOSTA]` | Nome do servico proposto | "Website Corporativo" |
| `[SUBTITULO]` | Nome do cliente | "Para Empresa XYZ" |
| `[ANO]` | Ano corrente | "2026" |
| `[OBJECTIVO_N]` | Objectivo N do cliente | "Aumentar presenca online" |
| `[FASE_N_TITULO]` | Titulo da fase N | "Fase 1: Descoberta" |
| `[FASE_N_DESC]` | Descricao da fase N | "Analise de requisitos..." |
| `[DELIVERABLE_N]` | Item do escopo | "Website responsivo" |
| `[PRECO]` | Valor formatado | "1.200 EUR" |
| `[PRECO_TOTAL]` | Valor total | "2.500 EUR + IVA" |
| `[TIMELINE_N]` | Etapa do cronograma | "Semana 1-2" |
| `[GESTOR_NOME]` | Nome do gestor | "Emanuel Almeida" |
| `[GESTOR_EMAIL]` | Email do gestor | "emanuel@descomplicar.pt" |
| `[GESTOR_TEL]` | Telefone | "911 510 005" |
**Tecnica XML:** Localizar `<a:t>` tags dentro de `<a:r>` runs. Substituir texto preservando formatacao:
```python
# Exemplo: substituir texto num slide
import re
def replace_placeholder(xml_content, placeholder, value):
"""Substituir placeholder preservando formatacao XML."""
# Placeholders podem estar fragmentados em multiplos <a:t> tags
# Usar regex para localizar e substituir
return xml_content.replace(placeholder, value)
```
**Regra critica:** Nunca alterar atributos de formatacao (`<a:rPr>`, `<a:pPr>`). Apenas substituir conteudo textual dentro de `<a:t>`.
### Fase 4: Entrega
1. **Guardar PPTX final:**
```
Hub/03-Propostas/[cliente]/proposta-[servico]-[data].pptx
```
2. **Upload para Google Drive** (opcional):
```
mcp__google-workspace__drive_upload_file
file_path="~/.claude-work/proposal-[slug]/proposta-[slug].pptx"
folder_id="[pasta-cliente-drive]"
```
3. **Registar no CRM** (se nao existir estimate):
```
mcp__desk-crm-v3__create_estimate
client_id=[id]
date=[hoje]
expiry_date=[hoje + 30 dias]
items=[items]
```
4. **Limpar temporarios:**
```bash
rm -rf ~/.claude-work/proposal-[slug]/
```
---
## Exemplos de Propostas Tipicas
### Website Corporativo (CorporateWP)
**Tipo:** Standard (12 slides)
**Servico:** CorporateWP
**Slides seleccionados:** capa, sobre-nos, divisor, objectivos, processo-3-passos, fases-3-blocos, divisor, beneficios-6, deliverables, timeline-etapas, contacto, encerramento
**Conteudo tipico:**
- **Objectivos:** Presenca profissional online, geracao de leads, credibilidade digital
- **3 Passos:** Descoberta -> Desenvolvimento -> Lancamento
- **3 Fases:** Analise e Conteudo (S1-2) -> Design e Desenvolvimento (S3-5) -> Testes e Lancamento (S6)
- **6 Beneficios:** Design responsivo, SEO optimizado, painel intuitivo, SSL incluido, suporte dedicado, performance rapida
- **Deliverables:** Website responsivo, 5-8 paginas, formularios, integracao redes sociais, Google Analytics, formacao
- **Timeline:** 4-6 semanas, 900 EUR + IVA, anuidade 299 EUR
### Marketing 360
**Tipo:** Completa (16 slides)
**Servico:** Marketing Digital 360
**Slides seleccionados:** todos os 16
**Conteudo tipico:**
- **Objectivos:** Aumentar visibilidade, gerar leads qualificados, ROI mensuravel, posicionamento digital
- **4 Pilares (engrenagens):** SEO, Redes Sociais, Publicidade Online, Email Marketing
- **Processo:** Auditoria -> Estrategia -> Execucao
- **6 Beneficios:** Mais trafego, leads qualificados, brand awareness, ROI mensuravel, relatorios mensais, equipa dedicada
- **Deliverables:** Auditoria inicial, plano estrategico, gestao redes sociais, campanhas Ads, relatorios mensais, reunioes quinzenais
- **Timeline:** Ongoing, setup 500-1500 EUR, mensalidade 300-800 EUR
### SEO / Optimizacao
**Tipo:** Standard (12 slides)
**Servico:** Pack SEO
**Slides seleccionados:** capa, sobre-nos, divisor, objectivos, processo-3-passos, grid-4-cards, divisor, detalhe-servico, deliverables, pack-pricing, contacto, encerramento
**Conteudo tipico:**
- **Objectivos:** Melhorar posicionamento Google, aumentar trafego organico, ultrapassar concorrencia
- **3 Passos:** Auditoria Tecnica -> Optimizacao On-Page -> Link Building
- **4 Cards:** Pesquisa Keywords, SEO Tecnico, Conteudo Optimizado, Relatorios Mensais
- **Deliverables:** Auditoria inicial, optimizacao 10-20 paginas, blog mensal, relatorio posicoes, Google Search Console
- **Pricing:** Mensalidade 300-600 EUR conforme pack
---
## MCPs Utilizados
```
mcp__desk-crm-v3__search_customers - Pesquisar cliente
mcp__desk-crm-v3__get_customer - Obter detalhes cliente
mcp__desk-crm-v3__get_estimates - Verificar orcamentos existentes
mcp__desk-crm-v3__create_estimate - Registar estimate no CRM
mcp__desk-crm-v3__price_management - Consultar precos oficiais
mcp__google-workspace__drive_upload_file - Upload para Google Drive
mcp__mcp-time__current_time - Data/hora actual
```
---
## Checklist de Execucao
- [ ] Cliente identificado no CRM
- [ ] Dados recolhidos (objectivos, servicos, precos)
- [ ] Tipo de proposta seleccionado (minima/standard/completa)
- [ ] Layouts seleccionados e conteudo definido
- [ ] Template copiado para ~/.claude-work/
- [ ] PPTX descompactado
- [ ] Slides editados com dados do cliente
- [ ] Slides desnecessarios removidos
- [ ] XMLs limpos (clean.py)
- [ ] PPTX recompactado e validado
- [ ] Ficheiro guardado em Hub/03-Propostas/[cliente]/
- [ ] Temporarios limpos
- [ ] Estimate registado no CRM (se aplicavel)
---
## Anti-Patterns
| Fazer | NAO Fazer |
|-------|-----------|
| Personalizar cada slide com dados reais do cliente | Usar placeholders genericos ou "Lorem ipsum" |
| Consultar CRM para precos actualizados | Inventar precos de memoria |
| Seleccionar layouts relevantes para o servico | Incluir todos os 16 slides quando 8 bastam |
| Manter branding Descomplicar (cores, fontes, logo) | Alterar formatacao XML (cores, tamanhos, posicoes) |
| Guardar em Hub/03-Propostas/ com nome descritivo | Deixar ficheiros em ~/.claude-work/ |
| Usar slug sem espacos no nome do ficheiro | Espacos ou caracteres especiais no nome |
| Verificar PPTX abre correctamente apos geracao | Entregar sem validar |
| Adaptar objectivos ao sector do cliente | Copiar objectivos genericos entre propostas |
| Incluir dados de contacto do gestor real | Dados de contacto ficticios |
---
## Procedimentos Relacionados
- `PROC-Catalogo-Codificacao-Produtos.md` - Codificacao e catalogo de produtos
- `PROC-CRM-Operacoes.md` - Operacoes CRM padrao
---
## Changelog
### v1.0.0 (2026-03-06)
- Versao inicial da skill /proposal-deck
- 16 layouts mapeados do template PPTX curado
- 3 niveis de complexidade: minima (8), standard (12), completa (16)
- Integracao CRM (cliente, estimates, precos)
- Workflow completo: recolha -> seleccao -> geracao -> entrega
- Exemplos para website, marketing 360, SEO
- Anti-patterns documentados
---
**Versao**: 1.0.0 | **Data**: 2026-03-06 | **Template**: descomplicar-proposal-template.pptx

View File

@@ -1,25 +1,7 @@
---
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"
description: Auto-processamento de tickets abertos no Desk CRM. Fecha SPAM, identifica facturas para /auto-expense e protege notificações de sistema.
disable-model-invocation: true
---
# /ticket-triage v1.0

View File

@@ -1,17 +1,7 @@
---
name: ticket
description: >
Gestão de tickets de suporte Desk CRM v1.0. Ver, responder, fechar, escalar.
Use when "ticket", "suporte", "support", "incidente", "helpdesk".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 75
user_invocable: true
category: business
tags: [ticket, support, suporte, helpdesk, desk, crm]
desk_project: 65
allowed-tools: Read, mcp__desk-crm-v3, mcp__mcp-time
mcps: desk-crm-v3, mcp-time
description: Gestão de tickets de suporte Desk CRM. Ver, responder, fechar e escalar tickets. Inclui templates de resposta e integração com /today.
disable-model-invocation: true
---
# /ticket v1.0 - Gestão de Suporte