from dataclasses import dataclass, asdict from typing import List, Optional, Dict, Any from datetime import datetime @dataclass class PeriodoDTO: inicio: str fim: Optional[str] ativo: bool anos_decorridos: float @dataclass class CoordenacaoCapesDTO: tipo: str area_avaliacao: str periodo: PeriodoDTO areas_adicionais: List[str] ja_coordenou_antes: bool @dataclass class CoordenacaoProgramaDTO: id_programa: int nome_programa: str codigo_programa: str nota_ppg: str modalidade: str area_avaliacao: str periodo: PeriodoDTO @dataclass class ConsultoriaDTO: total_eventos: int eventos_recentes: int primeiro_evento: str ultimo_evento: str vezes_responsavel: int areas: List[str] situacao: str anos_completos: int anos_consecutivos: int retornos: int @dataclass class PremiacaoDTO: tipo: str nome_premio: str ano: int pontos: int @dataclass class ComponentePontuacaoDTO: base: int tempo: int extras: int bonus: int retorno: int total: int @dataclass class PontuacaoCompletaDTO: componente_a: ComponentePontuacaoDTO componente_b: ComponentePontuacaoDTO componente_c: ComponentePontuacaoDTO componente_d: ComponentePontuacaoDTO pontuacao_total: int @dataclass class ConsultorResumoDTO: id_pessoa: int nome: str anos_atuacao: float ativo: bool veterano: bool pontuacao_total: int rank: Optional[int] = None @dataclass class ConsultorDetalhadoDTO: id_pessoa: int nome: str cpf: Optional[str] anos_atuacao: float ativo: bool veterano: bool coordenacoes_capes: List[CoordenacaoCapesDTO] coordenacoes_programas: List[CoordenacaoProgramaDTO] consultoria: Optional[ConsultoriaDTO] premiacoes: List[PremiacaoDTO] pontuacao: PontuacaoCompletaDTO rank: Optional[int] = None def to_dict(self) -> Dict[str, Any]: return asdict(self)