131 lines
2.7 KiB
Markdown
131 lines
2.7 KiB
Markdown
# 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.
|