Frederico Castro 2d4e93f82a 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
2025-12-13 16:41:55 -03:00

Sistema de Ranking de Consultores CAPES

Sistema completo de ranking de consultores CAPES baseado na Minuta Técnica, desenvolvido com arquitetura DDD (Domain-Driven Design).

Arquitetura

Backend (Python + FastAPI + DDD)

  • Domain Layer: Entities, Value Objects, Domain Services
  • Application Layer: Use Cases, DTOs
  • Infrastructure Layer: Repositories, Elasticsearch Client, Oracle Client
  • Interface Layer: FastAPI Routes, Schemas, Dependencies

Frontend (React + Vite)

  • Interface moderna baseada no layout do HTML de referência
  • Componentes reutilizáveis
  • Integração com API via Axios
  • Design responsivo

Estrutura do Projeto

ranking/
├── backend/
│   ├── src/
│   │   ├── domain/
│   │   │   ├── entities/
│   │   │   │   └── consultor.py
│   │   │   ├── value_objects/
│   │   │   │   ├── periodo.py
│   │   │   │   └── pontuacao.py
│   │   │   ├── repositories/
│   │   │   │   └── consultor_repository.py
│   │   │   └── services/
│   │   │       └── calculador_pontuacao.py
│   │   ├── application/
│   │   │   ├── dtos/
│   │   │   │   └── consultor_dto.py
│   │   │   └── use_cases/
│   │   │       ├── obter_ranking.py
│   │   │       └── obter_consultor.py
│   │   ├── infrastructure/
│   │   │   ├── elasticsearch/
│   │   │   │   └── client.py
│   │   │   ├── oracle/
│   │   │   │   └── client.py
│   │   │   └── repositories/
│   │   │       └── consultor_repository_impl.py
│   │   └── interface/
│   │       ├── api/
│   │       │   ├── app.py
│   │       │   ├── routes.py
│   │       │   ├── config.py
│   │       │   └── dependencies.py
│   │       └── schemas/
│   │           └── consultor_schema.py
│   ├── pyproject.toml
│   ├── Dockerfile
│   └── .env.example
│
├── frontend/
│   ├── src/
│   │   ├── components/
│   │   │   ├── Header.jsx
│   │   │   ├── Header.css
│   │   │   ├── ConsultorCard.jsx
│   │   │   └── ConsultorCard.css
│   │   ├── services/
│   │   │   └── api.js
│   │   ├── App.jsx
│   │   ├── App.css
│   │   ├── main.jsx
│   │   └── index.css
│   ├── package.json
│   ├── vite.config.js
│   ├── Dockerfile
│   └── nginx.conf
│
├── docker-compose.yml
├── .env.example
├── .gitignore
└── README.md

Componentes de Pontuação

Componente A: Coordenação CAPES (máx 450 pts)

  • CA: 200 base + 100 tempo + 100 áreas + 20 retorno + 30 bônus = 450
  • CAJ: 150 base + 80 tempo + 100 áreas + 20 retorno + 20 bônus = 370
  • CAJ-MP: 120 base + 60 tempo + 100 áreas + 20 retorno + 15 bônus = 315
  • CAM: 100 base + 50 tempo + 100 áreas + 20 retorno + 10 bônus = 280

Componente B: Coordenação de Programa PPG (máx 180 pts)

  • Base: 70 pts
  • Tempo: 5 pts/ano (máx 50 pts)
  • Programas extras: 20 pts/programa (máx 40 pts)
  • Bônus ativo: 20 pts

Componente C: Consultoria (máx 230 pts)

  • Ativo: 150 pts | Histórico: 100 pts
  • Tempo: 5 pts/ano (máx 50 pts)
  • Eventos: 2 pts/evento (máx 20 pts)
  • Responsável: 5 pts/vez (máx 25 pts)
  • Áreas extras: 10 pts/área (máx 30 pts)

Componente D: Premiações (máx 180 pts)

  • Premiação: 60 pts
  • Avaliação: 40 pts
  • Inscrição: 20 pts

Requisitos

  • Python 3.11+
  • Node.js 18+
  • Docker e Docker Compose (opcional)
  • Acesso ao Elasticsearch (ATUACAPES)
  • Acesso ao Oracle

Setup Local

Backend

  1. Entre no diretório do backend:
cd backend
  1. Crie ambiente virtual e instale dependências:
poetry install
  1. Configure as variáveis de ambiente:
cp .env.example .env
  1. Edite .env com suas credenciais:
ES_URL=http://seu-elasticsearch:9200
ES_INDEX=atuacapes
ES_USER=seu_usuario_elastic
ES_PASSWORD=sua_senha_elastic
ORACLE_USER=seu_usuario
ORACLE_PASSWORD=sua_senha
ORACLE_DSN=host:1521/service_name
  1. Execute o backend:
poetry run python src/main.py

A API estará disponível em http://localhost:8010

Frontend

  1. Entre no diretório do frontend:
cd frontend
  1. Instale dependências:
npm install
  1. Execute em modo desenvolvimento:
npm run dev

O frontend estará disponível em http://localhost:5173

Setup com Docker

  1. Configure as variáveis de ambiente:
cp .env.example .env
  1. Edite .env com suas credenciais

  2. Execute com Docker Compose:

docker-compose up -d
  • Backend: http://localhost:8010
  • Frontend: http://localhost

Endpoints da API

GET /api/v1/ranking

Retorna o ranking resumido de consultores.

Query Parameters:

  • limite (int, default=100): Limite de consultores
  • offset (int, default=0): Offset para paginação
  • componente (str, optional): Filtrar por componente (a, b, c, d)

GET /api/v1/ranking/detalhado

Retorna o ranking completo com todos os detalhes.

Query Parameters:

  • limite (int, default=100): Limite de consultores
  • componente (str, optional): Filtrar por componente (a, b, c, d)

GET /api/v1/consultor/{id_pessoa}

Retorna detalhes completos de um consultor específico.

GET /api/v1/health

Health check da API.

Fontes de Dados

Elasticsearch (ATUACAPES)

  • Índice: atuacapes__1763197236
  • Campos: id, dadosPessoais, atuacoes
  • Tipos de atuação:
    • Coordenação de Área de Avaliação
    • Consultor
    • Premiação Prêmio
    • Avaliação Prêmio
    • Inscrição Prêmio

Oracle (SUCUPIRA_PAINEL)

  • Tabela: VM_COORDENADOR
  • JOIN com: VM_PROGRAMA_SUCUPIRA, VM_AREA_CONHECIMENTO, VM_AREA_AVALIACAO
  • 29.546 registros (4.150 ativos, 25.396 históricos)

Documentação da API

Após iniciar o backend, acesse:

  • Swagger UI: http://localhost:8010/docs
  • ReDoc: http://localhost:8010/redoc

Desenvolvimento

Testes

cd backend
poetry run pytest

Linting

poetry run black src/
poetry run ruff check src/

Build para Produção

Backend:

docker build -t ranking-capes-backend ./backend

Frontend:

cd frontend
npm run build

Referências

  • Documentação dos critérios: .claude/rules/ranking-consultores-capes.md
  • Queries e mapeamentos: .claude/rules/ranking-queries-elasticsearch.md
Description
Sistema de Ranking de Consultores CAPES
Readme 1.3 MiB
Languages
Python 54%
JavaScript 25.8%
CSS 12.9%
HTML 6.2%
Shell 1%