2.7 KiB
2.7 KiB
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:
API externa
↓
item de reconciliação
↓
operador decide:
- ligar a oportunidade existente
- criar oportunidade
- ignorar
Novos componentes
app/external_reconciliation_sync.py
scripts/sync_external_reconciliation.py
A página /reconciliation recebeu botões para:
Sincronizar Jasmin
Sincronizar Odoo
Sincronizar Packlink
Sincronizar APIs externas
Script
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:
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
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:
[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:
[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
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:
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.