Atualiza criterios de pontuacao para V2

Backend:
- CAJ retorno 20->15, CAJ_MP retorno 20->10, CAM atualidade 10->20, retorno 20->10
- CONS_ATIVO/HIST/FALECIDO continuidade 8a+ = 20 (simplificado)
- CONS_FALECIDO agora pontua tempo (5 pts/ano, teto 50)
- AVAL_COMIS_PREMIO e AVAL_COMIS_GP mudaram tipo para PAPEL
- AVAL_COMIS_GP teto 100->80
- Novo bonus de recorrencia anual para comissoes (2-6 pts/ano)
- PREMIACAO base 150->100, PREMIACAO_GP base 30->50, MENCAO base 10->30
- BOL_BPQ_INTERMEDIARIO base 50->30 (consolidado)
- Orientacoes/Co-orientacoes/Bancas: tetos zerados (sem limite)
- TipoAtuacao.RESULTADO renomeado para COMPETENCIA_RECONHECIMENTO

Frontend:
- Atualiza PONTOS_BASE e TETOS com novos valores V2
- Atualiza descricoes das formulas nos tooltips
- Melhora exibicao de teto=0 como "sem limite"
- Adiciona info de bonus de recorrencia nos tooltips
This commit is contained in:
Frederico Castro
2025-12-14 20:37:55 -03:00
parent 7000268261
commit 120593831c
3 changed files with 95 additions and 74 deletions

View File

@@ -4,7 +4,7 @@ import './ConsultorCard.css';
const FORMULAS = {
bloco_a: {
titulo: 'Coordenacao CAPES',
descricao: 'CA=200 | CAJ=150 | CAJ_MP=120 | CAM=100\nTempo: multiplicador por ano\nBonus atualidade + Retorno',
descricao: 'CA=200 | CAJ=150 | CAJ_MP=120 | CAM=100\nTempo: multiplicador por ano\nBonus atualidade + Retorno (V2)',
},
bloco_b: {
titulo: 'Coordenacao PPG',
@@ -12,11 +12,11 @@ const FORMULAS = {
},
bloco_c: {
titulo: 'Consultoria',
descricao: 'CONS_ATIVO=150 | CONS_HIST=100 | CONS_FALECIDO=100\nTempo: 5 pts/ano (max 50)\nContinuidade 8a+=15 | Retorno=15',
descricao: 'CONS_ATIVO=150 | CONS_HIST=100 | CONS_FALECIDO=100\nTempo: 5 pts/ano (max 50)\nContinuidade 8a+=20 | Retorno=15 (V2)',
},
bloco_d: {
titulo: 'Premiacoes/Avaliacoes',
descricao: 'PREMIACAO=150 | PREMIACAO_GP=30 | MENCAO=10\nAVAL_COMIS=30-50 | COORD_COMIS=50-60\nINSC_AUTOR=10 | INSC_INST=30',
descricao: 'GP=100 | Premio=50 | Mencao=30\nAVAL_COMIS=30-50 | COORD_COMIS=50-60\nINSC_AUTOR=10 | INSC_INST=30 (V2)',
},
};
@@ -26,34 +26,37 @@ const PONTOS_BASE = {
INSC_AUTOR: 10, INSC_INST: 30,
AVAL_COMIS_PREMIO: 30, AVAL_COMIS_GP: 50,
COORD_COMIS_PREMIO: 50, COORD_COMIS_GP: 60,
PREMIACAO: 150, PREMIACAO_GP: 30, MENCAO: 10,
BOL_BPQ_SUPERIOR: 30, BOL_BPQ_INTERMEDIARIO: 50,
PREMIACAO: 100, PREMIACAO_GP: 50, MENCAO: 30,
BOL_BPQ_SUPERIOR: 30, BOL_BPQ_INTERMEDIARIO: 30,
EVENTO: 1, PROJ: 10,
ORIENT_POS_DOC: 15, ORIENT_TESE: 10, ORIENT_DISS: 5,
CO_ORIENT_POS_DOC: 7, CO_ORIENT_TESE: 5, CO_ORIENT_DISS: 3,
MB_BANCA_POS_DOC: 3, MB_BANCA_TESE: 3, MB_BANCA_DISS: 2,
};
// Teto oficial por código, conforme documento de critérios (seção 3.x)
const TETOS = {
// 3.3 Inscrições
INSC_AUTOR: { teto: 20, doc: '3.3 Inscrições' },
INSC_INST: { teto: 60, doc: '3.3 Inscrições' },
// 3.4 Avaliação / Coordenação de Comissão
AVAL_COMIS_PREMIO: { teto: 60, doc: '3.4 Avaliação/Comissão' },
AVAL_COMIS_GP: { teto: 100, doc: '3.4 Avaliação/Comissão' },
COORD_COMIS_PREMIO: { teto: 100, doc: '3.4 Avaliação/Comissão' },
COORD_COMIS_GP: { teto: 120, doc: '3.4 Avaliação/Comissão' },
// 3.6 Premiações
PREMIACAO: { teto: 180, doc: '3.6 Premiações' },
PREMIACAO_GP: { teto: 60, doc: '3.6 Premiações' },
MENCAO: { teto: 20, doc: '3.6 Premiações' },
// 3.7 Participações
AVAL_COMIS_PREMIO: { teto: 60, doc: '3.4 Avaliação/Comissão', bonus: '+2/ano (max 15)' },
AVAL_COMIS_GP: { teto: 80, doc: '3.4 Avaliação/Comissão', bonus: '+3/ano (max 20)' },
COORD_COMIS_PREMIO: { teto: 100, doc: '3.4 Avaliação/Comissão', bonus: '+4/ano (max 20)' },
COORD_COMIS_GP: { teto: 120, doc: '3.4 Avaliação/Comissão', bonus: '+6/ano (max 20)' },
PREMIACAO: { teto: 180, doc: '3.6 Grande Prêmio' },
PREMIACAO_GP: { teto: 60, doc: '3.6 Prêmio' },
MENCAO: { teto: 20, doc: '3.6 Menção Honrosa' },
EVENTO: { teto: 5, doc: '3.7 Participações' },
PROJ: { teto: 40, doc: '3.7 Participações' },
// 3.5 Bolsas CNPQ (nomes resumidos)
BOL_BPQ_SUPERIOR: { teto: 60, doc: '3.5 Bolsas CNPQ' },
BOL_BPQ_INTERMEDIARIO: { teto: 100, doc: '3.5 Bolsas CNPQ' },
BOL_BPQ_INTERMEDIARIO: { teto: 60, doc: '3.5 Bolsas CNPQ' },
ORIENT_POS_DOC: { teto: 0, doc: '3.8 Orientação (sem limite)' },
ORIENT_TESE: { teto: 0, doc: '3.8 Orientação (sem limite)' },
ORIENT_DISS: { teto: 0, doc: '3.8 Orientação (sem limite)' },
CO_ORIENT_POS_DOC: { teto: 0, doc: '3.9 Co-Orientação (sem limite)' },
CO_ORIENT_TESE: { teto: 0, doc: '3.9 Co-Orientação (sem limite)' },
CO_ORIENT_DISS: { teto: 0, doc: '3.9 Co-Orientação (sem limite)' },
MB_BANCA_POS_DOC: { teto: 0, doc: '3.10 Banca (sem limite)' },
MB_BANCA_TESE: { teto: 0, doc: '3.10 Banca (sem limite)' },
MB_BANCA_DISS: { teto: 0, doc: '3.10 Banca (sem limite)' },
};
const ScoreItemWithTooltip = ({ value, label, formula, style }) => (
@@ -313,7 +316,8 @@ const BlocoDetalhes = ({ titulo, bloco, cor }) => (
const bonus = at.bonus || 0;
const bruto = base + tempo + bonus;
const meta = TETOS[at.codigo];
const capped = bruto !== at.total;
const hasTeto = meta && meta.teto > 0;
const capped = hasTeto && bruto > meta.teto;
const unidade = at.quantidade > 1 ? Math.round(base / at.quantidade) : null;
const partes = [];
@@ -322,13 +326,11 @@ const BlocoDetalhes = ({ titulo, bloco, cor }) => (
? `Base ${unidade} x ${at.quantidade} = ${base}`
: `Base ${base}`
);
if (capped) {
partes.push(`Bruto ${bruto}`);
}
if (tempo) partes.push(`Tempo ${tempo}`);
if (bonus) partes.push(`Bônus ${bonus}`);
if (meta) partes.push(`Teto ${meta.teto}`);
partes.push(capped && meta ? `Total ${at.total} (teto)` : `Total ${at.total}`);
if (hasTeto) partes.push(`Teto ${meta.teto}`);
if (meta && meta.bonus) partes.push(meta.bonus);
partes.push(capped ? `Total ${at.total} (teto)` : `Total ${at.total}`);
return partes.join(" | ");
})()}
</div>