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
+196
View File
@@ -0,0 +1,196 @@
---
name: imap-triage
description: Triagem automática de emails IMAP em 14 contas. Elimina spam, arquiva promocionais, identifica facturas, sinaliza prioritários. Deduplicação via Supabase. Usar quando "imap", "triagem email", "limpar emails", "email triage", "processar emails".
disable-model-invocation: true
layer: wiki
---
# /imap-triage v1.0
Triagem automatica de 14 contas IMAP com deduplicacao Supabase.
---
## Contas IMAP (14)
```
emanuel, it, help, suporte, contabilidade, financeiro,
rh, mkt, design, news, aiktop, recursos, google
```
---
## Protocolo
### Passo 0: Carregar emails ja processados (Supabase)
> Executar UMA VEZ no inicio, 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: processed_ids
```
### Passo 1: Carregar tabela de fornecedores
```
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
Extrair:
- Lista de dominios de fornecedores conhecidos
- Lista de dominios de plataformas multi-fornecedor
```
### Passo 2: Iterar contas IMAP
Para cada conta: `imap_list_emails(account, folder="INBOX", limit=50)`
Para cada email:
1. Verificar `message_id` contra `processed_ids` -> SE match, SALTAR
2. Classificar por ordem de prioridade (ver seccao Classificacao)
### Passo 3: Registar no Supabase (batch)
> Executar UMA VEZ no final, apos processar todas as contas.
```
Acumular lista: { message_id, account_id, subject, sender, email_date, action, action_detail }
Actions: spam_deleted, promo_archived, expense_flagged, priority_flagged, notification_closed, skipped
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 (...)
ON CONFLICT (message_id) DO NOTHING;
\""
)
Maximo ~50 VALUES por INSERT.
```
### Passo 4: Escrever output JSON
```
Escrever em ~/.claude-work/today-imap-{date}.json:
{
"spam": 5,
"promo": 12,
"facturas": [
{"account": "contabilidade", "uid": 164, "message_id": "...", "fornecedor": "MEO", "subject": "..."}
],
"prioritarios": [
{"account": "emanuel", "uid": 100, "subject": "...", "sender": "..."}
],
"notificacoes": [...],
"erros": [],
"contas_processadas": 14,
"total_emails": 45
}
```
---
## Classificacao de Emails
> Aplicar por ordem de prioridade. Primeiro match ganha.
### 1. SPAM -> Eliminar
```
imap_delete_email(account, uid)
Padroes:
- Subject: lottery, winner, urgent money, bitcoin investment, guest post, SEO services, backlinks, partnership
- Remetente: *.ru, *.cn (excepto conhecidos)
- Subject todo em MAIUSCULAS
- Subject com caracteres estranhos excessivos
```
### 2. PROMOCIONAL -> Arquivar
```
imap_move_email(account, uid, "Promotions")
NOTA: Contas sem pasta "Promotions" (google, design, rh) -> imap_delete_email
Padroes:
- Subject: newsletter, promo, desconto, oferta, unsubscribe
- Remetente: *@marketing.*, *@news.*, *@promo.*
- Headers: List-Unsubscribe presente
```
### 3. FACTURA/RECIBO -> Flag para /auto-expense
```
NAO processar aqui - apenas identificar e registar no output JSON.
A skill /auto-expense trata da criacao de despesas.
Deteccao:
3a. FORNECEDOR DIRECTO:
- Dominio remetente bate com tabela de fornecedores
- Subject contem: factura, invoice, recibo, receipt, pagamento, paid
3b. PLATAFORMA MULTI-FORNECEDOR:
- Dominio: toconline.pt, stripe.com, paypal.com, fastspring.com, payproglobal.com
- Registar com nota sobre plataforma
Action: expense_flagged
```
### 4. NOTIFICACAO SISTEMA -> Registar
```
Padroes protegidos (NUNCA auto-fechar):
- Legal Update, Policy Change, Deprecation, End of Life
- Security Alert, API Change, Terms Update
- Action Required, Migration Required
- Compliance, GDPR, Infrastructure Change
Outros:
- Wordfence alerts, n8n updates, server notifications
- Registar para inclusao no dashboard de alertas
Action: notification_closed ou priority_flagged (conforme gravidade)
```
### 5. PRIORITARIO -> Incluir no relatorio
```
- Remetente: cliente conhecido (verificar nome/dominio)
- Subject: urgente, problema, erro, critical, down
- Threads activas (RE:, FW:)
Action: priority_flagged
```
### 6. RESTANTES -> Saltar
```
Emails que nao encaixam em nenhuma categoria.
Action: skipped
```
---
## Excepcoes (NUNCA processar automaticamente)
```
- *@descomplicar.pt (internos)
- *@gov.pt, *@at.gov.pt, *@seg-social.pt (governo)
- *@tribunais.org.pt (tribunais)
```
---
## Emails a IGNORAR (nao sao facturas)
```
- "Payment Confirmation" / "Payment Was Successfully Processed" -> apenas confirmacao
- "Your subscription has been renewed" sem valor -> apenas notificacao
-
@@ -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