3.5 KiB
3.5 KiB
ClientFlow Backend — versão de estabilização 2026-07-08
Objetivo
Consolidar a última versão do backend antes de novas funcionalidades, corrigindo falhas P0/P1 encontradas na review: suíte de testes não-verde, bug em list_tasks(), divergências no workflow de oportunidades, linking ambíguo, .env.example ausente e problemas de coleção do pytest.
Correções principais
Testes e packaging
- Adicionado
pytest.inicomtestpaths = tests,pythonpath = .e--import-mode=importlib. - Removido o teste duplicado de raiz
test_v4928_1_5_72_opportunity_consistency_static.pypara evitarimport file mismatch. - Adicionado
.env.examplecom flags obrigatórias e opcionais documentadas. - Consolidado teste estático contraditório de
workflow_guard: a implementação mantém compatibilidade com schema sem colunacompleted_ate continua a aceitarcompleted_atquando a evidência vem em payload/dict. - Consolidado teste de materialização
PREPARE_ORDERcom a regra de arquitetura que remove esse código da triagem LLM emaction_catalog.py.
task_service.py
- Corrigido bug P0 em
list_tasks():customer_columnagora é calculado antes do SQL através deopportunity_customer_column()e tem fallback seguro paralocal_customer_id. - Removida duplicação acidental de coluna em
get_task_detail().
Workflow de oportunidades
WAIT_PRODUCTIONvolta a mostrar a label operacional “Aguardar produção”, mantendo alias/compatibilidade UI para “Aguardar WH/OUT”.- Fluxo
after_deliverycom envio já criado e pagamento por confirmar passa a sugerirFOLLOW_UP_PAYMENT, em vez de voltar paraPREPARE_ORDER. - Mantida prioridade de fecho/entrega sobre estados de produção quando WH/OUT/picking já está concluído.
- Evidência de fatura enviada continua a considerar payload do documento e tasks
SEND_INVOICEconcluídas.
UI/admin
- A página de oportunidades filtra tasks de pagamento/follow-up obsoletas quando o pagamento já está confirmado.
- O resumo operacional passa a usar
display_next_action_codepara evitar fallback paralast_action_codeantigo. - Adicionada mensagem explícita quando o Jasmin existe mas não tem novos campos fiscais para importar.
admin_dashboard.pyficou abaixo do limite legado de 1800 linhas sem alterar rotas principais.
Segurança funcional / linking
- Ambiguidade de oportunidades por contacto Chatwoot passa a usar razão explícita
multiple_recent_open_opportunities_for_chatwoot_contact. action_catalog.pymantémPREPARE_ORDERfora do catálogo de triagem LLM; o código interno é tratado dinamicamente para compatibilidade operacional.
Outros ajustes
- Corrigidos warnings de
compileallpor escapes inválidos em SQL LIKE/ESCAPE. - Adicionado marcador de identificação ao script
probe_jasmin_print_layout_catalog.py.
Validação local
Com variáveis de teste:
OPENROUTER_API_KEY=test \
DATABASE_URL=postgresql+psycopg://u:p@localhost:5432/db \
CLIENTFLOW_ADMIN_TOKEN=test \
PYTHONPATH=. \
pytest -q
Resultado:
463 passed in 1.12s
Compilação:
python -m compileall -q app scripts tests
Resultado: sem erros e sem warnings reportados.
Limitações
- Não foram executadas integrações reais com Postgres, Jasmin, Odoo, Packlink, Chatwoot ou OpenAI/OpenRouter.
- A validação foi feita por testes locais/estáticos/unitários e compilação Python.
- Antes de produção, correr migrações e smoke tests contra uma base staging.