from pydantic import BaseModel, Field from typing import List, Optional class PeriodoSchema(BaseModel): inicio: str fim: Optional[str] = None ativo: bool anos_decorridos: float class CoordenacaoCapesSchema(BaseModel): tipo: str area_avaliacao: str periodo: PeriodoSchema areas_adicionais: List[str] ja_coordenou_antes: bool class CoordenacaoProgramaSchema(BaseModel): id_programa: int nome_programa: str codigo_programa: str nota_ppg: str modalidade: str area_avaliacao: str periodo: PeriodoSchema class ConsultoriaSchema(BaseModel): total_eventos: int eventos_recentes: int primeiro_evento: str ultimo_evento: str vezes_responsavel: int areas: List[str] class PremiacaoSchema(BaseModel): tipo: str nome_premio: str ano: int pontos: int class ComponentePontuacaoSchema(BaseModel): base: int tempo: int extras: int bonus: int retorno: int total: int class PontuacaoCompletaSchema(BaseModel): componente_a: ComponentePontuacaoSchema componente_b: ComponentePontuacaoSchema componente_c: ComponentePontuacaoSchema componente_d: ComponentePontuacaoSchema pontuacao_total: int class ConsultorResumoSchema(BaseModel): id_pessoa: int nome: str anos_atuacao: float ativo: bool veterano: bool pontuacao_total: int rank: Optional[int] = None class ConsultorDetalhadoSchema(BaseModel): id_pessoa: int nome: str cpf: Optional[str] = None anos_atuacao: float ativo: bool veterano: bool coordenacoes_capes: List[CoordenacaoCapesSchema] coordenacoes_programas: List[CoordenacaoProgramaSchema] consultoria: Optional[ConsultoriaSchema] = None premiacoes: List[PremiacaoSchema] pontuacao: PontuacaoCompletaSchema rank: Optional[int] = None class RankingResponseSchema(BaseModel): total: int limite: int offset: int consultores: List[ConsultorResumoSchema] class RankingDetalhadoResponseSchema(BaseModel): total: int limite: int consultores: List[ConsultorDetalhadoSchema]