fix(lattes): correcoes finais na integracao Lattes

This commit is contained in:
Frederico Castro
2025-12-27 01:06:43 -03:00
parent 1e15ab64ca
commit c78f48c988
3 changed files with 632 additions and 25 deletions

View File

@@ -236,7 +236,17 @@ async def ranking_paginado(
if not d.get("idiomas"):
faltando_idiomas.append((c.id_pessoa, d))
faltando_lattes = [(c.id_pessoa, d) for c, d in consultores_dados if not d.get("lattes")]
def lattes_incompleto(d):
lattes = d.get("lattes")
if not lattes:
return True
titulacoes = lattes.get("titulacoes", [])
if not titulacoes:
return False
primeira = titulacoes[0] if titulacoes else {}
return "programa" not in primeira or "area_avaliacao" not in primeira
faltando_lattes = [(c.id_pessoa, d) for c, d in consultores_dados if lattes_incompleto(d)]
ids_buscar = list(set([item[0] for item in faltando_idiomas] + [item[0] for item in faltando_lattes]))
if ids_buscar:
@@ -279,14 +289,26 @@ async def ranking_paginado(
for t in titulacoes_raw:
grau_obj = t.get("grauAcademico", {})
ies_obj = t.get("ies", {})
area_obj = t.get("areaConhecimento", {})
programa_obj = t.get("programa", {})
titulacoes_formatadas.append({
"grau": grau_obj.get("nome", ""),
"hierarquia": grau_obj.get("hierarquia"),
"ano": t.get("ano"),
"inicio": t.get("inicio"),
"fim": t.get("fim"),
"ies_nome": ies_obj.get("nome"),
"ies_sigla": ies_obj.get("sigla"),
"area": t.get("areaConhecimento", {}).get("nome"),
"pais": "Brasil",
"ies_status": ies_obj.get("statusJuridico"),
"area": area_obj.get("nome"),
"area_avaliacao": area_obj.get("areaAvaliacao", {}).get("nome") if area_obj.get("areaAvaliacao") else None,
"programa": programa_obj.get("nome") if programa_obj else None,
"codigo_programa": programa_obj.get("codigo") if programa_obj else None,
"programa_modalidade": programa_obj.get("modalidade") if programa_obj else None,
"programa_situacao": programa_obj.get("situacao") if programa_obj else None,
"pais": t.get("pais") or "Brasil",
})
titulacoes_formatadas.sort(key=lambda x: (x.get("hierarquia") or 99, -(x.get("ano") or 0)))
detalhes["lattes"] = {
"id_lattes": id_lattes,
"url": f"http://lattes.cnpq.br/{id_lattes}",
@@ -514,6 +536,9 @@ async def obter_lattes(
"area_avaliacao": area_obj.get("areaAvaliacao", {}).get("nome") if area_obj.get("areaAvaliacao") else None,
"programa": programa_obj.get("nome") if programa_obj else None,
"codigo_programa": programa_obj.get("codigo") if programa_obj else None,
"programa_modalidade": programa_obj.get("modalidade") if programa_obj else None,
"programa_situacao": programa_obj.get("situacao") if programa_obj else None,
"pais": t.get("pais") or "Brasil",
})
titulacoes.sort(key=lambda x: (x.get("hierarquia") or 99, -(x.get("ano") or 0)))
@@ -562,6 +587,111 @@ async def obter_lattes(
"ies": dados.get("ies", {}).get("sigla") if dados.get("ies") else None,
})
docencias = []
for a in atuacoes_raw:
if a.get("tipo") == "Docência":
dados = a.get("dadosDocencia", {})
if dados:
programa_obj = dados.get("programa", {})
ies_obj = dados.get("ies", {})
area_obj = dados.get("areaConhecimento", {})
linhas = dados.get("linhaPesquisa", [])
linhas_ativas = [l.get("nome") for l in linhas if l.get("fim") is None][:5]
docencias.append({
"programa": programa_obj.get("nome") if programa_obj else None,
"codigo_programa": programa_obj.get("codigo") if programa_obj else None,
"modalidade": programa_obj.get("modalidade") if programa_obj else None,
"situacao_programa": programa_obj.get("situacao") if programa_obj else None,
"ies_nome": ies_obj.get("nome") if ies_obj else None,
"ies_sigla": ies_obj.get("sigla") if ies_obj else None,
"area": area_obj.get("nome") if area_obj else None,
"area_avaliacao": area_obj.get("areaAvaliacao", {}).get("nome") if area_obj.get("areaAvaliacao") else None,
"categoria": dados.get("categoria"),
"tipo_vinculo": dados.get("tipoVinculo"),
"regime_trabalho": dados.get("regimeTrabalho"),
"carga_horaria": dados.get("cargaHoraria"),
"linhas_pesquisa_ativas": linhas_ativas,
"total_linhas_pesquisa": len(linhas),
})
empregos = []
for a in atuacoes_raw:
if a.get("tipo") == "Emprego":
dados = a.get("dadosEmprego", {})
if dados:
historico = dados.get("historico", [])
periodos = []
for h in historico:
periodos.append({
"inicio": h.get("inicioRelacionamento"),
"fim": h.get("fimRelacionamento"),
})
empregos.append({
"empregador": dados.get("nomeEmpregador"),
"cnpj": dados.get("cnpjEmpregador"),
"tipo_emprego": dados.get("emprego"),
"atividade": dados.get("atividade"),
"vinculo": dados.get("vinculo"),
"profissao": dados.get("profissao"),
"periodos": periodos,
})
projetos = []
for a in atuacoes_raw:
if a.get("tipo") == "Projeto":
dados = a.get("dadosProjeto", {})
if dados and dados.get("nome"):
programa_obj = dados.get("programa", {})
ies_obj = dados.get("ies", {})
area_obj = dados.get("areaConhecimento", {})
projetos.append({
"nome": dados.get("nome"),
"situacao": dados.get("situacao"),
"ano_inicio": dados.get("anoInicio"),
"linha_pesquisa": dados.get("linhaPesquisa"),
"programa": programa_obj.get("nome") if programa_obj else None,
"ies_sigla": ies_obj.get("sigla") if ies_obj else None,
"area": area_obj.get("nome") if area_obj else None,
})
premiacoes_detalhadas = []
for a in atuacoes_raw:
if a.get("tipo") == "Premiação Prêmio":
dados = a.get("dadosPremiacaoPremio", {})
if dados:
produto = dados.get("produto", {})
ies_obj = dados.get("ies", {})
programa_obj = dados.get("programa", {})
area_obj = dados.get("areaConhecimento", {})
premiacoes_detalhadas.append({
"premio": dados.get("premio"),
"evento": dados.get("evento"),
"premiacao": dados.get("premiacao"),
"ano": dados.get("ano"),
"papel": dados.get("papelPessoa"),
"situacao": dados.get("situacao"),
"produto_nome": produto.get("nome") if produto else None,
"produto_tipo": produto.get("tipoProduto", {}).get("nome") if produto.get("tipoProduto") else None,
"produto_autor": produto.get("autor") if produto else None,
"ies_sigla": ies_obj.get("sigla") if ies_obj else None,
"programa": programa_obj.get("nome") if programa_obj else None,
"area": area_obj.get("nome") if area_obj else None,
})
estatisticas_orientacoes = None
for a in atuacoes_raw:
if a.get("tipo") == "Orientação de Discentes":
dados = a.get("dadosOrientacaoDiscente", {})
if dados:
estatisticas_orientacoes = {
"mestrado_finalizado": dados.get("totalOrientacaoFinalizadaMestrado"),
"doutorado_finalizado": dados.get("totalOrientacaoFinalizadaDoutorado"),
"mestrado_andamento": dados.get("totalOrientacaoAndamentoMestrado"),
"doutorado_andamento": dados.get("totalOrientacaoAndamentoDoutorado"),
"pos_doutorado": dados.get("totalAcompanhamentoPosDoutorado"),
}
break
return {
"encontrado": True,
"id_lattes": id_lattes,
@@ -575,6 +705,12 @@ async def obter_lattes(
"endereco_profissional": endereco_profissional,
"orientacoes_concluidas": orientacoes_concluidas[:20],
"total_orientacoes": len(orientacoes_concluidas),
"estatisticas_orientacoes": estatisticas_orientacoes,
"docencias": docencias,
"empregos": empregos,
"projetos": projetos[:30],
"total_projetos": len(projetos),
"premiacoes_detalhadas": premiacoes_detalhadas,
"data_atualizacao_lattes": None,
}