feat(vinculos): adicionar vínculos de consultoria com IES e ordenação cronológica

- Adicionar entidades e DTOs para vínculos de consultoria (IES, período, situação)
- Extrair vínculos do Elasticsearch com datas e informações da IES
- Exibir vínculos no card do consultor com sigla e nome completo da IES
- Ordenar todas as listas do detalhe por data/ano decrescente (mais recente primeiro)
This commit is contained in:
Frederico Castro
2025-12-17 20:48:50 -03:00
parent 678be6170f
commit 99ce6e30d8
9 changed files with 167 additions and 7 deletions

View File

@@ -8,6 +8,8 @@ from ...domain.entities.consultor import (
Consultor,
CoordenacaoCapes,
Consultoria,
IES,
VinculoConsultoria,
Inscricao,
AvaliacaoComissao,
Premiacao,
@@ -140,6 +142,7 @@ class ConsultorRepositoryImpl(ConsultorRepository):
return None
periodos: List[Periodo] = []
vinculos: List[VinculoConsultoria] = []
situacoes: List[str] = []
areas: List[str] = []
@@ -162,9 +165,25 @@ class ConsultorRepositoryImpl(ConsultorRepository):
if inicio and fim and fim < inicio:
fim = None
ies_data = dc.get("ies", {}) or {}
ies = None
if ies_data and (ies_data.get("id") or ies_data.get("nome")):
ies = IES(
id=str(ies_data.get("id", "")),
nome=ies_data.get("nome", ""),
sigla=ies_data.get("sigla"),
)
if inicio:
try:
periodos.append(Periodo(inicio=inicio, fim=fim))
periodo = Periodo(inicio=inicio, fim=fim)
periodos.append(periodo)
vinculos.append(VinculoConsultoria(
periodo=periodo,
ies=ies,
situacao=situacao or "",
))
except ValueError:
continue
@@ -176,6 +195,8 @@ class ConsultorRepositoryImpl(ConsultorRepository):
if not periodos:
return None
vinculos.sort(key=lambda v: v.periodo.inicio, reverse=True)
mesclados = mesclar_periodos(periodos)
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
@@ -205,6 +226,7 @@ class ConsultorRepositoryImpl(ConsultorRepository):
situacao=situacao_final,
periodo=Periodo(inicio=primeiro_evento, fim=fim_final),
periodos=mesclados,
vinculos=vinculos,
areas=areas,
anos_consecutivos=anos_consecutivos,
retornos=retornos,