diff --git a/backend/src/domain/entities/consultor.py b/backend/src/domain/entities/consultor.py index f3c128e..3ac24a8 100644 --- a/backend/src/domain/entities/consultor.py +++ b/backend/src/domain/entities/consultor.py @@ -41,6 +41,7 @@ class Consultoria: codigo: str situacao: str periodo: Periodo + periodos: List[Periodo] = field(default_factory=list) areas: List[str] = field(default_factory=list) anos_consecutivos: int = 0 retornos: int = 0 diff --git a/backend/src/domain/services/calculador_pontuacao.py b/backend/src/domain/services/calculador_pontuacao.py index 2e19f7b..ee80dcf 100644 --- a/backend/src/domain/services/calculador_pontuacao.py +++ b/backend/src/domain/services/calculador_pontuacao.py @@ -107,9 +107,11 @@ class CalculadorPontuacao: base = criterio.base tempo = 0 - if criterio.pontua_tempo and consultoria.periodo.inicio: - anos = consultoria.periodo.anos_completos(datetime.now()) - tempo = min(anos * criterio.multiplicador_tempo, criterio.teto_tempo) + if criterio.pontua_tempo: + periodos = consultoria.periodos if consultoria.periodos else [consultoria.periodo] + mesclados = CalculadorPontuacao._mesclar_periodos(periodos) + anos_total = CalculadorPontuacao._anos_completos_periodos(mesclados) + tempo = min(anos_total * criterio.multiplicador_tempo, criterio.teto_tempo) bonus = 0 if codigo == "CONS_ATIVO": diff --git a/backend/src/infrastructure/repositories/consultor_repository_impl.py b/backend/src/infrastructure/repositories/consultor_repository_impl.py index 65d45c3..88e3305 100644 --- a/backend/src/infrastructure/repositories/consultor_repository_impl.py +++ b/backend/src/infrastructure/repositories/consultor_repository_impl.py @@ -183,11 +183,12 @@ class ConsultorRepositoryImpl(ConsultorRepository): return None mesclados = self._mesclar_periodos(periodos) - anos_consecutivos = max((p.anos_completos(datetime.now()) for p in mesclados), default=0) + periodo_ativo = next((p for p in mesclados if p.ativo), None) + anos_consecutivos = periodo_ativo.anos_completos(datetime.now()) if periodo_ativo else 0 retornos = max(0, len(mesclados) - 1) ativo = any(p.ativo for p in periodos) - situacao_final = situacoes[0] if situacoes else "N/A" + situacao_final = situacoes[-1] if situacoes else "N/A" is_ativo = ativo or "atividade" in situacao_final.lower() or "ativo" in situacao_final.lower() is_falecido = "falecido" in situacao_final.lower() @@ -199,12 +200,17 @@ class ConsultorRepositoryImpl(ConsultorRepository): codigo = "CONS_HIST" primeiro_evento = min(p.inicio for p in periodos) + fim_final = None + if not ativo: + fins = [p.fim for p in mesclados if p.fim] + fim_final = max(fins) if fins else datetime.now() areas = list(set(areas)) if areas else ["N/A"] return Consultoria( codigo=codigo, situacao=situacao_final, - periodo=Periodo(inicio=primeiro_evento, fim=None if ativo else datetime.now()), + periodo=Periodo(inicio=primeiro_evento, fim=fim_final), + periodos=mesclados, areas=areas, anos_consecutivos=anos_consecutivos, retornos=retornos,