---
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
---

# /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
- "Notificacao de transferencia" de bancos -> notificacao bancaria
- Marketing/changelog dos mesmos fornecedores -> promocional
- Subject "Welcome" / "Getting Started" -> onboarding
```

---

## Output Standalone

Quando invocado directamente (sem /today):

```markdown
## Triagem IMAP - DD-MM-YYYY

**Total: X emails processados em Y contas**

| Conta | Spam | Promo | Factura | Notif | Prio | Total |
|-------|------|-------|---------|-------|------|-------|

### Facturas Detectadas (para /auto-expense)
- contabilidade: MEO (uid 164) - FT A/861215955

### Prioritarios
- emanuel: [Subject] de [Remetente]

### Alertas Sistema
- [Alertas de seguranca, updates criticos]
```

---

## Anti-Patterns

- NUNCA criar despesas directamente (delegar para /auto-expense)
- NUNCA processar >50 emails por conta (limitar)
- NUNCA eliminar emails de dominios protegidos
- SEMPRE registar no Supabase, mesmo se skipped
- SEMPRE usar imap_delete para contas sem pasta "Promotions"

---

*Skill v1.0.0 | 04-03-2026 | Descomplicar®*

---

## Healing Log

Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.

```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```

*Adicionar nova linha após cada erro corrigido.*
