feat(gestao): skill /today v8.3.1 - TOConline protocolo multi-fornecedor

This commit is contained in:
2026-02-24 11:19:55 +00:00
parent 17cc111559
commit ea2fb3abe2

View File

@@ -1,24 +1,24 @@
---
name: today
description: >
Checkup diário v7.5 - IMAP triaging, auto-despesas, Obsidian note, Supabase.
Triagem emails 12 contas IMAP + tickets CRM + despesas auto + nota diaria.
Checkup diário v8.3 - IMAP triaging com deduplicação Supabase, auto-despesas com PDF, auditoria despesas Sab/Dom, MCP health check, workflow suggestions, Obsidian note.
Triagem emails 13 contas IMAP + deduplicação via imap_processed_emails (Supabase) + tickets CRM + despesas auto com PDF + health check MCPs (Sab/Dom) + sugestões workflows + nota diaria.
Use when "checkup", "hoje", "today", "rotina", início de dia.
author: Descomplicar® Crescimento Digital
version: 7.5.0
version: 8.3.1
quality_score: 92
user_invocable: true
category: productivity
tags: [rotina, checkup, dashboard, crm, tickets, invoices, timer, monday, saturday, imap, email]
tags: [rotina, checkup, dashboard, crm, tickets, invoices, timer, monday, saturday, sunday, weekend, imap, email, mcp, health-check]
desk_task: 1416
desk_project: 65
allowed-tools: Read, Write, mcp__desk-crm-v3, mcp__mcp-time, mcp__google-workspace, mcp__imap, mcp__memory-supabase
mcps: desk-crm-v3, mcp-time, google-workspace, imap, memory-supabase
allowed-tools: Read, Write, mcp__desk-crm-v3, mcp__mcp-time, mcp__google-workspace, mcp__imap, mcp__memory-supabase, mcp__ssh-unified
mcps: desk-crm-v3, mcp-time, google-workspace, imap, memory-supabase, ssh-unified
dependencies:
skills: [ticket, invoice, time, crm, wp-update, cleanup-downloads]
---
# /today v7.5 - Checkup Diário
# /today v8.1 - Checkup Diário
Hub central que orquestra skills Desk + IMAP para visao completa do dia.
@@ -53,11 +53,13 @@ FASE 3 - OUTPUT + PERSISTENCIA
15. Notificacoes de sistema que requerem revisao manual
16. Dashboard (timer, tickets, facturas, tarefas, leads, agenda)
17. 3 Prioridades do dia
18. SE SEGUNDA → Planeamento semanal + /wp-update
19. SE SEXTA → Sugerir manutencao WordPress
20. SE SABADO → Consolidacao memorias
21. Criar nota Obsidian (Passo 9)
22. Guardar em Supabase (Passo 10)
18. Workflows Sugeridos (analise de tarefas)
19. SE SEGUNDA → Planeamento semanal + /wp-update
20. SE SEXTA → Sugerir manutencao WordPress
21. SE SABADO → MCP Health Check completo + Consolidacao memorias + Auditoria despesas
22. SE DOMINGO → MCP Health Check resumido + Auditoria despesas
23. Criar nota Obsidian (Passo 9)
24. Guardar em Supabase (Passo 10)
```
---
@@ -114,6 +116,73 @@ mcp__desk-crm-v3__get_tasks({ status: [1,4], priority: [3,4] })
| #1448 | Documentação | Stack | Amanhã |
```
### 4.1 Workflows Sugeridos (NOVO v8.3)
> **Analisar tarefas prioritárias e sugerir workflows relevantes.**
> Consultar: `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/WORKFLOWS-QUICK-START.md`
**Protocolo:**
```
Para cada tarefa prioritária (top 3), identificar padrões e sugerir workflow:
PADRÕES DE DETECÇÃO:
1. WordPress → Task → wordpress-plugin-developer ou /wp-dev
- Keywords: wordpress, plugin, tema, woocommerce, elementor
2. Criar Procedimento → /proc-creator
- Keywords: procedimento, documentar processo, padronizar
3. Auditar/Segurança → Task → compliance-auditor
- Keywords: audit, segurança, compliance, vulnerabilidade
4. Orçamento/Proposta → /orcamento
- Keywords: orçamento, proposta, cotação, budget
5. Lead/Cliente → /lead-approach ou /crm
- Keywords: lead, cliente novo, contacto comercial
6. SEO → Task → seo-specialist ou /seo-report
- Keywords: seo, optimização, rankings, google
7. Deploy → /easypanel-deploy
- Keywords: deploy, publicar, easypanel
8. Marketing → Task → marketing-planning-expert
- Keywords: marketing, campanha, estratégia
9. PHP/Laravel → Task → php-fullstack-engineer
- Keywords: php, laravel, api, backend
10. Design/Frontend → Task → javascript-fullstack-specialist
- Keywords: react, next, frontend, ui
```
**Output formato:**
```markdown
## 🔄 Workflows Sugeridos
Com base nas tuas tarefas de hoje:
- [ ] **#1450 Implementar API** → Workflow: php-fullstack-engineer (Task tool)
- Desenvolvimento backend com Laravel, criar endpoints RESTful
- Duração estimada: ~3-4h
- [ ] **#1448 Documentação Stack** → Workflow: /proc-creator
- Criar PROC-* estruturado, validação automática, indexação
- Duração estimada: ~20min
- [ ] **Novo lead via email** → Workflow: /lead-approach
- Análise completa + estratégia + primeiro contacto
- Duração estimada: ~30min
```
**Quando NÃO sugerir:**
- Se tarefa é genérica sem keywords claras
- Se já está em progresso (status 4)
- Se é manutenção simples (<30min estimado)
### 5. Agenda do Dia
```
@@ -132,19 +201,40 @@ mcp__google-workspace__get_events({
## IMAP Triagem (FASE 1 - Passo 5)
> **OBRIGATORIO:** Processar 12 contas IMAP silenciosamente.
> **OBRIGATORIO:** Processar 13 contas IMAP silenciosamente.
> Ver regras detalhadas em `config/email-triage-rules.md`
### Contas IMAP (12)
### Contas IMAP (14)
```
emanuel, it, help, suporte, contabilidade, financeiro,
info, rh, mkt, design, news, aiktop
rh, mkt, design, news, aiktop, recursos, google
```
### Passo 0: Carregar emails já processados (Supabase)
> **Executar UMA VEZ no início da triagem IMAP, antes de iterar contas.**
> Fonte de verdade: tabela `imap_processed_emails` em Supabase (EasyPanel).
```
mcp__ssh-unified__ssh_execute(
server="easy",
command="docker exec descomplicar_supabase-db-1 psql -U postgres -d postgres -t -A -c \"SELECT message_id FROM public.imap_processed_emails\""
)
→ Guardar resultado como Set/lista: processed_ids
→ Emails cujo message_id esteja nesta lista sao SALTADOS (já processados)
```
**Acesso:** SSH → EasyPanel → docker exec psql (NÃO usar REST API - sem domínio externo configurado)
### Para cada conta: imap_list_emails(account, folder="INBOX", limit=50)
```
Para cada email: verificar message_id contra processed_ids
→ SE message_id IN processed_ids → SALTAR (já processado anteriormente)
→ SE NÃO → Classificar por ordem de prioridade:
Classificar cada email por ordem de prioridade:
1. SPAM → imap_delete_email(account, uid)
@@ -155,11 +245,12 @@ Classificar cada email por ordem de prioridade:
2. PROMOCIONAL → imap_move_email(account, uid, "Promotions")
- Subject: newsletter, promo, desconto, oferta
- Remetente: *@marketing.*, *@news.*, *@promo.*
- EXCEPÇÃO: conta "rh" → imap_delete_email (sem pasta Promotions)
3. FACTURA/RECIBO → Registar para contabilidade
3. FACTURA/RECIBO → Auto-processar despesa (ver secção Auto-Despesas IMAP)
- Subject: factura, invoice, recibo, receipt, pagamento, paid
- Remetente de servico conhecido (ver mapeamento abaixo)
- Registar para reencaminhar para contabilidade@descomplicar.pt
- Remetente de servico conhecido (ver mapeamento completo abaixo)
- Criar despesa + anexar PDF automaticamente
4. PRIORITARIO → Incluir no relatorio
- Remetente: cliente conhecido (verificar DeskCRM)
@@ -173,7 +264,7 @@ Classificar cada email por ordem de prioridade:
📧 Emails Processados
- X spam eliminados
- Y promocionais arquivados
- Z facturas para contabilidade
- Z despesas criadas automaticamente (valor total)
- W emails prioritarios pendentes
```
@@ -187,6 +278,187 @@ Classificar cada email por ordem de prioridade:
---
## Auto-Despesas IMAP (FASE 1 - Passo 5.3)
> **Quando um email e classificado como FACTURA/RECIBO na triagem IMAP,
> processar AUTOMATICAMENTE como despesa em vez de apenas registar.**
### Fluxo completo
```
1. DETECTAR: Email de fornecedor conhecido com subject de factura/recibo
2. LER: imap_read_email(account, uid) → conteudo HTML + anexos
3. EXTRAIR do HTML:
- Valor (procurar padroes: $XX.XX, XX,XX EUR, USD XX.XX)
- Referencia/Invoice number
- Data da factura
- Converter USD→EUR se necessario (taxa 0.92)
4. VERIFICAR DUPLICADO:
- Verificar message_id contra processed_ids (Supabase) → se já existe, SALTAR
- Pesquisar no Desk: mesmo fornecedor + mesmo valor + mesma data (±3 dias)
- Se duplicado → registar no Supabase com action="duplicate", nao criar despesa
5. CRIAR DESPESA no Desk:
- create_expense(category, amount, date, expense_name, note, currency=3, tax)
NOTA: currency=3 (EUR), currency=2 (USD). Para despesas em USD manter valor original com currency=2
- note = "Auto-criado via /today IMAP triagem"
6. PDF ANEXO (se existir no email):
a. GUARDAR LOCAL na pasta organizada:
- Path: /media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/YYYY/MM-NomeMes/
- Criar pasta se nao existir (mkdir -p)
- Nome ficheiro: YYYY-MM-DD_Fornecedor_Referencia.pdf (ou nome original se claro)
- Meses PT: 01-Janeiro, 02-Fevereiro, 03-Marco, 04-Abril, 05-Maio, 06-Junho,
07-Julho, 08-Agosto, 09-Setembro, 10-Outubro, 11-Novembro, 12-Dezembro
b. UPLOAD ao Desk servidor:
- SFTP para /tmp/ no servidor
- mkdir -p uploads/expenses/{expense_id}/
- Copiar PDF + criar index.html
- chown ealmeida:ealmeida
c. REGISTAR no Desk BD:
- INSERT tblfiles (rel_id, rel_type='expense', file_name, filetype='application/pdf',
attachment_key=MD5(rand), staffid=25, dateadded=NOW())
d. LIMPAR /tmp/ local e remoto
7. ACTUALIZAR CSV:
- Adicionar linha ao MAPA-DESPESAS-YYYY.csv correspondente
- Formato: id_desk;data;categoria;fornecedor;descricao;valor;SIM;ficheiro;email;Auto /today
8. REGISTAR NO SUPABASE:
- Adicionar ao batch de emails processados (ver Passo Final abaixo)
- Marcar email como lido: imap_move_email NÃO é usado (sem pasta "Processed")
- Email permanece na INBOX mas fica registado como processado no Supabase
```
### Path da pasta Contabilidade
```
BASE: /media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/
Estrutura: {BASE}/YYYY/MM-NomeMes/ficheiro.pdf
Exemplo: .../2026/02-Fevereiro/2026-02-12_Anthropic_Max20x_180.00EUR.pdf
CSVs: {BASE}/YYYY/MAPA-DESPESAS-YYYY.csv
```
### Mapeamento Completo Fornecedores (IMAP + Tickets)
> **25 fornecedores activos.** Verificar pelo dominio do email remetente.
> Mesma tabela usada para triagem IMAP E para auto-process tickets.
| # | Fornecedor | Padrao Email Remetente | Conta IMAP | Cat ID | Categoria | Tax | Moeda | Notas |
|---|-----------|----------------------|------------|--------|-----------|-----|-------|-------|
| 1 | Anthropic | anthropic.com | recursos, info | 38 | Servicos IA e APIs | 0 | USD | Pro/Max/API - receipt com invoice number |
| 2 | OpenRouter | openrouter.ai, stripe.com (OpenRouter) | contabilidade | 38 | Servicos IA e APIs | 0 | USD | Invoice-36853E80-* |
| 3 | CapSolver | payproglobal.com | contabilidade | 38 | Servicos IA e APIs | 0 | USD | PayPro Global como revendedor |
| 4 | Hetzner | hetzner.com | contabilidade, emanuel | 4 | Alojamento web (Hosting) | 0 | EUR | Servidor dedicado mensal |
| 5 | CWP | centos-webpanel.com, control-webpanel.com | contabilidade | 28 | Licencas Software | 0 | USD | Business Support mensal |
| 6 | MEO | meo.pt, meoempresas.pt | contabilidade | 1 | Telecomunicacoes | 1 | EUR | Factura PT com IVA |
| 7 | Canva | canva.com | it | 28 | Licencas Software | 0 | EUR | Pro mensal via PayPal |
| 8 | ElasticEmail | elasticemail.com | it, contabilidade | 30 | Servicos Cloud e Infraestrutura | 0 | USD | Auto-recharge 10 USD |
| 9 | Descript | descript.com, stripe.com (Descript) | contabilidade | 28 | Licencas Software | 0 | USD | Pro mensal 35 USD |
| 10 | Cursor | cursor.com, stripe.com (Cursor) | contabilidade | 28 | Licencas Software | 0 | USD | Pro sub + usage |
| 11 | GitHub | github.com | emanuel | 28 | Licencas Software | 0 | USD | Copilot mensal |
| 12 | Make/Celonis | make.com, celonis.com | google | 6 | Servicos Externos | 0 | USD | Pro mensal |
| 13 | Gamma | gamma.app | google | 6 | Servicos Externos | 0 | EUR | Pro mensal 20 EUR |
| 14 | Softaculous | softaculous.com | contabilidade | 28 | Licencas Software | 0 | USD | Licenca anual |
| 15 | BdThemes | bdthemes.com, fastspring.com | it | 14 | Subscricoes e Servicos Digitais | 0 | USD | Element Pack anual |
| 16 | Replicate | replicate.com | emanuel | 38 | Servicos IA e APIs | 0 | USD | Credit purchase pontual |
| 17 | Google One | google.com (Google One) | gmail | 30 | Servicos Cloud e Infraestrutura | 0 | EUR | AI Premium mensal |
| 18 | Namecheap | namecheap.com | gmail | 37 | Dominios | 0 | USD | Renovacao dominios |
| 19 | Insync | insynchq.com | gmail | 28 | Licencas Software | 0 | USD | Licenca pontual |
| 20 | Freepik | freepik.com | contabilidade | 14 | Subscricoes e Servicos Digitais | 0 | EUR | Assinatura |
| 21 | Vimeo | vimeo.com | contabilidade | 14 | Subscricoes e Servicos Digitais | 0 | USD | Video hosting |
| 22 | Moloni | moloni.pt | contabilidade | 28 | Licencas Software | 1 | EUR | Facturacao PT com IVA |
| 23 | YouTube Premium | google.com (YouTube) | gmail | 14 | Subscricoes e Servicos Digitais | 0 | EUR | Mensal ~6.99 EUR |
| 24 | PTisp | ptisp.pt, almourol.com | gmail, contabilidade | 37 | Dominios | 1 | EUR | Dominios PT com IVA |
| 25 | TOConline | toconline.pt, no-reply@toconline.pt | emanuel | — | (ver nota) | 1 | EUR | Plataforma faturas eletronicas PT. Ler email para identificar emitente real. CUBIC CHOICES LDA → cat 21 (Contabilidade). Outros emitentes → mapear manualmente ou flag priority. |
### Moedas
```
EUR: currency = 3 (default)
USD: currency = 2 (manter valor original, NAO converter)
CRITICO: currency=1 NAO existe e causa despesas invisiveis nos relatorios.
```
### Plataformas Multi-Fornecedor (protocolo especial)
> Algumas plataformas entregam faturas de qualquer empresa. NAO mapear para categoria fixa.
> Ler o email para identificar o emitente real, depois categorizar.
| Plataforma | Dominio | Protocolo |
|-----------|---------|-----------|
| TOConline | toconline.pt | Ler email → extrair "Emitente: [empresa]" → mapear empresa → se desconhecida: flag priority |
| Stripe | stripe.com | Ler subject/corpo → identificar fornecedor (Cursor, Descript, OpenRouter...) → usar entrada do fornecedor real |
| PayPal | paypal.com | Ler corpo → identificar fornecedor → categorizar por fornecedor real |
| FastSpring | fastspring.com | Ler corpo → identificar fornecedor (BdThemes...) → categorizar por fornecedor real |
| PayPro Global | payproglobal.com | Ler corpo → identificar fornecedor (CapSolver...) → categorizar por fornecedor real |
**Emitentes TOConline conhecidos:**
- CUBIC CHOICES LDA → cat 21 (Contabilidade), tax=1
**Emitentes TOConline desconhecidos:** flag `priority_flagged` com nota "TOConline - emitente desconhecido: [empresa]"
### Emails a IGNORAR (nao sao despesas)
```
- "Payment Confirmation" / "Payment Was Successfully Processed" → apenas confirmacao
- "Your subscription has been renewed" sem valor → apenas notificacao
- "Notificacao de transferencia" de bancos → notificacao bancaria
- Emails de marketing/changelog dos mesmos fornecedores → promocional
- Emails com subject "Welcome" / "Getting Started" → onboarding
```
### Protecao contra duplicados (2 camadas)
```
CAMADA 1 - Supabase (message_id):
- Verificar message_id no Set processed_ids carregado no Passo 0
- Se encontrado → SALTAR completamente (nem ler o email)
- Deduplicação exacta, sem falsos positivos
CAMADA 2 - Desk CRM (fornecedor + valor + data):
- Pesquisar no Desk: mesmo fornecedor + mesmo valor (±0.05 EUR) + mesma data (±3 dias)
- Se match → NAO criar despesa
- Registar no Supabase com action="duplicate", action_detail="Duplicado de despesa #ID"
Se nenhum duplicado → criar despesa + registar no Supabase com action="expense_created"
```
### Passo Final: Registar emails processados no Supabase
> **Executar UMA VEZ no final da triagem IMAP, após processar todas as contas.**
> Batch INSERT com ON CONFLICT DO NOTHING para segurança.
```
Acumular durante a triagem uma lista de novos emails processados:
{ message_id, account_id, subject, sender, email_date, action, action_detail }
Onde action pode ser:
- "spam_deleted" → email spam eliminado
- "promo_archived" → email promocional arquivado
- "expense_created" → despesa criada (#ID)
- "duplicate" → duplicado detectado
- "priority_flagged" → email prioritário incluído no relatório
- "notification_closed" → notificação/newsletter fechada
- "skipped" → email ignorado (não relevante)
Comando batch INSERT via SSH:
mcp__ssh-unified__ssh_execute(
server="easy",
command="docker exec descomplicar_supabase-db-1 psql -U postgres -d postgres -c \"
INSERT INTO public.imap_processed_emails (message_id, account_id, subject, sender, email_date, action, action_detail)
VALUES
('msg-id-1', 'conta1', 'Subject 1', 'from@x.com', '2026-02-12', 'expense_created', 'Despesa #985'),
('msg-id-2', 'conta2', 'Subject 2', 'from@y.com', '2026-02-12', 'spam_deleted', NULL)
ON CONFLICT (message_id) DO NOTHING;
\""
)
→ ON CONFLICT garante idempotência (re-executar checkup não duplica registos)
→ Máximo ~50 VALUES por INSERT (limitar tamanho do comando SSH)
```
---
## Rotinas Semanais
### Segunda-feira
@@ -214,11 +486,244 @@ Classificar cada email por ordem de prioridade:
```
1. Checkup normal (acima)
2. Consolidacao de memorias:
2. MCP Health Check completo (ver secção MCP Health Check)
3. Consolidacao de memorias:
- Listar ~/.claude/projects/*/memory/MEMORY.md
- Extrair "Padroes Descobertos" e "Solucoes"
- Comentario na discussao #46 (Memorias)
- Backup em memory-supabase
4. Auditoria de despesas (ver secção Auditoria Despesas abaixo)
- Completa: sem PDF, sem categoria, valores anomalos
- Reconciliacao mensal se 1o sabado do mes
```
### Domingo
```
1. Checkup normal (acima)
2. MCP Health Check resumido (ver secção MCP Health Check)
- Apenas verificação rápida de status
- Alertas se algum MCP offline
3. Auditoria de despesas resumida (ver secção Auditoria Despesas abaixo)
- Apenas: despesas sem PDF dos ultimos 30 dias
- Alerta se >3 sem PDF
```
---
## Auditoria Despesas (Sabado/Domingo)
> **Sabado:** Auditoria completa. **Domingo:** Apenas despesas sem PDF.
> Executar apos MCP Health Check, antes da nota Obsidian.
### Protocolo Sabado (Completo)
```
1. DESPESAS SEM PDF (ultimos 60 dias):
SQL via mcp__ssh-unified__ssh_execute(server="desk"):
SELECT e.id, e.expense_name, e.amount, e.date, e.note,
(SELECT COUNT(*) FROM tblfiles f WHERE f.rel_id = e.id AND f.rel_type = 'expense') as pdfs
FROM tblexpenses e
WHERE e.id >= 770
AND e.date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
HAVING pdfs = 0
ORDER BY e.date DESC;
→ Excluir: AT (cat 15), Salarios (cat 22), SS (cat 25) - nao tem recibo
→ Reportar restantes como "despesas sem documento"
2. DESPESAS SEM CATEGORIA ou com categoria errada:
SELECT id, expense_name, amount, category, date
FROM tblexpenses
WHERE id >= 770 AND (category = 0 OR category IS NULL)
ORDER BY date DESC;
3. VALORES ANOMALOS (despesas >500 EUR ou negativas):
SELECT id, expense_name, amount, currency, date
FROM tblexpenses
WHERE id >= 770
AND (amount > 500 OR amount < 0)
ORDER BY amount DESC;
4. RECONCILIACAO MENSAL (apenas 1o sabado do mes):
SE DAY(CURDATE()) <= 7:
- Contar despesas do mes anterior por categoria
- Comparar com mes homologo (se existir)
- Calcular total mensal
- Alertar se variacao >30% vs media
5. FORNECEDORES RECORRENTES em falta:
Verificar se fornecedores mensais tem despesa este mes:
- Anthropic (mensal)
- Cursor (mensal)
- Hetzner (mensal)
- Google One (mensal)
- ElasticEmail (mensal)
- Canva (mensal)
SE algum nao tem despesa no mes corrente E ja passaram >10 dias → alertar
```
### Protocolo Domingo (Resumido)
```
1. APENAS despesas sem PDF dos ultimos 30 dias:
(mesma query do sabado mas INTERVAL 30 DAY)
2. SE >3 despesas sem PDF (excl. AT/Salario/SS):
→ Alerta: "X despesas sem documento nos ultimos 30 dias"
→ Listar cada uma com fornecedor, valor e data
3. SE 0 despesas sem PDF:
→ "Todas as despesas recentes tem documento anexado"
```
### Output no Resumo
```markdown
## Auditoria Despesas (Sabado)
### Despesas sem documento (3)
| # | Fornecedor | Valor | Data | Accao |
|---|-----------|-------|------|-------|
| 985 | Anthropic | 180.00 EUR | 06-02 | Descarregar recibo |
| 1008 | Cursor | 17.60 USD | 01-08 | Verificar portal |
### Fornecedores recorrentes
- Anthropic: OK (despesa Fev encontrada)
- Cursor: OK
- Hetzner: FALTA (sem despesa Fev) → verificar email/portal
### Resumo mensal (se 1o sabado)
- Total Fevereiro: 1.234,56 EUR (23 despesas)
- vs Janeiro: +12% (1.102,00 EUR)
- Top 3: Anthropic (360 EUR), Hetzner (276 EUR), Cursor (120 EUR)
```
```markdown
## Auditoria Despesas (Domingo)
Todas as despesas dos ultimos 30 dias tem documento anexado.
OU
3 despesas sem documento (ultimos 30 dias):
- #985 Anthropic 180.00 EUR (06-02) → descarregar recibo
- #1008 Cursor 17.60 USD (01-08) → verificar portal
```
---
## MCP Health Check (Sábado/Domingo)
### Protocolo Sábado (Completo)
```
1. Listar MCPs críticos (do ~/.claude.json):
- desk-crm-v3 (gateway)
- google-workspace (gateway)
- ssh-unified (gateway)
- gitea (gateway)
- moloni (gateway)
- memory-supabase (gateway)
- dify-kb (gateway)
- filesystem (local)
- mcp-time (local)
2. Para cada MCP:
a. Tentar operação simples de teste:
- desk-crm-v3: get_tickets(limit=1)
- google-workspace: get_events (hoje)
- ssh-unified: ssh_list_servers
- filesystem: list_directory(~)
- etc.
b. Registar resultado:
✅ OK - respondeu em <2s
⚠️ LENTO - respondeu em >2s
❌ FALHA - timeout ou erro
3. Verificar credenciais:
- Google Workspace: verificar token expiry
- SSH: verificar keys funcionam
- Gitea: verificar auth
4. Output no resumo:
```
## 🔍 MCP Health Check (Sábado)
✅ 8/9 MCPs operacionais
⚠️ google-workspace (lento: 3.2s)
❌ gitea (timeout)
Acções necessárias:
- Investigar timeout gitea
- Google workspace token expira em 5 dias
```
5. SE algum MCP crítico falhou:
- Criar nota em Obsidian com detalhes
- Guardar em memory-supabase tag:["mcp-issue"]
```
### Protocolo Domingo (Resumido)
```
1. Verificar apenas MCPs críticos top 5:
- desk-crm-v3
- google-workspace
- ssh-unified
- filesystem
- mcp-time
2. Teste rápido (timeout 5s):
- Apenas verificar se responde
- Não testar funcionalidade completa
3. Output resumido:
```
## 🔍 MCP Status (Domingo)
✅ Todos os MCPs críticos operacionais
OU
❌ google-workspace offline
→ Verificar segunda-feira
```
4. Apenas alertar se falha crítica
```
### MCPs Críticos por Prioridade
**P1 - Críticos (bloqueiam trabalho):**
- desk-crm-v3 (CRM)
- filesystem (ficheiros locais)
- mcp-time (data/hora)
**P2 - Importantes (degradam workflow):**
- google-workspace (email/calendar)
- ssh-unified (servidores)
- memory-supabase (memória)
**P3 - Úteis:**
- gitea (repos)
- moloni (facturação)
- dify-kb (knowledge base)
### Troubleshooting Automático
Se MCP falha, tentar:
```
1. Verificar gateway.descomplicar.pt está acessível:
- WebFetch("https://gateway.descomplicar.pt/health")
2. SE gateway OK mas MCP falha:
- Problema no MCP específico
- Documentar para investigação
3. SE gateway falha:
- Problema de rede ou servidor mcp-hub
- Alerta crítico
```
---
@@ -228,18 +733,47 @@ Classificar cada email por ordem de prioridade:
### Passo 21: Nota Obsidian
```
Path: /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/00-Inbox/
Filename: YYYY-MM-DD-checkup.md
Path: /media/ealmeida/Dados/Hub/00-Inbox/
Filename: DD-MM-YYYY-checkup.md
---
title: Checkup YYYY-MM-DD
date: YYYY-MM-DD
title: Checkup DD-MM-YYYY
date: DD-MM-YYYY
type: checkup
status: active
---
## Checkup Diario - YYYY-MM-DD
[Conteudo do relatorio com links CRM]
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
---
## ⚠️ REQUER ATENÇÃO URGENTE
[Listar questoes urgentes identificadas durante auto-processamento e IMAP]
---
## ✓ 3 Prioridades Hoje
[As 3 tarefas mais importantes do dia]
---
## 📊 Resumo do Dia
[Timer, Tickets, Facturas, Tarefas, Leads, Propostas, Agenda]
---
## 📧 Emails IMAP Processados
[Resumo limpeza automatica]
---
## 🔄 Auto-Processamento Executado
[Tickets fechados, despesas criadas]
```
### Passo 22: Supabase
@@ -247,7 +781,7 @@ status: active
```
mcp__memory-supabase__save_memory:
- content: "Checkup diario - X tickets, Y tarefas, Z urgentes, W emails"
- tags: ["today", "checkup", "YYYY-MM-DD"]
- tags: ["today", "checkup", "DD-MM-YYYY"]
- metadata: { tickets, tasks, urgent, emails_processed, is_monday }
```
@@ -255,42 +789,76 @@ mcp__memory-supabase__save_memory:
## Output Final
> **ESTRUTURA OBRIGATORIA:** Questoes urgentes NO TOPO.
> Utilizador ve primeiro o que requer atencao imediata.
```markdown
## Checkup Diario - 2026-02-06 (Quinta)
### Timer
#1446 - Documentacao (2h 15m)
### Emails (IMAP)
- Spam eliminado: 5
- Promocional arquivado: 3
- Facturas contabilidade: 2
- Prioritarios: 1
### Tickets
- Abertos: 4 (1 urgente)
### Facturas
- Vencidas: 3.050EUR
### Tarefas
- Urgentes: 1
- Alta prioridade: 4
### Leads + Propostas
- Leads novos: 2
- Propostas pendentes: 1
### Agenda
- 10:00 - Reuniao Cliente X
- 14:30 - Call Equipa
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
---
### 3 Prioridades Hoje
1. [ ] #1450 - Implementar API (Urgente)
2. [ ] Contactar OldClient (factura 15 dias)
3. [ ] #1448 - Documentacao Stack
## ⚠️ REQUER ATENÇÃO URGENTE
### 🚨 [Categoria] - [Assunto]
[Descricao do problema urgente]
- [Detalhes]
- [Accao necessaria]
### [Outros problemas urgentes se existirem]
---
## ✓ 3 Prioridades Hoje
1. [ ] [Prioridade 1 - mais urgente]
2. [ ] [Prioridade 2]
3. [ ] [Prioridade 3]
---
## 🔄 Workflows Sugeridos
Com base nas tuas tarefas de hoje:
- [ ] **[Tarefa/Contexto]** → Workflow sugerido: [Componente]
- [Breve explicação do workflow e próximos passos]
---
## 📊 Resumo do Dia
### Timer
[Status do timer ou "Nenhum timer activo"]
### Tickets
- Abertos: X (Y urgentes)
- Fechados automaticamente: Z
### Facturas
- Vencidas: [valor] EUR ou "0"
### Tarefas
- Urgentes: X
- Alta prioridade: Y
### Leads + Propostas
- Leads novos: X
- Propostas pendentes: Y
### Agenda
- [HH:MM - Evento]
---
## 📧 Emails IMAP Processados - LIMPEZA AUTOMÁTICA ✓
**TOTAL: X emails apagados/movidos em Y contas**
[Detalhes por conta]
---
## 🔄 Auto-Processamento Executado
[Tickets fechados, despesas criadas, etc]
```
---
@@ -341,7 +909,8 @@ Para cada ticket identificado como despesa:
1. get_ticket(ticket_id) → ler HTML completo
2. Extrair do HTML: valor, invoice/reference number, data, descricao
3. Mapear email → categoria (tabela abaixo)
4. create_expense(category_id, amount, date, note, reference, currency=2, tax)
4. create_expense(category_id, amount, date, note, reference, currency=3 ou 2, tax)
→ currency=3 (EUR) para fornecedores EUR, currency=2 (USD) para fornecedores USD
5. Fechar ticket (status 5) com "Despesa #ID criada"
6. SE existe ticket duplicado (mesmo subject) → fechar duplicado tambem
```
@@ -371,23 +940,16 @@ Infrastructure Change, Platform Update, Product Update
> Verificar pelo **dominio do email** do remetente, nao pelo departamento.
> Tickets de fornecedores conhecidos podem estar em QUALQUER departamento.
> **Tabela completa na secção "Auto-Despesas IMAP" acima (22 fornecedores).**
> Abaixo apenas padroes adicionais especificos de tickets:
| Padrao no Email | Categoria | ID | Tax |
|-----------------|-----------|-----|-----|
| anthropic | Servicos IA e APIs | 38 | 0 |
| openai | Servicos IA e APIs | 38 | 0 |
| hetzner | Alojamento de Servidores | 10 | 0 |
| meo, meoempresas | Telecomunicacoes | 1 | 1 |
| centos-webpanel, cwp | Licencas Software | 28 | 0 |
| elasticemail | E-mail MKT | 5 | 0 |
| freepik, envato, canva | Plugins e Recursos de Design | 9 | 0 |
| moloni | Software Facturacao | 11 | 1 |
| everhour | Softwares Gestao | 12 | 0 |
| ptisp, namecheap | Registo de Dominios | 13 | 0 |
| vimeo | Plataformas Armazenamento | 19 | 0 |
| payproglobal | Servicos IA e APIs (CapSolver) | 38 | 0 |
| bdthemes | Plugins e Recursos de Design | 9 | 0 |
| envato | Plugins e Recursos de Design | 9 | 0 |
| staples, multipapel | Material Escritorio | 15 | 1 |
| ptisp | Registo de Dominios | 13 | 0 |
### Tickets a Saltar (NAO criar despesa)
@@ -405,9 +967,12 @@ Infrastructure Change, Platform Update, Product Update
### Campos Criticos
```
currency = 2 (EUR) → SEMPRE
currency = 3 (EUR) → Fornecedores EUR (Anthropic Max, Hetzner, MEO, Canva, Gamma, Google One)
currency = 2 (USD) → Fornecedores USD (Cursor, CWP, Descript, ElasticEmail, OpenRouter, etc.)
CRITICO: currency=1 NAO existe → despesas invisiveis nos relatorios
tax = 1 → Fornecedores PT (MEO, Moloni, Staples)
tax = 0 → Fornecedores estrangeiros (Anthropic, Canva, Hetzner, etc.)
send_invoice_to_customer = 0 → OBRIGATORIO na BD (sem default)
```
---
@@ -439,9 +1004,60 @@ tax = 0 → Fornecedores estrangeiros (Anthropic, Canva, Hetzner, etc.)
## Changelog
### v8.3.1 (2026-02-24)
- **PLATAFORMAS MULTI-FORNECEDOR:** Novo protocolo para plataformas que entregam faturas de qualquer empresa (TOConline, Stripe, PayPal, FastSpring, PayPro Global)
- **TOConline adicionado (#25):** Ler email para identificar emitente real. CUBIC CHOICES LDA → cat 21. Desconhecido → flag priority
- **Regra:** NUNCA mapear plataforma multi-fornecedor para categoria fixa sem ler o emitente real
### v8.3.0 (2026-02-14)
- **WORKFLOWS SUGERIDOS:** Analisa tarefas prioritárias e sugere workflows/componentes relevantes
- **INTEGRAÇÃO QUICK-START:** Consulta `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/WORKFLOWS-QUICK-START.md`
- **10 PADRÕES:** WordPress, procedimentos, audit, orçamento, lead, SEO, deploy, marketing, PHP, design
- **OUTPUT CONTEXTUAL:** Sugere skill ou agent apropriado com duração estimada
- **DISCOVERY FIX:** Resolve problema de não saber qual componente usar para cada tarefa
### v8.2.0 (2026-02-12)
- **AUDITORIA DESPESAS Sab/Dom:** Verifica despesas sem PDF, categorias em falta, valores anomalos
- **SABADO completo:** Sem PDF (60d), sem categoria, >500 EUR, reconciliacao mensal (1o sabado), fornecedores recorrentes em falta
- **DOMINGO resumido:** Apenas sem PDF (30d), alerta se >3
- **CORRECCAO CURRENCY:** EUR = **3** (nao 2), USD = **2**. Corrigido em toda a skill
- **CATEGORIAS ALINHADAS:** 24 fornecedores com categorias corrigidas (consolidacao 12-02-2026)
- Hetzner: 10→4, Canva: 9→28, ElasticEmail: 5→30, Cursor: 38→28, GitHub: 38→28
- Make/Gamma: 12/28→6, Google One: 38→30, Namecheap: 13→37, BdThemes: 9→14
- **send_invoice_to_customer:** Documentado como campo obrigatorio (valor 0)
- **2 fornecedores adicionados:** YouTube Premium (#23), PTisp (#24)
### v8.1.0 (2026-02-12)
- **DEDUPLICAÇÃO IMAP via Supabase:** Tabela `imap_processed_emails` como fonte de verdade
- **Passo 0:** Carrega message_ids já processados antes de iterar contas
- **Passo Final:** Batch INSERT de todos os emails processados com ON CONFLICT DO NOTHING
- **2 camadas anti-duplicados:** Supabase (message_id exacto) + Desk CRM (fornecedor+valor+data)
- **Sem pasta "Processed":** Emails permanecem na INBOX, tracking 100% via Supabase
- **Actions tipadas:** spam_deleted, expense_created, duplicate, priority_flagged, etc.
- **Acesso:** SSH → EasyPanel → docker exec psql (2 chamadas por checkup)
### v8.0.0 (2026-02-12)
- **AUTO-DESPESAS IMAP:** Processamento completo de facturas/recibos detectados no IMAP
- **PDF ANEXO:** Extrai PDF do email, faz upload ao servidor, regista em tblfiles
- **22 FORNECEDORES:** Mapeamento completo com conta IMAP, categoria, tax, moeda
- **ANTI-DUPLICADOS:** Verificacao antes de criar (fornecedor + valor + data ±3d)
- **USD→EUR:** Conversao automatica taxa 0.92
- **IMAP→DESK:** Ciclo completo: detectar → ler → extrair → criar despesa → anexar PDF → arquivar email
### v7.7.0 (2026-02-10)
- **ESTRUTURA CHECKUP:** Questoes urgentes NO TOPO (Requer Atencao → Prioridades → Resumo)
- **FORMATO DATA:** DD-MM-YYYY obrigatorio (ex: 10-02-2026-checkup.md)
- **UX PHDA:** Informacao mais importante primeiro, micro-passos visiveis
### v7.6.0 (2026-02-10)
- **MCP HEALTH CHECK:** Verificação completa aos sábados, resumida aos domingos
- **SABADO:** Health check de 9 MCPs críticos com troubleshooting automático
- **DOMINGO:** Verificação rápida top 5 MCPs com alertas se falha crítica
- **PROTOCOLO:** Testes automáticos, verificação credenciais, output estruturado
### v7.5.0 (2026-02-06)
- **IMAP TRIAGEM:** Protocolo completo para 12 contas IMAP (spam, promo, facturas, prioritarios)
- **NOTA OBSIDIAN:** Criar nota diaria em /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/00-Inbox/
- **IMAP TRIAGEM:** Protocolo completo para 13 contas IMAP (spam, promo, facturas, prioritarios)
- **NOTA OBSIDIAN:** Criar nota diaria em /media/ealmeida/Dados/Hub/00-Inbox/
- **SUPABASE SAVE:** Guardar resumo checkup em memory-supabase com metricas
- **LEADS + PROPOSTAS:** Adicionar verificacao de leads novos e propostas pendentes na Fase 2
- **SEXTA-FEIRA:** Rotina de manutencao WordPress sugerida as sextas
@@ -463,4 +1079,4 @@ tax = 0 → Fornecedores estrangeiros (Anthropic, Canva, Hetzner, etc.)
---
*Skill v7.5.0 | 2026-02-06 | Descomplicar®*
*Skill v8.3.1 | 2026-02-24 | Descomplicar®*