feat: adiciona 12 plugins Descomplicar ao marketplace

Plugins: automacao, crm-ops, design-media, dev-tools, gestao,
infraestrutura, marketing, negocio, perfex-dev, project-manager,
wordpress + hello-plugin (existente).

Totais: 83 skills, 44 agents, 12 datasets.json

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-07 21:41:24 +00:00
parent bcce928beb
commit 2cb3210962
209 changed files with 50869 additions and 0 deletions

View File

@@ -0,0 +1,303 @@
---
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
---
# Billing Check - Desk vs Moloni (v2.0)
Sincroniza facturas Moloni com horas Desk CRM para projectos 360.
---
## EXECUÇÃO AUTOMÁTICA
| Dia do Mês | Acção |
|------------|-------|
| **5, 15, 25** | Sincronizar facturas Moloni → tabela `billing_360_invoices` |
> O dashboard plan-eal.descomplicar.pt mostra dados em tempo real da BD.
---
## BASE DE DADOS
### Tabelas (ealmeida_desk24)
```sql
-- Clientes 360
billing_360_clients (
id, client_name, desk_client_id, desk_project_id,
moloni_customer_id, monthly_hours, active
)
-- Facturas sincronizadas
billing_360_invoices (
id, client_id, moloni_invoice_id, invoice_number,
invoice_date, hours_invoiced, amount, synced_at
)
-- Log de sincronizações
billing_360_sync (
id, sync_date, invoices_processed, status, notes
)
```
### Clientes Activos
| Cliente | desk_project_id | moloni_customer_id | Horas/Mês |
|---------|-----------------|-------------------|-----------|
| SolarFV | 67 | 96914420 | 10h |
| Carstuff | 77 | 128784439 | 30h |
---
## PROTOCOLO DE EXECUÇÃO
### 1. Obter Data Actual
```
mcp__mcp-time__current_time (timezone: Europe/Lisbon)
```
### 2. Verificar Clientes 360 Activos
```sql
SELECT * FROM billing_360_clients WHERE active = 1
```
### 3. Para Cada Cliente: Obter Facturas Moloni
```
Sequência MCP Moloni:
1. moloni_documents_invoices_getall
- company_id: 69473
- customer_id: [moloni_customer_id]
- year: [ano_corrente]
2. Para cada factura, extrair horas com regex:
/Avença\s+(\d+)\s+horas.*360/i
```
### 4. Inserir Novas Facturas
```sql
INSERT INTO billing_360_invoices
(client_id, moloni_invoice_id, invoice_number, invoice_date, hours_invoiced, amount)
VALUES (?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE synced_at = NOW()
```
### 5. Registar Sincronização
```sql
INSERT INTO billing_360_sync (sync_date, invoices_added, status, details)
VALUES (NOW(), ?, 'success', ?)
```
---
## CÁLCULO DE SALDO
O dashboard calcula automaticamente:
```php
// Horas entregues (timesheets Desk)
SELECT SUM(
CASE
WHEN LENGTH(start_time) < 15 THEN (end_time - start_time) / 3600 -- Unix timestamp
ELSE TIMESTAMPDIFF(SECOND, start_time, end_time) / 3600 -- Datetime
END
) FROM tbltaskstimers tt
INNER JOIN tbltasks t ON tt.task_id = t.id
WHERE t.rel_id = [desk_project_id] AND t.rel_type = 'project'
// Horas facturadas (Moloni)
SELECT SUM(hours_invoiced) FROM billing_360_invoices WHERE client_id = ?
// Saldo
Saldo = Horas_Facturadas - Horas_Entregues
```
### Interpretação
| Saldo | Status | Significado |
|-------|--------|-------------|
| > +5h | 🟢 credit | Temos crédito (cliente não usou) |
| -5h a +5h | 🟡 ok | Equilibrado |
| < -5h | 🔴 debt | Devemos horas (trabalhámos mais) |
---
## MCPs NECESSÁRIOS
### Carregar Tools
```
ToolSearch: "+moloni invoices"
ToolSearch: "+desk timesheets"
```
### Moloni
| Tool | Uso |
|------|-----|
| `moloni_company_company_getall` | Company ID (69473) |
| `moloni_documents_invoices_getall` | Listar facturas |
| `moloni_documents_invoices_getone` | Detalhe factura |
### Desk CRM
| Tool | Uso |
|------|-----|
| `get_timesheets` | Horas por projecto |
| `timesheet_summary` | Resumo período |
---
## EXEMPLO DE USO
```
/billing-check # Sincronizar todos
/billing-check --client SolarFV # Apenas SolarFV
/billing-check --report # Relatório sem sync
```
### Output Esperado
```markdown
## Billing Check - 2026-02-02
### Sincronização Moloni → BD
| Cliente | Facturas Novas | Total Sync |
|---------|---------------|------------|
| SolarFV | 1 | 3 |
| Carstuff | 0 | 2 |
### Saldos Actuais
| Cliente | Facturado | Entregue | Saldo | Status |
|---------|-----------|----------|-------|--------|
| SolarFV | 30h | 28.5h | +1.5h | 🟡 OK |
| Carstuff | 60h | 72.3h | -12.3h | 🔴 DEBT |
### Alertas
⚠️ **Carstuff**: 12.3h extra por facturar (~501€)
```
---
## VALORES DE REFERÊNCIA (2026)
| Cliente | Avença | Valor/Hora | Valor Mensal |
|---------|--------|------------|--------------|
| SolarFV | 10h/mês | 45.90€ | 459€ + IVA |
| Carstuff | 30h/mês | 40.80€ | 1224€ + IVA |
---
## TROUBLESHOOTING
### Factura sem padrão "Avença X horas"
- Verificar descrição manual
- Pode ser factura de extras (não contar como avença)
### Cliente novo
1. Adicionar à tabela `billing_360_clients`
2. Obter `moloni_customer_id` via pesquisa
3. Definir `monthly_hours` do contrato
### Timestamps mistos no Desk
- O query do dashboard já trata Unix e datetime
- Conversão automática
---
## CHANGELOG
### v2.0.0 (2026-02-02)
- Integração com tabelas BD (billing_360_*)
- Sincronização automática dias 5, 15, 25
- Dashboard dinâmico em plan-eal.descomplicar.pt
- Tratamento de timestamps híbridos
### v1.0.0 (2026-01-27)
- Versão inicial
- Documentação de mapeamento Desk ↔ Moloni
---
**Dashboard:** https://plan-eal.descomplicar.pt
**Versão**: 2.0.0 | **Autor**: Descomplicar®
---
## Quando NÃO Usar
- Para tarefas fora do domínio de especialização desta skill
- Quando outra skill mais específica está disponível
- Para operações que requerem aprovação manual obrigatória
- Quando os requisitos não estão claramente definidos
## Protocolo de Execução
1. **Análise Inicial**
- Verificar requisitos e contexto
- Identificar ferramentas necessárias
2. **Preparação**
- Validar acesso a recursos
- Preparar ambiente de trabalho
3. **Execução**
- Executar operações de forma incremental
- Validar cada passo antes de prosseguir
4. **Validação**
- Verificar resultados obtidos
- Confirmar sucesso da operação
5. **Conclusão**
- Documentar alterações realizadas
- Reportar status final e próximos passos
## Exemplos de Uso
### Exemplo 1: Caso Básico
```
User: [requisição simples relacionada com billing-check]
Skill: [execução directa com validação]
Output: [resultado conciso e accionável]
```
### Exemplo 2: Caso Complexo
```
User: [requisição multi-passo ou complexa]
Skill:
1. Análise dos requisitos
2. Planeamento da abordagem
3. Execução faseada
4. Validação contínua
Output: [resultado detalhado com próximos passos]
```
### Exemplo 3: Caso com Dependências
```
User: [requisição que depende de outros sistemas]
Skill:
1. Verificar dependências disponíveis
2. Coordenar com skills/MCPs necessários
3. Executar workflow integrado
Output: [resultado completo com referências]
```

View File

@@ -0,0 +1,231 @@
---
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
---
# CRM Admin Specialist
Skill para gestão e desenvolvimento Perfex CRM seguindo padrões Descomplicar®.
## Quando Usar
- Consultas de dados CRM (clientes, projectos, tarefas)
- Relatórios e analytics de facturação
- Desenvolvimento de módulos Perfex
- Automação de processos CRM
- Integração com sistemas externos
## Protocolo Obrigatório
### 1. MCP First (SEMPRE)
Antes de qualquer operação, usar MCPs:
```
mcp__desk-crm-v3__get_customers - verificar dados existentes
mcp__memory-supabase__search_memories "[contexto crm]"
mcp__wikijs__search_pages "perfex crm [funcionalidade]"
```
### 2. Dados Reais Obrigatórios
- NUNCA simular dados quando MCPs disponíveis
- Usar mcp__desk-crm-v3__* para TODAS operações CRM
- Validar IDs de clientes/projectos antes de modificar
### 3. Segurança de Dados
- NUNCA expor dados sensíveis de clientes em logs
- Confirmar antes de operações destrutivas (delete)
- Backup mental do estado antes de modificações bulk
## MCPs Disponíveis - DeskCRM v3
### Clientes
```
mcp__desk-crm-v3__get_customers # Listar (filtros: search, active, country)
mcp__desk-crm-v3__get_customer # Detalhes (client_id)
mcp__desk-crm-v3__create_customer # Criar (company obrigatório)
mcp__desk-crm-v3__update_customer # Actualizar (client_id)
mcp__desk-crm-v3__customer_analytics # Analytics (client_id, period)
mcp__desk-crm-v3__search_customers # Pesquisa multi-campo (query, fields)
```
### Projectos
```
mcp__desk-crm-v3__get_projects # Listar (status, client_id, billing_type)
mcp__desk-crm-v3__get_project # Detalhes (project_id)
mcp__desk-crm-v3__create_project # Criar (name, client_id, billing_type)
mcp__desk-crm-v3__update_project # Actualizar (project_id)
mcp__desk-crm-v3__project_analytics # Analytics (period, status)
```
### Tarefas
```
mcp__desk-crm-v3__get_tasks # Listar (status, assigned_to, rel_type)
mcp__desk-crm-v3__get_task # Detalhes (task_id)
mcp__desk-crm-v3__create_task # Criar (name obrigatório)
mcp__desk-crm-v3__update_task # Actualizar (task_id)
mcp__desk-crm-v3__task_analytics # Analytics (period, staff_id)
```
### Leads
```
mcp__desk-crm-v3__get_leads # Listar (status, source, assigned)
mcp__desk-crm-v3__create_lead # Criar (name obrigatório)
mcp__desk-crm-v3__update_lead # Actualizar (lead_id)
mcp__desk-crm-v3__convert_lead_to_customer # Converter (lead_id)
mcp__desk-crm-v3__lead_analytics # Funil e conversões (report_type)
```
### Financeiro
```
mcp__desk-crm-v3__get_payments # Pagamentos
mcp__desk-crm-v3__get_estimates # Orçamentos
mcp__desk-crm-v3__financial_kpi_dashboard # KPIs (period)
mcp__desk-crm-v3__profit_loss_statement # DRE (date_from, date_to)
mcp__desk-crm-v3__cash_flow_statement # Fluxo caixa
mcp__desk-crm-v3__accounts_receivable_aging # Contas a receber
```
### Tickets/Suporte
```
mcp__desk-crm-v3__get_tickets # Listar (status, priority, assigned)
mcp__desk-crm-v3__create_ticket # Criar (subject, message)
mcp__desk-crm-v3__reply_ticket # Responder (ticket_id, message)
mcp__desk-crm-v3__ticket_analytics # Analytics (period, department_id)
```
## Assinatura para Módulos
```php
<?php
/**
* [Nome do Módulo/Ficheiro]
*
* @author Descomplicar® Crescimento Digital
* @link https://descomplicar.pt
* @copyright 2025 Descomplicar®
*/
```
## Padrões de Relatórios
Ao gerar relatórios, incluir:
1. **Período**: Data início/fim claramente indicada
2. **Totais**: Agregações relevantes
3. **Top N**: Rankings quando aplicável
4. **Comparação**: Com período anterior se relevante
## Checklist Consultas
- [ ] Usar MCPs para dados reais
- [ ] Validar IDs antes de operações
- [ ] Não expor dados sensíveis
- [ ] Confirmar operações destrutivas
- [ ] Apresentar dados formatados PT-PT
---
## Datasets Dify (Consulta Obrigatória)
Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP:
| Dataset | ID | Prioridade |
|---------|----|-----------:|
| **PerfexCRM** | `43354eb6-f0b2-40cc-aa53-44e375ab347c` | 1 |
| **Vendas** | `a7ba6005-517c-41ab-ac5e-da1c1a1c62ef` | 2 |
| **Gestão** | `22799925-8dc5-4a1f-92b9-233468a5048b` | 2 |
| **Gestão de Processos** | `cae2a27e-f5bc-4d75-8a7a-9f83064f2512` | 3 |
### Como Consultar
```javascript
// Pesquisar funcionalidades Perfex
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "43354eb6-f0b2-40cc-aa53-44e375ab347c",
query: "modulo facturas automaticas"
})
// Pesquisar técnicas de vendas
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "a7ba6005-517c-41ab-ac5e-da1c1a1c62ef",
query: "pipeline vendas conversao"
})
```
### Quando Consultar
- Desenvolver módulos Perfex CRM
- Configurar automações de vendas
- Optimizar processos de facturação
- Implementar workflows de gestão de clientes
---
**Versão**: 1.0.0 | **Autor**: Descomplicar®
---
## Instrumentação Automática
Esta skill grava métricas automaticamente para análise PDCA.
### Query para Gravar (executar no final)
```sql
INSERT INTO tblskill_agent_metrics (
type, name, duration_ms, status, staff_id,
kb_consulted, kb_cache_hit, tool_calls, project_id
) VALUES (
'skill', '/$SKILL_NAME', {DURACAO_MS}, '{STATUS}', 25,
{KB_CONSULTADO}, {CACHE_HIT}, {TOOL_CALLS}, {PROJECT_ID}
);
```
---
**Instrumentação**: Activa | **Data**: 2026-02-03
---
## Quando NÃO Usar
- Para tarefas fora do domínio de especialização desta skill
- Quando outra skill mais específica está disponível
- Para operações que requerem aprovação manual obrigatória
- Quando os requisitos não estão claramente definidos
## Exemplos de Uso
### Exemplo 1: Caso Básico
```
User: [requisição simples relacionada com crm-admin]
Skill: [execução directa com validação]
Output: [resultado conciso e accionável]
```
### Exemplo 2: Caso Complexo
```
User: [requisição multi-passo ou complexa]
Skill:
1. Análise dos requisitos
2. Planeamento da abordagem
3. Execução faseada
4. Validação contínua
Output: [resultado detalhado com próximos passos]
```
### Exemplo 3: Caso com Dependências
```
User: [requisição que depende de outros sistemas]
Skill:
1. Verificar dependências disponíveis
2. Coordenar com skills/MCPs necessários
3. Executar workflow integrado
Output: [resultado completo com referências]
```

View File

@@ -0,0 +1,467 @@
---
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
---
# /crm-ops - Operações CRM Seguras
Skill para operações CRM com verificações obrigatórias de duplicados e confirmações.
## Metadata
- **Version**: 1.2.0
- **Author**: Descomplicar
- **Date**: 2026-01-28
- **Status**: Active
---
## Quando Usar
- Criar lead, customer, proposal, estimate
- Pesquisar entidades CRM
- Converter lead para customer
- Operações que envolvem orçamentos/propostas
- Qualquer operação que pode criar duplicados
## Quando NÃO Usar
- Para desenvolvimento WordPress (usar /wp-dev)
- Para criar orçamentos completos (usar /orcamento)
- Para análise de leads (usar /lead-approach)
---
## DEFINIÇÕES CRÍTICAS
### Lead vs Customer
| Aspecto | LEAD | CUSTOMER |
|---------|------|----------|
| **O que é** | Contacto inicial, prospect | Cliente com relação comercial |
| **Quando usar** | Primeiro contacto, ainda a avaliar | Após qualificação, vai comprar |
| **Tabela** | `tblleads` | `tblclients` + `tblcontacts` |
| **Recebe** | Proposals (orçamentos) | Estimates, Invoices |
| **Conversão** | Pode virar Customer | Já é cliente |
**REGRA:** Novos contactos são SEMPRE leads primeiro. Só se tornam customers após qualificação.
### Proposal vs Estimate
| Aspecto | PROPOSAL (Orçamento) | ESTIMATE |
|---------|---------------------|----------|
| **Para quem** | **LEADS** (prospects) | **CUSTOMERS** (clientes) |
| **Quando usar** | Utilizador pede "orçamento" | Cliente existente, pedido formal |
| **Tabela** | `tblproposals` | `tblestimates` |
| **Converte para** | Nada (lead vira customer primeiro) | Invoice directamente |
| **Termo PT** | **Orçamento, Proposta** | Estimativa |
> **IMPORTANTE:** Quando o utilizador pede um "orçamento", usar **PROPOSAL** (para leads).
> Estimates são para clientes já existentes com pedidos formais.
### Fluxo Comercial Correcto
```
┌─────────────────────────────────────────────────────────────────────┐
│ FLUXO COMERCIAL PERFEX │
└─────────────────────────────────────────────────────────────────────┘
LEAD CUSTOMER
│ │
▼ ▼
PROPOSAL ──────────────────────▶ ESTIMATE
(orçamento) converter lead (formal)
│ para customer │
│ │ ▼
│ │ INVOICE
│ │ │
└───────────────┴──────────────────┘
PAYMENT
```
**Resumo:**
- Lead + Orçamento = **Proposal**
- Customer + Orçamento formal = **Estimate**
- Estimate aceite = **Invoice**
---
## Protocolo
### REGRA 0: NUNCA CRIAR SEM VERIFICAR (CRÍTICA)
> **PROIBIDO criar Lead ou Customer sem verificar se já existe.**
Esta regra é INVIOLÁVEL. Mesmo que o utilizador peça para criar, PRIMEIRO:
```
1. Pesquisar em LEADS: get_leads() + filtrar por nome/email/empresa
2. Pesquisar em CUSTOMERS: search_customers(termo)
3. SE encontrar match:
- MOSTRAR resultados ao utilizador
- PERGUNTAR: "Encontrei [X]. É este ou criar novo?"
4. SE não encontrar:
- PERGUNTAR: "Não encontrei [Nome]. Confirmas criação?"
5. SÓ CRIAR após confirmação explícita
```
**Violação desta regra causa duplicados que prejudicam operações comerciais.**
### REGRA 1: VERIFICAR DUPLICADOS (Detalhado)
ANTES de criar QUALQUER entidade (Lead, Customer, Proposal, Estimate):
1. Pesquisar por nome/email/empresa:
- `search_customers` para clientes
- `get_leads` com filtro search para leads
2. Se match encontrado: MOSTRAR ao utilizador
3. Se match parcial: PERGUNTAR se é o mesmo
4. Se sem match: PERGUNTAR confirmação antes de criar
### REGRA 2: CONFIRMAR ANTES DE CRIAR
NUNCA criar entidade sem confirmação EXPLÍCITA:
- Lead: "Não encontrei este contacto. Criar lead [Nome] com email [Email]?"
- Customer: "Criar cliente [Empresa]? (ACÇÃO IRREVERSÍVEL - só para clientes qualificados)"
- Proposal: "Criar orçamento para lead [Nome] no valor de [X]?"
- Estimate: "Criar estimativa formal para cliente [Empresa] no valor de [X]?"
### REGRA 3: MODELO DE DADOS PERFEX
| Regra | Descrição |
|-------|-----------|
| Email em tblcontacts | Email do cliente está em tblcontacts, NÃO em tblclients |
| userid é o ID | Usar `userid` para clientes, não `customer_id` |
| Contacto principal | `is_primary = 1` para contacto principal |
| Source obrigatório | Leads precisam de source_id (buscar default) |
| Itens em tblitemable | Todos os itens (estimate, invoice, proposal) usam `tblitemable` com `rel_type` |
| rel_type para items | 'estimate', 'invoice', 'proposal', 'credit_note' |
## Comandos
| Comando | Descrição |
|---------|-----------|
| `/crm-ops search <termo>` | Pesquisa unificada em leads + customers |
| `/crm-ops lead create` | Criar lead COM verificação de duplicados |
| `/crm-ops lead convert <id>` | Converter lead em customer |
| `/crm-ops customer create` | Criar customer COM confirmação obrigatória |
| `/crm-ops estimate create` | Criar estimate COM validação cliente |
| `/crm-ops status` | Mostrar códigos de status |
## Fluxos Detalhados
### Criar Lead
```
1. Receber dados do lead (nome, email, empresa)
2. search_customers(email/nome)
3. get_leads(search=email/nome)
4. SE match encontrado:
- Mostrar resultados
- Perguntar: "Usar existente ou criar novo?"
5. SE criar novo:
- Buscar source default se não fornecido
- create_lead
6. Retornar ID do lead criado
```
### Converter Lead para Customer
```
1. Verificar lead existe: get_lead(lead_id)
2. Mostrar dados do lead ao utilizador
3. Perguntar: "Converter lead X para cliente?"
4. SE confirmado:
- convert_lead_to_customer
- Notas são transferidas automaticamente
5. Retornar ID do novo cliente
```
### Criar Customer (SEM lead)
```
1. SEMPRE perguntar confirmação ao utilizador
2. Verificar se existe lead para converter
- SE existe: usar convert_lead_to_customer
3. SE não existe lead:
- search_customers para verificar duplicados
- Confirmar criação
- create_customer
```
### Criar Estimate
```
1. Identificar cliente (perguntar se não especificado)
2. get_customer para verificar se existe
- SE não existe: PARAR, NÃO criar customer automaticamente
- Perguntar se deve criar customer primeiro
3. Confirmar itens e valores com utilizador
4. create_estimate
5. Perguntar se deve enviar: send_estimate
```
### Criar Proposal (Suporta Lead OU Customer)
> **CORRIGIDO v3.5.3:** Proposals agora suportam leads directamente.
```
1. Identificar se é Lead ou Customer
2. Usar o parâmetro correcto:
- Lead: create_proposal(lead_id=204, subject="...")
- Customer: create_proposal(client_id=42, subject="...")
3. NÃO usar ambos parâmetros (um OU outro)
```
### Editar Proposal
```
1. Obter proposal_id
2. update_proposal(proposal_id=X, subject="...", status=2)
```
**Status de Proposal:**
- 1 = Draft
- 2 = Sent
- 3 = Open
- 4 = Revised
- 5 = Declined
- 6 = Accepted
### Adicionar Itens a Proposal (v3.5.4)
```
1. Preparar array de itens com: description, qty, rate, unit, long_description
2. Chamar add_proposal_items:
add_proposal_items(
proposal_id=78,
clear_existing=true, // opcional: limpar itens anteriores
items=[
{ description: "Serviço X", qty: 1, rate: 500, unit: "un" },
{ description: "Horas Dev", qty: 10, rate: 60, unit: "hora" }
]
)
3. Total da proposta é actualizado automaticamente
```
### Listar Itens de Proposal
```
get_proposal_items(proposal_id=78)
```
Retorna lista de itens com quantidade, valor e total calculado.
### Converter Estimate para Invoice
```
1. get_estimate para verificar status
2. SE status != 4 (Aceite): PARAR e informar
3. Confirmar com utilizador
4. convert_estimate_to_invoice
5. Retornar ID da nova factura
```
## Status Codes
### Estimates
- 1 = Rascunho
- 2 = Enviado
- 3 = Visto
- 4 = Aceite (pode converter)
- 5 = Recusado
- 6 = Expirado
### Proposals
- 1 = Draft
- 2 = Sent
- 3 = Open
- 4 = Revised
- 5 = Declined
- 6 = Accepted
### Invoices
- 1 = Unpaid
- 2 = Paid
- 3 = Partially Paid
- 4 = Overdue
## MCP Tools
### Leads
- get_leads - Listar leads com filtros
- create_lead - Criar lead
- update_lead - Actualizar lead
- convert_lead_to_customer - Converter para cliente
- lead_scoring - Pontuar lead
- lead_analytics - Métricas
### Customers
- get_customers - Listar clientes
- get_customer - Detalhes cliente
- create_customer - Criar cliente
- search_customers - Pesquisa multi-campo
- update_customer - Actualizar
- delete_customer - Eliminar
- manage_customer_contacts - Gerir contactos
- create/get/update/delete_customer_note - Notas
### Estimates
- get_estimates - Listar orçamentos
- get_estimate - Detalhes
- create_estimate - Criar orçamento
- update_estimate - Actualizar
- send_estimate - Marcar como enviado
- convert_estimate_to_invoice - Converter para factura
- estimate_analytics - Métricas
### Proposals
- get_proposals - Listar propostas
- create_proposal - Criar proposta (suporta lead_id OU client_id)
- update_proposal - Editar proposta existente
- add_proposal_items - Adicionar itens/linhas a proposta
- get_proposal_items - Listar itens de uma proposta
- proposal_builder - Construtor interactivo
- proposal_analytics - Métricas
## Anti-Patterns (NUNCA fazer)
### Criação sem Verificação (CRÍTICO)
1. **NUNCA** criar lead sem pesquisar se já existe
2. **NUNCA** criar customer sem pesquisar se já existe
3. **NUNCA** assumir que entidade não existe - verificar SEMPRE
### Confusão de Entidades
4. Criar customer quando devia ser lead (novos contactos = leads)
5. Usar estimate para leads (usar proposal)
6. Usar proposal para customers qualificados (usar estimate)
7. Criar customer automaticamente para associar estimate
### Erros Técnicos
8. Converter estimate não-aceite para invoice
9. Aceder a email directamente em tblclients (usar JOIN com tblcontacts)
10. Usar tabelas inventadas (ex: tblitems_in) - verificar schema real primeiro
### Terminologia
- Utilizador diz "orçamento" para lead → usar **PROPOSAL**
- Utilizador diz "orçamento" para cliente existente → usar **ESTIMATE**
## Exemplos
### Exemplo 1: Criar lead com verificação
```
User: /crm-ops lead create nome="João Silva" email="joao@example.com"
→ Pesquisa em leads e customers
→ Não encontra duplicado
→ Pergunta: "Não encontrei João Silva. Confirmas criação?"
→ User: Sim
→ Cria lead #215
→ Confirma: "Lead #215 criado com sucesso"
```
### Exemplo 2: Detectar duplicado
```
User: /crm-ops customer create empresa="TechStart Lda"
→ Pesquisa customers
→ Encontra match: TechStart Lda (#42)
→ Mostra: "Encontrei TechStart Lda (#42). É este ou criar novo?"
→ User: É esse
→ Retorna dados do cliente existente
```
### Exemplo 3: Proposal para lead
```
User: Criar orçamento para lead João Silva
→ Verifica que é lead (não customer)
→ Usa create_proposal(lead_id=215)
→ Adiciona itens via add_proposal_items
→ Confirma: "Proposal #78 criada para lead #215"
```
## Checklist Pré-Operação
- [ ] Verificar duplicados
- [ ] Confirmar com utilizador
- [ ] Validar campos obrigatórios
- [ ] Usar source/status default se não fornecido
- [ ] Mostrar resultado da operação
## Integração
- **MCP:** desk-crm-v3
- **Procedimento:** [[PROC-CRM-Operacoes]]
- **CLAUDE.md:** Secção "CRM (Perfex/DeskCRM)"
## Changelog
### v1.2.0 (2026-01-28)
- **REGRA 0** adicionada: NUNCA criar lead/customer sem verificar existência
- Secção "DEFINIÇÕES CRÍTICAS" com distinção clara:
- Lead vs Customer (tabela comparativa)
- Proposal vs Estimate (tabela comparativa)
- Diagrama de fluxo comercial actualizado
- "Orçamento" = Proposal (para leads), não Estimate
- Anti-patterns reorganizados por categoria
- Terminologia PT clarificada
### v1.1.0 (2026-01-28)
- Adicionadas ferramentas de itens: add_proposal_items, get_proposal_items
- Documentado padrão tblitemable para itens de documentos
- Adicionados novos anti-patterns (tabelas inventadas, proposals vs estimates)
- Fluxo completo para adicionar itens a proposals
- Actualizada lista de MCP tools para proposals
### v1.0.0 (2026-01-28)
- Versão inicial completa
- Fluxo comercial documentado
- Regras de verificação
- Status codes
- Integração com MCP desk-crm-v3
### v0.1.0 (2026-01-28)
- Estrutura inicial da skill
- Definição de comandos e fluxos
---
**Criado:** 2026-01-28
**Actualizado:** 2026-01-28
**Motivo:** Prevenção de erros CRM após incidente de duplicação

305
crm-ops/skills/crm/SKILL.md Normal file
View File

@@ -0,0 +1,305 @@
---
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"
---
# /crm v2.0 - Operações CRM Unificadas
Consolida /crm-ops + /crm-admin numa única skill com subcomandos.
---
## Comandos
| Comando | Função |
|---------|--------|
| `/crm` | Resumo: leads recentes, clientes activos |
| `/crm lead <nome>` | Pesquisar/criar lead |
| `/crm customer <nome>` | Pesquisar/ver cliente |
| `/crm convert <lead_id>` | Converter lead → customer |
| `/crm proposal <lead_id>` | Criar proposta para lead |
| `/crm estimate <client_id>` | Criar estimate para cliente |
| `/crm 360 <cliente>` | Visão completa do cliente |
---
## Definições Críticas
### Lead vs Customer
| Aspecto | LEAD | CUSTOMER |
|---------|------|----------|
| O que é | Prospect | Cliente activo |
| Tabela | tblleads | tblclients + tblcontacts |
| Recebe | Proposals | Estimates, Invoices |
| Conversão | → Customer | Já é cliente |
**Regra:** Novos contactos são SEMPRE leads primeiro.
### Proposal vs Estimate
| Aspecto | PROPOSAL | ESTIMATE |
|---------|----------|----------|
| Para quem | LEADS | CUSTOMERS |
| Termo PT | Orçamento/Proposta | Estimativa formal |
| Converte | Lead→Customer | → Invoice |
**Regra:** "Orçamento" para lead = PROPOSAL
---
## Protocolo
### /crm (Resumo)
```
1. mcp__desk-crm-v3__get_leads({ limit: 5, sort: "-dateadded" })
2. mcp__desk-crm-v3__get_tasks({ status: [1,4], limit: 5 })
3. Mostrar resumo
```
**Output:**
```markdown
## 📊 CRM Resumo
### 🎯 Leads Recentes (5)
| Nome | Empresa | Valor | Status |
|------|---------|-------|--------|
| João Silva | TechCorp | €5.000 | Novo |
| Maria Costa | StartupX | €3.500 | Contactado |
### 📋 Tarefas Pendentes (3)
- #1450 [Alta] Follow-up TechCorp
- #1448 [Normal] Proposta StartupX
```
---
### /crm lead <nome>
**Workflow Anti-Duplicados (OBRIGATÓRIO):**
```
1. Pesquisar em leads:
mcp__desk-crm-v3__get_leads({ search: nome })
2. Pesquisar em customers:
mcp__desk-crm-v3__search_customers({ query: nome })
3. SE encontrar:
- Mostrar resultados
- "Encontrei X. É este ou criar novo?"
4. SE não encontrar:
- "Não encontrei [nome]. Criar lead?"
- AGUARDAR confirmação
5. SÓ após confirmação:
mcp__desk-crm-v3__create_lead({
name: nome,
email: email,
company: empresa,
source: 1,
assigned: 1
})
```
---
### /crm customer <nome>
```
1. mcp__desk-crm-v3__search_customers({ query: nome })
2. Se encontrar: Mostrar detalhes
3. Se não encontrar: "Não encontrado. Existe lead para converter?"
```
**Nunca criar customer automaticamente!**
---
### /crm convert <lead_id>
```
1. mcp__desk-crm-v3__get_lead({ lead_id })
2. Mostrar dados do lead
3. "Converter lead #X para cliente?"
4. Após confirmação:
mcp__desk-crm-v3__convert_lead_to_customer({ lead_id })
5. Retornar ID do novo cliente
```
---
### /crm proposal <lead_id>
```
1. Verificar que é lead (não customer)
2. Perguntar detalhes:
- Assunto
- Itens (descrição, qtd, valor)
3. mcp__desk-crm-v3__create_proposal({
lead_id: lead_id,
subject: assunto,
status: 1
})
4. mcp__desk-crm-v3__add_proposal_items({
proposal_id: id,
items: [...]
})
5. "Proposta #X criada. Enviar? [Sim/Não]"
```
---
### /crm estimate <client_id>
```
1. Verificar que é customer (não lead)
2. mcp__desk-crm-v3__get_customer({ customer_id: client_id })
3. Perguntar detalhes
4. mcp__desk-crm-v3__create_estimate({
client_id: client_id,
items: [...],
status: 1
})
5. "Estimate #X criado. Enviar? [Sim/Não]"
```
---
### /crm 360 <cliente>
```
1. mcp__desk-crm-v3__search_customers({ query: cliente })
2. mcp__desk-crm-v3__get_customer({ customer_id })
3. mcp__desk-crm-v3__get_projects({ client_id })
4. mcp__desk-crm-v3__get_invoices({ client_id })
5. mcp__desk-crm-v3__get_tickets({ client_id })
6. mcp__desk-crm-v3__get_customer_notes({ customer_id })
7. Compilar visão 360
```
**Output:**
```markdown
## 👤 Cliente: XYZ Lda (#45)
### Dados
- **Email:** contacto@xyz.pt
- **Telefone:** +351 912 345 678
- **NIF:** 123456789
- **Desde:** Janeiro 2024
### 📁 Projectos (3)
| Nome | Status | Progresso |
|------|--------|-----------|
| Website Corporativo | Em Curso | 75% |
| Manutenção Anual | Rotina | - |
| App Mobile | Concluído | 100% |
### 💰 Financeiro
| Métrica | Valor |
|---------|-------|
| Total facturado | €15.000 |
| Pagamentos | €12.000 |
| Em aberto | €3.000 |
### 🎫 Suporte
- Tickets abertos: 1
- Tickets total (12m): 8
- Tempo resposta médio: 4h
### 📝 Notas Recentes
- [2026-02-01] Reunião marcada para dia 10
- [2026-01-15] Preferem comunicação por email
```
---
## Status Codes
### Leads
| ID | Status |
|----|--------|
| 1 | Novo |
| 2 | Contactado |
| 3 | Qualificado |
| 4 | Proposta |
| 5 | Ganho (→ Customer) |
| 6 | Perdido |
### Estimates
| ID | Status |
|----|--------|
| 1 | Rascunho |
| 2 | Enviado |
| 3 | Visto |
| 4 | Aceite |
| 5 | Recusado |
### Proposals
| ID | Status |
|----|--------|
| 1 | Draft |
| 2 | Sent |
| 3 | Open |
| 6 | Accepted |
---
## Staff IDs
| ID | Nome | Usar |
|----|------|------|
| 25 | AikTop | **Default** - automático |
| 1 | Emanuel | Comunicação cliente |
---
## Anti-Patterns (NUNCA)
1. **NUNCA** criar lead sem verificar duplicados
2. **NUNCA** criar customer sem confirmação explícita
3. **NUNCA** criar customer automaticamente para estimate
4. **NUNCA** usar estimate para leads (usar proposal)
5. **NUNCA** converter estimate não-aceite para invoice
---
## Migração
Skills descontinuadas:
- `/crm-ops` → migrar para `/crm`
- `/crm-admin` → comandos admin em `/crm`
---
## Changelog
### v2.0.0 (2026-02-05)
- Consolidar crm-ops + crm-admin
- Novo comando /crm 360 para visão cliente
- Todos os subcomandos unificados
- Anti-duplicados reforçado
### v1.2.0 (crm-ops)
- Distinção Lead vs Customer
- Proposal vs Estimate
---
*Skill v2.0.0 | 2026-02-05 | Descomplicar®*

View File

@@ -0,0 +1,255 @@
---
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"
---
# /desk v3.0 - Contexto de Projecto
Integração automática com Desk CRM via `.desk-project`. Sistema Triângulo.
---
## Novidades v3.0
- **Integração /time:** Mostrar timer activo do projecto
- **Remover /desk-time:** Usar `/time` directamente
- **Novo /desk status:** Resumo rápido
- **Sync bidirecional:** Actualizar .desk-project se dados mudarem
---
## Comandos
| Comando | Função |
|---------|--------|
| `/desk` | Mostrar contexto completo |
| `/desk status` | Resumo rápido (timer + tarefas) |
| `/desk task <desc>` | Criar tarefa no projecto |
| `/desk log <msg>` | Adicionar changelog |
| `/desk init` | Inicializar .desk-project |
**Removido:** `/desk-time` → usar `/time` directamente
---
## Protocolo
### Auto-detecção
Ao entrar numa pasta:
```
1. Verificar se existe .desk-project
2. Se existe:
a. Ler configuração
b. Carregar contexto silenciosamente
c. Mostrar linha breve: "📁 Projecto X (#ID) | Y tarefas"
```
---
### /desk (Contexto Completo)
```
1. Ler .desk-project
2. mcp__desk-crm-v3__get_project({ project_id })
3. mcp__desk-crm-v3__get_tasks({ project_id, status: [1,4] })
4. Verificar timer activo em ~/.claude-work/active-timer.json
5. mcp__desk-crm-v3__get_project_time_tracking({ project_id })
6. Mostrar resumo completo
```
**Output:**
```markdown
## 📁 Stack Workflow (#65)
### Contexto
- **Cliente:** Descomplicar (interno)
- **Status:** Em Curso
- **Progresso:** 65%
### ⏱️ Timer Activo
🟢 #1446 - Documentação Skills (2h 15m)
### 📋 Tarefas Pendentes (5)
| ID | Nome | Prioridade |
|----|------|------------|
| #1450 | Implementar /invoice | Alta |
| #1448 | Testar /time v2 | Normal |
### ⏰ Tempo Esta Semana
- Total: 12h 30m
- Billable: 10h (80%)
```
---
### /desk status (Resumo Rápido)
```
1. Ler .desk-project
2. Verificar timer activo
3. Contar tarefas pendentes
4. Mostrar 1-2 linhas
```
**Output:**
```
📁 Stack (#65) | 🟢 Timer: #1446 (2h) | 📋 5 tarefas | ⏰ 12h esta semana
```
---
### /desk task <descrição>
```
1. Ler .desk-project (project_id, default_milestone, default_tags)
2. mcp__desk-crm-v3__create_task({
name: descrição,
rel_type: "project",
rel_id: project_id,
milestone_id: default_milestone,
assignees: [25], // AikTop
status: 1,
priority: 2,
description: "<p>Criado via /desk task</p>"
})
3. Confirmar: "Tarefa #X criada. Iniciar timer? [Sim/Não]"
4. Se sim: Invocar /time start X
```
---
### /desk log <mensagem>
```
1. Ler .desk-project (changelog_discussion_id)
2. Se não existe discussão:
a. Criar discussão "Changelog - [Projecto]"
b. Actualizar .desk-project com ID
3. Formatar mensagem em HTML:
<h4>[DATA] [tipo]: Mensagem</h4>
<p>Detalhes...</p>
4. mcp__desk-crm-v3__add_discussion_comment({
discussion_id: changelog_discussion_id,
content: html,
staff_id: 25
})
5. Confirmar
```
**Prefixos reconhecidos:**
- `feat:` - Nova funcionalidade
- `fix:` - Correcção
- `docs:` - Documentação
- `refactor:` - Refactoring
---
### /desk init
```
1. Perguntar projecto (ID ou pesquisar por nome)
2. mcp__desk-crm-v3__get_project({ project_id })
3. Criar .desk-project:
{
"project_id": 80,
"project_name": "Nome",
"client_id": 18,
"desk_url": "https://desk.descomplicar.pt/admin/projects/view/80",
"gdrive_folder": null,
"local_path": pwd,
"default_milestone": null,
"default_tags": ["development"],
"changelog_discussion_id": null,
"created_at": "2026-02-05"
}
4. Perguntar: "Criar discussão de changelog? [Sim/Não]"
5. Confirmar setup
```
---
## Estrutura .desk-project
```json
{
"project_id": 65,
"project_name": "Stack Workflow",
"client_id": null,
"desk_url": "https://desk.descomplicar.pt/admin/projects/view/65",
"gdrive_folder": null,
"local_path": "/home/ealmeida/.claude",
"default_milestone": null,
"default_tags": ["development"],
"changelog_discussion_id": 31,
"created_at": "2026-02-05"
}
```
---
## Sistema Triângulo
> Desk↔GDrive↔Local - Qualquer ponto leva aos outros
**Implementação:**
- **Desk:** Campos Pasta GDrive + Pasta Local preenchidos
- **Local:** .desk-project com todos os links
- **GDrive:** README.md com links Desk + Local
- **Obsidian:** Frontmatter com desk_project
---
## Integração /time
- `/desk` mostra timer activo se no projecto actual
- `/desk task` oferece iniciar timer
- Remover comandos de tempo duplicados
---
## Anti-Patterns
- **NUNCA** criar .desk-project sem verificar se projecto existe
- **NUNCA** usar /desk-time (usar /time)
- **NUNCA** criar tarefas sem projecto associado
---
## Changelog
### v3.0.0 (2026-02-05)
- Integração completa com /time
- Remover /desk-time (usar /time)
- Novo /desk status para resumo rápido
- Mostrar timer activo no contexto
- Sync bidirecional .desk-project
### v2.0.0 (2026-01-27)
- Sistema Triângulo implementado
- Auto-detecção .desk-project
### v1.0.0
- Versão inicial
---
*Skill v3.0.0 | 2026-02-05 | Descomplicar®*

View File

@@ -0,0 +1,10 @@
{
"project_id": 0,
"project_name": "Nome do Projecto",
"client_id": null,
"default_milestone": null,
"auto_log_time": false,
"default_task_tags": [],
"changelog_discussion_id": null,
"_comment": "Ficheiro gerado por /desk-init. Editar project_id e project_name."
}

View File

@@ -0,0 +1,573 @@
---
name: expense
description: >
Gestão de despesas Desk CRM v1.3. Registar, categorizar e analisar despesas com verificação obrigatória de categorias existentes. Processa despesas de tickets de contabilidade com anexos PDF. Conversão USD→EUR automática. NUNCA cria categoria duplicada. Use when "despesa", "expense", "gasto", "custo", "categoria despesa", "registar despesa", "expense report", "processar tickets contabilidade".
author: Descomplicar® Crescimento Digital
version: 1.5.0
quality_score: 88
user_invocable: true
category: finance
tags: [expense, despesas, finance, categories, desk-crm, costs, reporting, tickets, receipts]
desk_task: null
desk_project: 65
allowed-tools: Read, mcp__desk-crm-v3
mcps: desk-crm-v3
dependencies:
mcps: [desk-crm-v3]
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
---
# /expense - Gestão de Despesas
Skill para gestão de despesas com verificação obrigatória de categorias existentes.
## Metadata
- **Version**: 1.3.0
- **Author**: Descomplicar
- **Date**: 2026-02-05
- **Status**: Active
---
## Quando Usar
- Registar nova despesa
- Criar/gerir categorias de despesas
- Consultar despesas por período/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.)
## Quando NÃO Usar
- Para facturas a clientes (usar /invoice)
- Para orçamentos (usar /orcamento)
- Para pagamentos recebidos (usar /crm)
---
## REGRA CRÍTICA: CATEGORIAS
> **PROIBIDO criar categoria sem verificar se já existe.**
Esta regra é INVIOLÁVEL. SEMPRE:
```
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
```
**Violação desta regra causa duplicados que prejudicam relatórios financeiros.**
---
## Categorias Existentes (Referência)
| ID | Nome | Uso |
|----|------|-----|
| 1 | Telecomunicações | Net+móvel |
| 2 | Serviços Bancários | Comissões, taxas |
| 3 | Material de Escritório | Consumíveis |
| 4 | FB e Google ADS | Publicidade |
| 5 | E-mail MKT | ElasticEmail |
| 6 | Seguros | Apólices |
| 7 | Equipamento Informático e Audiovisual | Hardware |
| 8 | Remunerações | Salários pagos |
| 9 | Plugins e Recursos de Design | FULL, Freepik, etc |
| 10 | Alojamento de Servidores | Hetzner |
| 11 | Software Faturação | Moloni |
| 12 | Softwares Gestão | Everhour |
| 13 | Registo de Domínios | Ptisp, NameCheap |
| 14 | Impostos | SS, IRS, IVA |
| 15 | Planos Prestacionais | Pagamentos acordados |
| 16 | Manutenção e Suporte | Serviços técnicos |
| 17 | Outras | Não classificadas |
| 18 | Ofertas a Clientes | Brindes |
| 19 | Plataformas Armazenamento | Vimeo, MyAirBridge |
| 21 | Contabilidade | GONDOOFFICE |
| 22 | Salários e Vencimentos | Recibos vencimento |
| 23 | IRC - Imposto sobre Rendimento | Pagamentos IRC |
| 24 | IRS - Imposto sobre Rendimento | Retenções IRS |
| 25 | Contribuições Segurança Social | SS mensal |
| 26 | Hosting e Servidores | Alojamento web |
| 28 | Licenças Software | Painéis controlo |
| 29 | Reembolsos e Créditos | Valores recebidos |
| 38 | Serviços IA e APIs | Anthropic, OpenAI, CapSolver |
**NOTA:** Esta lista pode estar desactualizada. SEMPRE usar `get_expense_categories()` para lista actual.
---
## Protocolo
### 1. Registar Despesa
```
1. OBRIGATÓRIO: get_expense_categories(with_stats=true)
2. Identificar categoria correcta na lista
3. SE categoria não existe: PERGUNTAR antes de criar
4. SE dados vêm de PDFs: ler CADA ficheiro individualmente com pdftotext
- NUNCA copiar valor de um PDF para outro, mesmo com nomes semelhantes
- Cada documento tem o seu valor próprio
5. Recolher dados:
- category_id (obrigatório)
- amount (obrigatório - valor REAL extraído do documento)
- date (obrigatório, YYYY-MM-DD)
- note (obrigatório, descrição)
- client_id (opcional)
- project_id (opcional)
- billable (opcional, default false)
- tax (opcional)
6. create_expense com dados validados
7. Confirmar criação ao utilizador
```
### 2. Criar Categoria (APENAS se necessário)
```
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. 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)
2. Apresentar resumo ao utilizador
```
### 4. Análise 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
```
### 5. Processar Despesas de Tickets (Contabilidade)
> **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).
```
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. Após confirmação:
a. create_expense(category_id, amount, date, note, tax=1, reference)
b. UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {id}
c. mkdir -p uploads/expenses/{expenseid}
d. cp uploads/ticket_attachments/{ticketid}/*.pdf uploads/expenses/{expenseid}/
e. chown -R ealmeida:ealmeida uploads/expenses/{expenseid}
f. INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, ...)
8. Confirmar ao utilizador e passar ao próximo
```
#### 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
#### Conversão USD → EUR
> **OBRIGATÓRIO:** Todas as despesas devem ser registadas em EUR.
Taxa aproximada: **1 USD ≈ 0.92 EUR** (verificar taxa actual se necessário)
Exemplos:
- $19.99 USD → €18.39 EUR
- $100.00 USD → €92.00 EUR
```sql
-- Após criar despesa em USD, actualizar para EUR
UPDATE tblexpenses SET amount = {valor_eur}, currency = 2 WHERE id = {expense_id};
```
> **CRÍTICO:** O ID da moeda EUR é **2** (não 1). Usar currency=1 faz despesas não aparecerem nos relatórios.
#### 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 Email → Categoria
| Domínio Email | Categoria ID | Nome |
|---------------|--------------|------|
| anthropic.com | 38 | Serviços IA e APIs |
| openai.com | 38 | Serviços IA e APIs |
| payproglobal.com | 38 | Serviços IA e APIs (CapSolver) |
| elasticemail.com | 5 | E-mail MKT |
| hetzner.com | 10 | Alojamento de Servidores |
| meoempresas.pt | 1 | Telecomunicações |
| centos-webpanel.com | 28 | Licenças Software |
| canva.com | 9 | Plugins e Recursos de Design |
| freepik.com | 9 | Plugins e Recursos de Design |
| namecheap.com | 13 | Registo de Domínios |
| ptisp.pt | 13 | Registo de Domínios |
| vimeo.com | 19 | Plataformas Armazenamento |
| everhour.com | 12 | Softwares Gestão |
| cursor.com | 38 | Serviços IA e APIs (Cursor) |
> **NOTA:** `moloni.com` NÃO incluído - é plataforma de facturação, emails podem ser de qualquer fornecedor. Verificar conteúdo do PDF para identificar o fornecedor real.
#### Mapeamento Fornecedor (PDF) → Categoria
Para documentos financeiros transferidos (não tickets), identificar fornecedor pelo conteúdo do PDF:
| Padrão no PDF | Fornecedor | Categoria ID | Nome |
|---------------|-----------|--------------|------|
| `Gondooffice`, `Cubic Choices`, `GONDOOFFICE` | Gondooffice (Cubic Choices) | 21 | Contabilidade |
| `Autoridade Tributária`, `emiteDoc`, `AT -` | AT - Autoridade Tributária | 15 | Planos Prestacionais |
| `Staples`, `STAPLES`, `STP_ECOFACTURA` | Staples | 3 | Material de Escritório |
| `MEO`, `Serviços _ Compras`, `meoempresas` | MEO Empresas | 1 | Telecomunicações |
| `TOConline`, `metta`, `Recibo de Vencimento` | Salário/Vencimento | 22 | Salários e Vencimentos |
| `NOS Comunicações`, `NOS ` | NOS | 1 | Telecomunicações |
| `Vodafone` | Vodafone | 1 | Telecomunicações |
| `EDP`, `E-REDES` | EDP | 17 | Outras |
| `Segurança Social`, `Seg. Social` | Segurança Social | 25 | Contribuições SS |
| `Cursor`, `Anysphere`, `cursor.com` | Cursor (Anysphere) | 38 | Serviços IA e APIs |
#### 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
INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, visible_to_customer, staffid, dateadded)
VALUES ({expense_id}, 'expense', '{filename}', 'application/pdf', 0, 1, NOW())
```
#### 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}/`
---
## Comandos
| Comando | Descrição |
|---------|-----------|
| `/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 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 = 2**) |
| payment_mode | string | - | Método pagamento |
### 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 | EUR | € | Sim |
> **CRÍTICO:** Usar sempre `currency = 2` para EUR. O ID 1 não existe e causa despesas invisíveis nos relatórios.
---
## 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
### 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
### 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
### Tickets
13. Processar ticket sem verificar anexos PDF
14. Assumir que ticket com recibo = despesa não lançada
---
## 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
- [ ] Listar categorias existentes
- [ ] Validar categoria correcta
- [ ] Confirmar dados com utilizador
- [ ] Usar formato data YYYY-MM-DD
- [ ] Incluir nota descritiva
---
## Base de Dados
- **Tabela categorias:** `tblexpenses_categories`
- **Tabela despesas:** `tblexpenses`
- **Campo categoria:** `category` (ID da categoria)
---
## Changelog
### 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-05
**Motivo:** Prevenção de categorias duplicadas + processamento de tickets

View File

@@ -0,0 +1,265 @@
---
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
---
# /invoice v1.0 - Gestão de Facturação
Facturação completa via Desk CRM: criar, enviar, pagamentos.
---
## Comandos
| Comando | Função |
|---------|--------|
| `/invoice` | Resumo: pendentes, vencidas |
| `/invoice create <client>` | Criar factura directa |
| `/invoice from-estimate <id>` | Converter estimate aceite |
| `/invoice from-timesheets <project>` | Facturar horas |
| `/invoice send <id>` | Enviar ao cliente |
| `/invoice payment <id>` | Registar pagamento |
| `/invoice overdue` | Listar vencidas |
---
## Protocolo
### /invoice (Resumo)
```
1. mcp__desk-crm-v3__get_invoices({ status: [1,4] }) // Unpaid + Overdue
2. Calcular totais
3. Mostrar resumo
```
**Output:**
```markdown
## 💰 Facturação
### Pendentes (3)
| # | Cliente | Valor | Vencimento |
|---|---------|-------|------------|
| INV-2026-045 | TechCorp | €2.500 | 10/02 |
| INV-2026-044 | StartupX | €1.800 | 15/02 |
### Vencidas (1)
| # | Cliente | Valor | Dias |
|---|---------|-------|------|
| INV-2026-040 | OldClient | €950 | 15 dias |
### Totais
- Pendente: €4.300
- Vencido: €950
- **A receber:** €5.250
```
---
### /invoice create <client>
```
1. mcp__desk-crm-v3__search_customers({ query: client })
2. Se não encontrar: "Cliente não encontrado"
3. Perguntar itens:
- Descrição
- Quantidade
- Valor unitário
4. Calcular subtotal + IVA (23%)
5. mcp__desk-crm-v3__create_invoice({
client_id: client_id,
items: [...],
tax_id: 1, // IVA 23%
status: 1
})
6. "Factura #X criada (€Y). Enviar ao cliente? [Sim/Não]"
```
---
### /invoice from-estimate <id>
```
1. mcp__desk-crm-v3__get_estimate({ estimate_id: id })
2. Verificar status = 4 (Aceite)
- Se não aceite: "Estimate não aceite. Não é possível converter."
3. Mostrar detalhes do estimate
4. "Converter estimate #X para factura? [Sim/Não]"
5. mcp__desk-crm-v3__convert_estimate_to_invoice({ estimate_id: id })
6. "Factura #Y criada. Enviar? [Sim/Não]"
```
---
### /invoice from-timesheets <project>
```
1. mcp__desk-crm-v3__get_project({ project_id })
2. mcp__desk-crm-v3__get_timesheets_advanced({
project_id: project_id,
billed: false
})
3. Calcular total horas × rate do projecto
4. Mostrar resumo:
- Horas: Xh
- Rate: €Y/h
- Total: €Z
5. "Criar factura de €Z? [Sim/Não]"
6. mcp__desk-crm-v3__create_invoice({
client_id: project.client_id,
items: [{ description: "Horas - Projecto X", qty: hours, rate: rate }]
})
7. mcp__desk-crm-v3__bulk_mark_billed({ timesheet_ids: [...] })
8. "Factura #Y criada. Timesheets marcados como facturados."
```
---
### /invoice send <id>
```
1. mcp__desk-crm-v3__get_invoice({ invoice_id: id })
2. Verificar dados do cliente (email)
3. "Enviar factura #X para [email]? [Sim/Não]"
4. Marcar como enviada (status: 2)
5. Confirmar envio
```
---
### /invoice payment <id>
```
1. mcp__desk-crm-v3__get_invoice({ invoice_id: id })
2. Mostrar: Total €X, Pago €Y, Falta €Z
3. Perguntar:
- Valor pago
- Data pagamento
- Método (Transferência, MB, PayPal, etc.)
4. mcp__desk-crm-v3__process_payment({
invoice_id: id,
amount: valor,
payment_date: data,
payment_mode: metodo
})
5. Confirmar: "Pagamento de €V registado. Saldo: €S"
```
---
### /invoice overdue
```
1. mcp__desk-crm-v3__overdue_invoices_report()
2. Ordenar por dias de atraso
3. Mostrar lista com opções
```
**Output:**
```markdown
## ⚠️ Facturas Vencidas (3)
| # | Cliente | Valor | Dias | Contacto |
|---|---------|-------|------|----------|
| INV-040 | OldClient | €950 | 15 | joao@old.pt |
| INV-038 | SlowPay | €2.100 | 22 | maria@slow.pt |
| INV-035 | LateInc | €750 | 30 | admin@late.pt |
**Total vencido:** €3.800
Acções:
- [Enviar lembrete a todos]
- [Ver detalhes de #X]
```
---
## Status Invoices
| ID | Status |
|----|--------|
| 1 | Unpaid (não paga) |
| 2 | Paid (paga) |
| 3 | Partially Paid (parcial) |
| 4 | Overdue (vencida) |
| 5 | Cancelled (cancelada) |
---
## Workflow Completo: Estimate → Invoice → Payment
```
1. Estimate aceite pelo cliente (status: 4)
2. /invoice from-estimate <estimate_id>
3. /invoice send <invoice_id>
4. Cliente paga
5. /invoice payment <invoice_id>
6. Factura fechada (status: 2)
```
---
## Workflow: Facturar Timesheets Mensais
```
1. Final do mês
2. /invoice from-timesheets <project_id>
3. Revê horas e valores
4. Confirma criação
5. Timesheets marcados como facturados
6. /invoice send <id>
```
---
## IVA (Portugal)
| Taxa | Uso |
|------|-----|
| 23% | Serviços gerais (default) |
| 13% | Alimentação |
| 6% | Bens essenciais |
---
## Anti-Patterns
- **NUNCA** converter estimate não-aceite
- **NUNCA** criar factura sem confirmar valores
- **NUNCA** enviar factura sem verificar dados cliente
- **NUNCA** registar pagamento sem confirmar valor
---
## Integração
- **/crm 360:** Mostra facturas pendentes do cliente
- **/today:** Alerta de facturas vencidas
- **/report weekly:** Inclui facturação emitida/recebida
---
## Changelog
### v1.0.0 (2026-02-05)
- Versão inicial
- Criar, enviar, pagamentos
- Facturar timesheets
- Relatório de vencidas
---
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*

View File

@@ -0,0 +1,498 @@
---
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
---
# Skill /orcamento - Criação Sistemática de Orçamentos
Skill para criar orçamentos profissionais baseados na tabela oficial de preços Descomplicar®, com integração directa ao CRM.
## Quando Usar
- Criar orçamento para cliente novo ou existente
- Gerar proposta comercial (proposal ou estimate)
- Consultar preços oficiais de produtos/serviços
- Calcular valores com IVA e anuidades
- Integrar orçamento directamente no CRM
## Quando NÃO 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)
---
## Protocolo
### Fontes de Dados (OBRIGATÓRIO)
**IMPORTANTE**: Antes de criar qualquer orçamento, ler SEMPRE os dados actualizados de:
```
/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
```
### Estrutura do CSV Principal (tabela-geral.csv)
| 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 |
### 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
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:
- Nome da empresa
- NIF (opcional)
- Email contacto
3. Validar cliente existe ou criar novo:
```
mcp__desk-crm-v3__create_customer company="..." vat="..." ...
```
### Fase 2: Selecção 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)
### Fase 3: Personalização
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`
### Fase 4: Geração do Orçamento
1. Calcular valores finais:
- Subtotal por item
- IVA 23%
- Total
- Anuidade (se aplicável)
2. 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"
```
3. Apresentar resumo ao utilizador com link para CRM
## Tabela de Preços Base
Ver `references/pricing-guide.md` para tabela completa.
### 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 |
### Funcionalidades Frequentes
| 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 |
### Serviços Recorrentes
| 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
```
## Estrutura de Items para API
Cada item do orçamento segue o formato:
```json
{
"description": "Descrição do serviço",
"qty": 1,
"rate": 700,
"unit": "un"
}
```
**Unidades:**
- `un` - Unidade (projecto/item único)
- `mes` - Mês (serviço recorrente)
- `ano` - Ano (anuidade)
## Checklist de Execução
- [ ] Cliente identificado/criado no CRM
- [ ] Tipo de orçamento seleccionado
- [ ] Template carregado
- [ ] Funcionalidades adicionais identificadas
- [ ] Valores calculados (subtotal + IVA)
- [ ] Anuidade calculada (se aplicável)
- [ ] Estimate criado no CRM
- [ ] 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
```
## Códigos de Produtos (tabela-geral.csv)
### 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€ |
### 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€ |
### 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€ |
### 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€ |
## Referências
- `references/pricing-guide.md` - Tabela de preços rápida
- `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
```
---
## Datasets Dify (Consulta Obrigatória)
Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP:
| Dataset | ID | Prioridade |
|---------|----|-----------:|
| **Serviços 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__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
- Comparar funcionalidades entre pacotes
- Criar proposta de valor diferenciada
---
## Instrumentação Automática
Esta skill grava métricas automaticamente para análise PDCA.
### Baseline
| Métrica | 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
) VALUES (
'skill', '/orcamento', {DURACAO_MS}, '{STATUS}', 25,
{KB_CONSULTADO}, {CACHE_HIT}, {TOOL_CALLS}, {PROJECT_ID}
);
```
### 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
);
```
### Ver Métricas
```bash
/metrics /orcamento
```
### Protocolo
Ver `~/.claude/skills/_core/instrumentation-protocol.md`
---
**Versão**: 3.1.0 | **Data**: 2026-02-03 | **Instrumentação**: Activa

View File

@@ -0,0 +1,193 @@
# Tabela de Preços Oficial Descomplicar®
Referência oficial para orçamentação - Fonte: Orçamentador Web Sites
## 1. Websites Base
| Produto | Configuração | Anuidade | Prazo | Descrição |
|---------|--------------|----------|-------|-----------|
| **StarterWP** | 700€ | 250€ | 3-5 sem | Pequenas empresas, presença online básica |
| **CorporateWP** | 900€ | 299€ | 4-6 sem | Empresas médias/grandes, solução robusta |
| **eCommerceWP** | 1.100€ | 349€ | 7-9 sem | Loja online completa |
| **ChallengeWP** | 700€ | 250€ | 8-10 sem | Websites fora do padrão, interactivos |
| **CareWP** | 1.300€ | 350€ | 4-6 sem | Clínicas e consultórios |
## 2. Infraestrutura
| Item | Valor |
|------|-------|
| Registo de Domínio | 20€/ano |
| Alojamento Premium SSD NVMe | 100€/ano |
## 3. Importação de Conteúdos
| Tipo | De WP | Outras Fontes |
|------|-------|---------------|
| Artigos | 35€ | 75€ |
| Multimédia | 35€ | 75€ |
| Utilizadores | 35€ | 75€ |
| Produtos | 35€ | 75€ |
| Encomendas | 35€ | 75€ |
## 4. Criação de Conteúdos
| Tipo | Criar Página | Produção Conteúdo |
|------|--------------|-------------------|
| Artigos | 50€ | 50€ |
| Produtos | 50€ | 50€ |
| Serviços | 50€ | 50€ |
| Colaboradores | 50€ | 50€ |
| Parceiros | 50€ | 50€ |
| Clientes | 50€ | 50€ |
| Representantes | 50€ | 50€ |
| Portfólios | 50€ | 50€ |
| Downloads | 50€ | 50€ |
| Formulários Simples | 50€ | 50€ |
## 5. Funcionalidades de Gestão
| Funcionalidade | Instalação | Configuração | Anuidade | Notas |
|----------------|------------|--------------|----------|-------|
| Finance Control | 75€ | 125€ | 75€ | - |
| EasyAppointment | 55€ | 120€ | 50€ | Agendas |
| EasyBooking | 120€ | 30€ | 50€ | Produtos/Serviços |
| EventManager | 75€ | 90€ | 60€ | Por nº eventos |
| MemberShip | 149€ | 90€ | 100€ | Tipos de membros |
| Support | 90€ | 75€ | 90€ | Nº operadores |
## 6. Funcionalidades e-Commerce
| Funcionalidade | Instalação | Configuração | Anuidade | Notas |
|----------------|------------|--------------|----------|-------|
| CommerceMail | 50€ | 50€ | 50€ | - |
| CartRecovery | 90€ | 100€ | 90€ | - |
| MarketPlace | - | 150€ | - | Por revendedor |
| Wholesale | - | 150€ | 129€ | Tipos de clientes |
| ShopBuilder | - | 5€ | - | Por produto |
| Tratamento Imagens | - | 10€ | - | Por imagem |
| Config Pagamento | - | 50€ | - | Por gateway |
| Config Transportador | - | 50€ | - | Por transportador |
| Config Preço Transporte | - | 50€ | - | - |
| Config Tracking | - | 50€ | - | Por transportador |
| Filtros Inteligentes | - | 50€ | - | - |
## 7. Funcionalidades Marketing
| Funcionalidade | Instalação | Configuração | Anuidade | Notas |
|----------------|------------|--------------|----------|-------|
| AutoCRM | - | 60€ | - | Autoresponder |
| AutoCRM PRO | 100€ | 75€ | 90€ | Campanhas |
| SmartSEO | - | 25€ | - | Por artigo |
| Analytics | - | 75€ | - | Conversões |
| Engage | - | 60€ | - | Forms + autoresponder |
| Forms Simples | - | 35€ | - | - |
| Forms Inteligentes | - | 150€ | - | - |
## 8. Funcionalidades Conteúdo
| Funcionalidade | Instalação | Configuração | Anuidade | Notas |
|----------------|------------|--------------|----------|-------|
| AIssistant PRO | 60€ | 50€ | 60€ | Config personalizadas |
| Docs | - | 50€ | 50€ | Áreas documentação |
| PodCaster | - | 50€ | 60€ | Canais distribuição |
| ImageBanker | - | 20€ | - | Fontes imagens |
## 9. Funcionalidades Design
| Funcionalidade | Configuração | Notas |
|----------------|--------------|-------|
| MegaMenu | 50€ | Por área |
| MyLabel | 100€ | Personalização BackOffice |
## 10. Ferramentas e Segurança
| Funcionalidade | Configuração | Anuidade | Notas |
|----------------|--------------|----------|-------|
| SMTP | 50€ | - | Config envio |
| Integrator | 50€ | - | Integrações |
| Backup | 50€ | - | Regras backup |
| Defender | 50€ | - | Regras personalizadas |
| Hideout | 50€ | 50€ | Sistemas a ocultar |
## 11. Performance
| Funcionalidade | Configuração | Anuidade |
|----------------|--------------|----------|
| Speed | 50€ | 50€ |
| Compress (CloudFlare) | 35€ | - |
| PluginManager | 35€ | - |
## 12. Outras Funcionalidades
| Funcionalidade | Configuração | Anuidade |
|----------------|--------------|----------|
| Botão WhatsApp | 25€ | - |
| Chat da Página | 50€ | 50€ |
| Pixel Facebook | 25€ | - |
| GTM | 25€ | - |
| Perguntas Frequentes | 50€ | 45€ |
| Testemunhos Internos | 50€ | 45€ |
| Testemunhos Google | 50€ | - |
| Partilha Redes Sociais | 75€ | 65€ |
| Feed Redes Sociais | 50€ | - |
---
## Fórmulas de Cálculo
### Website Simples
```
Total = Base + Funcionalidades + Conteúdos
Anuidade = Anuidade_Base + Anuidades_Funcionalidades
```
### Exemplo: Website Corporativo com Agendamento
```
CorporateWP: 900€
EasyAppointment: 55€ + 120€ = 175€
Chat: 50€
Pixel + GTM: 50€
---------------------------------
Subtotal: 1.175€
IVA 23%: 270,25€
TOTAL: 1.445,25€
Anuidade: 299€ + 50€ + 50€ = 399€
```
### Exemplo: E-commerce com 50 Produtos
```
eCommerceWP: 1.100€
ShopBuilder (50 prod): 250€
Config Pagamento: 50€
Config Transportador: 50€
CartRecovery: 90€ + 100€ = 190€
---------------------------------
Subtotal: 1.640€
IVA 23%: 377,20€
TOTAL: 2.017,20€
Anuidade: 349€ + 90€ = 439€
```
---
## Notas Importantes
1. **IVA**: Todos os valores são líquidos. Acresce IVA 23%.
2. **Anuidade**: Inclui hosting, SSL, actualizações e suporte básico.
3. **Pagamento**:
- 50% na adjudicação
- 50% na entrega
4. **Validade**: Orçamentos válidos por 30 dias.
5. **Personalização**: Projectos fora do standard requerem orçamento específico.
---
**Descomplicar® Crescimento Digital**
NIF: 514 623 168 | descomplicar.pt
Última actualização: Janeiro 2025

View File

@@ -0,0 +1,171 @@
# Template: E-commerce
## Produto Base
### eCommerceWP (1.100€ + 349€/ano)
Solução completa para lojas online.
**Incluído:**
- Sistema e-commerce completo (WooCommerce)
- Até 20 produtos iniciais
- Gestão de stock
- Pagamentos online básicos
- Gestão de entregas
- SEO e-commerce
- Hosting Premium SSD NVMe (30GB)
- SSL E-commerce dedicado
- Domínio (.pt ou .com)
- Suporte 90 dias
**Prazo:** 7-9 semanas
---
## Configuração de Produtos
| Item | Valor | Notas |
|------|-------|-------|
| ShopBuilder | 5€/produto | Inserção de produtos |
| Tratamento Imagens | 10€/imagem | Optimização imagens |
### Pacotes de Produtos
| Quantidade | Valor | Economia |
|------------|-------|----------|
| 20 produtos | Incluído | - |
| 50 produtos | 150€ | - |
| 100 produtos | 280€ | 12% |
| 200 produtos | 500€ | 17% |
| 500 produtos | 1.000€ | 20% |
---
## Funcionalidades E-commerce
| Funcionalidade | Instalação | Config | Anuidade | Notas |
|----------------|------------|--------|----------|-------|
| Config Gateway Pagamento | - | 50€ | - | MB Way, Multibanco, Visa |
| Config Transportador | - | 50€ | - | CTT, DPD, GLS, etc |
| Config Preço Transporte | - | 50€ | - | Regras de portes |
| Config Tracking | - | 50€ | - | Por transportador |
| Filtros Inteligentes | - | 50€ | - | Filtros de pesquisa |
| CommerceMail | 50€ | 50€ | 50€ | Emails automáticos |
| CartRecovery | 90€ | 100€ | 90€ | Recuperação carrinhos |
| MarketPlace | - | 150€ | - | Multi-vendedor |
| Wholesale | - | 150€ | 129€ | Preços B2B |
---
## Funcionalidades Adicionais
### Marketing E-commerce
| Funcionalidade | Instalação | Config | Anuidade |
|----------------|------------|--------|----------|
| AutoCRM PRO | 100€ | 75€ | 90€ |
| SmartSEO | - | 25€/artigo | - |
| Analytics | - | 75€ | - |
| Engage | - | 60€ | - |
### Suporte e Ferramentas
| Funcionalidade | Config | Anuidade |
|----------------|--------|----------|
| Chat da Página | 50€ | 50€ |
| Botão WhatsApp | 25€ | - |
| Pixel Facebook | 25€ | - |
| GTM | 25€ | - |
| FAQ | 50€ | 45€ |
---
## Questões de Personalização
1. **Número de produtos**: Quantos produtos iniciais?
2. **Gateways pagamento**: MB Way? Multibanco? Visa? PayPal?
3. **Transportadoras**: CTT? DPD? GLS? Outras?
4. **Funcionalidades extras**: Recuperação de carrinhos? Wholesale?
5. **Marketplace**: Multi-vendedor?
6. **Migração**: Existe loja actual? Dados a migrar?
---
## Importação de Dados
| Tipo | De WP | Outras Fontes |
|------|-------|---------------|
| Produtos | 35€ | 75€ |
| Encomendas | 35€ | 75€ |
| Utilizadores | 35€ | 75€ |
---
## Exemplos de Orçamento
### E-commerce Básico (50 produtos)
```
eCommerceWP (base): 1.100€
ShopBuilder (30 extra x 5€): 150€
Config Pagamento (MB+Visa): 100€
Config Transportador (CTT): 50€
Pixel Facebook + GTM: 50€
-----------------------------------------
Subtotal: 1.450€
IVA 23%: 333,50€
TOTAL: 1.783,50€
Anuidade: 349€/ano
```
### E-commerce Completo (100 produtos)
```
eCommerceWP (base): 1.100€
ShopBuilder (80 extra x 5€): 400€
Config Pagamento (3 gateways): 150€
Config Transportador (2): 100€
Config Tracking (2): 100€
CartRecovery (90+100): 190€
CommerceMail (50+50): 100€
Chat + WhatsApp: 75€
Pixel + GTM: 50€
-----------------------------------------
Subtotal: 2.265€
IVA 23%: 520,95€
TOTAL: 2.785,95€
Anuidade: 349€ + 90€ + 50€ = 489€/ano
```
---
## Items JSON para API
### E-commerce Básico
```json
[
{"description": "eCommerceWP - Loja Online Completa", "qty": 1, "rate": 1100, "unit": "un"},
{"description": "ShopBuilder - Inserção de Produtos (30 extra)", "qty": 30, "rate": 5, "unit": "un"},
{"description": "Configuração Gateway Pagamento (MB+Visa)", "qty": 2, "rate": 50, "unit": "un"},
{"description": "Configuração Transportador (CTT)", "qty": 1, "rate": 50, "unit": "un"},
{"description": "Pixel Facebook + GTM", "qty": 1, "rate": 50, "unit": "un"},
{"description": "Anuidade (hosting + suporte)", "qty": 1, "rate": 349, "unit": "ano"}
]
```
### E-commerce Completo
```json
[
{"description": "eCommerceWP - Loja Online Completa", "qty": 1, "rate": 1100, "unit": "un"},
{"description": "ShopBuilder - Inserção de Produtos (80 extra)", "qty": 80, "rate": 5, "unit": "un"},
{"description": "Configuração Gateways Pagamento", "qty": 3, "rate": 50, "unit": "un"},
{"description": "Configuração Transportadoras", "qty": 2, "rate": 50, "unit": "un"},
{"description": "Configuração Tracking Portes", "qty": 2, "rate": 50, "unit": "un"},
{"description": "CartRecovery - Recuperação de Carrinhos", "qty": 1, "rate": 190, "unit": "un"},
{"description": "CommerceMail - Emails Automáticos", "qty": 1, "rate": 100, "unit": "un"},
{"description": "Chat da Página + WhatsApp", "qty": 1, "rate": 75, "unit": "un"},
{"description": "Pixel Facebook + GTM", "qty": 1, "rate": 50, "unit": "un"},
{"description": "Anuidade (hosting + suporte + CartRecovery + CommerceMail)", "qty": 1, "rate": 489, "unit": "ano"}
]
```

View File

@@ -0,0 +1,153 @@
# Template: Manutenção
## Avença Manutenção
Baseado em orçamentos reais aceites (ex: IGV IgnitionVortex).
### Manutenção Mensal (150€/mês)
**Incluído:**
- Actualizações WordPress core
- Actualizações de plugins
- Actualizações de tema
- Backups semanais
- Monitorização uptime
- Suporte técnico (2h/mês)
- Relatório mensal
**Compromisso:** 6 ou 12 meses
---
## Variantes
### Basic (100€/mês)
- Actualizações mensais
- Backup semanal
- Monitorização básica
- 1h suporte/mês
### Standard (150€/mês) - **Recomendado**
- Actualizações semanais
- Backup diário
- Monitorização uptime + performance
- Scan malware mensal
- 2h suporte/mês
### Premium (250€/mês)
- Actualizações prioritárias
- Backup diário + offsite
- Monitorização avançada
- Segurança proactiva (WAF)
- Optimização performance
- 4h suporte/mês
### Enterprise (400€/mês)
- Actualizações com staging
- Backup contínuo + DR
- Monitorização 24/7
- Segurança enterprise
- CDN incluído
- 8h suporte/mês
- SLA 4h úteis
---
## Funcionalidades de Segurança
| Funcionalidade | Config | Anuidade |
|----------------|--------|----------|
| Backup | 50€ | - |
| Defender | 50€ | - |
| Hideout | 50€ | 50€ |
| Speed | 50€ | 50€ |
---
## Funcionalidades de Performance
| Funcionalidade | Config | Anuidade |
|----------------|--------|----------|
| Speed (CDN) | 50€ | 50€ |
| Compress (CloudFlare) | 35€ | - |
| PluginManager | 35€ | - |
---
## SLA por Variante
| Variante | Tempo Resposta | Uptime Garantido |
|----------|----------------|------------------|
| Basic | 48h úteis | 99% |
| Standard | 24h úteis | 99.5% |
| Premium | 8h úteis | 99.9% |
| Enterprise | 4h úteis | 99.95% |
---
## Questões de Personalização
1. **Variante**: Basic, Standard, Premium ou Enterprise?
2. **Tipo de site**: Institucional, blog, e-commerce?
3. **Criticidade**: Tolerância a downtime?
4. **Horas suporte**: Necessidade média mensal?
5. **Segurança extra**: WAF? Scan malware?
6. **Performance**: CDN necessário?
---
## Exemplos de Orçamento
### Manutenção Standard (6 meses)
```
Manutenção Standard: 150€ x 6 = 900€
Subtotal: 900€
IVA 23%: 207€
TOTAL: 1.107€
Facturação: Mensal antecipada
```
### Website + Manutenção (combo)
```
CorporateWP (base): 900€
Manutenção 6 meses: 900€
-----------------------------------------
Subtotal: 1.800€
IVA 23%: 414€
TOTAL: 2.214€
Anuidade: 299€/ano
```
---
## Items JSON para API
### Manutenção Standard (6 meses)
```json
[
{"description": "Manutenção Standard - Website WordPress", "qty": 6, "rate": 150, "unit": "mes"}
]
```
### Website + Manutenção (combo)
```json
[
{"description": "CorporateWP - Website Corporativo", "qty": 1, "rate": 900, "unit": "un"},
{"description": "Manutenção Standard (6 meses)", "qty": 6, "rate": 150, "unit": "mes"},
{"description": "Anuidade (hosting + suporte)", "qty": 1, "rate": 299, "unit": "ano"}
]
```
---
## Notas
- Valores baseados no orçamento ORC-88 (IGV) aceite
- Compromisso mínimo recomendado: 6 meses
- Horas extra facturadas a 40€/hora
- Desenvolvimento/alterações não incluído (60€/hora)

View File

@@ -0,0 +1,128 @@
# Template: Marketing Digital 360
## Avença Marketing 360
Baseado em orçamentos reais aceites (ex: SNT Sintricare).
### Avença Mensal (459€/mês)
**Incluído:**
- Estratégia de Marketing Digital
- Gestão de orçamento e planeamento
- Gestão Avançada de Redes Sociais (4 posts/mês)
- SEO Avançado
- Análise de Desempenho
- Relatório Mensal
- Reuniões Periódicas
- Pack Combinado 360º (até 10h/mês)
**Compromisso:** 12 meses
**Desconto compromisso:** 15% (valor original ~540€/mês)
---
## Serviços Adicionais
### Conteúdo
| Serviço | Valor |
|---------|-------|
| Podcast mensal (produção completa) | 150€/mês |
| Artigos blog (SEO optimizado) | 25€/artigo |
| Posts extra redes sociais | 15€/post |
| Copywriting (hora) | 65€/hora |
### Publicidade
| Serviço | Valor |
|---------|-------|
| Gestão Google Ads | 15% do budget (mín. 150€) |
| Gestão Meta Ads | 15% do budget (mín. 150€) |
| Setup campanhas | 100€/campanha |
### Email Marketing
| Serviço | Valor |
|---------|-------|
| AutoCRM PRO (campanhas) | 175€ setup + 90€/ano |
| Newsletter mensal | 60€/envio |
---
## Questões de Personalização
1. **Redes sociais**: Quais plataformas? (Facebook, Instagram, LinkedIn, TikTok)
2. **Frequência posts**: 4/mês incluído, mais?
3. **Conteúdo**: Podcast? Blog? Vídeos?
4. **Publicidade**: Budget para Ads?
5. **Email marketing**: Necessário?
6. **Horas extra**: Previsão de necessidades além das 10h?
---
## Variantes
### Essential (350€/mês)
- Gestão 2 redes sociais
- 4 posts/mês
- Relatório mensal básico
- 5h/mês incluídas
### Growth (459€/mês) - **Recomendado**
- Gestão 3 redes sociais
- 8 posts/mês
- SEO + Analytics
- Relatório detalhado
- 10h/mês incluídas
### Scale (750€/mês)
- Gestão omni-channel
- 16 posts/mês
- Podcast mensal incluído
- Campanhas Ads incluídas (gestão)
- 20h/mês incluídas
---
## Exemplo de Orçamento
### Marketing 360 Anual (12 meses)
```
Avença Marketing 360: 459€ x 12 = 5.508€
Subtotal: 5.508€
IVA 23%: 1.266,84€
TOTAL: 6.774,84€
Facturação: Mensal antecipada
```
---
## Items JSON para API
### Avença Marketing 360 (mensal)
```json
[
{"description": "Avença 360º Marketing e Comunicação Digital", "qty": 12, "rate": 459, "unit": "mes"}
]
```
### Marketing 360 + Website (combo)
```json
[
{"description": "CorporateWP - Website Corporativo", "qty": 1, "rate": 900, "unit": "un"},
{"description": "Avença 360º Marketing e Comunicação Digital", "qty": 12, "rate": 459, "unit": "mes"},
{"description": "Anuidade (hosting + suporte)", "qty": 1, "rate": 299, "unit": "ano"}
]
```
---
## Notas
- Valores baseados no orçamento ORC-76 (SNT Sintricare) aceite
- Compromisso mínimo 12 meses com desconto 15%
- Budget de publicidade não incluído nos valores
- Horas extra facturadas a 60€/hora (Combi rate)

View File

@@ -0,0 +1,180 @@
# Template: Website Corporativo
## Produtos Base
### StarterWP (700€ + 250€/ano)
Para pequenas empresas ou empreendedores.
**Incluído:**
- Até 5 páginas profissionais
- Template Premium optimizado
- Design responsivo
- Formulário de contacto
- SEO básico
- Hosting Premium SSD NVMe
- SSL Let's Encrypt
- Domínio (.pt ou .com)
**Prazo:** 3-5 semanas
### CorporateWP (900€ + 299€/ano)
Para empresas médias e grandes.
**Incluído:**
- Até 10 páginas profissionais
- Template Premium personalizado
- Design responsivo avançado
- Formulários inteligentes
- SEO optimizado
- Hosting Premium SSD NVMe
- SSL Let's Encrypt
- Domínio (.pt ou .com)
**Prazo:** 4-6 semanas
### CareWP (1.300€ + 350€/ano)
Para clínicas e consultórios.
**Incluído:**
- Páginas ilimitadas
- Sistema agendamento integrado
- Gestão de pacientes
- Template especializado saúde
- Conformidade RGPD
- Hosting Premium SSD NVMe
- SSL Healthcare
**Prazo:** 4-6 semanas
### ChallengeWP (700€ + 250€/ano)
Para websites fora do padrão convencional.
**Incluído:**
- Funcionalidades interactivas
- Engajamento de audiência
- Template dinâmico
- Hosting Premium SSD NVMe
**Prazo:** 8-10 semanas
---
## Funcionalidades Adicionais
### Gestão
| Funcionalidade | Instalação | Config | Anuidade |
|----------------|------------|--------|----------|
| Finance Control | 75€ | 125€ | 75€ |
| EasyAppointment (Agendas) | 55€ | 120€ | 50€ |
| EasyBooking (Reservas) | 120€ | 30€ | 50€ |
| EventManager | 75€ | 90€ | 60€ |
| MemberShip | 149€ | 90€ | 100€ |
| Support (Tickets) | 90€ | 75€ | 90€ |
### Marketing
| Funcionalidade | Instalação | Config | Anuidade |
|----------------|------------|--------|----------|
| AutoCRM (Autoresponder) | - | 60€ | - |
| AutoCRM PRO (Campanhas) | 100€ | 75€ | 90€ |
| SmartSEO | - | 25€/artigo | - |
| Analytics | - | 75€ | - |
| Engage (Forms + auto) | - | 60€ | - |
| Forms Simples | - | 35€ | - |
| Forms Inteligentes | - | 150€ | - |
### Conteúdo
| Funcionalidade | Instalação | Config | Anuidade |
|----------------|------------|--------|----------|
| AIssistant PRO | 60€ | 50€ | 60€ |
| Docs | - | 50€ | 50€ |
| PodCaster | - | 50€ | 60€ |
| ImageBanker | - | 20€ | - |
### Design
| Funcionalidade | Config |
|----------------|--------|
| MegaMenu | 50€ |
| MyLabel (BackOffice) | 100€ |
### Outras
| Funcionalidade | Config | Anuidade |
|----------------|--------|----------|
| Botão WhatsApp | 25€ | - |
| Chat da Página | 50€ | 50€ |
| Pixel Facebook | 25€ | - |
| GTM | 25€ | - |
| FAQ | 50€ | 45€ |
| Testemunhos Internos | 50€ | 45€ |
| Testemunhos Google | 50€ | - |
| Partilha Redes | 75€ | 65€ |
| Feed Redes | 50€ | - |
---
## Criação de Conteúdos
| Tipo | Criar Página | Produção |
|------|--------------|----------|
| Artigos | 50€ | 50€ |
| Serviços | 50€ | 50€ |
| Portfólios | 50€ | 50€ |
| Downloads | 50€ | 50€ |
---
## Questões de Personalização
1. **Produto base**: StarterWP, CorporateWP, CareWP ou ChallengeWP?
2. **Número de páginas**: Quantas páginas além do incluído?
3. **Agendamento**: Precisa de sistema de marcações?
4. **Formulários**: Simples ou inteligentes?
5. **Integrações**: Redes sociais? Analytics? Chat?
6. **Conteúdo**: Cliente fornece ou produção incluída?
---
## Exemplo de Orçamento
### Website Corporativo com Agendamento
```
CorporateWP (base): 900€
EasyAppointment (55+120): 175€
Chat da Página: 50€
Pixel Facebook + GTM: 50€
Forms Inteligentes: 150€
-----------------------------------------
Subtotal: 1.325€
IVA 23%: 304,75€
TOTAL: 1.629,75€
Anuidade: 299€ + 50€ + 50€ = 399€/ano
```
---
## Items JSON para API
### StarterWP Base
```json
[
{"description": "StarterWP - Website Profissional", "qty": 1, "rate": 700, "unit": "un"},
{"description": "Anuidade (hosting + suporte)", "qty": 1, "rate": 250, "unit": "ano"}
]
```
### CorporateWP com Agendamento
```json
[
{"description": "CorporateWP - Portal Corporativo", "qty": 1, "rate": 900, "unit": "un"},
{"description": "EasyAppointment - Sistema de Agendamento", "qty": 1, "rate": 175, "unit": "un"},
{"description": "Chat da Página", "qty": 1, "rate": 50, "unit": "un"},
{"description": "Pixel Facebook + GTM", "qty": 1, "rate": 50, "unit": "un"},
{"description": "Anuidade (hosting + suporte + agendamento)", "qty": 1, "rate": 399, "unit": "ano"}
]
```

View File

@@ -0,0 +1,296 @@
---
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
---
# /ticket v1.0 - Gestão de Suporte
Tickets de suporte via Desk CRM: ver, responder, fechar.
---
## Comandos
| Comando | Função |
|---------|--------|
| `/ticket` | Ver tickets abertos |
| `/ticket view <id>` | Ver detalhes |
| `/ticket reply <id>` | Responder |
| `/ticket close <id>` | Fechar com mensagem |
| `/ticket escalate <id>` | Converter em tarefa |
| `/ticket create` | Criar ticket interno |
---
## Protocolo
### /ticket (Listar Abertos)
```
1. mcp__desk-crm-v3__get_tickets({ status: [1,2,3] }) // Aberto, Em Progresso, Respondido
2. Ordenar por prioridade, depois por data
3. Mostrar lista
```
**Output:**
```markdown
## 🎫 Tickets Abertos (4)
### 🔴 Urgentes
| # | Cliente | Assunto | Há |
|---|---------|---------|-----|
| #234 | TechCorp | Erro crítico login | 2h |
### 🟠 Alta
| # | Cliente | Assunto | Há |
|---|---------|---------|-----|
| #232 | StartupX | Funcionalidade não funciona | 1d |
### 🟢 Normal
| # | Cliente | Assunto | Há |
|---|---------|---------|-----|
| #230 | ClienteY | Dúvida facturação | 2d |
| #228 | ClienteZ | Pedido alteração | 3d |
```
---
### /ticket view <id>
```
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
2. Mostrar detalhes completos:
- Cliente, contacto
- Assunto, mensagem original
- Histórico de respostas
- Anexos
```
**Output:**
```markdown
## 🎫 Ticket #234
### Detalhes
- **Cliente:** TechCorp (#45)
- **Contacto:** João Silva (joao@techcorp.pt)
- **Departamento:** Suporte Técnico
- **Prioridade:** 🔴 Urgente
- **Status:** Aberto
- **Criado:** 2026-02-05 10:30
### Mensagem
> Bom dia, desde esta manhã não consigo fazer login no sistema.
> Aparece "Credenciais inválidas" mas a password está correcta.
> Urgente pois preciso aceder hoje.
### Histórico (2)
**[2026-02-05 11:00] Staff - Emanuel:**
Olá João, vou verificar imediatamente.
**[2026-02-05 11:15] Cliente - João:**
Obrigado, aguardo.
### Acções
- [Responder] [Fechar] [Escalar para tarefa]
```
---
### /ticket reply <id>
```
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
2. Mostrar contexto (última mensagem)
3. Pedir resposta ao utilizador
4. Formatar em HTML
5. mcp__desk-crm-v3__reply_ticket({
ticket_id: id,
message: resposta_html,
status: 3 // Respondido
})
6. "Resposta enviada. Aguardar resposta cliente? [Sim] ou Fechar? [Fechar]"
```
---
### /ticket close <id>
```
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
2. Mostrar contexto
3. Pedir mensagem de fecho (opcional)
4. mcp__desk-crm-v3__close_ticket({
ticket_id: id,
message: mensagem_fecho
})
5. "Ticket #X fechado."
```
**Mensagem de fecho default:**
```html
<p>Ticket resolvido. Obrigado pelo contacto.</p>
<p>Se tiver mais questões, não hesite em abrir novo ticket.</p>
```
---
### /ticket escalate <id>
```
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
2. Perguntar projecto destino
3. mcp__desk-crm-v3__create_task({
name: "Ticket #X: [Assunto]",
description: "<h4>Escalado de Ticket #X</h4><p>[conteúdo]</p>",
rel_type: "project",
rel_id: project_id,
priority: 3, // Alta
assignees: [25]
})
4. mcp__desk-crm-v3__reply_ticket({
ticket_id: id,
message: "<p>Escalado para tarefa interna #Y para resolução.</p>",
internal: true // Nota interna
})
5. mcp__desk-crm-v3__close_ticket({ ticket_id: id })
6. "Ticket escalado para tarefa #Y no projecto Z."
```
---
### /ticket create
```
1. Perguntar:
- Cliente (pesquisar ou ID)
- Departamento
- Prioridade
- Assunto
- Mensagem
2. mcp__desk-crm-v3__create_ticket({
client_id: client_id,
department_id: dept_id,
priority: prioridade,
subject: assunto,
message: mensagem_html
})
3. "Ticket #X criado."
```
---
## Status Tickets
| ID | Status | Descrição |
|----|--------|-----------|
| 1 | Aberto | Novo, aguarda resposta staff |
| 2 | Em Progresso | Staff a trabalhar |
| 3 | Respondido | Staff respondeu, aguarda cliente |
| 4 | Em Espera | Pausado |
| 5 | Fechado | Resolvido |
---
## Prioridades
| ID | Prioridade | SLA |
|----|------------|-----|
| 4 | 🔴 Urgente | <1h |
| 3 | 🟠 Alta | <4h |
| 2 | 🟡 Normal | <12h |
| 1 | 🟢 Baixa | <24h |
---
## Departamentos Comuns
| ID | Departamento |
|----|--------------|
| 1 | Suporte Técnico |
| 2 | Vendas |
| 3 | Facturação |
| 4 | Geral |
---
## Integração /today
No checkup diário, mostrar tickets:
```markdown
## 🎫 Tickets (3)
- 🔴 #234 - Erro login (TechCorp) - 2h
- 🟠 #232 - Bug funcionalidade (StartupX) - 1d
- 🟢 #230 - Dúvida (ClienteY) - 2d
```
---
## Templates de Resposta
### Resposta Inicial
```html
<p>Olá [Nome],</p>
<p>Obrigado pelo contacto. Vou analisar a situação e respondo em breve.</p>
<p>Cumprimentos,<br>Emanuel Almeida</p>
```
### Pedido de Informação
```html
<p>Olá [Nome],</p>
<p>Para resolver a questão, preciso de mais informações:</p>
<ul>
<li>[Pergunta 1]</li>
<li>[Pergunta 2]</li>
</ul>
<p>Aguardo o seu feedback.</p>
```
### Resolução
```html
<p>Olá [Nome],</p>
<p>A situação foi resolvida. [Explicação breve]</p>
<p>Se tiver mais questões, não hesite em contactar.</p>
<p>Cumprimentos,<br>Emanuel Almeida</p>
```
---
## Anti-Patterns
- **NUNCA** responder sem ler histórico completo
- **NUNCA** fechar ticket sem mensagem
- **NUNCA** ignorar tickets urgentes >1h
- **NUNCA** escalar sem informar cliente
---
## Changelog
### v1.0.0 (2026-02-05)
- Versão inicial
- Listar, ver, responder, fechar
- Escalar para tarefa
- Templates de resposta
- Integração /today
---
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*