39 KiB
name, description, author, version, quality_score, user_invocable, category, tags, desk_task, desk_project, allowed-tools, mcps, dependencies
| name | description | author | version | quality_score | user_invocable | category | tags | desk_task | desk_project | allowed-tools | mcps | dependencies | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| today | 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. | Descomplicar® Crescimento Digital | 8.3.2 | 92 | true | productivity |
|
1416 | 65 | Read, Write, mcp__desk-crm-v3, mcp__mcp-time, mcp__google-workspace, mcp__imap, mcp__memory-supabase, mcp__ssh-unified | desk-crm-v3, mcp-time, google-workspace, imap, memory-supabase, ssh-unified |
|
/today v8.1 - Checkup Diário
Hub central que orquestra skills Desk + IMAP para visao completa do dia.
Protocolo Principal
REGRA FUNDAMENTAL: Fases 1-2 sao SILENCIOSAS e OBRIGATORIAS. Executar TUDO antes de mostrar qualquer output ao utilizador. O utilizador so ve o resumo final com as accoes ja tomadas.
FASE 1 - SILENCIOSA (executar tudo, sem output)
1. mcp__mcp-time__current_time → Verificar dia da semana
2. Verificar ultima execucao (memory-supabase: "today checkup YYYY-MM-DD")
3. AUTO-PROCESSAR despesas de tickets (ver seccao Auto-Process)
4. AUTO-FECHAR Tickets SPAM
5. IMAP Triagem - 12 contas (ver seccao IMAP abaixo)
6. Limpeza Downloads (via /cleanup-downloads) → SE >10 ficheiros
FASE 2 - RECOLHA (queries em paralelo, sem output)
7. Timer Activo
8. Tickets abertos (status 1,2,3)
9. Facturas Vencidas
10. Tarefas Prioritarias (urgentes + alta + vencidas)
11. Leads Novos (status 7, 14)
12. Propostas pendentes (status 4)
13. Agenda do Dia (Google Calendar)
FASE 3 - OUTPUT + PERSISTENCIA
14. Resumo do auto-processamento (despesas, SPAM, emails)
15. Notificacoes de sistema que requerem revisao manual
16. Dashboard (timer, tickets, facturas, tarefas, leads, agenda)
17. 3 Prioridades do dia
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)
Secções do Checkup
1. Timer Activo
Verificar ~/.claude-work/active-timer.json
Se activo:
🟢 Timer: #1446 - Documentação (2h 15m)
⚠️ Se >4h: "Timer activo há muito tempo!"
2. Tickets Abertos
mcp__desk-crm-v3__get_tickets({ status: [1,2,3] })
## 🎫 Tickets (4)
🔴 #234 - Erro login (TechCorp) - 2h
🟠 #232 - Bug funcionalidade (StartupX) - 1d
🟢 #230 - Dúvida (ClienteY) - 2d
3. Facturas Vencidas
mcp__desk-crm-v3__overdue_invoices_report()
## 💰 Facturas Vencidas (2)
| # | Cliente | Valor | Dias |
|---|---------|-------|------|
| INV-040 | OldClient | €950 | 15 |
| INV-038 | SlowPay | €2.100 | 22 |
**Total:** €3.050
4. Tarefas Prioritárias
mcp__desk-crm-v3__get_tasks({ status: [1,4], priority: [3,4] })
## 📋 Tarefas Prioritárias (5)
🔴 Urgentes
| # | Tarefa | Projecto | Deadline |
|---|--------|----------|----------|
| #1450 | Implementar API | SFV-360 | Hoje |
🟠 Alta
| # | Tarefa | Projecto | Deadline |
|---|--------|----------|----------|
| #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:
## 🔄 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
mcp__google-workspace__get_events({
user_google_email: "emanuelalmeidaa@gmail.com",
time_min: "hoje 00:00",
time_max: "hoje 23:59"
})
## 📅 Agenda Hoje
- 10:00 - Reunião Cliente X
- 14:30 - Call Equipa
IMAP Triagem (FASE 1 - Passo 5)
OBRIGATORIO: Processar 13 contas IMAP silenciosamente. Ver regras detalhadas em
config/email-triage-rules.md
Contas IMAP (14)
emanuel, it, help, suporte, contabilidade, financeiro,
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_emailsem 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)
- Subject: lottery, winner, urgent money, bitcoin investment
- Remetente: *.ru, *.cn (excepto conhecidos)
- Subject todo em MAIUSCULAS
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 → (2 sub-casos por ordem)
3a. REMETENTE = fornecedor conhecido (dominio na tabela de fornecedores):
- Subject: factura, invoice, recibo, receipt, pagamento, paid
- Dominio do remetente bate com entrada da tabela de fornecedores
→ Auto-processar despesa directamente (ver secção Auto-Despesas IMAP)
3b. REMETENTE = plataforma multi-fornecedor (toconline.pt, stripe.com, paypal.com, fastspring.com, payproglobal.com):
- Dominio do remetente e uma plataforma de faturacao (nao um fornecedor directo)
→ LER email completo → EXTRAIR emitente real (ver padroes abaixo)
→ SE emitente encontrado na tabela de fornecedores: processar como despesa desse fornecedor
→ SE emitente desconhecido: priority_flagged com nota "[Plataforma] - emitente desconhecido: [nome empresa]"
4. PRIORITARIO → Incluir no relatorio
- Remetente: cliente conhecido (verificar DeskCRM)
- Subject: urgente, problema, erro, critical, down
- Threads activas (RE:, FW:)
Resumo IMAP no output
📧 Emails Processados
- X spam eliminados
- Y promocionais arquivados
- Z despesas criadas automaticamente (valor total)
- W emails prioritarios pendentes
Excepcoes (NUNCA processar automaticamente)
- *@descomplicar.pt (internos)
- *@gov.pt, *@at.gov.pt, *@seg-social.pt (governo)
- *@tribunais.org.pt (tribunais)
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 origem:
1a. Fornecedor directo: dominio remetente bate tabela de fornecedores
→ fornecedor, categoria e moeda ja conhecidos, avancar para passo 2
1b. Plataforma multi-fornecedor: dominio remetente e toconline.pt, stripe.com, etc.
→ LER email (passo 2) → EXTRAIR emitente real (padroes da secção "Plataformas Multi-Fornecedor")
→ Procurar emitente na tabela "Emitentes Conhecidos por Plataforma"
→ SE encontrado: usar categoria/moeda dessa entrada, avancar para passo 3
→ SE desconhecido: registar action="priority_flagged", nota="[Plataforma] - emitente: [nome]", PARAR
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)
24 fornecedores activos. Verificar pelo dominio do email remetente. Mesma tabela usada para triagem IMAP E para auto-process tickets. NOTA: Plataformas de faturação (TOConline, Stripe, PayPal...) NAO sao fornecedores - ver secção "Plataformas Multi-Fornecedor" abaixo.
| # | 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 | 6 | Servicos Externos | 0 | USD | Pro mensal | |
| 13 | Gamma | gamma.app | 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 |
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)
Plataformas de faturacao sao intermediarios — nao sao fornecedores. O dominio do remetente identifica a plataforma; o CORPO do email identifica o fornecedor real. Activado pelo passo 3b da triagem IMAP.
Dominios de Plataformas Conhecidas
toconline.pt → sistema faturacao electronica PT (e-fatura B2B)
stripe.com → processador pagamentos (Cursor, Descript, OpenRouter...)
paypal.com → processador pagamentos (Canva via PayPal...)
fastspring.com → loja software (BdThemes...)
payproglobal.com → loja software (CapSolver...)
Padroes de Extracao do Emitente Real
TOConline (toconline.pt):
Procurar no HTML (por ordem):
1. "Emitido por:</strong> [NOME EMPRESA]"
2. "Emitente:</td><td>[NOME EMPRESA]"
3. "De:</strong> [NOME EMPRESA]"
Exemplo: "CUBIC CHOICES LDA" → procurar na tabela de fornecedores pelo nome
Stripe (stripe.com):
Procurar no subject: "[Nome Empresa] invoice" ou "Receipt from [Nome Empresa]"
Exemplo subject: "Your receipt from Cursor" → fornecedor = Cursor
PayPal (paypal.com):
Procurar no subject: "You paid [Nome Empresa]" ou "Receipt for your payment to [Nome Empresa]"
Exemplo: "You paid Canva" → fornecedor = Canva
FastSpring (fastspring.com):
Procurar no subject ou corpo: "Order from [Nome Empresa]" ou "purchased [Nome Produto] from [Nome Empresa]"
Exemplo: "purchased Element Pack from BdThemes" → fornecedor = BdThemes
PayPro Global (payproglobal.com):
Procurar no subject ou corpo: nome do produto/empresa
Exemplo: "CapSolver" no corpo → fornecedor = CapSolver
Emitentes Conhecidos por Plataforma
| Plataforma | Emitente | Fornecedor na Tabela | Cat | Notas |
|---|---|---|---|---|
| TOConline | CUBIC CHOICES LDA | — (nao esta na tabela) | 21 | Contabilidade GONDOOFFICE, tax=1, EUR |
| Stripe | Cursor | Cursor (#10) | 28 | — |
| Stripe | Descript | Descript (#9) | 28 | — |
| Stripe | OpenRouter | OpenRouter (#2) | 38 | — |
| PayPal | Canva | Canva (#7) | 28 | — |
| FastSpring | BdThemes | BdThemes (#15) | 14 | — |
| PayPro Global | CapSolver | CapSolver (#3) | 38 | — |
NOTA: CUBIC CHOICES LDA nao tem entrada na tabela de fornecedores (nao e um servico digital recorrente com dominio proprio). Usar directamente cat 21, tax=1, EUR.
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
1. Checkup normal (acima)
2. Planeamento semanal:
- Todas as tarefas com deadline esta semana
- Capacidade vs carga
- Distribuicao por dia
- Verificar estimativas de tempo (set_task_estimated_time se em falta)
3. Invocar /wp-update
Sexta-feira
1. Checkup normal (acima)
2. Sugerir manutencao WordPress:
- Listar os 10 sites da rede
- Oferecer checkup de seguranca
Sabado
1. Checkup normal (acima)
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
## 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)
## 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
Persistencia (FASE 3 - Passos 21-22)
Passo 21: Nota Obsidian
Path: /media/ealmeida/Dados/Hub/00-Inbox/
Filename: DD-MM-YYYY-checkup.md
---
title: Checkup DD-MM-YYYY
date: DD-MM-YYYY
type: checkup
status: active
---
## 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
mcp__memory-supabase__save_memory:
- content: "Checkup diario - X tickets, Y tarefas, Z urgentes, W emails"
- tags: ["today", "checkup", "DD-MM-YYYY"]
- metadata: { tickets, tasks, urgent, emails_processed, is_monday }
Output Final
ESTRUTURA OBRIGATORIA: Questoes urgentes NO TOPO. Utilizador ve primeiro o que requer atencao imediata.
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
---
## ⚠️ 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]
Auto-Process Tickets (FASE 1 - OBRIGATÓRIO)
EXECUTAR SILENCIOSAMENTE ANTES DE QUALQUER OUTPUT. Nao perguntar, nao mostrar preview. Processar e reportar no resumo final.
Passo 1: Recolher tickets abertos (status 1) de TODOS os departamentos
get_tickets({ status: 1, limit: 50 })
Passo 2: Classificar cada ticket
Para cada ticket aberto, aplicar por ordem de prioridade:
1. NOTIFICAÇÃO SISTEMA? (verificar PRIMEIRO)
→ Subject contem padrao protegido E remetente conhecido
→ NAO fechar. Guardar para "Requer Accao" no resumo.
2. DESPESA? (verificar SEGUNDO)
→ Email do remetente contem padrao de fornecedor conhecido (ver mapeamento)
→ Processar como despesa (ver passos abaixo)
3. SPAM? (verificar TERCEIRO)
→ Subject contem padrao SPAM
→ Fechar (status 5) com motivo
4. NEWSLETTER/INFORMATIVO?
→ Newsletters, updates de produtos, notificacoes genericas
→ Fechar (status 5) com motivo
5. NENHUM MATCH → Manter aberto para revisao
Passo 3: Processar Despesas
DADOS ESTAO NO HTML. A maioria dos fornecedores (Anthropic, Canva, Elastic Email) envia os dados no corpo do email, NAO como PDF anexo. Extrair valor, referencia e data do HTML do ticket.
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=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
Padroes SPAM (Fechar status 5)
Guest Post, SEO services, backlinks, partnership,
Purchase Order, WeTransfer, Prestige Awards
Notificacoes de Sistema (NUNCA auto-fechar)
Padroes protegidos (subject - case insensitive):
Legal Update, Legal Notice, Policy Change, Policy Update,
Deprecation, End of Life, EOL, Breaking Change,
Migration Required, Action Required, Action Needed,
Security Alert, Security Advisory, Security Notice,
API Change, API Update, Terms Update, Terms Change,
Service Disruption, Maintenance Required,
Compliance, GDPR, Data Processing, Data Processor,
Infrastructure Change, Platform Update, Product Update
Mapeamento Fornecedor → Categoria
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 |
|---|---|---|---|
| openai | Servicos IA e APIs | 38 | 0 |
| everhour | Softwares Gestao | 12 | 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)
| Tipo | Indicador | Accao |
|---|---|---|
| Payment Confirmation | "Payment Confirmation" de CWP/centos-webpanel | Fechar (confirmacao pagamento, nao fatura) |
| Payment Receipt | "Payment Was Successfully Processed" de elasticemail | Fechar (recibo pagamento recorrente sem dados de fatura) |
| Notificacao bancaria | "Notificação de transferência" de bancobpi | Fechar (notificacao, nao fatura) |
| Duplicado | reference_no ja existe no CRM | Fechar (ja processado) |
| Ticket duplicado | Mesmo subject que outro ticket ja processado | Fechar como duplicado |
NOTA: Receipts de Anthropic e Canva contem invoice number e valor → SAO despesas. "Receipt" so e motivo para saltar quando e apenas confirmacao de pagamento sem dados de fatura.
Campos Criticos
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)
Referência de Skills
| Secção | Skill | Comando |
|---|---|---|
| Timer | /time | /time |
| Tickets | /ticket | /ticket |
| Facturas | /invoice | /invoice overdue |
| Tarefas/Leads | /crm | /crm |
| Downloads | /cleanup-downloads | SE >10 ficheiros |
| WordPress | /wp-update | Segundas |
Anti-Patterns
- NUNCA executar checkup sem verificar data/hora
- NUNCA duplicar logica de outras skills
- NUNCA mostrar mais de 3 prioridades (PHDA)
- NUNCA mostrar resumo ANTES de processar despesas e SPAM
- NUNCA perguntar ao utilizador se deve processar despesas (e automatico)
- NUNCA assumir que so dept 3 tem tickets de contabilidade (verificar email do remetente)
- NUNCA saltar receipt que contem invoice number e valor (e despesa)
Changelog
v8.3.2 (2026-02-24)
- FLUXO IMAP PASSO 3b: Detecção de plataformas multi-fornecedor integrada na triagem IMAP
- EXTRACAO EMITENTE: Padroes HTML especificos por plataforma (TOConline, Stripe, PayPal, FastSpring, PayPro Global)
- TABELA EMITENTES: Mapeamento plataforma→emitente→fornecedor/categoria para 6 casos conhecidos
- AUTO-DESPESAS: Fluxo actualizado — passo 1 distingue fornecedor directo vs plataforma intermediaria
- CUBIC CHOICES LDA: Documentado fora da tabela de fornecedores (cat 21, tax=1, EUR, via TOConline)
v8.3.1 (2026-02-24)
- PLATAFORMAS MULTI-FORNECEDOR: Protocolo para plataformas de faturação (TOConline, Stripe, PayPal, FastSpring, PayPro Global) — NAO sao fornecedores, sao sistemas de entrega de faturas
- TOConline: Detectar pelo dominio → ler email → extrair emitente real → categorizar pelo emitente (nao pela plataforma). CUBIC CHOICES LDA → cat 21. Emitente desconhecido → flag priority
- Regra: NUNCA adicionar uma plataforma de faturacao multi-fornecedor à tabela de fornecedores
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_emailscomo 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 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
- VERIFICAR EXECUCAO: Passo 2 verifica ultima execucao via memory-supabase
- EXCEPCOES IMAP: Dominos gov.pt, at.gov.pt, tribunais nunca processados automaticamente
- BUG FIX: Corrigido MCP IMAP (seq.fetch→fetch para operacoes UID-based)
v7.4.0 (2026-02-06)
- Protocolo 3 fases, scan todos departamentos, HTML fonte dados, mapeamento expandido
v7.3.0 (2026-02-05)
- Notificacoes de sistema protegidas
v7.2.0 (2026-02-05)
- Auto-despesas contabilidade (dept 3)
v7.1.0 (2026-02-05)
- Integracao com skills Desk
Skill v8.3.2 | 2026-02-24 | Descomplicar®