From 6297d135ec145bad0c7660606ea97860a700adf9 Mon Sep 17 00:00:00 2001 From: Frederico Castro Date: Fri, 19 Dec 2025 14:14:57 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20corrigir=20c=C3=A1lculo=20de=20anos=20co?= =?UTF-8?q?nsecutivos=20em=20per=C3=ADodos=20sobrepostos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrige bug onde consultores ativos com vínculos sobrepostos tinham anos_consecutivos zerados incorretamente. Problema: Ao mesclar períodos sobrepostos (ex: UP encerrado + UTFPR ativo), o período mesclado era marcado como encerrado, resultando em anos_consecutivos = 0 mesmo para consultores ativos. Solução: Período mesclado é ativo se QUALQUER um dos períodos originais for ativo (lógica OR em vez de considerar apenas o primeiro período). Impacto: - Consultores ativos com múltiplos vínculos agora recebem corretamente bônus de continuidade (até +20 pontos) - Exemplo: Valdir Fernandes (#1) tinha 0 anos consecutivos, agora tem 10 Otimizações adicionais: - Aumenta batch_size de 5.000 para 10.000 consultores - Reduz tempo de processamento de ~60min para ~25min (58% mais rápido) - Reduz requisições ao Elasticsearch pela metade Arquivos alterados: - backend/src/domain/value_objects/periodo.py: lógica de mesclagem corrigida - backend/src/application/jobs/processar_ranking.py: batch_size otimizado Testado com 350.222 consultores em 25min 35s --- backend/src/application/jobs/processar_ranking.py | 2 +- backend/src/domain/value_objects/periodo.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/application/jobs/processar_ranking.py b/backend/src/application/jobs/processar_ranking.py index 913173c..58636ea 100644 --- a/backend/src/application/jobs/processar_ranking.py +++ b/backend/src/application/jobs/processar_ranking.py @@ -36,7 +36,7 @@ class ProcessarRankingJob: resultado = await self.es_client.buscar_todos_consultores( callback=self._processar_batch, - batch_size=5000 + batch_size=10000 ) job_status.mensagem = "Ordenando e gerando posições..." diff --git a/backend/src/domain/value_objects/periodo.py b/backend/src/domain/value_objects/periodo.py index cc54c4b..e2e2bb3 100644 --- a/backend/src/domain/value_objects/periodo.py +++ b/backend/src/domain/value_objects/periodo.py @@ -51,7 +51,7 @@ def mesclar_periodos(periodos: List[Periodo]) -> List[Periodo]: novo_fim = max(ultimo_fim, atual_fim) mesclados[-1] = Periodo( inicio=ultimo.inicio, - fim=novo_fim if not ultimo.ativo else None + fim=None if (ultimo.ativo or p.ativo) else novo_fim ) else: mesclados.append(p)