# ClientFlow v4928.1.5.129 — coerência da Reconciliação e tasks operacionais

## Objetivo

Evitar que vendas Odoo já ligadas continuem na Reconciliação com ações obsoletas, impedir regressões da oportunidade e garantir que ações de expedição aparecem no Centro de Trabalho.

## Alterações

### Reconciliação Odoo

- Antes de criar um candidato, o sincronizador procura uma ligação exata em `operation_links` por ID Odoo ou número da venda.
- Uma ligação exata e única faz com que o candidato antigo seja resolvido como `linked`, sem alterar oportunidade, fase, valor ou documentos.
- Mais de uma ligação exata gera `conflict`; nunca é resolvida automaticamente.
- Correspondências por nome, cliente ou valor continuam a exigir decisão do operador.
- A interface passa a indicar vendas já ligadas, candidatos obsoletos resolvidos e conflitos.

### Proteção contra regressão

Ao ligar nova evidência a uma oportunidade existente:

- compara a fase sugerida com a fase atual;
- preserva a fase e a ação atuais quando já estão no mesmo nível ou mais avançadas;
- não cria `SEND_INVOICE` quando já existe fatura Jasmin ligada;
- recalcula a próxima ação pelo motor central depois da transação.

### Expedição

- O motor central continua a usar `SHIP_ORDER` como decisão de domínio.
- A task persistida é normalizada para `CREATE_SHIPMENT`.
- Fila: `logistica`.
- Texto do operador: `Enviar encomenda`.
- A task não é concluída por mensagens Chatwoot e não depende de Packlink.

### Correção dos candidatos atuais

Novo script:

```bash
python scripts/apply_reconciliation_coherence_fixes.py
```

O script é dry-run por defeito. Só considera seguro um candidato Odoo que tenha exatamente uma ligação exata a uma oportunidade aberta.

Aplicação direcionada:

```bash
python scripts/apply_reconciliation_coherence_fixes.py \
  --sale S00324 \
  --sale S00325 \
  --sale S00326 \
  --apply
```

O script:

- resolve os candidatos como já ligados;
- preserva fase, valor, documentos e `operation_links`;
- materializa a próxima task calculada pelo motor central;
- não altera BBKW/S00323 porque não existe ligação exata.

### Auditoria

Incluído o auditor read-only v128.1 em:

```bash
scripts/audit_reconciliation_coherence.py
```

Depois da correção:

```bash
python scripts/audit_reconciliation_coherence.py \
  --days 3 \
  --limit 500 \
  --live odoo,jasmin \
  --max-live 30
```

## Packlink

A configuração por defeito continua:

```env
PACKLINK_ENABLED=false
```

`CREATE_SHIPMENT` representa trabalho logístico do operador e não ativa Packlink. Packlink só poderá ser usado quando a integração for reativada explicitamente.

## Segurança

- dry-run por defeito;
- correspondência automática apenas por ID/número exato;
- exatamente uma oportunidade aberta;
- sem correção automática de diferenças de valor;
- sem criação automática de oportunidade para BBKW;
- sem regressão de fase;
- criação de tasks idempotente.

## Validação

```text
508 testes aprovados
```
