# ClientFlow v4.9.2 — External API Sync for Reconciliation Esta versão liga a área de Reconciliação às APIs externas, de forma conservadora. ## Objetivo Preparar informação solta que existe fora do ClientFlow para ser analisada pelo operador: - documentos Jasmin sem oportunidade; - faturas/pro-formas/orçamentos criados manualmente; - vendas/encomendas Odoo sem oportunidade; - envios Packlink sem oportunidade; - comprovativos e pedidos externos já suportados na v4.9.1. ## Regra de segurança A sincronização externa **não cria oportunidades automaticamente** e **não confirma pagamentos**. Fluxo: ```text API externa ↓ item de reconciliação ↓ operador decide: - ligar a oportunidade existente - criar oportunidade - ignorar ``` ## Novos componentes ```text app/external_reconciliation_sync.py scripts/sync_external_reconciliation.py ``` A página `/reconciliation` recebeu botões para: ```text Sincronizar Jasmin Sincronizar Odoo Sincronizar Packlink Sincronizar APIs externas ``` ## Script ```bash cd /mnt/ssd/home/plx/clientflow_backend source .venv/bin/activate 2>/dev/null || true PYTHONPATH=. python scripts/sync_external_reconciliation.py --all PYTHONPATH=. python scripts/sync_external_reconciliation.py --jasmin --limit 100 PYTHONPATH=. python scripts/sync_external_reconciliation.py --odoo --days 90 PYTHONPATH=. python scripts/sync_external_reconciliation.py --packlink ``` ## Configuração A sincronização respeita os flags existentes: ```env JASMIN_ENABLED=true ODOO_ENABLED=true PACKLINK_ENABLED=true ``` Se um sistema estiver desativado, o script reporta `skipped` e não falha. ## Frequência sugerida ```text Jasmin documentos 15 min Odoo vendas 15-30 min Packlink envios 30 min Reconciliação completa 1 vez por dia ``` Exemplo systemd timer para execução geral: ```ini [Unit] Description=ClientFlow external reconciliation sync [Service] Type=oneshot WorkingDirectory=/mnt/ssd/home/plx/clientflow_backend Environment=PYTHONPATH=. ExecStart=/mnt/ssd/home/plx/clientflow_backend/.venv/bin/python scripts/sync_external_reconciliation.py --all ``` Timer: ```ini [Unit] Description=Run ClientFlow external reconciliation sync every 15 minutes [Timer] OnBootSec=2min OnUnitActiveSec=15min Persistent=true [Install] WantedBy=timers.target ``` ## O que não faz ```text Não apaga documentos. Não substitui orçamentos. Não emite faturas. Não confirma pagamentos. Não fecha oportunidades. Não cria oportunidades automaticamente. ``` ## Validação Depois do deploy: ```bash PYTHONPATH=. python -m compileall app scripts tests PYTHONPATH=. pytest -q PYTHONPATH=. python scripts/sync_external_reconciliation.py --all ``` Depois abrir `/reconciliation` e confirmar os candidatos.