# ClientFlow v4928.1.5.122 — Stabilization & Revenue Forecast

Data: 2026-07-14

## Objetivo

Consolidar a versão remota após os hotfixes v4928.1.5.x, corrigir regressões de workflow observadas em produção e introduzir uma previsão comercial auditável de 30/60/90 dias.

## Correções

### Orçamento enviado sem documento associado

Uma task `SEND_QUOTE` concluída passa a contar como evidência de que o orçamento foi enviado, independentemente de o documento Jasmin já estar associado.

Nestes casos, a próxima ação passa a ser:

- `RECONCILE_DOCUMENTS`
- **Associar orçamento enviado**

O motor deixa de sugerir `CREATE_JASMIN_QUOTE`, evitando orçamentos duplicados.

### Follow-ups alinhados com a fase

- `SEND_PROFORMA` passa a agendar `FOLLOW_UP_PAYMENT`.
- Em `WAITING_PAYMENT`, `FOLLOW_UP_QUOTE` e `FOLLOW_UP_PROFORMA` são convertidos em `FOLLOW_UP_PAYMENT`.
- Follow-ups de orçamento são encerrados quando existe uma task mais avançada, como `SEND_INVOICE`, `CONFIRM_PAYMENT`, `PREPARE_ORDER` ou `CREATE_SHIPMENT`.
- O agendador bloqueia novas cascatas de orçamento quando a oportunidade já avançou para fatura, pagamento ou operação.

Script de auditoria/reparação:

```bash
python scripts/repair_stale_followups.py
python scripts/repair_stale_followups.py --apply
```

O script é dry-run por defeito e não envia mensagens.

### Proteção do enriquecimento fiscal

Um resultado externo com `match_type=nif_exato` deixa de ser autoaplicado quando o nome empresarial devolvido contradiz o nome empresarial presente na fonte operacional.

- confiança máxima: 70%;
- `source_name_conflict=true` no payload da sugestão;
- autoaplicação bloqueada;
- decisão fica disponível para revisão manual.

### Segurança de produção

Em `prod`, `production` e `staging`:

- `CLIENTFLOW_ADMIN_TOKEN` é obrigatório;
- UI admin e API interna falham fechadas se a autenticação não estiver configurada;
- `admin_token` por query string é desativado;
- lookup externo ativo exige `EXTERNAL_COMPANY_LOOKUP_API_KEY`.

### Configuração e testes

- restaurado `.env.example` sem segredos;
- suíte final: **476 testes passados**;
- `compileall` sem erros.

## Previsão comercial de receitas

Novos endpoints:

- `/finance/forecast`
- `/financeiro/previsao`
- `GET /api/internal/revenue-forecast?limit=1000`

Modelo:

```text
valor ponderado = valor da oportunidade × probabilidade da fase × fator de atividade
```

Fontes de valor, por prioridade:

1. documento Jasmin atual/principal;
2. linhas da oportunidade;
3. `opportunities.value_amount`.

A probabilidade usa taxas históricas quando existem pelo menos oito oportunidades resolvidas que passaram pela fase. Sem amostra suficiente, usa probabilidades explícitas por fase.

O fator de atividade considera:

- recência da oportunidade;
- tasks vencidas;
- tasks concluídas recentemente;
- conflitos fiscais/identidade.

A página apresenta pipeline bruto e ponderado em:

- até 30 dias;
- 31–60 dias;
- 61–90 dias;
- mais de 90 dias.

Esta funcionalidade é uma previsão comercial. Não representa receita contabilística, faturação reconhecida ou tesouraria.

## Aplicação recomendada

```bash
python -m compileall -q app scripts tests
pytest -q
python scripts/repair_stale_followups.py
python scripts/repair_stale_followups.py --apply
sudo systemctl restart clientflow-api
```
