# ClientFlow MVP Backend

ClientFlow é o novo nome do antigo CCE / Customer Context Engine.

Função:

```text
Receber mensagens de clientes
→ interpretar intenção com Qwen3 30B via OpenRouter
→ aplicar regras ClientFlow
→ devolver estado comercial normalizado
```

## Decisão técnica atual

```text
Modelo base: qwen/qwen3-30b-a3b
Provider: OpenRouter
Qwen3 Max: não usar por defeito nesta fase
Hardware local: não comprar ainda
```

A validação anterior mostrou que o modelo base com regras ClientFlow é suficiente para o MVP.

## Instalação local

```bash
cd clientflow_mvp_backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
nano .env
```

Define:

```env
OPENROUTER_API_KEY=...
OPENROUTER_MODEL=qwen/qwen3-30b-a3b
```

## Correr API

```bash
./scripts/run_dev.sh
```

Health check:

```bash
curl http://127.0.0.1:8000/health | jq .
```

Testar análise:

```bash
./scripts/test_sample.sh
```

## Endpoint

```text
POST /analyze
```

Input:

```json
{
  "last_customer_message": "",
  "previous_context": "",
  "current_state": {
    "conversation_state": "a_aguardar_cliente",
    "commercial_state": "proposta_enviada",
    "relationship_state": "lead_existente",
    "last_action_by": "empresa"
  },
  "source": "email",
  "conversation_id": "",
  "contact_id": ""
}
```

Output:

```json
{
  "app": "ClientFlow",
  "model": "qwen/qwen3-30b-a3b",
  "raw_llm_result": {},
  "normalized_result": {},
  "usage": {},
  "needs_review": false
}
```

## Próximos passos

1. Testar `/analyze` com os casos reais.
2. Migrar os testes `caso_001...caso_050` para chamadas HTTP.
3. Guardar resultados em PostgreSQL.
4. Criar webhook receiver para Chatwoot.
5. Adicionar nota privada no Chatwoot com resumo ClientFlow.


## ClientFlow v3.2

Versão incremental com HTMX progressivo na página de oportunidade, feedback visual para ações Jasmin/outbox, validação antes de criar orçamento, reprocessamento de outbox pela UI e filtro de produtos ativos sem Artigo Jasmin. Ver `docs/CLIENTFLOW_V32_NOTES.md`.

## ClientFlow v4 operational commands

Apply migrations:

```bash
python scripts/apply_migrations.py --dry-run
python scripts/apply_migrations.py
```

Check health:

```bash
python scripts/check_clientflow_health.py
```

Install Jasmin outbox timer:

```bash
sudo ./scripts/install_systemd_timers.sh /mnt/ssd/home/plx/clientflow_backend
```

## ClientFlow v4.7 — UI operacional

A navegação da UI admin foi reorganizada para separar operação diária de diagnóstico técnico:

- Chatwoot é a inbox/conversa.
- Operations é o centro de trabalho do operador.
- Opportunities mantém o contexto comercial.
- Admin agrupa Tasks, Communications, Outbox, Events, Runs, Queues e System health.


## v4.8.4 — Fiscal Link Consistency Hotfix

Corrige a leitura do cliente fiscal em Operations: a fila passa a usar o cliente ligado à oportunidade antes de qualquer fallback da task. Isto evita cards que dizem "Cliente fiscal por associar" quando a ficha da task já mostra um cliente fiscal válido.

## Previsão comercial de receitas

A versão v4928.1.5.122 disponibiliza uma previsão ponderada do pipeline em `/finance/forecast` e na API interna `/api/internal/revenue-forecast`.

A previsão combina valor comercial, probabilidade da fase e atividade operacional. É uma ferramenta de gestão comercial e não substitui dados contabilísticos ou de tesouraria.
