Merge fix/consultoria-tempo-criterios
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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":
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user