Files
clientflow_backend/docs/CLIENTFLOW_V4926_8_2_NOTES.md
2026-06-09 22:55:58 +01:00

53 lines
1.8 KiB
Markdown

# ClientFlow v4926.8.2
## Objetivo
Evitar que uma oportunidade associe/importa um orçamento Jasmin antigo, fechado, convertido ou anulado quando existe um orçamento/proforma aberto mais recente para o mesmo cliente fiscal.
## Alterações
- Classificação de ciclo de vida dos documentos Jasmin a partir de `payload.record`:
- `documentStatusDescription`
- `documentStatus`
- `documentLineStatusDescription`
- `statusWasCompleted`
- `isDeleted`
- `isDraft`
- Candidatos Jasmin agora são ordenados por:
1. aberto/válido primeiro;
2. quotation/proforma antes de invoice;
3. data/série mais recente;
4. score de match fiscal.
- Documentos fechados/convertidos/anulados aparecem apenas como auditoria e o botão fica desativado.
- `link_and_import_jasmin_candidate_async` rejeita importação de candidato não aberto/válido.
- Novo botão na UI: **Sincronizar Jasmin** para buscar documentos recentes antes de escolher candidato.
- Novo botão na UI: **Substituir atual**, para trocar um orçamento/proforma importado por engano por um candidato aberto mais recente.
- Novo script de inspeção:
- `scripts/inspect_jasmin_candidates_for_opportunity.py`
- Novo script de reparação:
- `scripts/replace_jasmin_document_for_opportunity.py`
## Operação segura
Para diagnosticar:
```bash
PYTHONPATH=. python scripts/inspect_jasmin_candidates_for_opportunity.py \
--opportunity-id <OPPORTUNITY_ID> \
--sync \
--days 30
```
Para substituir por um candidato válido:
```bash
PYTHONPATH=. python scripts/replace_jasmin_document_for_opportunity.py \
--opportunity-id <OPPORTUNITY_ID> \
--item-id <RECONCILIATION_ITEM_ID> \
--dry-run
PYTHONPATH=. python scripts/replace_jasmin_document_for_opportunity.py \
--opportunity-id <OPPORTUNITY_ID> \
--item-id <RECONCILIATION_ITEM_ID>
```