diff --git a/backend/scripts/validar_ranking.py b/backend/scripts/validar_ranking.py index f926df7..a35efa3 100644 --- a/backend/scripts/validar_ranking.py +++ b/backend/scripts/validar_ranking.py @@ -42,31 +42,31 @@ CRITERIOS_OFICIAIS = { "CAJ": {"base": 150, "teto": 370, "tempo": 8, "teto_tempo": 80, "bonus_atual": 20, "bonus_retorno": 15}, "CAJ_MP": {"base": 120, "teto": 315, "tempo": 6, "teto_tempo": 60, "bonus_atual": 15, "bonus_retorno": 10}, "CAM": {"base": 100, "teto": 280, "tempo": 5, "teto_tempo": 50, "bonus_atual": 20, "bonus_retorno": 10}, - "CONS_ATIVO": {"base": 150, "teto": 230, "tempo": 5, "teto_tempo": 50, "bonus_continuidade": 20, "bonus_retorno": 15}, - "CONS_HIST": {"base": 100, "teto": 230, "tempo": 5, "teto_tempo": 50, "bonus_continuidade": 20}, - "CONS_FALECIDO": {"base": 100, "teto": 230, "tempo": 0, "teto_tempo": 0, "bonus_continuidade": 20}, + "PPG_COORD": {"base": 0, "teto": 0, "tempo": 0, "teto_tempo": 0, "bonus_atual": 15, "bonus_retorno": 10, "bonus_continuidade": 15}, + "CONS_ATIVO": {"base": 150, "teto": 230, "tempo": 5, "teto_tempo": 50, "bonus_atual": 20, "bonus_retorno": 15, "bonus_continuidade": 20}, + "CONS_HIST": {"base": 100, "teto": 230, "tempo": 5, "teto_tempo": 50, "bonus_retorno": 20, "bonus_continuidade": 20}, + "CONS_FALECIDO": {"base": 100, "teto": 230, "tempo": 5, "teto_tempo": 50, "bonus_continuidade": 20}, "INSC_AUTOR": {"base": 10, "teto": 20}, - "INSC_INST": {"base": 30, "teto": 60}, + "INSC_INST_AUTOR": {"base": 20, "teto": 50}, "AVAL_COMIS_PREMIO": {"base": 30, "teto": 60}, - "AVAL_COMIS_GP": {"base": 50, "teto": 80}, - "COORD_COMIS_PREMIO": {"base": 50, "teto": 100}, - "COORD_COMIS_GP": {"base": 60, "teto": 120}, - "BOL_BPQ_SUPERIOR": {"base": 30, "teto": 60}, - "BOL_BPQ_INTERMEDIARIO": {"base": 50, "teto": 100}, - "PREMIACAO": {"base": 100, "teto": 180}, - "PREMIACAO_GP": {"base": 50, "teto": 60}, - "MENCAO": {"base": 30, "teto": 30}, + "AVAL_COMIS_GP": {"base": 40, "teto": 80}, + "COORD_COMIS_PREMIO": {"base": 40, "teto": 100}, + "COORD_COMIS_GP": {"base": 50, "teto": 120}, + "BOL_BPQ_NIVEL": {"base": 30, "teto": 60}, + "PREMIACAO_GP_AUTOR": {"base": 100, "teto": 300}, + "PREMIACAO_AUTOR": {"base": 50, "teto": 150}, + "MENCAO_AUTOR": {"base": 30, "teto": 90}, "EVENTO": {"base": 1, "teto": 5}, - "PROJ": {"base": 10, "teto": 40}, - "ORIENT_POS_DOC": {"base": 15, "teto": 100}, - "ORIENT_TESE": {"base": 10, "teto": 50}, - "ORIENT_DISS": {"base": 5, "teto": 25}, - "CO_ORIENT_POS_DOC": {"base": 7, "teto": 35}, - "CO_ORIENT_TESE": {"base": 5, "teto": 25}, - "CO_ORIENT_DISS": {"base": 3, "teto": 15}, - "MB_BANCA_POS_DOC": {"base": 3, "teto": 15}, - "MB_BANCA_TESE": {"base": 3, "teto": 15}, - "MB_BANCA_DISS": {"base": 2, "teto": 10}, + "PROJ": {"base": 10, "teto": 30}, + "ORIENT_POS_DOC": {"base": 0, "teto": 0}, + "ORIENT_TESE": {"base": 0, "teto": 0}, + "ORIENT_DISS": {"base": 0, "teto": 0}, + "CO_ORIENT_POS_DOC": {"base": 0, "teto": 0}, + "CO_ORIENT_TESE": {"base": 0, "teto": 0}, + "CO_ORIENT_DISS": {"base": 0, "teto": 0}, + "MB_BANCA_POS_DOC": {"base": 0, "teto": 0}, + "MB_BANCA_TESE": {"base": 0, "teto": 0}, + "MB_BANCA_DISS": {"base": 0, "teto": 0}, } @@ -205,8 +205,7 @@ def verificar_criterios_codigo() -> Tuple[bool, List[str]]: for codigo, oficial in CRITERIOS_OFICIAIS.items(): if codigo not in CRITERIOS: - if codigo not in ["BOL_BPQ_SUP", "BOL_BPQ_INT"]: - divergencias.append(f"{codigo}: não existe no código") + divergencias.append(f"{codigo}: não existe no código") continue impl = CRITERIOS[codigo] diff --git a/backend/src/domain/value_objects/criterios_pontuacao.py b/backend/src/domain/value_objects/criterios_pontuacao.py index 27156ae..32e912c 100644 --- a/backend/src/domain/value_objects/criterios_pontuacao.py +++ b/backend/src/domain/value_objects/criterios_pontuacao.py @@ -5,8 +5,10 @@ from enum import Enum class Bloco(Enum): A = "A" + B = "B" C = "C" D = "D" + E = "E" class TipoAtuacao(Enum): @@ -33,6 +35,7 @@ class CriterioPontuacao: teto_recorrencia: int = 0 bonus_recorrencia_participacao: int = 0 teto_recorrencia_participacao: int = 0 + gera_selo: bool = False CRITERIOS: Dict[str, CriterioPontuacao] = { @@ -86,17 +89,21 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { ), "PPG_COORD": CriterioPontuacao( codigo="PPG_COORD", - bloco=Bloco.A, + bloco=Bloco.E, tipo=TipoAtuacao.FUNCAO, base=0, teto=0, pontua_tempo=True, multiplicador_tempo=0, teto_tempo=0, + bonus_atualidade=15, + bonus_retorno=10, + bonus_continuidade_8anos=15, + gera_selo=True, ), "CONS_ATIVO": CriterioPontuacao( codigo="CONS_ATIVO", - bloco=Bloco.C, + bloco=Bloco.B, tipo=TipoAtuacao.FUNCAO, base=150, teto=230, @@ -109,7 +116,7 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { ), "CONS_HIST": CriterioPontuacao( codigo="CONS_HIST", - bloco=Bloco.C, + bloco=Bloco.B, tipo=TipoAtuacao.FUNCAO, base=100, teto=230, @@ -121,18 +128,18 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { ), "CONS_FALECIDO": CriterioPontuacao( codigo="CONS_FALECIDO", - bloco=Bloco.C, + bloco=Bloco.B, tipo=TipoAtuacao.FUNCAO, base=100, teto=230, - pontua_tempo=False, - multiplicador_tempo=0, - teto_tempo=0, + pontua_tempo=True, + multiplicador_tempo=5, + teto_tempo=50, bonus_continuidade_8anos=20, ), "INSC_AUTOR": CriterioPontuacao( codigo="INSC_AUTOR", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.FUNCAO, base=10, teto=20, @@ -141,23 +148,16 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { ), "INSC_INST_AUTOR": CriterioPontuacao( codigo="INSC_INST_AUTOR", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.FUNCAO, base=20, teto=50, bonus_recorrencia_participacao=5, teto_recorrencia_participacao=10, ), - "INSC_INST": CriterioPontuacao( - codigo="INSC_INST", - bloco=Bloco.D, - tipo=TipoAtuacao.FUNCAO, - base=30, - teto=60, - ), "AVAL_COMIS_PREMIO": CriterioPontuacao( codigo="AVAL_COMIS_PREMIO", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PAPEL, base=30, teto=60, @@ -166,107 +166,62 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { ), "AVAL_COMIS_GP": CriterioPontuacao( codigo="AVAL_COMIS_GP", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PAPEL, - base=50, + base=40, teto=80, bonus_recorrencia_anual=3, teto_recorrencia=20, ), "COORD_COMIS_PREMIO": CriterioPontuacao( codigo="COORD_COMIS_PREMIO", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.FUNCAO, - base=50, + base=40, teto=100, bonus_recorrencia_anual=4, teto_recorrencia=20, ), "COORD_COMIS_GP": CriterioPontuacao( codigo="COORD_COMIS_GP", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.FUNCAO, - base=60, + base=50, teto=120, bonus_recorrencia_anual=6, teto_recorrencia=20, ), - "BOL_BPQ_SUPERIOR": CriterioPontuacao( - codigo="BOL_BPQ_SUPERIOR", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=30, - teto=60, - ), - "BOL_BPQ_INTERMEDIARIO": CriterioPontuacao( - codigo="BOL_BPQ_INTERMEDIARIO", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=50, - teto=100, - ), - "BOL_BPQ_SUP": CriterioPontuacao( - codigo="BOL_BPQ_SUP", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=30, - teto=60, - ), - "BOL_BPQ_INT": CriterioPontuacao( - codigo="BOL_BPQ_INT", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=50, - teto=100, - ), "BOL_BPQ_NIVEL": CriterioPontuacao( codigo="BOL_BPQ_NIVEL", bloco=Bloco.D, tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, base=30, teto=60, - ), - "PREMIACAO": CriterioPontuacao( - codigo="PREMIACAO", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=100, - teto=180, - ), - "PREMIACAO_GP": CriterioPontuacao( - codigo="PREMIACAO_GP", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=50, - teto=60, + gera_selo=True, ), "PREMIACAO_GP_AUTOR": CriterioPontuacao( codigo="PREMIACAO_GP_AUTOR", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, base=100, teto=300, + gera_selo=True, ), "PREMIACAO_AUTOR": CriterioPontuacao( codigo="PREMIACAO_AUTOR", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, base=50, teto=150, - ), - "MENCAO": CriterioPontuacao( - codigo="MENCAO", - bloco=Bloco.D, - tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, - base=30, - teto=30, + gera_selo=True, ), "MENCAO_AUTOR": CriterioPontuacao( codigo="MENCAO_AUTOR", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, base=30, teto=90, + gera_selo=True, ), "EVENTO": CriterioPontuacao( codigo="EVENTO", @@ -282,72 +237,193 @@ CRITERIOS: Dict[str, CriterioPontuacao] = { bloco=Bloco.D, tipo=TipoAtuacao.PARTICIPACAO, base=10, - teto=40, + teto=30, bonus_recorrencia_participacao=2, teto_recorrencia_participacao=10, ), + "IDIOMA_BILINGUE": CriterioPontuacao( + codigo="IDIOMA_BILINGUE", + bloco=Bloco.D, + tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, + base=0, + teto=0, + gera_selo=True, + ), + "IDIOMA_MULTILINGUE": CriterioPontuacao( + codigo="IDIOMA_MULTILINGUE", + bloco=Bloco.D, + tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, + base=0, + teto=0, + gera_selo=True, + ), + "TITULACAO_MESTRE": CriterioPontuacao( + codigo="TITULACAO_MESTRE", + bloco=Bloco.D, + tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, + base=0, + teto=0, + gera_selo=True, + ), + "TITULACAO_DOUTOR": CriterioPontuacao( + codigo="TITULACAO_DOUTOR", + bloco=Bloco.D, + tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, + base=0, + teto=0, + gera_selo=True, + ), + "TITULACAO_POS_DOUTOR": CriterioPontuacao( + codigo="TITULACAO_POS_DOUTOR", + bloco=Bloco.D, + tipo=TipoAtuacao.COMPETENCIA_RECONHECIMENTO, + base=0, + teto=0, + gera_selo=True, + ), "ORIENT_POS_DOC": CriterioPontuacao( codigo="ORIENT_POS_DOC", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=15, - teto=100, + base=0, + teto=0, + gera_selo=True, + ), + "ORIENT_POS_DOC_PREM": CriterioPontuacao( + codigo="ORIENT_POS_DOC_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "ORIENT_TESE": CriterioPontuacao( codigo="ORIENT_TESE", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=10, - teto=50, + base=0, + teto=0, + gera_selo=True, + ), + "ORIENT_TESE_PREM": CriterioPontuacao( + codigo="ORIENT_TESE_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "ORIENT_DISS": CriterioPontuacao( codigo="ORIENT_DISS", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=5, - teto=25, + base=0, + teto=0, + gera_selo=True, + ), + "ORIENT_DISS_PREM": CriterioPontuacao( + codigo="ORIENT_DISS_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "CO_ORIENT_POS_DOC": CriterioPontuacao( codigo="CO_ORIENT_POS_DOC", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=7, - teto=35, + base=0, + teto=0, + gera_selo=True, + ), + "CO_ORIENT_POS_DOC_PREM": CriterioPontuacao( + codigo="CO_ORIENT_POS_DOC_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "CO_ORIENT_TESE": CriterioPontuacao( codigo="CO_ORIENT_TESE", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=5, - teto=25, + base=0, + teto=0, + gera_selo=True, + ), + "CO_ORIENT_TESE_PREM": CriterioPontuacao( + codigo="CO_ORIENT_TESE_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "CO_ORIENT_DISS": CriterioPontuacao( codigo="CO_ORIENT_DISS", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=3, - teto=15, + base=0, + teto=0, + gera_selo=True, + ), + "CO_ORIENT_DISS_PREM": CriterioPontuacao( + codigo="CO_ORIENT_DISS_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "MB_BANCA_POS_DOC": CriterioPontuacao( codigo="MB_BANCA_POS_DOC", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=3, - teto=15, + base=0, + teto=0, + gera_selo=True, + ), + "MB_BANCA_POS_DOC_PREM": CriterioPontuacao( + codigo="MB_BANCA_POS_DOC_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "MB_BANCA_TESE": CriterioPontuacao( codigo="MB_BANCA_TESE", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=3, - teto=15, + base=0, + teto=0, + gera_selo=True, + ), + "MB_BANCA_TESE_PREM": CriterioPontuacao( + codigo="MB_BANCA_TESE_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), "MB_BANCA_DISS": CriterioPontuacao( codigo="MB_BANCA_DISS", - bloco=Bloco.D, + bloco=Bloco.C, tipo=TipoAtuacao.PARTICIPACAO, - base=2, - teto=10, + base=0, + teto=0, + gera_selo=True, + ), + "MB_BANCA_DISS_PREM": CriterioPontuacao( + codigo="MB_BANCA_DISS_PREM", + bloco=Bloco.C, + tipo=TipoAtuacao.PARTICIPACAO, + base=0, + teto=0, + gera_selo=True, ), } diff --git a/backend/src/infrastructure/ranking_store.py b/backend/src/infrastructure/ranking_store.py index 3de58a2..c41d259 100644 --- a/backend/src/infrastructure/ranking_store.py +++ b/backend/src/infrastructure/ranking_store.py @@ -42,33 +42,14 @@ def extrair_selos_entry(detalhes: Dict[str, Any]) -> Set[str]: selos.add("BPQ") for prem in detalhes.get("premiacoes", []): - papel = (prem.get("papel") or "").lower() codigo = prem.get("codigo", "") - if codigo == "PREMIACAO": - tipo_prem = "GP" - elif codigo == "PREMIACAO_GP": - tipo_prem = "PREMIO" - elif codigo == "MENCAO": - tipo_prem = "MENCAO" - elif codigo == "PREMIACAO_GP_AUTOR": + if codigo == "PREMIACAO_GP_AUTOR": selos.add("AUTOR_GP") - continue elif codigo == "PREMIACAO_AUTOR": selos.add("AUTOR_PREMIO") - continue elif codigo == "MENCAO_AUTOR": selos.add("AUTOR_MENCAO") - continue - else: - continue - - if "autor" in papel: - selos.add(f"AUTOR_{tipo_prem}") - elif "orientador" in papel: - selos.add(f"ORIENT_{tipo_prem}") - elif "coorientador" in papel or "co-orientador" in papel: - selos.add(f"COORIENT_{tipo_prem}") for orient in detalhes.get("orientacoes", []): codigo = orient.get("codigo", "") diff --git a/backend/src/infrastructure/repositories/consultor_repository_impl.py b/backend/src/infrastructure/repositories/consultor_repository_impl.py index 99149d7..25f5250 100644 --- a/backend/src/infrastructure/repositories/consultor_repository_impl.py +++ b/backend/src/infrastructure/repositories/consultor_repository_impl.py @@ -330,23 +330,12 @@ class ConsultorRepositoryImpl(ConsultorRepository): nome_lower = str(nome_premio).lower() tipo_norm = self._inferir_premiacao_tipo(f"{tipo_lower} {nome_lower}") - papel_lower = str(papel or "").lower() - is_autor = "autor" in papel_lower - - if is_autor: - if tipo_norm == "GP": - codigo = "PREMIACAO_GP_AUTOR" - elif tipo_norm == "MENCAO": - codigo = "MENCAO_AUTOR" - else: - codigo = "PREMIACAO_AUTOR" + if tipo_norm == "GP": + codigo = "PREMIACAO_GP_AUTOR" + elif tipo_norm == "MENCAO": + codigo = "MENCAO_AUTOR" else: - if tipo_norm == "GP": - codigo = "PREMIACAO" - elif tipo_norm == "MENCAO": - codigo = "MENCAO" - else: - codigo = "PREMIACAO_GP" + codigo = "PREMIACAO_AUTOR" premiacoes.append(Premiacao( codigo=codigo, @@ -368,16 +357,8 @@ class ConsultorRepositoryImpl(ConsultorRepository): nivel = dados.get("nivel", "") or dados.get("categoria", "") or "" area = dados.get("areaConhecimento", "") or "" - nivel_lower = nivel.lower() - if not nivel_lower: - codigo = "BOL_BPQ_NIVEL" - elif "1d" in nivel_lower or "2" in nivel_lower: - codigo = "BOL_BPQ_INT" - else: - codigo = "BOL_BPQ_SUP" - bolsas.append(BolsaCNPQ( - codigo=codigo, + codigo="BOL_BPQ_NIVEL", nivel=nivel, area=area, )) diff --git a/docker-compose.yml b/docker-compose.yml index d999c7b..1e21a73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,7 @@ services: - VITE_HOST_ATUACAPES=${HOST_ATUACAPES:-https://atuacapes.capes.gov.br} volumes: - ./frontend/src:/app/src + - ./frontend/public:/app/public - ./frontend/index.html:/app/index.html - ./frontend/vite.config.js:/app/vite.config.js - /etc/localtime:/etc/localtime:ro diff --git a/frontend/public/logo_capes.png b/frontend/public/logo_capes.png new file mode 100644 index 0000000..622e45f Binary files /dev/null and b/frontend/public/logo_capes.png differ diff --git a/frontend/src/components/CompararModal.jsx b/frontend/src/components/CompararModal.jsx index f2f5285..74c8dac 100644 --- a/frontend/src/components/CompararModal.jsx +++ b/frontend/src/components/CompararModal.jsx @@ -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 }); diff --git a/frontend/src/components/ConsultorCard.css b/frontend/src/components/ConsultorCard.css index 9b77253..8e97c07 100644 --- a/frontend/src/components/ConsultorCard.css +++ b/frontend/src/components/ConsultorCard.css @@ -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 { diff --git a/frontend/src/components/ConsultorCard.jsx b/frontend/src/components/ConsultorCard.jsx index db70b69..e86d587 100644 --- a/frontend/src/components/ConsultorCard.jsx +++ b/frontend/src/components/ConsultorCard.jsx @@ -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 }) => ( diff --git a/frontend/src/components/Header.css b/frontend/src/components/Header.css index 98a925d..884a371 100644 --- a/frontend/src/components/Header.css +++ b/frontend/src/components/Header.css @@ -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; diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx index 4d627f9..802178c 100644 --- a/frontend/src/components/Header.jsx +++ b/frontend/src/components/Header.jsx @@ -11,7 +11,7 @@ const Header = ({ total }) => {
- CAPES + CAPES

Ranking de Consultores CAPES