from pydantic import BaseModel, Field from typing import Optional, List from datetime import datetime class ConsultorRankingResumoSchema(BaseModel): id_pessoa: int nome: str posicao: Optional[int] pontuacao_total: float componente_a: float componente_b: float componente_c: float componente_d: float ativo: bool anos_atuacao: float consultoria: Optional[dict] = None coordenacoes_capes: Optional[list] = None coordenacoes_programas: Optional[list] = None premiacoes: Optional[list] = None class RankingPaginadoResponseSchema(BaseModel): total: int page: int size: int total_pages: int consultores: List[ConsultorRankingResumoSchema] class EstatisticasRankingSchema(BaseModel): total_consultores: int total_ativos: int total_inativos: int ultima_atualizacao: Optional[str] pontuacao_media: float pontuacao_maxima: float pontuacao_minima: float media_componentes: dict distribuicao: List[dict] class JobStatusSchema(BaseModel): running: bool progress: int processados: int total: int mensagem: str batch_atual: int total_batches: int tempo_decorrido: Optional[str] tempo_estimado: Optional[str] inicio: Optional[str] fim: Optional[str] erro: Optional[str] class ProcessarRankingRequestSchema(BaseModel): limpar_antes: bool = Field(default=True, description="Se deve limpar a tabela antes de processar") class ProcessarRankingResponseSchema(BaseModel): sucesso: bool mensagem: str job_id: Optional[str] = None