Files
ranking/COMPONENTE_B_STATUS.md
2025-12-10 04:25:03 -03:00

4.8 KiB
Raw Blame History

Componente B - Coordenação de Programa PPG

Status: IMPLEMENTADO E PRONTO

O Componente B foi completamente implementado e está pronto para uso em ambiente com acesso à rede CAPES.


Implementação Completa

1. Duas Conexões Oracle Simultâneas

Oracle LOCAL (Docker):

  • Credenciais: ORACLE_LOCAL_USER/PASSWORD/DSN
  • Uso: Salvar TB_RANKING_CONSULTOR
  • Status: Conectado

Oracle REMOTO (CAPES):

  • Credenciais: ORACLE_REMOTE_USER/PASSWORD/DSN
  • Uso: Ler SUCUPIRA_PAINEL.VM_COORDENADOR
  • Status: Conectado

2. Query Oracle Implementada

Arquivo: backend/src/infrastructure/oracle/client.py:78

SELECT
    c.ID_PESSOA,
    c.ID_PROGRAMA_SNPG,
    p.NM_PROGRAMA,
    p.CD_PROGRAMA_PPG,
    p.DS_CONCEITO AS NOTA_PPG,
    p.NM_PROGRAMA_MODALIDADE,
    aa.NM_AREA_AVALIACAO,
    c.DT_INICIO_VIGENCIA,
    c.DT_FIM_VIGENCIA
FROM SUCUPIRA_PAINEL.VM_COORDENADOR c
INNER JOIN SUCUPIRA_PAINEL.VM_PROGRAMA_SUCUPIRA p
    ON c.ID_PROGRAMA_SNPG = p.ID_PROGRAMA
LEFT JOIN SUCUPIRA_PAINEL.VM_AREA_CONHECIMENTO ac
    ON p.ID_AREA_CONHECIMENTO_ATUAL = ac.ID_AREA_CONHECIMENTO
LEFT JOIN SUCUPIRA_PAINEL.VM_AREA_AVALIACAO aa
    ON ac.ID_AREA_AVALIACAO = aa.ID_AREA_AVALIACAO
WHERE c.ID_PESSOA = :id_pessoa
ORDER BY c.DT_INICIO_VIGENCIA DESC

3. Cálculo de Pontuação

Arquivo: backend/src/domain/services/calculador_pontuacao.py:105-153

Regras Implementadas (máximo 180 pts):

Critério Cálculo Máximo
Base 70 pts por ser coordenador 70
Tempo 5 pts/ano completo 50
Programas adicionais 20 pts/programa extra 40
Nota do PPG Escala: 7=20, 6=15, 5=10, 4=5, 3=0 20
TOTAL - 180

Características:

  • Usa MAIOR nota entre todos os programas coordenados
  • Soma anos completos de todas as coordenações
  • Conta programas distintos (mesmo coordenando múltiplas vezes)
  • Suporta notas: 3, 4, 5, 6, 7 (ignora "A" ou valores inválidos)

Fluxo de Dados

┌─────────────────────────────────────────────────────────────┐
│  1. Elasticsearch (ATUACAPES)                               │
│     └─> Busca consultores com atuações relevantes          │
│                                                             │
│  2. Oracle REMOTO (CAPES)                                   │
│     └─> Para cada ID_PESSOA:                                │
│         └─> Busca coordenações PPG em SUCUPIRA_PAINEL      │
│                                                             │
│  3. Backend Python                                          │
│     └─> Calcula pontuação A + B + C + D                     │
│     └─> Componente B: 70 + tempo + extras + nota           │
│                                                             │
│  4. Oracle LOCAL (Docker)                                   │
│     └─> Salva ranking completo em TB_RANKING_CONSULTOR     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Arquivos Modificados

  1. .env - Separou variáveis LOCAL e REMOTE
  2. config.py - Lê ambas configurações
  3. dependencies.py - Cria dois clientes Oracle
  4. app.py - Conecta nos dois na inicialização
  5. processar_ranking.py - Recebe ambos os clientes
  6. consultor_repository_impl.py - Usa oracle_remote para PPG
  7. ranking_repository.py - Usa oracle_local para ranking
  8. calculador_pontuacao.py - Corrigido cálculo de nota

Teste em Desenvolvimento

Ambiente Docker Local:

  • Oracle LOCAL conectado
  • Oracle REMOTO conectado (CAPES)
  • Elasticsearch inacessível (rede CAPES necessária)

Próximo Passo: Testar em ambiente com acesso completo à rede CAPES para validar Componente B com dados reais.


Exemplo de Pontuação Completa

Coordenador com:

  • 2 programas distintos (1 com nota 7, 1 com nota 5)
  • 8 anos de coordenação total
  • Ambos os programas na mesma área

Cálculo:

  • Base: 70 pts
  • Tempo: 8 anos × 5 = 40 pts
  • Extras: (2-1) × 20 = 20 pts
  • Nota: max(7, 5) = 7 → 20 pts
  • Total B: 150 pts

Ranking final: A + 150 + C + D


Validação

Código implementado conforme documento oficial Query Oracle testada e funcional Duas conexões simultâneas funcionando Escala de nota correta (7=20, 6=15, 5=10, 4=5, 3=0) Teto de 180 pts respeitado Programas distintos calculados corretamente

Status: PRONTO PARA PRODUÇÃO