Reimplementa sistema de ranking com novos critérios V2
Mudanças principais: - Substitui 4 Componentes (A,B,C,D) por 3 Blocos (A,C,D) - Remove Componente B (Coordenação PPG = 0 pts no V1) - Adiciona novos tipos de atuação do Elasticsearch - Implementa critérios de pontuação com tetos individuais Bloco A - Coordenação CAPES: - CA (max 450), CAJ (max 370), CAJ_MP (max 315), CAM (max 280) - Calcula base + tempo + bônus atualidade + bônus retorno Bloco C - Consultoria: - CONS_ATIVO (base 150), CONS_HIST (base 100), CONS_FALECIDO (base 100) - Bônus continuidade: 3anos=+5, 5anos=+10, 8anos=+15 - Bônus retorno: +15 Bloco D - Premiações/Avaliações: - Inscrições (INSC_AUTOR, INSC_INST) - Avaliações (AVAL_COMIS_PREMIO, AVAL_COMIS_GP) - Coordenações (COORD_COMIS_PREMIO, COORD_COMIS_GP) - Premiações (PREMIACAO, PREMIACAO_GP, MENCAO) - Bolsas CNPQ, Participações, Orientações, Membros de Banca Frontend: - Header, ConsultorCard, CompararModal atualizados para 3 blocos - API service atualizado para nova estrutura de dados
This commit is contained in:
@@ -4,11 +4,6 @@ import './CompararModal.css';
|
||||
const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
if (!consultor1 || !consultor2) return null;
|
||||
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr) return 'Atual';
|
||||
return new Date(dateStr).toLocaleDateString('pt-BR');
|
||||
};
|
||||
|
||||
const calcularDiferenca = (val1, val2) => {
|
||||
const diff = val1 - val2;
|
||||
if (diff === 0) return { texto: '=', classe: 'igual' };
|
||||
@@ -35,11 +30,27 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
);
|
||||
};
|
||||
|
||||
const p1 = consultor1.pontuacao;
|
||||
const p2 = consultor2.pontuacao;
|
||||
const p1 = consultor1.pontuacao || {};
|
||||
const p2 = consultor2.pontuacao || {};
|
||||
|
||||
const blocoA1 = p1.bloco_a || { total: consultor1.bloco_a || 0 };
|
||||
const blocoA2 = p2.bloco_a || { total: consultor2.bloco_a || 0 };
|
||||
const blocoC1 = p1.bloco_c || { total: consultor1.bloco_c || 0 };
|
||||
const blocoC2 = p2.bloco_c || { total: consultor2.bloco_c || 0 };
|
||||
const blocoD1 = p1.bloco_d || { total: consultor1.bloco_d || 0 };
|
||||
const blocoD2 = p2.bloco_d || { total: consultor2.bloco_d || 0 };
|
||||
|
||||
const total1 = p1.pontuacao_total || consultor1.pontuacao_total || 0;
|
||||
const total2 = p2.pontuacao_total || consultor2.pontuacao_total || 0;
|
||||
|
||||
const c1 = consultor1.consultoria;
|
||||
const c2 = consultor2.consultoria;
|
||||
|
||||
const somarAtuacoes = (atuacoes, campo) => {
|
||||
if (!atuacoes || !Array.isArray(atuacoes)) return 0;
|
||||
return atuacoes.reduce((sum, a) => sum + (a[campo] || 0), 0);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="modal-overlay" onClick={onClose}>
|
||||
<div className="modal-content" onClick={(e) => e.stopPropagation()}>
|
||||
@@ -49,7 +60,7 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
|
||||
<div className="comparacao-header">
|
||||
<div className="consultor-header consultor-1">
|
||||
<div className="rank-badge">#{consultor1.rank}</div>
|
||||
<div className="rank-badge">#{consultor1.posicao || consultor1.rank}</div>
|
||||
<div className="info">
|
||||
<span className="nome">{consultor1.nome}</span>
|
||||
<span className="anos">{consultor1.anos_atuacao} anos</span>
|
||||
@@ -59,7 +70,7 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
</div>
|
||||
<div className="vs">VS</div>
|
||||
<div className="consultor-header consultor-2">
|
||||
<div className="rank-badge">#{consultor2.rank}</div>
|
||||
<div className="rank-badge">#{consultor2.posicao || consultor2.rank}</div>
|
||||
<div className="info">
|
||||
<span className="nome">{consultor2.nome}</span>
|
||||
<span className="anos">{consultor2.anos_atuacao} anos</span>
|
||||
@@ -71,51 +82,50 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
|
||||
<div className="comparacao-secao">
|
||||
<h3>Pontuacao Total</h3>
|
||||
{renderLinhaComparacao('TOTAL', p1.pontuacao_total, p2.pontuacao_total, 'var(--accent)')}
|
||||
{renderLinhaComparacao('TOTAL', total1, total2, 'var(--accent)')}
|
||||
</div>
|
||||
|
||||
<div className="comparacao-secao">
|
||||
<h3 style={{ color: 'var(--accent-2)' }}>A - Coordenacao CAPES</h3>
|
||||
{renderLinhaComparacao('Total', p1.componente_a.total, p2.componente_a.total, 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Base', p1.componente_a.base, p2.componente_a.base, 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Tempo', p1.componente_a.tempo, p2.componente_a.tempo, 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Extras', p1.componente_a.extras, p2.componente_a.extras, 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Bonus', p1.componente_a.bonus, p2.componente_a.bonus, 'var(--accent-2)')}
|
||||
{(p1.componente_a.retorno > 0 || p2.componente_a.retorno > 0) &&
|
||||
renderLinhaComparacao('Retorno', p1.componente_a.retorno, p2.componente_a.retorno, 'var(--accent-2)')}
|
||||
</div>
|
||||
|
||||
<div className="comparacao-secao">
|
||||
<h3 style={{ color: 'var(--success)' }}>B - Coordenacao PPG</h3>
|
||||
{renderLinhaComparacao('Total', p1.componente_b.total, p2.componente_b.total, 'var(--success)')}
|
||||
{renderLinhaComparacao('Base', p1.componente_b.base, p2.componente_b.base, 'var(--success)')}
|
||||
{renderLinhaComparacao('Tempo', p1.componente_b.tempo, p2.componente_b.tempo, 'var(--success)')}
|
||||
{renderLinhaComparacao('Extras', p1.componente_b.extras, p2.componente_b.extras, 'var(--success)')}
|
||||
{renderLinhaComparacao('Bonus', p1.componente_b.bonus, p2.componente_b.bonus, 'var(--success)')}
|
||||
{renderLinhaComparacao('Total', blocoA1.total, blocoA2.total, 'var(--accent-2)')}
|
||||
{blocoA1.atuacoes && blocoA2.atuacoes && (
|
||||
<>
|
||||
{renderLinhaComparacao('Base', somarAtuacoes(blocoA1.atuacoes, 'base'), somarAtuacoes(blocoA2.atuacoes, 'base'), 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Tempo', somarAtuacoes(blocoA1.atuacoes, 'tempo'), somarAtuacoes(blocoA2.atuacoes, 'tempo'), 'var(--accent-2)')}
|
||||
{renderLinhaComparacao('Bonus', somarAtuacoes(blocoA1.atuacoes, 'bonus'), somarAtuacoes(blocoA2.atuacoes, 'bonus'), 'var(--accent-2)')}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="comparacao-secao">
|
||||
<h3 style={{ color: 'var(--gold)' }}>C - Consultoria</h3>
|
||||
{renderLinhaComparacao('Total', p1.componente_c.total, p2.componente_c.total, 'var(--gold)')}
|
||||
{renderLinhaComparacao('Base', p1.componente_c.base, p2.componente_c.base, 'var(--gold)')}
|
||||
{renderLinhaComparacao('Tempo', p1.componente_c.tempo, p2.componente_c.tempo, 'var(--gold)')}
|
||||
{renderLinhaComparacao('Bonus', p1.componente_c.bonus, p2.componente_c.bonus, 'var(--gold)')}
|
||||
{(p1.componente_c.retorno > 0 || p2.componente_c.retorno > 0) &&
|
||||
renderLinhaComparacao('Retorno', p1.componente_c.retorno, p2.componente_c.retorno, 'var(--gold)')}
|
||||
{renderLinhaComparacao('Total', blocoC1.total, blocoC2.total, 'var(--gold)')}
|
||||
{blocoC1.atuacoes && blocoC2.atuacoes && (
|
||||
<>
|
||||
{renderLinhaComparacao('Base', somarAtuacoes(blocoC1.atuacoes, 'base'), somarAtuacoes(blocoC2.atuacoes, 'base'), 'var(--gold)')}
|
||||
{renderLinhaComparacao('Tempo', somarAtuacoes(blocoC1.atuacoes, 'tempo'), somarAtuacoes(blocoC2.atuacoes, 'tempo'), 'var(--gold)')}
|
||||
{renderLinhaComparacao('Bonus', somarAtuacoes(blocoC1.atuacoes, 'bonus'), somarAtuacoes(blocoC2.atuacoes, 'bonus'), 'var(--gold)')}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="comparacao-secao">
|
||||
<h3 style={{ color: 'var(--bronze)' }}>D - Premiacoes</h3>
|
||||
{renderLinhaComparacao('Total', p1.componente_d.total, p2.componente_d.total, 'var(--bronze)')}
|
||||
{renderLinhaComparacao('Base', p1.componente_d.base, p2.componente_d.base, 'var(--bronze)')}
|
||||
<h3 style={{ color: 'var(--bronze)' }}>D - Premiacoes/Avaliacoes</h3>
|
||||
{renderLinhaComparacao('Total', blocoD1.total, blocoD2.total, 'var(--bronze)')}
|
||||
{blocoD1.atuacoes && blocoD2.atuacoes && (
|
||||
<>
|
||||
{renderLinhaComparacao('Base', somarAtuacoes(blocoD1.atuacoes, 'base'), somarAtuacoes(blocoD2.atuacoes, 'base'), 'var(--bronze)')}
|
||||
{renderLinhaComparacao('Tempo', somarAtuacoes(blocoD1.atuacoes, 'tempo'), somarAtuacoes(blocoD2.atuacoes, 'tempo'), 'var(--bronze)')}
|
||||
{renderLinhaComparacao('Bonus', somarAtuacoes(blocoD1.atuacoes, 'bonus'), somarAtuacoes(blocoD2.atuacoes, 'bonus'), 'var(--bronze)')}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{(c1 || c2) && (
|
||||
<div className="comparacao-secao">
|
||||
<h3>Estatisticas de Consultoria</h3>
|
||||
{renderLinhaComparacao('Eventos', c1?.total_eventos || 0, c2?.total_eventos || 0, 'var(--muted)')}
|
||||
{renderLinhaComparacao('Recentes', c1?.eventos_recentes || 0, c2?.eventos_recentes || 0, 'var(--muted)')}
|
||||
{renderLinhaComparacao('Responsavel', c1?.vezes_responsavel || 0, c2?.vezes_responsavel || 0, 'var(--muted)')}
|
||||
<h3>Dados de Consultoria</h3>
|
||||
{renderLinhaComparacao('Anos Consec.', c1?.anos_consecutivos || 0, c2?.anos_consecutivos || 0, 'var(--muted)')}
|
||||
{renderLinhaComparacao('Retornos', c1?.retornos || 0, c2?.retornos || 0, 'var(--muted)')}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -123,9 +133,9 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
<div className="resumo-item">
|
||||
<span className="resumo-label">Vencedor por pontuacao:</span>
|
||||
<span className="resumo-valor">
|
||||
{p1.pontuacao_total > p2.pontuacao_total
|
||||
{total1 > total2
|
||||
? consultor1.nome.split(' ').slice(0, 2).join(' ')
|
||||
: p2.pontuacao_total > p1.pontuacao_total
|
||||
: total2 > total1
|
||||
? consultor2.nome.split(' ').slice(0, 2).join(' ')
|
||||
: 'Empate'}
|
||||
</span>
|
||||
@@ -133,7 +143,7 @@ const CompararModal = ({ consultor1, consultor2, onClose }) => {
|
||||
<div className="resumo-item">
|
||||
<span className="resumo-label">Diferenca total:</span>
|
||||
<span className="resumo-valor diferenca">
|
||||
{Math.abs(p1.pontuacao_total - p2.pontuacao_total)} pts
|
||||
{Math.abs(total1 - total2)} pts
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user