from dataclasses import dataclass, asdict from typing import List, Optional, Dict, Any @dataclass class PeriodoDTO: inicio: str fim: Optional[str] ativo: bool anos_decorridos: float @dataclass class CoordenacaoCapesDTO: codigo: str tipo: str area_avaliacao: str periodo: PeriodoDTO areas_adicionais: List[str] ja_coordenou_antes: bool presidente: bool @dataclass class IESDTO: id: str nome: str sigla: Optional[str] = None @dataclass class VinculoConsultoriaDTO: periodo: PeriodoDTO ies: Optional[IESDTO] = None situacao: str = "" @dataclass class ConsultoriaDTO: codigo: str situacao: str periodo: PeriodoDTO areas: List[str] anos_consecutivos: int retornos: int vinculos: List[VinculoConsultoriaDTO] = None def __post_init__(self): if self.vinculos is None: self.vinculos = [] @dataclass class InscricaoDTO: codigo: str tipo: str premio: str ano: int situacao: str @dataclass class AvaliacaoComissaoDTO: codigo: str tipo: str premio: str ano: int comissao_tipo: str nome_comissao: str @dataclass class PremiacaoDTO: codigo: str tipo: str nome_premio: str ano: int papel: Optional[str] = None @dataclass class BolsaCNPQDTO: codigo: str nivel: str area: str @dataclass class ParticipacaoDTO: codigo: str tipo: str descricao: str ano: Optional[int] @dataclass class OrientacaoDTO: codigo: str tipo: str nivel: str ano: Optional[int] coorientacao: bool = False premiada: bool = False premiacao_tipo: Optional[str] = None @dataclass class MembroBancaDTO: codigo: str tipo: str nivel: str ano: Optional[int] @dataclass class PontuacaoAtuacaoDTO: codigo: str base: int tempo: int bonus: int total: int quantidade: int @dataclass class PontuacaoBlocoDTO: bloco: str total: int atuacoes: List[PontuacaoAtuacaoDTO] @dataclass class PontuacaoCompletaDTO: bloco_a: PontuacaoBlocoDTO bloco_c: PontuacaoBlocoDTO bloco_d: PontuacaoBlocoDTO pontuacao_total: int @dataclass class ConsultorResumoDTO: id_pessoa: int nome: str anos_atuacao: float ativo: bool veterano: bool pontuacao_total: int bloco_a: int bloco_c: int bloco_d: int rank: Optional[int] = None @dataclass class ConsultorDetalhadoDTO: id_pessoa: int nome: str anos_atuacao: float ativo: bool veterano: bool coordenador_ppg: bool coordenacoes_capes: List[CoordenacaoCapesDTO] consultoria: Optional[ConsultoriaDTO] inscricoes: List[InscricaoDTO] avaliacoes_comissao: List[AvaliacaoComissaoDTO] premiacoes: List[PremiacaoDTO] bolsas_cnpq: List[BolsaCNPQDTO] participacoes: List[ParticipacaoDTO] orientacoes: List[OrientacaoDTO] membros_banca: List[MembroBancaDTO] pontuacao: PontuacaoCompletaDTO rank: Optional[int] = None def to_dict(self) -> Dict[str, Any]: return asdict(self)