feat: Sistema de Ranking de Consultores CAPES - versão inicial
Backend (FastAPI + DDD):
- Arquitetura DDD com camadas Domain, Application, Infrastructure, Interface
- Integração com Elasticsearch (ATUACAPES) para dados de consultores
- Integração com Oracle (SUCUPIRA_PAINEL) para coordenações PPG
- Cálculo dos 4 componentes de pontuação (A, B, C, D)
- Cache em memória para otimização de performance
- API REST com endpoints /ranking, /ranking/detalhado, /consultor/{id}
Frontend (React + Vite):
- Interface responsiva com cards expansíveis
- Visualização detalhada de pontuação por componente
- Filtro por quantidade de consultores (Top 10, 50, 100, etc)
Docker:
- docker-compose com shared_network externa
- Backend com Oracle Instant Client
- Frontend com Vite dev server
This commit is contained in:
98
backend/src/application/dtos/consultor_dto.py
Normal file
98
backend/src/application/dtos/consultor_dto.py
Normal file
@@ -0,0 +1,98 @@
|
||||
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]
|
||||
|
||||
|
||||
@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)
|
||||
Reference in New Issue
Block a user