Files
ranking/backend/scripts/analise_detalhada.py
2025-12-14 23:57:06 -03:00

171 lines
6.6 KiB
Python

#!/usr/bin/env python3
import sys
import os
import asyncio
import json
from datetime import datetime
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
from infrastructure.elasticsearch.client import ElasticsearchClient
ES_URL = os.getenv("ES_URL", "http://localhost:9200")
ES_INDEX = os.getenv("ES_INDEX", "atuacapes")
ES_USER = os.getenv("ES_USER", "")
ES_PASSWORD = os.getenv("ES_PASSWORD", "")
IDS = [12932, 6273]
async def buscar_por_id(es_client, id_pessoa):
response = await es_client.client.post(
f"{es_client.url}/{es_client.index}/_search",
json={
"size": 1,
"query": {"term": {"id": id_pessoa}},
"_source": ["id", "dadosPessoais", "atuacoes"]
}
)
response.raise_for_status()
result = response.json()
hits = result.get("hits", {}).get("hits", [])
return hits[0]["_source"] if hits else None
async def main():
print("Conectando ao Elasticsearch...")
es_client = ElasticsearchClient(ES_URL, ES_INDEX, ES_USER, ES_PASSWORD)
await es_client.connect()
try:
for id_pessoa in IDS:
print(f"\n{'='*120}")
print(f"ANÁLISE DETALHADA - ID: {id_pessoa}")
print(f"{'='*120}")
doc = await buscar_por_id(es_client, id_pessoa)
if not doc:
print(f" Não encontrado")
continue
dados_pessoais = doc.get("dadosPessoais", {})
nome = dados_pessoais.get("nome", "N/A")
atuacoes = doc.get("atuacoes", [])
print(f"\nNOME: {nome}")
print(f"ID: {id_pessoa}")
print(f"CPF: {dados_pessoais.get('cpf', 'N/A')}")
print(f"\nTOTAL DE ATUAÇÕES: {len(atuacoes)}")
por_tipo = {}
for a in atuacoes:
tipo = a.get("tipo", "Desconhecido")
por_tipo[tipo] = por_tipo.get(tipo, 0) + 1
print(f"\nDISTRIBUIÇÃO POR TIPO:")
for tipo, count in sorted(por_tipo.items()):
print(f" {tipo}: {count}")
print(f"\n{'='*120}")
print("EVENTOS DETALHADOS")
print(f"{'='*120}")
eventos = [a for a in atuacoes if a.get("tipo") == "Evento"]
print(f"\nTOTAL DE EVENTOS: {len(eventos)}")
if eventos:
por_descricao = {}
for e in eventos:
desc = e.get("descricao", "Sem descrição")
por_descricao[desc] = por_descricao.get(desc, 0) + 1
print(f"\nEVENTOS POR DESCRIÇÃO:")
for desc, count in sorted(por_descricao.items(), key=lambda x: x[1], reverse=True):
print(f" {desc}: {count}")
print(f"\nPRIMEIROS 10 EVENTOS:")
for idx, e in enumerate(eventos[:10], 1):
print(f"\n Evento {idx}:")
print(f" Descrição: {e.get('descricao', 'N/A')}")
print(f" Início: {e.get('inicio', 'N/A')}")
print(f" Fim: {e.get('fim', 'N/A')}")
print(f" Nome: {e.get('nome', 'N/A')}")
if e.get("dadosEvento"):
print(f" Dados Evento: {json.dumps(e['dadosEvento'], indent=8, ensure_ascii=False)[:200]}")
print(f"\n{'='*120}")
print("COORDENAÇÕES CAPES")
print(f"{'='*120}")
coordenacoes = [a for a in atuacoes if a.get("tipo") in [
"Coordenação de Área de Avaliação",
"Histórico de Coordenação de Área de Avaliação"
]]
for idx, coord in enumerate(coordenacoes, 1):
print(f"\nCoordenação {idx}:")
print(f" Tipo: {coord.get('tipo')}")
print(f" Nome: {coord.get('nome', 'N/A')}")
print(f" Descrição: {coord.get('descricao', 'N/A')}")
print(f" Início: {coord.get('inicio', 'N/A')}")
print(f" Fim: {coord.get('fim', 'N/A')}")
dados = coord.get("dadosCoordenacaoArea") or coord.get("dadosHistoricoCoordenacaoArea")
if dados:
print(f" Dados detalhados:")
print(f" Tipo função: {dados.get('tipo', 'N/A')}")
area = dados.get("areaAvaliacao", {})
if isinstance(area, dict):
print(f" Área: {area.get('nome', 'N/A')} (ID: {area.get('id', 'N/A')})")
else:
print(f" Área: {area}")
colegios = dados.get("colegio", [])
if colegios:
print(f" Colégios: {[c.get('nome') for c in colegios if isinstance(c, dict)]}")
print(f"\n{'='*120}")
print("CONSULTORIAS")
print(f"{'='*120}")
consultorias = [a for a in atuacoes if a.get("tipo") in ["Consultor", "Histórico de Consultoria"]]
for idx, cons in enumerate(consultorias, 1):
print(f"\nConsultoria {idx}:")
print(f" Tipo: {cons.get('tipo')}")
print(f" Início: {cons.get('inicio', 'N/A')}")
print(f" Fim: {cons.get('fim', 'N/A')}")
dados = cons.get("dadosConsultoria", {})
if dados:
print(f" Situação: {dados.get('situacaoConsultoria', 'N/A')}")
print(f" Início situação: {dados.get('inicioSituacao', 'N/A')}")
print(f" Inativação: {dados.get('inativacaoSituacao', 'N/A')}")
print(f"\n{'='*120}")
print("PREMIAÇÕES")
print(f"{'='*120}")
premiacoes = [a for a in atuacoes if "Prêmio" in a.get("tipo", "")]
print(f"\nTOTAL DE PREMIAÇÕES: {len(premiacoes)}")
por_tipo_prem = {}
for p in premiacoes:
tipo = p.get("tipo", "Desconhecido")
por_tipo_prem[tipo] = por_tipo_prem.get(tipo, 0) + 1
print(f"\nPREMIAÇÕES POR TIPO:")
for tipo, count in sorted(por_tipo_prem.items()):
print(f" {tipo}: {count}")
for tipo_prem in ["Premiação Prêmio", "Avaliação Prêmio", "Inscrição Prêmio"]:
prems = [p for p in premiacoes if p.get("tipo") == tipo_prem]
if prems:
print(f"\n{tipo_prem} ({len(prems)}):")
for idx, p in enumerate(prems[:5], 1):
print(f" {idx}. {p.get('descricao', 'N/A')} ({p.get('inicio', 'N/A')})")
finally:
await es_client.close()
if __name__ == "__main__":
asyncio.run(main())