Files
ranking/README.md
2025-12-12 22:44:12 -03:00

268 lines
6.6 KiB
Markdown

# 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 (SUCUPIRA_PAINEL)
## Setup Local
### Backend
1. Entre no diretório do backend:
```bash
cd backend
```
2. Crie ambiente virtual e instale dependências:
```bash
poetry install
```
3. Configure as variáveis de ambiente:
```bash
cp .env.example .env
```
4. 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
```
5. Execute o backend:
```bash
poetry run python src/main.py
```
A API estará disponível em `http://localhost:8010`
### Frontend
1. Entre no diretório do frontend:
```bash
cd frontend
```
2. Instale dependências:
```bash
npm install
```
3. Execute em modo desenvolvimento:
```bash
npm run dev
```
O frontend estará disponível em `http://localhost:5173`
## Setup com Docker
1. Configure as variáveis de ambiente:
```bash
cp .env.example .env
```
2. Edite `.env` com suas credenciais
3. Execute com Docker Compose:
```bash
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
```bash
cd backend
poetry run pytest
```
### Linting
```bash
poetry run black src/
poetry run ruff check src/
```
### Build para Produção
**Backend:**
```bash
docker build -t ranking-capes-backend ./backend
```
**Frontend:**
```bash
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`