Fix consultoria tempo por períodos

This commit is contained in:
Frederico Castro
2025-12-13 18:25:40 -03:00
parent abdb0782b7
commit 57a78ce3e3
3 changed files with 15 additions and 6 deletions

View File

@@ -41,6 +41,7 @@ class Consultoria:
codigo: str codigo: str
situacao: str situacao: str
periodo: Periodo periodo: Periodo
periodos: List[Periodo] = field(default_factory=list)
areas: List[str] = field(default_factory=list) areas: List[str] = field(default_factory=list)
anos_consecutivos: int = 0 anos_consecutivos: int = 0
retornos: int = 0 retornos: int = 0

View File

@@ -107,9 +107,11 @@ class CalculadorPontuacao:
base = criterio.base base = criterio.base
tempo = 0 tempo = 0
if criterio.pontua_tempo and consultoria.periodo.inicio: if criterio.pontua_tempo:
anos = consultoria.periodo.anos_completos(datetime.now()) periodos = consultoria.periodos if consultoria.periodos else [consultoria.periodo]
tempo = min(anos * criterio.multiplicador_tempo, criterio.teto_tempo) mesclados = CalculadorPontuacao._mesclar_periodos(periodos)
anos_total = CalculadorPontuacao._anos_completos_periodos(mesclados)
tempo = min(anos_total * criterio.multiplicador_tempo, criterio.teto_tempo)
bonus = 0 bonus = 0
if codigo == "CONS_ATIVO": if codigo == "CONS_ATIVO":

View File

@@ -183,11 +183,12 @@ class ConsultorRepositoryImpl(ConsultorRepository):
return None return None
mesclados = self._mesclar_periodos(periodos) 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) retornos = max(0, len(mesclados) - 1)
ativo = any(p.ativo for p in periodos) 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_ativo = ativo or "atividade" in situacao_final.lower() or "ativo" in situacao_final.lower()
is_falecido = "falecido" in situacao_final.lower() is_falecido = "falecido" in situacao_final.lower()
@@ -199,12 +200,17 @@ class ConsultorRepositoryImpl(ConsultorRepository):
codigo = "CONS_HIST" codigo = "CONS_HIST"
primeiro_evento = min(p.inicio for p in periodos) 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"] areas = list(set(areas)) if areas else ["N/A"]
return Consultoria( return Consultoria(
codigo=codigo, codigo=codigo,
situacao=situacao_final, 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, areas=areas,
anos_consecutivos=anos_consecutivos, anos_consecutivos=anos_consecutivos,
retornos=retornos, retornos=retornos,