diff --git a/backend/src/application/dtos/consultor_dto.py b/backend/src/application/dtos/consultor_dto.py index 9a09fb9..4779bd2 100644 --- a/backend/src/application/dtos/consultor_dto.py +++ b/backend/src/application/dtos/consultor_dto.py @@ -37,12 +37,13 @@ class ConsultoriaDTO: eventos_recentes: int primeiro_evento: str ultimo_evento: str - vezes_responsavel: int + continuidade: int areas: List[str] situacao: str anos_completos: int anos_consecutivos: int retornos: int + vezes_responsavel: int @dataclass diff --git a/backend/src/application/jobs/processar_ranking.py b/backend/src/application/jobs/processar_ranking.py index d02676b..eafc4a3 100644 --- a/backend/src/application/jobs/processar_ranking.py +++ b/backend/src/application/jobs/processar_ranking.py @@ -150,10 +150,12 @@ class ProcessarRankingJob: "consultoria": { "total_eventos": consultor.consultoria.total_eventos, "eventos_recentes": consultor.consultoria.eventos_recentes, - "vezes_responsavel": consultor.consultoria.vezes_responsavel, + "continuidade": consultor.consultoria.continuidade, + "anos_consecutivos": consultor.consultoria.anos_consecutivos, "situacao": consultor.consultoria.situacao, "anos_completos": consultor.consultoria.anos_completos, - "areas": consultor.consultoria.areas + "areas": consultor.consultoria.areas, + "vezes_responsavel": consultor.consultoria.vezes_responsavel } if consultor.consultoria else None, "premiacoes": [ { diff --git a/backend/src/application/use_cases/obter_ranking.py b/backend/src/application/use_cases/obter_ranking.py index ef5b504..84193bf 100644 --- a/backend/src/application/use_cases/obter_ranking.py +++ b/backend/src/application/use_cases/obter_ranking.py @@ -92,12 +92,13 @@ class ObterRankingUseCase: eventos_recentes=consultor.consultoria.eventos_recentes, primeiro_evento=consultor.consultoria.primeiro_evento.isoformat(), ultimo_evento=consultor.consultoria.ultimo_evento.isoformat(), - vezes_responsavel=consultor.consultoria.vezes_responsavel, + continuidade=consultor.consultoria.continuidade, areas=consultor.consultoria.areas, situacao=consultor.consultoria.situacao, anos_completos=consultor.consultoria.anos_completos, anos_consecutivos=consultor.consultoria.anos_consecutivos, retornos=consultor.consultoria.retornos, + vezes_responsavel=consultor.consultoria.vezes_responsavel, ) if consultor.consultoria else None, diff --git a/backend/src/domain/entities/consultor.py b/backend/src/domain/entities/consultor.py index 1d50065..d00be8d 100644 --- a/backend/src/domain/entities/consultor.py +++ b/backend/src/domain/entities/consultor.py @@ -32,12 +32,22 @@ class Consultoria: eventos_recentes: int primeiro_evento: datetime ultimo_evento: datetime - vezes_responsavel: int areas: List[str] = field(default_factory=list) situacao: str = "N/A" anos_completos: int = 0 anos_consecutivos: int = 0 retornos: int = 0 + vezes_responsavel: int = 0 + + @property + def continuidade(self) -> int: + if self.anos_consecutivos >= 8: + return 15 + elif self.anos_consecutivos >= 5: + return 10 + elif self.anos_consecutivos >= 3: + return 5 + return 0 @dataclass diff --git a/backend/src/domain/services/calculador_pontuacao.py b/backend/src/domain/services/calculador_pontuacao.py index 158959b..7dfa4f1 100644 --- a/backend/src/domain/services/calculador_pontuacao.py +++ b/backend/src/domain/services/calculador_pontuacao.py @@ -157,14 +157,18 @@ class CalculadorPontuacao: if not consultoria: return ComponentePontuacao(base=0, tempo=0, extras=0, bonus=0) - situacao = (consultoria.situacao or "").lower() - base = 150 if "atividade" in situacao else 100 + base = 150 if consultoria.eventos_recentes > 0 else 100 anos = consultoria.anos_completos if consultoria.anos_completos else int( ((datetime.now() - consultoria.primeiro_evento).days) // 365 ) tempo = min(int(anos * 5), 50) + extras_eventos = min(consultoria.total_eventos * 2, 20) + extras_responsavel = min(consultoria.vezes_responsavel * 5, 25) + extras_areas = min((len(consultoria.areas) - 1) * 10, 30) if len(consultoria.areas) > 1 else 0 + extras = extras_eventos + extras_responsavel + extras_areas + continuidade = consultoria.anos_consecutivos if continuidade >= 8: bonus_continuidade = 15 @@ -176,8 +180,6 @@ class CalculadorPontuacao: bonus_continuidade = 0 retorno_bonus = 15 if consultoria.retornos > 0 else 0 - extras = 0 - bonus = bonus_continuidade + retorno_bonus return ComponentePontuacao(base=base, tempo=tempo, extras=extras, bonus=bonus) diff --git a/backend/src/infrastructure/repositories/consultor_repository_impl.py b/backend/src/infrastructure/repositories/consultor_repository_impl.py index 7767790..3202b73 100644 --- a/backend/src/infrastructure/repositories/consultor_repository_impl.py +++ b/backend/src/infrastructure/repositories/consultor_repository_impl.py @@ -134,16 +134,19 @@ class ConsultorRepositoryImpl(ConsultorRepository): total_eventos = len(eventos_sae) limite_recente = datetime.now() - timedelta(days=730) eventos_recentes = 0 + vezes_responsavel = 0 for ev in eventos_sae: data_fim = self._parse_date(ev.get("fim")) or self._parse_date(ev.get("inicio")) if data_fim and data_fim >= limite_recente: eventos_recentes += 1 + dados_evento = ev.get("dadosEvento", {}) or {} + if dados_evento.get("consultorResponsavel") == "Sim": + vezes_responsavel += 1 primeiro_evento = min(p.inicio for p in periodos) ultimo_evento = max((p.fim or datetime.now()) for p in periodos) if not ativo else datetime.now() areas = list(set(areas)) if areas else ["N/A"] - vezes_responsavel = sum(1 for c in consultorias if c.get("responsavel", False)) situacao_final = situacoes[0] if situacoes else "N/A" @@ -152,12 +155,12 @@ class ConsultorRepositoryImpl(ConsultorRepository): eventos_recentes=eventos_recentes, primeiro_evento=primeiro_evento, ultimo_evento=ultimo_evento, - vezes_responsavel=vezes_responsavel, areas=areas, situacao=situacao_final, anos_completos=anos_total, anos_consecutivos=anos_consecutivos, retornos=retornos, + vezes_responsavel=vezes_responsavel, ) def _extrair_coordenacoes_capes( diff --git a/backend/src/interface/schemas/consultor_schema.py b/backend/src/interface/schemas/consultor_schema.py index f892c9b..2b99364 100644 --- a/backend/src/interface/schemas/consultor_schema.py +++ b/backend/src/interface/schemas/consultor_schema.py @@ -32,12 +32,13 @@ class ConsultoriaSchema(BaseModel): eventos_recentes: int primeiro_evento: str ultimo_evento: str - vezes_responsavel: int + continuidade: int areas: List[str] situacao: str anos_completos: int anos_consecutivos: int retornos: int + vezes_responsavel: int class PremiacaoSchema(BaseModel):