import pytest from datetime import datetime from dateutil.relativedelta import relativedelta from src.domain.entities.consultor import ( Consultor, CoordenacaoCapes, Consultoria, Inscricao, AvaliacaoComissao, Premiacao, BolsaCNPQ, Participacao, Orientacao, MembroBanca, ) from src.domain.value_objects.periodo import Periodo @pytest.fixture def data_referencia(): return datetime(2025, 1, 1) @pytest.fixture def hoje(): return datetime.now() def criar_periodo(anos_atras: int, ativo: bool = False, duracao_anos: int = 0) -> Periodo: inicio = datetime.now() - relativedelta(years=anos_atras) if ativo: fim = None else: fim = inicio + relativedelta(years=duracao_anos) if duracao_anos > 0 else datetime.now() return Periodo(inicio=inicio, fim=fim) @pytest.fixture def periodo_ativo_5_anos(): return criar_periodo(anos_atras=5, ativo=True) @pytest.fixture def periodo_historico_3_anos(): return criar_periodo(anos_atras=5, duracao_anos=3) @pytest.fixture def periodo_historico_10_anos(): return criar_periodo(anos_atras=12, duracao_anos=10) @pytest.fixture def coordenacao_ca_ativa(periodo_ativo_5_anos): return CoordenacaoCapes( codigo="CA", tipo="Coordenador de Área", area_avaliacao="CIÊNCIAS AMBIENTAIS", periodo=periodo_ativo_5_anos, ) @pytest.fixture def coordenacao_ca_historica(periodo_historico_3_anos): return CoordenacaoCapes( codigo="CA", tipo="Coordenador de Área", area_avaliacao="MEDICINA I", periodo=periodo_historico_3_anos, ) @pytest.fixture def coordenacao_caj_ativa(): return CoordenacaoCapes( codigo="CAJ", tipo="Coordenador Adjunto", area_avaliacao="ENGENHARIA I", periodo=criar_periodo(anos_atras=3, ativo=True), ) @pytest.fixture def coordenacao_caj_mp_historica(): return CoordenacaoCapes( codigo="CAJ_MP", tipo="Coordenador Adjunto de Mestrado Profissionalizante", area_avaliacao="ADMINISTRAÇÃO", periodo=criar_periodo(anos_atras=6, duracao_anos=4), ) @pytest.fixture def coordenacao_cam_ativa(): return CoordenacaoCapes( codigo="CAM", tipo="Câmara Temática", area_avaliacao="INTERDISCIPLINAR", periodo=criar_periodo(anos_atras=2, ativo=True), ) @pytest.fixture def consultoria_ativa_8_anos(): return Consultoria( codigo="CONS_ATIVO", situacao="Atividade Contínua", periodo=criar_periodo(anos_atras=8, ativo=True), periodos=[criar_periodo(anos_atras=8, ativo=True)], anos_consecutivos=8, retornos=0, ) @pytest.fixture def consultoria_historica_5_anos(): return Consultoria( codigo="CONS_HIST", situacao="Inativo", periodo=criar_periodo(anos_atras=7, duracao_anos=5), periodos=[criar_periodo(anos_atras=7, duracao_anos=5)], anos_consecutivos=5, retornos=0, ) @pytest.fixture def consultoria_com_retorno(): periodo1 = criar_periodo(anos_atras=10, duracao_anos=3) periodo2 = criar_periodo(anos_atras=4, ativo=True) return Consultoria( codigo="CONS_ATIVO", situacao="Atividade Contínua", periodo=periodo2, periodos=[periodo1, periodo2], anos_consecutivos=4, retornos=1, ) @pytest.fixture def inscricao_autor(): return Inscricao( codigo="INSC_AUTOR", tipo="Autor", premio="PCT", ano=2024, situacao="Aprovada", ) @pytest.fixture def inscricao_institucional(): return Inscricao( codigo="INSC_INST_AUTOR", tipo="Institucional", premio="PCT", ano=2024, situacao="Aprovada", ) @pytest.fixture def avaliacao_comissao_premio(): return AvaliacaoComissao( codigo="AVAL_COMIS_PREMIO", tipo="Membro de Comissão", premio="PCT", ano=2024, ) @pytest.fixture def avaliacao_comissao_gp(): return AvaliacaoComissao( codigo="AVAL_COMIS_GP", tipo="Membro de Comissão", premio="Grande Prêmio", ano=2024, ) @pytest.fixture def coord_comissao_premio(): return AvaliacaoComissao( codigo="COORD_COMIS_PREMIO", tipo="Coordenador/Presidente", premio="PCT", ano=2024, comissao_tipo="Coordenador", ) @pytest.fixture def premiacao_gp_autor(): return Premiacao( codigo="PREMIACAO_GP_AUTOR", tipo="Grande Prêmio", nome_premio="Grande Prêmio CAPES de Tese", ano=2024, papel="Autor", ) @pytest.fixture def premiacao_autor(): return Premiacao( codigo="PREMIACAO_AUTOR", tipo="Prêmio", nome_premio="Prêmio CAPES de Tese", ano=2024, papel="Autor", ) @pytest.fixture def mencao_autor(): return Premiacao( codigo="MENCAO_AUTOR", tipo="Menção Honrosa", nome_premio="Prêmio CAPES de Tese", ano=2024, papel="Autor", ) @pytest.fixture def bolsa_cnpq(): return BolsaCNPQ( codigo="BOL_BPQ_NIVEL", nivel="1A", area="Ciências Exatas", ) @pytest.fixture def participacao_evento(): return Participacao( codigo="EVENTO", tipo="Evento", descricao="Seminário CAPES 2024", ano=2024, ) @pytest.fixture def participacao_projeto(): return Participacao( codigo="PROJ", tipo="Projeto", descricao="Projeto de Pesquisa", ano=2024, ) @pytest.fixture def consultor_vazio(): return Consultor( id_pessoa=1, nome="Consultor Vazio", ) @pytest.fixture def consultor_coordenador_area(coordenacao_ca_ativa): return Consultor( id_pessoa=2, nome="Coordenador de Área Ativo", coordenacoes_capes=[coordenacao_ca_ativa], ) @pytest.fixture def consultor_completo( coordenacao_ca_ativa, consultoria_ativa_8_anos, inscricao_autor, avaliacao_comissao_premio, premiacao_autor, bolsa_cnpq, participacao_evento, ): return Consultor( id_pessoa=3, nome="Consultor Completo", coordenacoes_capes=[coordenacao_ca_ativa], consultoria=consultoria_ativa_8_anos, inscricoes=[inscricao_autor], avaliacoes_comissao=[avaliacao_comissao_premio], premiacoes=[premiacao_autor], bolsas_cnpq=[bolsa_cnpq], participacoes=[participacao_evento], )