# ClientFlow v4926.8.1 — Jasmin candidate association + fiscal suggestion cleanup ## Objetivo Corrige dois problemas observados no detalhe de oportunidade: 1. Quando já existe um orçamento Jasmin para o cliente, a oportunidade mostrava "Ainda sem documentos Jasmin" e não dava uma forma clara de associar o orçamento existente antes de criar novo. 2. Sugestões fiscais antigas `accepted` podiam continuar visíveis com `NIF —`, mesmo quando o cliente fiscal atual já tinha NIF correto. ## Alterações ### Documentos Jasmin - O painel `Documentos Jasmin` passa a procurar documentos Jasmin compatíveis em `reconciliation_items` por: - `customer_id` interno; - NIF fiscal; - NIF dentro do payload Jasmin; - email; - domínio no payload; - nome fiscal exato. - Se encontrar candidatos ainda não importados, mostra aviso: associar documento existente antes de criar novo. - Novo botão por candidato: `Associar e importar`. - Novo endpoint: - `POST /opportunities/{opportunity_id}/jasmin/link-candidate/{item_id}` - A ação liga o `reconciliation_item` à oportunidade e reaproveita o backfill Jasmin para importar: - `commercial_documents`; - `commercial_document_lines`; - `opportunity_items`; - `value_amount`; - `product_interest`. ### Sugestões fiscais - `list_fiscal_suggestions_for_opportunity` passa a fazer `LEFT JOIN customers` para preencher `suggested_nif`/`suggested_name` com o cliente interno quando a sugestão antiga tem NIF vazio. - A UI deixa de mostrar sugestões `accepted` que apenas confirmam o cliente fiscal já ligado à oportunidade. - Isto remove ruído como `SEMENTENERGIAS accepted NIF —` quando a ficha fiscal atual já mostra `NIF 516356216`. ## Validação - `python -m compileall -q app scripts`