# Status de saúde do pipeline

## Objetivo

Indicar no painel (`admin/setup`) se o pipeline de monitoramento está **funcionando** para cada usuário, com base em sinais do banco de dados.

## Parâmetros configuráveis

Em **Configurações → Sistema** (ou `.env`):

| Chave | Default | Descrição |
|-------|---------|-----------|
| `system.pipeline_stuck_pending_minutes` | `25` | URL `pending` (ML/Amazon) há mais de X min = fila travada |
| `system.pipeline_read_stale_multiplier` | `2` | Multiplicador do intervalo de leitura do plano |
| `system.pipeline_read_stale_grace_minutes` | `5` | Margem extra (min) no check de leitura |

Fallback em `config/telegram.php`: `PIPELINE_STUCK_PENDING_MINUTES`, etc.

## Checks

### Pausado

`users.monitoring_active = false` → status **Pausado** (não é erro).

### Telegram

Credenciais configuradas e `authenticated_at` + arquivo de sessão → OK. Caso contrário → **Problema** (sugerir reinício da sessão).

### Leitura nos grupos

**OK** se pelo menos uma fonte ativa foi lida no período (`last_read_at` ou captura recente). Fontes quietas sem posts podem aparecer na mensagem informativa, mas não derrubam o status.

**Atenção** apenas quando **nenhuma** fonte foi lida no intervalo (plano × multiplicador + margem).

> `last_read_at` é atualizado a cada ciclo do `read-links`, mesmo sem mensagens novas (`touchReadAttempt`).

### Fila travada (Check B)

Existe `captured_urls` com:

- `status = pending`
- `platform IN (mercadolivre, amazon)`
- `created_at` anterior a `now() - X minutos`
- fonte do `user_id` avaliado

→ **Problema**. Isso equivale a “capturou mas não processou” (não consultar `processed_offers` diretamente).

## Status agregado

| Prioridade | Resultado |
|------------|-----------|
| Qualquer check `problem` | **Problema** |
| Senão, algum `warning` | **Atenção** |
| Senão | **Funcionando** |

## API

`GET /admin/setup/pipeline-status?user_id=` (webmaster) → JSON com `overall`, `checks`, `stuck_pending_count`, etc.

## Implementação

- `App\Services\Monitoring\PipelineHealthService`
- `App\Services\Monitoring\PipelineHealthReport`
- Partial `resources/views/admin/setup/partials/pipeline-health.blade.php`

## Telegram (reinício + wizard)

- `POST admin/setup/telegram/restart` — limpa sessão, zera `authenticated_at`, envia OTP
- `POST admin/setup/telegram/request-code` — apenas OTP
- `POST admin/setup/telegram/confirm-code` — confirma código
- `POST admin/setup/telegram/confirm-2fa` — senha 2FA se necessário

Serviços: `TelegramSessionCleaner`, `TelegramWebAuthService`.
