feat: Aprimora cálculo de pontuação e extração de dados

- Adiciona campos situacao, anos_completos, anos_consecutivos e retornos
  na entidade Consultoria para suportar regras documentadas
- Implementa mesclagem de períodos sobrepostos para evitar contagem dupla
- Melhora componente A com cálculo por área e detecção de retornos
- Ajusta componente B com bônus por nota PPG
- Refatora componente C com bônus de continuidade e retorno
- Implementa componente D com classificação de nível de prêmio
  (Grande Prêmio, PCT, Interfarma, outros) e pontuação diferenciada
- Trata datas inconsistentes (fim < início) como períodos em aberto
- Extrai situacaoConsultoria do campo dadosConsultoria.situacaoConsultoria
This commit is contained in:
Frederico Castro
2025-12-09 22:57:46 -03:00
parent 9a8332b740
commit ff4d838f34
7 changed files with 348 additions and 83 deletions

View File

@@ -39,6 +39,10 @@ class ConsultoriaDTO:
ultimo_evento: str
vezes_responsavel: int
areas: List[str]
situacao: str
anos_completos: int
anos_consecutivos: int
retornos: int
@dataclass

View File

@@ -94,6 +94,10 @@ class ObterRankingUseCase:
ultimo_evento=consultor.consultoria.ultimo_evento.isoformat(),
vezes_responsavel=consultor.consultoria.vezes_responsavel,
areas=consultor.consultoria.areas,
situacao=consultor.consultoria.situacao,
anos_completos=consultor.consultoria.anos_completos,
anos_consecutivos=consultor.consultoria.anos_consecutivos,
retornos=consultor.consultoria.retornos,
)
if consultor.consultoria
else None,