feat(gestao): adiciona plugin gestao (agents, skills, knowledge e metadados do projeto)

This commit is contained in:
2026-10-28 16:08:53 +00:00
parent 7b2162ff29
commit de2d6f2fb5
91 changed files with 13525 additions and 0 deletions
+186
View File
@@ -0,0 +1,186 @@
---
title: Setup MCPs para /today
date: 2025-01-21
status: activo
layer: wiki
---
# Setup MCPs para /today
## Estado Actual
| MCP | Estado | Notas |
|-----|--------|-------|
| desk-crm-v3 | ✅ Activo | Tickets, projectos, tarefas |
| filesystem | ✅ Activo | Notas Obsidian |
| mem0 | ✅ Activo | Persistência |
| imap | ✅ Activo | 12 contas email |
| google-workspace | ⏸️ Opcional | Calendar (se necessário) |
---
## MCP IMAP (Principal)
### Contas Configuradas (12)
```
emanuel@descomplicar.pt
it@descomplicar.pt
help@descomplicar.pt
suporte@descomplicar.pt
contabilidade@descomplicar.pt
financeiro@descomplicar.pt
info@descomplicar.pt
rh@descomplicar.pt
mkt@descomplicar.pt
design@descomplicar.pt
news@descomplicar.pt
aiktop@descomplicar.pt
```
### Ferramentas Disponíveis
| Ferramenta | Função |
|------------|--------|
| `imap_list_accounts` | Listar contas disponíveis |
| `imap_list_folders` | Listar pastas de uma conta |
| `imap_list_emails` | Listar emails de uma pasta |
| `imap_read_email` | Ler email por UID |
| `imap_search_emails` | Pesquisar emails |
| `imap_move_email` | Mover email entre pastas |
| `imap_delete_email` | Eliminar email |
### Acções Automáticas Diárias
1. **SPAM** → `imap_delete_email`
2. **Promocionais** → `imap_move_email` para "Promotions"
3. **Facturas pagas** → Reencaminhar para contabilidade@descomplicar.pt
4. **Prioritários** → Listar no relatório
### Regras de Triagem
Ver: `config/email-triage-rules.md`
---
## Google Workspace MCP (Opcional)
### Localização
```
~/mcp-servers/google_workspace_mcp/
```
### Capacidades
- **Gmail**: Pesquisa, envio, gestão de emails
- **Calendar**: Eventos, reuniões, agenda
- **Drive**: Ficheiros (opcional)
- **Docs/Sheets**: Documentos (opcional)
### Requisitos para Activar
1. **Google Cloud Console**
- Criar projecto ou usar existente
- Activar Gmail API
- Activar Calendar API
- Criar credenciais OAuth (Desktop App)
2. **Credenciais necessárias**
```
GOOGLE_OAUTH_CLIENT_ID=xxx
GOOGLE_OAUTH_CLIENT_SECRET=xxx
USER_GOOGLE_EMAIL=emanuel@descomplicar.pt
```
3. **Ficheiros existentes**
- `client_secret.json` ✅ Existe
- `token.json` ✅ Existe
- `.env` ✅ Existe
### Verificar Estado
```bash
cd ~/mcp-servers/google_workspace_mcp
cat .env
# Verificar se credenciais estão preenchidas
```
### Adicionar ao Claude settings.json
```json
{
"mcpServers": {
"google-workspace": {
"command": "python",
"args": ["-m", "workspace_mcp"],
"cwd": "/home/ealmeida/mcp-servers/google_workspace_mcp",
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "...",
"GOOGLE_OAUTH_CLIENT_SECRET": "...",
"USER_GOOGLE_EMAIL": "emanuel@descomplicar.pt"
}
}
}
}
```
---
## Passos para Completar Setup
### 1. Verificar credenciais Google
```bash
cd ~/mcp-servers/google_workspace_mcp
cat .env
cat client_secret.json
```
### 2. Testar MCP localmente
```bash
cd ~/mcp-servers/google_workspace_mcp
source venv/bin/activate
python -m workspace_mcp --test
```
### 3. Adicionar ao Claude
Editar `~/.claude/settings.json` com configuração acima.
### 4. Reiniciar Claude Code
```bash
claude --version
# Fechar e reabrir
```
### 5. Testar no /today
```bash
# Executar /today e verificar se Gmail/Calendar funcionam
```
---
## Funcionalidades Quando Activo
### Gmail
- `list_emails` - Listar emails
- `search_emails` - Pesquisar emails
- `get_email` - Ver email específico
- `send_email` - Enviar email
- `create_draft` - Criar rascunho
### Calendar
- `list_events` - Listar eventos
- `get_event` - Ver evento
- `create_event` - Criar evento
- `update_event` - Actualizar evento
- `delete_event` - Eliminar evento
---
## Alternativa: MCP Gmail Dedicado
Se preferir usar apenas Gmail (mais leve):
```
~/mcp-servers/mcp-gmail.tar.gz
```
Extrair e configurar separadamente.
---
**Última actualização**: 2025-01-21
+301
View File
@@ -0,0 +1,301 @@
---
name: today
description: Checkup diário - dashboard agregador que lê resultados dos agentes cron locais (desktop) e recolhe dados frescos via skills interactivas. Usar quando "checkup", "hoje", "today", "rotina", início de dia.
context: fork
layer: wiki
---
# /today v12.0 - Checkup Diario (Agregador)
Le resultados dos agentes cron locais (desktop, crontab ealmeida) + invoca skills interactivas. Nao duplica trabalho automatizado.
---
## Arquitectura
```
CRON (desktop local, crontab ealmeida) /today (interactivo, sob pedido)
├── imap-triage (4h) ├── Le logs locais do cron
├── auto-expense (4h +15min) ├── /daily-digest (dados frescos)
├── ticket-triage (4h +30min) ├── /tasks-overview (dados frescos)
├── aiktop-tasks (15min) ├── /cleanup-downloads (se necessario)
├── infra-check (diario 7h) ├── Specs/Sprints scan
├── wp-update (segunda 23h) ├── Rotinas especiais por dia
├── intelligence-* (researcher/scorer/ └── Dashboard + Obsidian + Mem0
│ selector/publisher)
└── weekly-digest-podcast (quinta 20h)
```
---
## Regra Fundamental
> Fases 1-2 sao **silenciosas**. Executar tudo antes de mostrar output.
> O utilizador so ve o dashboard final.
---
## Protocolo
### Fase 0: Verificacoes
```
1. mcp__mcp-time__current_time -> data, dia da semana
2. mcp__mem_search_memories("today checkup YYYY-MM-DD")
-> Se ja existe hoje: perguntar se quer re-executar
```
### Fase 1: Ler resultados dos agentes cron (silencioso)
```
3. Ler logs LOCAIS (Bash tail — sem SSH, tudo corre no desktop):
Base: /media/ealmeida/Dados/Dev/claude_automations_dev/
a) IMAP (ultimo report):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/imap-triage/imap-triage.log
cat ~/.claude-work/today-imap-DD-MM-YYYY.json (se existir)
b) Ticket triage (ultimo log):
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/ticket-triage/ticket-triage.log
c) Auto-expense (ultimo log):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/auto-expense/auto-expense.log
d) Infra check (ultimo log):
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/infra-check/infra-check.log
e) AikTop tasks (ultimo log):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/aiktop-tasks/aiktop-tasks.log
f) SE segunda — wp-update (ultimo log):
tail -50 /media/ealmeida/Dados/Dev/claude_automations_dev/wp-update/wp-update.log
g) Intelligence pipeline:
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/daily-selector/daily-selector.log
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-publisher/intelligence-publisher.log
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-researcher/intelligence-researcher.log
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-scorer/intelligence-scorer.log
h) HEARTBEAT WP — ultimo post em descomplicar.pt categoria 1188 (noticias):
mcp__ssh-unified__ssh_execute(server="server", command="cd /home/ealmeida/public_html && wp post list --post_type=post --category=1188 --posts_per_page=1 --fields=ID,post_title,post_date --format=csv --allow-root 2>&1 | tail -2")
-> Calcular idade do ultimo post
-> Se >26h sem post novo: ALERTA "Requer Atencao Urgente" + contexto:
* Pipeline deveria publicar ate 5 noticias/dia (selector 06:30 + slots 09/11/13/15:30/17:30)
* Verificar logs daily-selector + publisher (passo g)
* Stock Supabase (base de dados própria do pipeline de notícias): scored>=7 count via curl REST
* Verificar se desktop teve downtime (uptime / journalctl) — agentes correm no desktop local
4. DETECTAR PROBLEMAS nos logs:
- Cron nao correu (log desactualizado >8h)
- Exit codes != 0
- Erros ou falhas nos logs
- HEARTBEAT WP >26h sem post novo em cat 1188
-> Adicionar a seccao "Requer Atencao Urgente"
4b. VERIFICAR FORNECEDORES AUTO-CRIADOS:
Ler ~/.claude-work/fornecedores-iva.json
Filtrar entradas com "auto_proposto": true
Para cada entrada extrair: nome, dominio (chave), politica, confianca, despesas_count
-> Se existirem: adicionar secção "Fornecedores Auto-Criados" no dashboard (ver formato abaixo)
```
### Fase 2: Recolha de dados frescos (silencioso)
```
5. Invocar /daily-digest
-> Timer, tickets, facturas, leads, propostas, agenda
-> Output: dashboard markdown
6. Invocar /tasks-overview
-> Tarefas overdue, pendentes, em curso, workflows sugeridos
-> Output: tarefas markdown
7. SE >10 ficheiros em ~/Transferencias:
-> Invocar /cleanup-downloads
```
### Fase 2b: Sprint/Spec Activos (silencioso)
```
8. Glob: /media/ealmeida/Dados/Dev/**/SPEC.md (profundidade max 3)
-> Para cada encontrado: Ler frontmatter (15 linhas)
-> Filtrar: status != "completed"
-> Extrair: titulo (linha # SPEC:), status, weight, scope done/total
9. Glob: /media/ealmeida/Dados/Dev/**/SPRINT.md
-> Para cada encontrado: Ler frontmatter
-> Filtrar: status == "active"
-> Extrair: sprint_id, tasks done/total, checkpoint_done, end_date
```
### Fase 2c: Rotinas Especiais
```
10. SE SEGUNDA:
-> Planeamento semanal (tarefas da semana + capacidade)
11. SE SEXTA:
-> Sugerir manutencao e revisao semanal
```
### Fase 3: Output Final
```
12. AGREGAR resultados de cron + skills:
- Logs do cron (Fase 1)
- Dados frescos do /daily-digest e /tasks-overview (Fase 2)
- Specs/Sprints (Fase 2b)
13. DASHBOARD ao utilizador (formato abaixo)
14. CRIAR NOTA OBSIDIAN:
Path: /media/ealmeida/Dados/Hub/00-Inbox/DD-MM-YYYY-checkup.md
Conteudo: dashboard completo
15. GUARDAR em Mem0 (via MCP gateway):
mcp__mem_save_memory({
text: "Checkup diario DD-MM-YYYY - X tickets, Y tarefas, Z urgentes, cron OK/FALHA"
})
```
---
## Formato Dashboard
```markdown
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
---
## Requer Atencao Urgente
[Alertas: cron falhado, erros infra, seguranca, notificacoes criticas]
---
## Fornecedores Auto-Criados (pendente validação)
[Omitir secção se nenhum fornecedor tem auto_proposto=true]
| Fornecedor | Domínio | Política | Confiança | Despesas | Acção |
|------------|---------|----------|-----------|----------|-------|
| [nome] | [dominio] | [politica] | [confianca] | [despesas_count]/3 | [— se alta, "rever" se baixa] |
Nota: Promovidos automaticamente após 3 despesas. Confiança "baixa" = fallback EXTRA_UE aplicado — rever manualmente.
---
## 3 Prioridades Hoje
1. [ ] [Mais urgente]
2. [ ] [Segunda]
3. [ ] [Terceira]
---
## Workflows Sugeridos
[Do /tasks-overview]
---
## Sprint / Spec Activos
[Projectos com spec/sprint activo: nome, progresso, checkpoint]
[Se nenhum: "Nenhum sprint/spec activo"]
---
## Resumo do Dia
[Do /daily-digest: timer, tickets, facturas, tarefas, leads, agenda]
---
## Agentes Cron (desktop local)
| Agente | Ultima execucao | Status | Resumo |
|--------|----------------|--------|--------|
| imap-triage | HH:MM | OK/FALHA | X contas, Y emails |
| auto-expense | HH:MM | OK/SKIP | Z despesas criadas |
| ticket-triage | HH:MM | OK/FALHA | W tickets processados |
| aiktop-tasks | HH:MM | OK/FALHA | N tarefas executadas |
| infra-check | HH:MM | OK/FALHA | X/4 MCPs operacionais |
| wp-update [se seg] | HH:MM | OK/FALHA | X/16 sites actualizados |
---
## Auto-Processamento (ultimas 24h)
[Resumo agregado: despesas criadas, tickets fechados, emails limpos]
```
---
## Nota Obsidian
```yaml
---
title: Checkup DD-MM-YYYY
date: DD-MM-YYYY
type: checkup
status: active
---
```
Filename: `DD-MM-YYYY-checkup.md` (Regra #45: formato DD-MM-YYYY)
---
## Anti-Patterns
- NUNCA invocar /ticket-triage, /imap-triage, /auto-expense, /infra-check, /wp-update (correm no cron)
- NUNCA mostrar output antes de terminar Fase 1 e 2
- NUNCA mostrar mais de 3 prioridades (PHDA)
- NUNCA executar sem verificar data/hora primeiro
- SEMPRE ler logs do cron antes de mostrar dashboard
- SEMPRE alertar se algum agente cron nao correu nas ultimas 8h
- NUNCA usar `mem0` MCP para o checkup — deprecated para memória de agentes; usar `mem0` (`mcp__mem_*`)
---
## Referencia
| Componente | Tipo | Responsabilidade |
|-----------|------|-----------------|
| `imap-triage` | Cron desktop (*/4h) | Triagem IMAP 13 contas + dedup Supabase (BD própria do pipeline IMAP, não é memória de agente) |
| `auto-expense` | Cron desktop (15 */4h) | Criacao automatica de despesas |
| `ticket-triage` | Cron desktop (30 */4h) | Auto-process tickets (SPAM, facturas) |
| `aiktop-tasks` | Cron desktop (*/15min) | Executa tarefas AikTop do Desk CRM |
| `infra-check` | Cron desktop (07h) | Health check gateway + MCPs |
| `wp-update` | Cron desktop (seg 23h) | Actualizacoes WordPress 16 sites |
| `weekly-digest-podcast` | Cron desktop (quinta 20h) | Digest semanal para podcast |
| `improvement-evaluator-v2` | Cron Hermes (diário 07:00) | Lê worklogs/#33 → melhorias em BD; ticket semanal seg top 5 (job d398b5e2c3be) |
| `gitea-ci-cleaner` | Cron desktop (45 */4h) | Limpeza de runs CI Gitea |
| `daily-selector` | Cron desktop (06:30) | Selector ate 5 noticias/dia diversas → status=scheduled |
| `intelligence-publisher` | Cron desktop (5 slots 09/11/13/15:30/17:30) | Publica slots scheduled em descomplicar.pt |
| `intelligence-researcher` | Cron desktop (9/14/20) | Fetch 214 RSS → Supabase (BD própria do pipeline de notícias, não é memória de agente) |
| `intelligence-scorer` | Cron desktop (0/30 min) | Score OpenRouter gpt-oss-20b |
| `HEARTBEAT WP` | Check ao vivo | `wp post list cat=1188` → idade do ultimo post. Alerta se >26h |
| `/daily-digest` | Skill (interactivo) | Timer, tickets, facturas, leads, agenda |
| `/tasks-overview` | Skill (interactivo) | Tarefas pendentes/overdue + workflows |
| `/cleanup-downloads` | Skill (interactivo) | Limpeza pasta Transferencias |
| `/spec` + `/sprint` | Scan local | Specs e sprints activos |
Repo agentes: `git.descomplicar.pt/ealmeida/claude_automations_dev`
---
## Self-Healing
Antes de executar, ler `~/.claude-work/healing/today.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
```json
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
```
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
---
*Skill v12.0.0 | 01-07-2026 | Descomplicar® — memória do checkup migrada de mem0 (deprecated) para Mem0 (mcp__mem_*)*
## Healing Log
<!-- Registo automático de erros e correcções nesta skill -->
@@ -0,0 +1,456 @@
# Regras de Triagem de Emails
## Contas IMAP (12)
```yaml
accounts:
- emanuel@descomplicar.pt
- it@descomplicar.pt
- help@descomplicar.pt
- suporte@descomplicar.pt
- contabilidade@descomplicar.pt
- financeiro@descomplicar.pt
- info@descomplicar.pt
- rh@descomplicar.pt
- mkt@descomplicar.pt
- design@descomplicar.pt
- news@descomplicar.pt
- aiktop@descomplicar.pt
```
---
## Regra 1: SPAM (Eliminar)
**Acção**: `imap_delete_email`
### Padrões Subject (case insensitive)
```
- lottery
- winner
- million dollars
- urgent money
- bitcoin investment
- crypto opportunity
- claim your prize
- act now
- limited time offer
- you have been selected
- dear beneficiary
- inheritance
- nigerian prince
```
### Padrões Remetente
```
- *@*.ru (excepto conhecidos)
- *@*.cn (excepto conhecidos)
- no-reply@spam*
- noreply@bulk*
```
### Indicadores técnicos
```
- SPF fail
- DKIM fail
- Muitos caracteres especiais no subject
- Subject todo em MAIÚSCULAS
```
---
## Regra 2: PROMOCIONAIS (Arquivar ou Eliminar)
**Acção padrão**: `imap_move_email` → pasta "Promotions"
**Excepções por conta:**
```yaml
delete_promotions:
- rh # Não tem pasta Promotions - apagar directamente
```
> Contas listadas em `delete_promotions`: usar `imap_delete_email` em vez de mover.
### Padrões Subject
```
- newsletter
- promo
- promoção
- desconto
- oferta especial
- black friday
- cyber monday
- novidades
- new arrivals
- sale
- % off
- grátis
- free shipping
```
### Padrões Remetente
```
- *@marketing.*
- *@news.*
- *@promo.*
- *@newsletter.*
- *@campaigns.*
- *@mailchimp.com
- *@sendgrid.net
- *@mailgun.org
```
### Headers
```
- List-Unsubscribe presente
- Precedence: bulk
- X-Campaign-*
```
---
## Regra 3: FACTURAS PAGAS (Reencaminhar)
**Acção**: Registar para reencaminhar para `contabilidade@descomplicar.pt`
### Padrões Subject
```
- factura
- fatura
- invoice
- recibo
- receipt
- pagamento confirmado
- payment confirmed
- pago
- paid
- comprovativo
- ordem de pagamento
```
### Padrões Remetente (serviços conhecidos)
```
- *@hetzner.com
- *@ovh.com
- *@cloudflare.com
- *@github.com
- *@google.com
- *@microsoft.com
- *@adobe.com
- *@figma.com
- *@notion.so
- *@stripe.com
- *@paypal.com
- *@wise.com
- *@revolut.com
- *@n26.com
- *facturacao@*
- *billing@*
- *invoices@*
```
### Anexos
```
- *.pdf com "factura" no nome
- *.pdf com "invoice" no nome
- *.pdf com "recibo" no nome
```
---
## Regra 4: PRIORITÁRIOS (Listar)
**Acção**: Incluir no relatório diário para revisão manual
### Padrões Subject
```
- urgente
- urgent
- importante
- important
- problema
- problem
- erro
- error
- falha
- failure
- down
- offline
- crítico
- critical
```
### Remetentes prioritários
```
# Clientes activos (verificar DeskCRM)
# Parceiros importantes
# Serviços críticos:
- *@cloudflare.com (security alerts)
- *@hetzner.com (server alerts)
- *@github.com (security)
- *@google.com (security)
```
### Indicadores
```
- RE: ou FW: (threads activas)
- Múltiplos destinatários da empresa
- Marcado como importante pelo remetente
```
---
## Excepções (Nunca processar automaticamente)
```yaml
whitelist_senders:
- *@descomplicar.pt # Internos
- *@cliente-importante.pt # Clientes VIP
whitelist_domains:
- gov.pt # Governo
- tribunais.org.pt # Tribunais
- at.gov.pt # Autoridade Tributária
- seg-social.pt # Segurança Social
```
---
## Pastas IMAP Standard
| Pasta | Uso |
|-------|-----|
| INBOX | Emails por processar |
| Promotions | Emails promocionais arquivados |
| Processed | Emails processados pelo /today |
| Important | Emails marcados como prioritários |
| Trash | Eliminados |
---
## Métricas Diárias
Registar em cada execução:
```yaml
metrics:
date: YYYY-MM-DD
accounts_processed: 12
total_emails: X
spam_deleted: Y
promotions_archived: Z
invoices_forwarded: W
priority_flagged: V
processing_time: Xs
```
---
---
## Regras de Tickets (DeskCRM)
### Notificações de Sistema → NUNCA auto-fechar
> **REGRA PRIORITÁRIA:** Verificar ANTES dos padrões SPAM. Se um ticket corresponder a esta regra, não pode ser fechado automaticamente.
**Padrões protegidos (subject - case insensitive):**
```regex
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|transitions to
```
**Condição:** Remetente deve ser fornecedor conhecido (ver lista de remetentes conhecidos abaixo).
**Acção:**
```
→ NÃO fechar
→ Listar no relatório como: "⚠️ REQUER ACÇÃO: #{ID} - {Assunto}"
→ Manter aberto para análise e decisão manual
```
---
### Tickets SPAM → Fechar AUTOMATICAMENTE
> **IMPORTANTE:** Verificar PRIMEIRO se o ticket corresponde à regra de "Notificações de Sistema" acima. Se sim, NÃO fechar.
**Padrões de detecção (subject):**
```regex
Guest Post|SEO services|backlinks|partnership|
link building|dofollow|collaboration opportunity|
Boas Festas|Season's Greetings
```
> **NOTA:** "Action Required", "Termos de Serviço" e notificações legais foram removidos dos padrões SPAM. Podem indicar mudanças reais em serviços que usamos. São tratados pela regra de "Notificações de Sistema" acima.
**⚡ Acção AUTOMÁTICA - Executar SEM intervenção manual:**
```
close_ticket(ticket_id, message="Fechado automaticamente - SPAM detectado")
# Registar: "🗑️ SPAM fechado: #{ID} - {Assunto}"
```
> [!important] SPAM = FECHAR IMEDIATAMENTE
> Não perder tempo a analisar. Fechar automaticamente e seguir em frente.
---
### Tickets de PAGAMENTOS → Contabilidade + Fechar
**Departamentos DeskCRM:**
| ID | Nome | Email |
|----|------|-------|
| 1 | Comercial | info@descomplicar.pt |
| 2 | Suporte | suporte@descomplicar.pt |
| 3 | **Contabilidade** | contabilidade@descomplicar.pt |
| 4 | RH | rh@descomplicar.pt |
| 5 | Design | design@descomplicar.pt |
| 6 | Marketing | mkt@descomplicar.pt |
| 7 | Tecnologia | it@descomplicar.pt |
**Padrões de detecção (subject):**
```regex
payment|pagamento|pago|paid|
invoice|factura|fatura|recibo|
successfully.*(processed|completed)|
subscription.*(renewed|confirmed)|
order.*confirmed|receipt|
account.*funded|has been funded|
Envio de Fatura Eletrónica|
Invoice Payment Confirmation|
Customer Invoice
```
**Remetentes conhecidos (processar SEMPRE):**
```yaml
services:
# Hosting & Infra
- "*@elasticemail.com" # Elastic Email
- "*@hetzner.com" # Hetzner
- "*@hetzner.de"
- "*@centos-webpanel.com" # CWP
- "*@control-webpanel.com"
# Design & Tools
- "*@canva.com" # Canva
# Telecom PT
- "*@meo.pt" # MEO
- "*@altice.pt"
- "*@nos.pt" # NOS (futuro)
- "*@vodafone.pt" # Vodafone (futuro)
# Cloud & SaaS
- "*@cloudflare.com"
- "*@github.com"
- "*@google.com"
- "*@microsoft.com"
- "*@adobe.com"
- "*@figma.com"
- "*@notion.so"
- "*@openai.com"
- "*@email.openai.com"
- "*@anthropic.com"
- "*@openrouter.zendesk.com" # OpenRouter
# Pagamentos
- "*@stripe.com"
- "*@paypal.com"
- "*@wise.com"
- "*@revolut.com"
```
**Lógica de processamento:**
```
IF assunto contém padrão de pagamento/factura:
IF remetente IN remetentes_conhecidos:
→ Contabilidade + Fechar (AUTOMÁTICO)
ELSE:
→ Avaliar indicadores de spam/phishing
→ LISTAR para revisão manual com recomendação
```
**⚡ Acção AUTOMÁTICA para remetentes CONHECIDOS:**
```
# Executar AMBAS as acções automaticamente, SEM intervenção manual:
1. update_ticket(ticket_id, department=3) # Mover para Contabilidade
2. close_ticket(ticket_id, message="Fatura processada automaticamente - Contabilidade")
# Registar: "💰 Contabilidade + Fechado: #{ID} - {Assunto}"
```
**Acção para remetentes DESCONHECIDOS:**
```
1. Avaliar indicadores de spam (ver abaixo)
2. LISTAR no relatório com recomendação:
- [SPAM?] se indicadores presentes
- [NOVO?] se parece legítimo (possível novo serviço)
3. Aguardar decisão manual
```
### Indicadores de SPAM/PHISHING
**Alta probabilidade de SPAM:**
- Remetente pessoal (gmail, hotmail, yahoo) a enviar "facturas empresariais"
- Domínio suspeito (muitos números, hífens, extensões estranhas)
- Erros ortográficos no assunto ("facktura", "pagamanto")
- Assunto todo em MAIÚSCULAS
- Urgência exagerada ("ÚLTIMO AVISO", "URGENTE", "CONTA SUSPENSA")
- Sem número de factura/referência específico
- Remetente não corresponde à empresa alegada no assunto
**Provavelmente LEGÍTIMO (novo serviço):**
- Domínio empresarial consistente com o assunto
- Formato profissional (número de factura, data, referência)
- Sem urgência exagerada
- Padrão consistente com facturas reais
> [!info] NUNCA eliminar automaticamente remetentes desconhecidos
> Podem ser novos serviços subscritos. Sempre listar para revisão manual.
### Tickets para ELIMINAR (sem valor contabilístico)
**Padrões de assunto:**
```yaml
delete_patterns:
# Elastic Email - recargas
- "Your Elastic Email Account was successfully re-charged"
- "Account re-charged"
- "Auto-recharge successful"
- "Credit added to your account"
# FULL Services - activações
- "[BOT] Ativação realizada com sucesso"
- "[BOT] Activation successful"
```
**Acção:**
```
delete_ticket(ticket_id, confirm=true, reason="Notificação automática sem valor")
```
> Estas são notificações de recarga automática, não facturas. Não têm valor para contabilidade.
**Exemplos de assuntos detectados:**
- "Your Elastic Email Payment Was Successfully Processed"
- "Canva - Your invoice is ready"
- "Hetzner - Invoice for January 2025"
- "CentOS WebPanel Pro License Invoice"
- "MEO - Factura disponível"
- "Invoice #12345 - Payment Confirmed"
- "Pagamento confirmado - Factura #123"
- "Your OpenAI API account has been funded"
- "Your OpenRouter, Inc receipt [#1234-5678]"
- "Your receipt from OpenRouter, Inc #1234-5678"
- "Envio de Fatura Eletrónica: FT A/123456789"
- "Invoice Payment Confirmation"
- "Customer Invoice"
---
**Versão**: 1.1.0
**Última actualização**: 2025-01-21
+91
View File
@@ -0,0 +1,91 @@
# /today v11.0 - Checkup Diario (Orquestrador)
Executa o checkup diario lendo logs locais dos agentes + recolhe dados frescos.
> NOTA CRITICA: CT 102 abatido em 20-04-2026. Os agentes cron correm como systemd user timers
> no desktop. NUNCA usar ssh_execute(server="dev"). Ler logs locais via tail/journalctl.
## Passo 1: Verificar data e ultima execucao
```
mcp__mcp-time__current_time → data, dia da semana
mcp__mem_search_memories("today checkup YYYY-MM-DD")
Se ja existe hoje → perguntar se quer re-executar
```
## Passo 2: Fase 1 - Ler logs locais dos agentes (silencioso)
Base: /media/ealmeida/Dados/Dev/claude_automations_dev/
```bash
# IMAP Triage
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/imap-triage/imap-triage.log
cat ~/.claude-work/today-imap-$(date +%d-%m-%Y).json 2>/dev/null
# Ticket Triage
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/ticket-triage/ticket-triage.log 2>/dev/null
# Auto-Expense
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/auto-expense/auto-expense.log 2>/dev/null
# Infra Check
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/infra-check/infra-check.log 2>/dev/null
# AikTop Tasks
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/aiktop-tasks/aiktop-tasks.log 2>/dev/null
# WP Update (apenas se segunda-feira)
tail -50 /media/ealmeida/Dados/Dev/claude_automations_dev/wp-update/wp-update.log 2>/dev/null
# Intelligence pipeline (status)
tail -15 /media/ealmeida/Dados/Dev/claude_automations_dev/daily-selector/daily-selector.log 2>/dev/null
tail -10 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-publisher/intelligence-publisher.log 2>/dev/null
```
Verificar estado systemd para confirmar ultima execucao:
```bash
journalctl --user -u imap-triage.service -u ticket-triage.service -u auto-expense.service \
-u infra-check.service -u aiktop-tasks.service --since "8 hours ago" \
--no-pager -n 5 --output=short-precise
```
Para cada agente: verificar se correu nas ultimas 8h (infra: 24h), detectar erros.
Adicionar alertas criticos a "Requer Atencao Urgente".
## Passo 3: Fase 2 - Recolha de dados frescos (silencioso)
Invocar em paralelo:
1. `/daily-digest` → timer, tickets, facturas, leads, propostas, agenda
2. `/tasks-overview` → tarefas overdue/pendentes/em curso + workflows sugeridos
Verificar `~/Transferencias` — se >10 ficheiros, invocar `/cleanup-downloads`.
## Passo 4: Fase 2b - Specs e Sprints activos (silencioso)
```bash
find /media/ealmeida/Dados/Dev -name "SPEC.md" -maxdepth 4 2>/dev/null
find /media/ealmeida/Dados/Dev -name "SPRINT.md" -maxdepth 4 2>/dev/null
```
Para cada encontrado: ler frontmatter (primeiras 15 linhas), filtrar status != "completed"/"archived".
Extrair: titulo, status, progresso done/total.
## Passo 5: Rotinas especiais por dia
- Segunda: planeamento semanal (tarefas + capacidade)
- Sexta: sugerir manutencao semanal
## Passo 6: Dashboard final + guardar
Agregar todos os resultados e mostrar dashboard (formato no SKILL.md).
Criar nota Obsidian:
- Path: `/media/ealmeida/Dados/Hub/00-Inbox/DD-MM-YYYY-checkup.md` (formato DD-MM-YYYY)
- Frontmatter: title, date, type: checkup, status: active
Guardar em Mem0:
```
mcp__mem_save_memory({
text: "Checkup diario DD-MM-YYYY - X tickets, Y tarefas, cron OK/FALHA"
})
```
@@ -0,0 +1,140 @@
---
title: "Checkup Diário - {{DATE}}"
date: {{DATE}}
type: daily
tags: [diario, checkup, {{WEEKDAY}}]
aliases: ["{{DATE}}"]
layer: wiki
---
# 📅 {{DATE}} - {{WEEKDAY}}
## 🎫 Tickets
### Eliminados (notificações sem valor)
{{#DELETED_TICKETS}}
- 🗑️ #{{ID}} - {{SUBJECT}}
{{/DELETED_TICKETS}}
{{^DELETED_TICKETS}}
- Nenhum ticket eliminado
{{/DELETED_TICKETS}}
### Processados Automaticamente (Pagamentos → Contabilidade)
{{#PAYMENT_TICKETS}}
- [x] [[Ticket-{{ID}}|#{{ID}}]] - {{SUBJECT}} → **Fechado**
{{/PAYMENT_TICKETS}}
{{^PAYMENT_TICKETS}}
- Nenhum ticket de pagamento processado
{{/PAYMENT_TICKETS}}
### Urgentes
{{#URGENT_TICKETS}}
- [!] [[Ticket-{{ID}}|#{{ID}}]] - {{CLIENT}} - {{SUBJECT}}
{{/URGENT_TICKETS}}
{{^URGENT_TICKETS}}
- Nenhum ticket urgente
{{/URGENT_TICKETS}}
### Abertos (revisão manual)
{{#OPEN_TICKETS}}
- [ ] [[Ticket-{{ID}}|#{{ID}}]] - {{CLIENT}} - {{SUBJECT}}
{{/OPEN_TICKETS}}
{{^OPEN_TICKETS}}
- Nenhum ticket aberto
{{/OPEN_TICKETS}}
**Resumo**: {{TICKETS_COUNT}} tickets | {{PAYMENT_COUNT}} pagamentos fechados | {{URGENT_COUNT}} urgentes
---
## 📧 Emails (12 contas)
### Triagem Automática
| Acção | Quantidade |
|-------|------------|
| Spam eliminado | {{SPAM_DELETED}} |
| Promocionais arquivados | {{PROMOS_ARCHIVED}} |
| Facturas → Contabilidade | {{INVOICES_FORWARDED}} |
### Prioritários (revisão manual)
{{#PRIORITY_EMAILS}}
- [ ] **{{ACCOUNT}}**: {{SUBJECT}} - {{FROM}}
{{/PRIORITY_EMAILS}}
{{^PRIORITY_EMAILS}}
- Nenhum email prioritário pendente
{{/PRIORITY_EMAILS}}
### Contas verificadas
{{#ACCOUNTS_STATUS}}
- {{ACCOUNT}}: {{UNREAD}} não lidos
{{/ACCOUNTS_STATUS}}
---
## 📆 Agenda
{{#CALENDAR_EVENTS}}
- {{TIME}} - {{TITLE}}
{{/CALENDAR_EVENTS}}
{{^CALENDAR_EVENTS}}
- Sem compromissos agendados
{{/CALENDAR_EVENTS}}
---
## 🎯 Prioridades do Dia
> [!important] Top 3
> 1. {{PRIORITY_1}}
> 2. {{PRIORITY_2}}
> 3. {{PRIORITY_3}}
### Blocos de Foco Sugeridos
- [ ] 09:00-11:00 - Trabalho profundo
- [ ] 14:00-16:00 - Tarefas administrativas
- [ ] 16:00-17:00 - Comunicação/emails
---
## ⏰ Deadlines Esta Semana
{{#DEADLINES}}
- **{{DATE}}**: {{PROJECT}} - {{DESCRIPTION}}
{{/DEADLINES}}
{{^DEADLINES}}
- Sem deadlines esta semana
{{/DEADLINES}}
---
## 🔧 Manutenção (se Sexta-feira)
{{#IS_FRIDAY}}
### WordPress - Rede de Sites
- [ ] Verificar actualizações
- [ ] Executar actualizações
- [ ] Checkup segurança
- [ ] Testar funcionamento
**Sites**: descomplicar.pt, emanuelalmeida.pt, carstuff.pt, familyclinic.pt, espiralsenior.pt, ignitionvortex.pt, karateclubedegaia.com, solarfvengenharia.com, watercontrol.pt, hub.descomplicar.pt
{{/IS_FRIDAY}}
---
## 📝 Notas do Dia
> [!note] Observações
> (espaço para notas durante o dia)
---
## ✅ Revisão Final
- [ ] Tickets urgentes tratados
- [ ] Emails respondidos
- [ ] Prioridades concluídas
- [ ] Próximo dia planeado
---
*Gerado automaticamente por `/today` - {{TIMESTAMP}}*