fix: alinhar criterios 100% com documento PDF oficial
Backend: - Reescrever criterios_pontuacao.py com valores corretos do PDF - Adicionar Blocos B e E ao enum - Corrigir Base/Teto: AVAL_COMIS_GP (40), COORD_COMIS_PREMIO (40), COORD_COMIS_GP (50), PROJ teto (30) - Orientacoes/Bancas agora sao selos (Base=0, Teto=0) - CONS_FALECIDO agora pontua tempo (5 pts/ano) - Remover codigos obsoletos (PREMIACAO, MENCAO, BOL_BPQ_SUP/INT) - Usar apenas BOL_BPQ_NIVEL, PREMIACAO_*_AUTOR, MENCAO_AUTOR - Atualizar ranking_store.py e validar_ranking.py Frontend: - Atualizar ConsultorCard e CompararModal com codigos corretos - Adicionar logo CAPES em PNG com transparencia - Ajustar espacamento do header e tamanho das fontes - Mapear pasta public no docker-compose
This commit is contained in:
@@ -41,9 +41,9 @@ const gerarSelos = (consultor) => {
|
||||
).length;
|
||||
|
||||
const addPremSelo = (papel, codBase, seloGP, seloPremio, seloMencao) => {
|
||||
const gp = contarPrem(papel, 'PREMIACAO');
|
||||
const premio = contarPrem(papel, 'PREMIACAO_GP');
|
||||
const mencao = contarPrem(papel, 'MENCAO');
|
||||
const gp = contarPrem(papel, 'PREMIACAO_GP_AUTOR');
|
||||
const premio = contarPrem(papel, 'PREMIACAO_AUTOR');
|
||||
const mencao = contarPrem(papel, 'MENCAO_AUTOR');
|
||||
if (gp > 0) selos.push({ ...seloGP, qtd: gp });
|
||||
if (premio > 0) selos.push({ ...seloPremio, qtd: premio });
|
||||
if (mencao > 0) selos.push({ ...seloMencao, qtd: mencao });
|
||||
|
||||
@@ -474,6 +474,9 @@
|
||||
.list-item .muted {
|
||||
color: var(--muted);
|
||||
font-size: 0.8rem;
|
||||
margin-left: auto;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.list-item .pontos {
|
||||
|
||||
@@ -55,9 +55,9 @@ const gerarSelos = (consultor) => {
|
||||
|
||||
const gerarSelosPorPapel = (papel, seloGP, seloPremio, seloMencao, hintPrefix) => {
|
||||
const lista = premiacoes.filter((p) => (p.papel || '').toString().toLowerCase() === papel.toLowerCase());
|
||||
const gp = lista.filter((p) => ['PREMIACAO', 'PREMIACAO_GP_AUTOR'].includes(p.codigo)).length;
|
||||
const premio = lista.filter((p) => ['PREMIACAO_GP', 'PREMIACAO_AUTOR'].includes(p.codigo)).length;
|
||||
const mencao = lista.filter((p) => ['MENCAO', 'MENCAO_AUTOR'].includes(p.codigo)).length;
|
||||
const gp = lista.filter((p) => p.codigo === 'PREMIACAO_GP_AUTOR').length;
|
||||
const premio = lista.filter((p) => p.codigo === 'PREMIACAO_AUTOR').length;
|
||||
const mencao = lista.filter((p) => p.codigo === 'MENCAO_AUTOR').length;
|
||||
|
||||
if (gp > 0) selos.push({ ...seloGP, qtd: gp, hint: `${hintPrefix} - Grande Prêmio` });
|
||||
if (premio > 0) selos.push({ ...seloPremio, qtd: premio, hint: `${hintPrefix} - Prêmio` });
|
||||
@@ -129,58 +129,46 @@ const FORMULAS = {
|
||||
},
|
||||
bloco_d: {
|
||||
titulo: 'Premiacoes/Avaliacoes',
|
||||
descricao: 'Premiações: GP=100 (teto 180) | Prêmio=50 (teto 60) | Menção=30 (teto 30)\nBolsas: BPQ_SUP=30 (teto 60) | BPQ_INT=50 (teto 100)\nInscrições/Avaliações/Comissões/Participações/Orientações/Bancas (com tetos por código)',
|
||||
descricao: 'Premiações: GP=100 (teto 300) | Prêmio=50 (teto 150) | Menção=30 (teto 90)\nBolsas: BPQ=30 (teto 60)\nInscrições/Avaliações/Comissões/Participações (com tetos por código)\nOrientações/Bancas: apenas selos (0 pts)',
|
||||
},
|
||||
};
|
||||
|
||||
const PONTOS_BASE = {
|
||||
CA: 200, CAJ: 150, CAJ_MP: 120, CAM: 100,
|
||||
CONS_ATIVO: 150, CONS_HIST: 100, CONS_FALECIDO: 100,
|
||||
INSC_AUTOR: 10, INSC_INST: 30,
|
||||
INSC_INST_AUTOR: 20,
|
||||
AVAL_COMIS_PREMIO: 30, AVAL_COMIS_GP: 50,
|
||||
COORD_COMIS_PREMIO: 50, COORD_COMIS_GP: 60,
|
||||
PREMIACAO: 100, PREMIACAO_GP: 50, MENCAO: 30,
|
||||
INSC_AUTOR: 10, INSC_INST_AUTOR: 20,
|
||||
AVAL_COMIS_PREMIO: 30, AVAL_COMIS_GP: 40,
|
||||
COORD_COMIS_PREMIO: 40, COORD_COMIS_GP: 50,
|
||||
PREMIACAO_GP_AUTOR: 100, PREMIACAO_AUTOR: 50, MENCAO_AUTOR: 30,
|
||||
BOL_BPQ_SUP: 30, BOL_BPQ_INT: 50,
|
||||
BOL_BPQ_SUPERIOR: 30, BOL_BPQ_INTERMEDIARIO: 50,
|
||||
BOL_BPQ_NIVEL: 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,
|
||||
ORIENT_POS_DOC: 0, ORIENT_TESE: 0, ORIENT_DISS: 0,
|
||||
CO_ORIENT_POS_DOC: 0, CO_ORIENT_TESE: 0, CO_ORIENT_DISS: 0,
|
||||
MB_BANCA_POS_DOC: 0, MB_BANCA_TESE: 0, MB_BANCA_DISS: 0,
|
||||
};
|
||||
|
||||
const TETOS = {
|
||||
INSC_AUTOR: { teto: 20, doc: '3.3 Inscrições', bonus: '+2/participação (max 10)' },
|
||||
INSC_INST: { teto: 60, doc: '3.3 Inscrições' },
|
||||
INSC_INST_AUTOR: { teto: 50, doc: '3.3 Inscrições', bonus: '+5/participação (max 10)' },
|
||||
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.4 Premiações e Bolsas' },
|
||||
PREMIACAO_GP: { teto: 60, doc: '3.4 Premiações e Bolsas' },
|
||||
MENCAO: { teto: 30, doc: '3.4 Premiações e Bolsas' },
|
||||
PREMIACAO_GP_AUTOR: { teto: 300, doc: '3.4 Premiações e Bolsas' },
|
||||
PREMIACAO_AUTOR: { teto: 150, doc: '3.4 Premiações e Bolsas' },
|
||||
MENCAO_AUTOR: { teto: 90, doc: '3.4 Premiações e Bolsas' },
|
||||
EVENTO: { teto: 5, doc: '3.5 Participações Acadêmicas', bonus: '+1/participação (max 10)' },
|
||||
PROJ: { teto: 40, doc: '3.5 Participações Acadêmicas', bonus: '+2/participação (max 10)' },
|
||||
BOL_BPQ_SUP: { teto: 60, doc: '3.4 Premiações e Bolsas' },
|
||||
BOL_BPQ_INT: { teto: 100, doc: '3.4 Premiações e Bolsas' },
|
||||
BOL_BPQ_SUPERIOR: { teto: 60, doc: '3.4 Premiações e Bolsas' },
|
||||
BOL_BPQ_INTERMEDIARIO: { teto: 100, doc: '3.4 Premiações e Bolsas' },
|
||||
PROJ: { teto: 30, doc: '3.5 Participações Acadêmicas', bonus: '+2/participação (max 10)' },
|
||||
BOL_BPQ_NIVEL: { teto: 60, doc: '3.4 Premiações e Bolsas' },
|
||||
ORIENT_POS_DOC: { teto: 100, doc: '3.5 Participações Acadêmicas' },
|
||||
ORIENT_TESE: { teto: 50, doc: '3.5 Participações Acadêmicas' },
|
||||
ORIENT_DISS: { teto: 25, doc: '3.5 Participações Acadêmicas' },
|
||||
CO_ORIENT_POS_DOC: { teto: 35, doc: '3.5 Participações Acadêmicas' },
|
||||
CO_ORIENT_TESE: { teto: 25, doc: '3.5 Participações Acadêmicas' },
|
||||
CO_ORIENT_DISS: { teto: 15, doc: '3.5 Participações Acadêmicas' },
|
||||
MB_BANCA_POS_DOC: { teto: 15, doc: '3.5 Participações Acadêmicas' },
|
||||
MB_BANCA_TESE: { teto: 15, doc: '3.5 Participações Acadêmicas' },
|
||||
MB_BANCA_DISS: { teto: 10, doc: '3.5 Participações Acadêmicas' },
|
||||
ORIENT_POS_DOC: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
ORIENT_TESE: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
ORIENT_DISS: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
CO_ORIENT_POS_DOC: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
CO_ORIENT_TESE: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
CO_ORIENT_DISS: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
MB_BANCA_POS_DOC: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
MB_BANCA_TESE: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
MB_BANCA_DISS: { teto: 0, doc: 'Selo (sem pontuação)' },
|
||||
};
|
||||
|
||||
const ScoreItemWithTooltip = ({ value, label, formula, style }) => (
|
||||
|
||||
@@ -25,19 +25,18 @@
|
||||
.header-title-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-bottom: 0.35rem;
|
||||
gap: 1.25rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.header-logo {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
object-fit: contain;
|
||||
border-radius: 10px;
|
||||
background: white;
|
||||
padding: 6px;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(255,255,255,0.1);
|
||||
border-radius: 8px;
|
||||
background: transparent;
|
||||
flex-shrink: 0;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
@@ -57,7 +56,8 @@
|
||||
color: var(--silver);
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 0.6rem;
|
||||
margin-top: 0.3rem;
|
||||
margin-bottom: 0.8rem;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
|
||||
.criteria-section h4 {
|
||||
color: var(--accent-2);
|
||||
font-size: 0.7rem;
|
||||
font-size: 0.8rem;
|
||||
margin: 0;
|
||||
letter-spacing: 0.2px;
|
||||
white-space: nowrap;
|
||||
@@ -165,7 +165,7 @@
|
||||
.max-pts {
|
||||
padding: 0.1rem 0.35rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.55rem;
|
||||
font-size: 0.65rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.2px;
|
||||
white-space: nowrap;
|
||||
@@ -185,12 +185,12 @@
|
||||
.criteria-table {
|
||||
width: 100%;
|
||||
margin-top: 0.25rem;
|
||||
font-size: 0.65rem;
|
||||
font-size: 0.75rem;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.criteria-table.compact {
|
||||
font-size: 0.6rem;
|
||||
font-size: 0.7rem;
|
||||
}
|
||||
|
||||
.criteria-table th {
|
||||
@@ -199,7 +199,7 @@
|
||||
font-weight: 500;
|
||||
padding: 0.15rem 0.2rem;
|
||||
border-bottom: 1px solid rgba(255,255,255,0.1);
|
||||
font-size: 0.55rem;
|
||||
font-size: 0.65rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.3px;
|
||||
white-space: nowrap;
|
||||
@@ -233,7 +233,7 @@
|
||||
margin-top: 0.3rem;
|
||||
padding-top: 0.25rem;
|
||||
border-top: 1px dashed rgba(255,255,255,0.1);
|
||||
font-size: 0.55rem;
|
||||
font-size: 0.65rem;
|
||||
color: var(--muted);
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
|
||||
@@ -11,7 +11,7 @@ const Header = ({ total }) => {
|
||||
<header className="header">
|
||||
<div className="header-content">
|
||||
<div className="header-title-row">
|
||||
<img src="/logo_capes.jpg" alt="CAPES" className="header-logo" />
|
||||
<img src="/logo_capes.png" alt="CAPES" className="header-logo" />
|
||||
<h1>Ranking de Consultores CAPES</h1>
|
||||
</div>
|
||||
<p className="subtitle">
|
||||
|
||||
Reference in New Issue
Block a user