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 name: today
description: > description: >
Checkup diário v7.5 - IMAP triaging, auto-despesas, Obsidian note, Supabase. 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 12 contas IMAP + tickets CRM + despesas auto + nota diaria. 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. Use when "checkup", "hoje", "today", "rotina", início de dia.
author: Descomplicar® Crescimento Digital author: Descomplicar® Crescimento Digital
version: 7.5.0 version: 8.3.1
quality_score: 92 quality_score: 92
user_invocable: true user_invocable: true
category: productivity 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_task: 1416
desk_project: 65 desk_project: 65
allowed-tools: Read, Write, mcp__desk-crm-v3, mcp__mcp-time, mcp__google-workspace, mcp__imap, mcp__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 mcps: desk-crm-v3, mcp-time, google-workspace, imap, memory-supabase, ssh-unified
dependencies: dependencies:
skills: [ticket, invoice, time, crm, wp-update, cleanup-downloads] 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. 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 15. Notificacoes de sistema que requerem revisao manual
16. Dashboard (timer, tickets, facturas, tarefas, leads, agenda) 16. Dashboard (timer, tickets, facturas, tarefas, leads, agenda)
17. 3 Prioridades do dia 17. 3 Prioridades do dia
18. SE SEGUNDA → Planeamento semanal + /wp-update 18. Workflows Sugeridos (analise de tarefas)
19. SE SEXTA → Sugerir manutencao WordPress 19. SE SEGUNDA → Planeamento semanal + /wp-update
20. SE SABADO → Consolidacao memorias 20. SE SEXTA → Sugerir manutencao WordPress
21. Criar nota Obsidian (Passo 9) 21. SE SABADO → MCP Health Check completo + Consolidacao memorias + Auditoria despesas
22. Guardar em Supabase (Passo 10) 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ã | | #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 ### 5. Agenda do Dia
``` ```
@@ -132,19 +201,40 @@ mcp__google-workspace__get_events({
## IMAP Triagem (FASE 1 - Passo 5) ## 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` > Ver regras detalhadas em `config/email-triage-rules.md`
### Contas IMAP (12) ### Contas IMAP (14)
``` ```
emanuel, it, help, suporte, contabilidade, financeiro, 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 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: Classificar cada email por ordem de prioridade:
1. SPAM → imap_delete_email(account, uid) 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") 2. PROMOCIONAL → imap_move_email(account, uid, "Promotions")
- Subject: newsletter, promo, desconto, oferta - Subject: newsletter, promo, desconto, oferta
- Remetente: *@marketing.*, *@news.*, *@promo.* - 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 - Subject: factura, invoice, recibo, receipt, pagamento, paid
- Remetente de servico conhecido (ver mapeamento abaixo) - Remetente de servico conhecido (ver mapeamento completo abaixo)
- Registar para reencaminhar para contabilidade@descomplicar.pt - Criar despesa + anexar PDF automaticamente
4. PRIORITARIO → Incluir no relatorio 4. PRIORITARIO → Incluir no relatorio
- Remetente: cliente conhecido (verificar DeskCRM) - Remetente: cliente conhecido (verificar DeskCRM)
@@ -173,7 +264,7 @@ Classificar cada email por ordem de prioridade:
📧 Emails Processados 📧 Emails Processados
- X spam eliminados - X spam eliminados
- Y promocionais arquivados - Y promocionais arquivados
- Z facturas para contabilidade - Z despesas criadas automaticamente (valor total)
- W emails prioritarios pendentes - 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 ## Rotinas Semanais
### Segunda-feira ### Segunda-feira
@@ -214,11 +486,244 @@ Classificar cada email por ordem de prioridade:
``` ```
1. Checkup normal (acima) 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 - Listar ~/.claude/projects/*/memory/MEMORY.md
- Extrair "Padroes Descobertos" e "Solucoes" - Extrair "Padroes Descobertos" e "Solucoes"
- Comentario na discussao #46 (Memorias) - Comentario na discussao #46 (Memorias)
- Backup em memory-supabase - 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 ### Passo 21: Nota Obsidian
``` ```
Path: /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/00-Inbox/ Path: /media/ealmeida/Dados/Hub/00-Inbox/
Filename: YYYY-MM-DD-checkup.md Filename: DD-MM-YYYY-checkup.md
--- ---
title: Checkup YYYY-MM-DD title: Checkup DD-MM-YYYY
date: YYYY-MM-DD date: DD-MM-YYYY
type: checkup type: checkup
status: active status: active
--- ---
## Checkup Diario - YYYY-MM-DD ## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
[Conteudo do relatorio com links CRM]
---
## ⚠️ 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 ### Passo 22: Supabase
@@ -247,7 +781,7 @@ status: active
``` ```
mcp__memory-supabase__save_memory: mcp__memory-supabase__save_memory:
- content: "Checkup diario - X tickets, Y tarefas, Z urgentes, W emails" - 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 } - metadata: { tickets, tasks, urgent, emails_processed, is_monday }
``` ```
@@ -255,42 +789,76 @@ mcp__memory-supabase__save_memory:
## Output Final ## Output Final
> **ESTRUTURA OBRIGATORIA:** Questoes urgentes NO TOPO.
> Utilizador ve primeiro o que requer atencao imediata.
```markdown ```markdown
## Checkup Diario - 2026-02-06 (Quinta) ## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
### 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
--- ---
### 3 Prioridades Hoje ## ⚠️ REQUER ATENÇÃO URGENTE
1. [ ] #1450 - Implementar API (Urgente)
2. [ ] Contactar OldClient (factura 15 dias) ### 🚨 [Categoria] - [Assunto]
3. [ ] #1448 - Documentacao Stack [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 1. get_ticket(ticket_id) → ler HTML completo
2. Extrair do HTML: valor, invoice/reference number, data, descricao 2. Extrair do HTML: valor, invoice/reference number, data, descricao
3. Mapear email → categoria (tabela abaixo) 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" 5. Fechar ticket (status 5) com "Despesa #ID criada"
6. SE existe ticket duplicado (mesmo subject) → fechar duplicado tambem 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. > Verificar pelo **dominio do email** do remetente, nao pelo departamento.
> Tickets de fornecedores conhecidos podem estar em QUALQUER 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 | | Padrao no Email | Categoria | ID | Tax |
|-----------------|-----------|-----|-----| |-----------------|-----------|-----|-----|
| anthropic | Servicos IA e APIs | 38 | 0 |
| openai | 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 | | everhour | Softwares Gestao | 12 | 0 |
| ptisp, namecheap | Registo de Dominios | 13 | 0 | | envato | Plugins e Recursos de Design | 9 | 0 |
| vimeo | Plataformas Armazenamento | 19 | 0 |
| payproglobal | Servicos IA e APIs (CapSolver) | 38 | 0 |
| bdthemes | Plugins e Recursos de Design | 9 | 0 |
| staples, multipapel | Material Escritorio | 15 | 1 | | staples, multipapel | Material Escritorio | 15 | 1 |
| ptisp | Registo de Dominios | 13 | 0 |
### Tickets a Saltar (NAO criar despesa) ### Tickets a Saltar (NAO criar despesa)
@@ -405,9 +967,12 @@ Infrastructure Change, Platform Update, Product Update
### Campos Criticos ### 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 = 1 → Fornecedores PT (MEO, Moloni, Staples)
tax = 0 → Fornecedores estrangeiros (Anthropic, Canva, Hetzner, etc.) 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 ## 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) ### v7.5.0 (2026-02-06)
- **IMAP TRIAGEM:** Protocolo completo para 12 contas IMAP (spam, promo, facturas, prioritarios) - **IMAP TRIAGEM:** Protocolo completo para 13 contas IMAP (spam, promo, facturas, prioritarios)
- **NOTA OBSIDIAN:** Criar nota diaria em /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/00-Inbox/ - **NOTA OBSIDIAN:** Criar nota diaria em /media/ealmeida/Dados/Hub/00-Inbox/
- **SUPABASE SAVE:** Guardar resumo checkup em memory-supabase com metricas - **SUPABASE SAVE:** Guardar resumo checkup em memory-supabase com metricas
- **LEADS + PROPOSTAS:** Adicionar verificacao de leads novos e propostas pendentes na Fase 2 - **LEADS + PROPOSTAS:** Adicionar verificacao de leads novos e propostas pendentes na Fase 2
- **SEXTA-FEIRA:** Rotina de manutencao WordPress sugerida as sextas - **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®*