# ClientFlow v4928.1.5.132.4 — Odoo done task reconciliation

## Problema corrigido

Quando um picking de saída Odoo passava de `assigned` para `done`, o ClientFlow atualizava a evidência física e a fase, mas podia manter pendentes tasks antigas:

- `VALIDATE_PHYSICAL_ORDER`
- `CREATE_SHIPMENT`

A precedência da task pendente fazia a oportunidade continuar a mostrar “Validar encomenda física”, apesar de o WH/OUT já estar concluído e o motor central indicar `CLOSE_OPPORTUNITY`.

Além disso, `done` era traduzido visualmente para `SHIPMENT_CREATED` (“Envio criado”), quando a evidência real já corresponde a `SHIPPED` (“Enviado”).

## Correção

- Novo módulo `app/odoo_delivery_task_reconciliation.py`.
- WH/OUT `done` cria/atualiza evidência explícita `odoo/physical_validation=validated`.
- Tasks pendentes `VALIDATE_PHYSICAL_ORDER` e `CREATE_SHIPMENT` são concluídas automaticamente por evidência externa inequívoca.
- Cada alteração grava `task_auto_completed` e um evento agregado na oportunidade.
- A conclusão automática não executa a cascata normal da task, evitando criar trabalho obsoleto.
- O estado derivado de WH/OUT `done` passa a `SHIPPED`.
- Tanto a sincronização direta Odoo como a reconciliação externa aplicam a mesma regra.

## Reparação de dados existentes

O script `scripts/repair_v132_4_odoo_done_stale_tasks.py` é dry-run por omissão e só aplica alterações quando existe evidência inequívoca de entrega Odoo concluída.

## Segurança

A correção não:

- chama o Odoo em modo de escrita;
- cria envio Packlink;
- confirma entrega ao cliente;
- fecha automaticamente a oportunidade;
- altera documentos, pagamentos ou clientes.

Depois da correção, a próxima ação central esperada é `CLOSE_OPPORTUNITY`, sujeita aos guards existentes de fatura enviada e pagamento.

## Validação

- `py_compile`: OK
- testes específicos v132.4: 3 aprovados
- suite completa: 536 aprovados
