fix: alinhar estrutura de blocos com especificacao PDF V1.0
- Backend: reorganizar blocos para A (Coord CAPES), B (Consultoria), C (Avaliacoes/Premiacoes), D (Indicadores), E (Coord PPG) - Frontend: atualizar labels e formulas dos blocos - Frontend: ajustar CSS para blocos com tamanho uniforme e quebra de linha - Adicionar migration script para COMPONENTE_E no Oracle
This commit is contained in:
@@ -390,6 +390,11 @@
|
||||
max-width: calc(33.333% - 0.3rem);
|
||||
}
|
||||
|
||||
.score-breakdown-5cols .score-item-wrapper {
|
||||
flex: 0 0 calc(33.333% - 0.3rem);
|
||||
max-width: calc(33.333% - 0.3rem);
|
||||
}
|
||||
|
||||
.score-item-wrapper .score-item {
|
||||
cursor: help;
|
||||
transition: transform 150ms ease, border-color 150ms ease;
|
||||
|
||||
@@ -853,13 +853,17 @@ const FORMULAS = {
|
||||
titulo: 'Coordenacao CAPES',
|
||||
descricao: 'CA=200 | CAJ=150 | CAJ_MP=120 | CAM=100\nTempo: multiplicador por ano (anos completos)\nBônus atualidade (mandato vigente) + Retorno (mandato anterior)',
|
||||
},
|
||||
bloco_c: {
|
||||
bloco_b: {
|
||||
titulo: 'Consultoria',
|
||||
descricao: 'CONS_ATIVO=150 | CONS_HIST=100 | CONS_FALECIDO=100\nTempo: 5 pts/ano (max 50)\nContinuidade: 3a=+5, 5a=+10, 8a+=+20 (escalonado)\nRetorno (reativação): +15 (uma vez)',
|
||||
descricao: 'CONS_ATIVO=150 | CONS_HIST=100 | CONS_FALECIDO=100\nTempo: 5 pts/ano (max 50)\nContinuidade: 8a+=+20 (escalonado)\nRetorno (reativação): +15 (uma vez)',
|
||||
},
|
||||
bloco_c: {
|
||||
titulo: 'Avaliacoes/Premiacoes',
|
||||
descricao: 'Premiações: GP=100 | Prêmio=50 | Menção=30\nAvaliações de Comissão e Coordenação\nInscrições em Prêmios\nOrientações e Bancas de trabalhos premiados',
|
||||
},
|
||||
bloco_d: {
|
||||
titulo: 'Premiacoes/Avaliacoes',
|
||||
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 e Bancas: apenas selos (sem pontuação)',
|
||||
titulo: 'Indicadores',
|
||||
descricao: 'Bolsas CNPq: BPQ Nível Superior/Intermediário\nParticipações: Eventos e Projetos\nOrientações e Bancas (sem premiação)',
|
||||
},
|
||||
};
|
||||
|
||||
@@ -903,11 +907,11 @@ const PontuacaoModal = ({ dados, onClose }) => {
|
||||
|
||||
const getIcone = () => {
|
||||
if (label?.includes('BLOCO A') || label === 'A') return '🎯';
|
||||
if (label?.includes('BLOCO B') || label === 'B') return '🎓';
|
||||
if (label?.includes('BLOCO C') || label === 'C') return '💼';
|
||||
if (label?.includes('BLOCO D') || label === 'D') return '🏆';
|
||||
if (tipo === 'total') return '📊';
|
||||
return '📈';
|
||||
if (label?.includes('BLOCO B') || label === 'B') return '💼';
|
||||
if (label?.includes('BLOCO C') || label === 'C') return '🏆';
|
||||
if (label?.includes('BLOCO D') || label === 'D') return '📊';
|
||||
if (tipo === 'total') return '📈';
|
||||
return '📌';
|
||||
};
|
||||
|
||||
const renderBlocoContent = () => {
|
||||
@@ -1038,7 +1042,10 @@ const PontuacaoModal = ({ dados, onClose }) => {
|
||||
<div className="modal-formula-section">
|
||||
<span className="modal-detalhe-label">Fórmula</span>
|
||||
<div className="modal-formula-box">
|
||||
<div className="modal-formula-line">Bloco A + Bloco C + Bloco D</div>
|
||||
<div className="modal-formula-line">Bloco A + Bloco B + Bloco C + Bloco D</div>
|
||||
<div className="modal-formula-line muted" style={{ fontSize: '0.8rem', marginTop: '0.5rem' }}>
|
||||
A: Coordenação CAPES | B: Consultoria | C: Avaliações/Premiações | D: Indicadores
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1116,6 +1123,7 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
|
||||
const { consultoria, pontuacao } = consultor;
|
||||
const blocoA = pontuacao?.bloco_a || { total: consultor.bloco_a || 0 };
|
||||
const blocoB = pontuacao?.bloco_b || { total: consultor.bloco_b || 0 };
|
||||
const blocoC = pontuacao?.bloco_c || { total: consultor.bloco_c || 0 };
|
||||
const blocoD = pontuacao?.bloco_d || { total: consultor.bloco_d || 0 };
|
||||
const pontuacaoTotal = Number(consultor.pontuacao_total ?? 0);
|
||||
@@ -1216,10 +1224,10 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<div className="details-grid">
|
||||
<div className="detail-section">
|
||||
<h4>Pontuacao Total</h4>
|
||||
<div className="score-breakdown-total">
|
||||
<div className="score-breakdown-total score-breakdown-5cols">
|
||||
<ScoreItemClickable
|
||||
value={blocoA.total}
|
||||
label="BLOCO A"
|
||||
label="A"
|
||||
style={{ color: blocoA.total > 0 ? 'var(--accent-2)' : 'var(--muted)' }}
|
||||
onClick={() => setPontuacaoModal({
|
||||
tipo: 'bloco',
|
||||
@@ -1230,12 +1238,24 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
})}
|
||||
/>
|
||||
<ScoreItemClickable
|
||||
value={blocoC.total}
|
||||
label="BLOCO C"
|
||||
style={{ color: blocoC.total > 0 ? 'var(--gold)' : 'var(--muted)' }}
|
||||
value={blocoB.total}
|
||||
label="B"
|
||||
style={{ color: blocoB.total > 0 ? 'var(--gold)' : 'var(--muted)' }}
|
||||
onClick={() => setPontuacaoModal({
|
||||
tipo: 'bloco',
|
||||
label: 'BLOCO C - Consultoria',
|
||||
label: 'BLOCO B - Consultoria',
|
||||
value: blocoB.total,
|
||||
formula: FORMULAS.bloco_b.descricao,
|
||||
bloco: blocoB
|
||||
})}
|
||||
/>
|
||||
<ScoreItemClickable
|
||||
value={blocoC.total}
|
||||
label="C"
|
||||
style={{ color: blocoC.total > 0 ? 'var(--bronze)' : 'var(--muted)' }}
|
||||
onClick={() => setPontuacaoModal({
|
||||
tipo: 'bloco',
|
||||
label: 'BLOCO C - Avaliações/Premiações',
|
||||
value: blocoC.total,
|
||||
formula: FORMULAS.bloco_c.descricao,
|
||||
bloco: blocoC
|
||||
@@ -1243,11 +1263,11 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
/>
|
||||
<ScoreItemClickable
|
||||
value={blocoD.total}
|
||||
label="BLOCO D"
|
||||
style={{ color: blocoD.total > 0 ? 'var(--bronze)' : 'var(--muted)' }}
|
||||
label="D"
|
||||
style={{ color: blocoD.total > 0 ? 'var(--silver)' : 'var(--muted)' }}
|
||||
onClick={() => setPontuacaoModal({
|
||||
tipo: 'bloco',
|
||||
label: 'BLOCO D - Premiações/Avaliações',
|
||||
label: 'BLOCO D - Indicadores',
|
||||
value: blocoD.total,
|
||||
formula: FORMULAS.bloco_d.descricao,
|
||||
bloco: blocoD
|
||||
@@ -1270,12 +1290,16 @@ const ConsultorCard = memo(({ consultor, highlight, selecionado, onToggleSelecio
|
||||
<BlocoDetalhes titulo="A - Coordenacao CAPES" bloco={blocoA} cor="var(--accent-2)" onItemClick={setPontuacaoModal} />
|
||||
)}
|
||||
|
||||
{blocoB.atuacoes && blocoB.atuacoes.length > 0 && (
|
||||
<BlocoDetalhes titulo="B - Consultoria" bloco={blocoB} cor="var(--gold)" onItemClick={setPontuacaoModal} />
|
||||
)}
|
||||
|
||||
{blocoC.atuacoes && blocoC.atuacoes.length > 0 && (
|
||||
<BlocoDetalhes titulo="C - Consultoria" bloco={blocoC} cor="var(--gold)" onItemClick={setPontuacaoModal} />
|
||||
<BlocoDetalhes titulo="C - Avaliacoes/Premiacoes" bloco={blocoC} cor="var(--bronze)" onItemClick={setPontuacaoModal} />
|
||||
)}
|
||||
|
||||
{blocoD.atuacoes && blocoD.atuacoes.length > 0 && (
|
||||
<BlocoDetalhes titulo="D - Premiacoes/Avaliacoes" bloco={blocoD} cor="var(--bronze)" onItemClick={setPontuacaoModal} />
|
||||
<BlocoDetalhes titulo="D - Indicadores" bloco={blocoD} cor="var(--silver)" onItemClick={setPontuacaoModal} />
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ export const rankingService = {
|
||||
bloco_b: c.bloco_b,
|
||||
bloco_c: c.bloco_c,
|
||||
bloco_d: c.bloco_d,
|
||||
bloco_e: c.bloco_e || 0,
|
||||
ativo: c.ativo,
|
||||
anos_atuacao: anos,
|
||||
veterano: anos >= 10,
|
||||
@@ -61,6 +62,7 @@ export const rankingService = {
|
||||
bloco_b: { total: c.bloco_b, atuacoes: [] },
|
||||
bloco_c: { total: c.bloco_c, atuacoes: [] },
|
||||
bloco_d: { total: c.bloco_d, atuacoes: [] },
|
||||
bloco_e: { total: c.bloco_e || 0, atuacoes: [] },
|
||||
},
|
||||
consultoria: {
|
||||
codigo: consultoria.codigo || null,
|
||||
|
||||
Reference in New Issue
Block a user