#!/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 = "http://elastic-atuacapes.hom.capes.gov.br:9200" ES_INDEX = "atuacapes" ES_USER = "admin-atuacapes" ES_PASSWORD = "O}!S0bj%FhJ:" 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())