diff --git a/backend/src/infrastructure/repositories/consultor_repository_impl.py b/backend/src/infrastructure/repositories/consultor_repository_impl.py index 25f5250..4b50234 100644 --- a/backend/src/infrastructure/repositories/consultor_repository_impl.py +++ b/backend/src/infrastructure/repositories/consultor_repository_impl.py @@ -172,9 +172,11 @@ class ConsultorRepositoryImpl(ConsultorRepository): or self._parse_date(dc.get("inicioSituacao")) or self._parse_date(c.get("inicio")) ) + situacao_texto = (dc.get("situacaoConsultoria") or "").lower() + is_situacao_ativa = "atividade" in situacao_texto or "ativo" in situacao_texto fim = ( self._parse_date(dc.get("fimVinculacao")) - or self._parse_date(dc.get("inativacaoSituacao")) + or (self._parse_date(dc.get("inativacaoSituacao")) if not is_situacao_ativa else None) or self._parse_date(c.get("fim")) ) diff --git a/frontend/src/components/Header.css b/frontend/src/components/Header.css index 8cedabb..10fb892 100644 --- a/frontend/src/components/Header.css +++ b/frontend/src/components/Header.css @@ -176,10 +176,12 @@ .table-columns { display: flex; gap: 0.5rem; + align-items: flex-start; } .table-columns .criteria-table { - flex: 1; + flex: 1 1 auto; + margin-top: 0 !important; } .criteria-table { diff --git a/scripts/recarregar_ranking.sh b/scripts/recarregar_ranking.sh new file mode 100755 index 0000000..275acc2 --- /dev/null +++ b/scripts/recarregar_ranking.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +set -euo pipefail + +API_URL="${API_URL:-http://localhost:8010/api/v1}" + +echo "=== Recarregando Ranking de Consultores CAPES ===" +echo "" + +STATUS_CHECK=$(curl -s "${API_URL}/ranking/status") +JA_RODANDO=$(echo "$STATUS_CHECK" | python3 -c "import sys,json; print(json.load(sys.stdin).get('running', False))" 2>/dev/null || echo "False") + +if [ "$JA_RODANDO" = "True" ]; then + echo "[!] Job já em execução - acompanhando progresso existente..." +else + echo "[1/2] Disparando job (limpar_antes=true)..." + RESP=$(curl -s -X POST "${API_URL}/ranking/processar" \ + -H "Content-Type: application/json" \ + -d '{"limpar_antes": true}') + + if echo "$RESP" | grep -q '"sucesso":true'; then + echo " ✓ Job iniciado com sucesso" + else + echo " ✗ Erro ao iniciar job: $RESP" + exit 1 + fi +fi + +echo "" +echo "[2/2] Acompanhando progresso..." +echo "" + +while true; do + STATUS=$(curl -s "${API_URL}/ranking/status") + + RUNNING=$(echo "$STATUS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('running', False))" 2>/dev/null || echo "False") + PROCESSADOS=$(echo "$STATUS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('processados', 0))" 2>/dev/null || echo "0") + TOTAL=$(echo "$STATUS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total', 0))" 2>/dev/null || echo "0") + PROGRESS=$(echo "$STATUS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('progress', 0))" 2>/dev/null || echo "0") + MSG=$(echo "$STATUS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('mensagem', ''))" 2>/dev/null || echo "") + + BARRA="" + PROGRESS_INT=${PROGRESS%.*} + PREENCHIDO=$((PROGRESS_INT / 5)) + VAZIO=$((20 - PREENCHIDO)) + for ((i=0; i/dev/null || echo "{}") +if [ "$STATS" != "{}" ]; then + echo "" + echo "Estatísticas:" + echo "$STATS" | python3 -c " +import sys, json +data = json.load(sys.stdin) +print(f\" Total consultores: {data.get('total_consultores', 'N/A'):,}\") +print(f\" Com pontuação: {data.get('com_pontuacao', 'N/A'):,}\") +print(f\" Pontuação máxima: {data.get('pontuacao_maxima', 'N/A')}\") +print(f\" Pontuação média: {data.get('pontuacao_media', 'N/A'):.2f}\") +" 2>/dev/null || echo " (não foi possível obter estatísticas)" +fi + +echo "" +echo "Pronto!"