Fix consultoria tempo por períodos
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user