- Adiciona campos situacao, anos_completos, anos_consecutivos e retornos na entidade Consultoria para suportar regras documentadas - Implementa mesclagem de períodos sobrepostos para evitar contagem dupla - Melhora componente A com cálculo por área e detecção de retornos - Ajusta componente B com bônus por nota PPG - Refatora componente C com bônus de continuidade e retorno - Implementa componente D com classificação de nível de prêmio (Grande Prêmio, PCT, Interfarma, outros) e pontuação diferenciada - Trata datas inconsistentes (fim < início) como períodos em aberto - Extrai situacaoConsultoria do campo dadosConsultoria.situacaoConsultoria
103 lines
1.9 KiB
Python
103 lines
1.9 KiB
Python
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)
|