## PR-4 — Ranking da rodada, separado do geral

**PRD:** `docs/prd/pontuacao-e-ranking.md`

**Como** participante competitivo, **quero** ver a classificação de cada
rodada separada da geral, **para** ter o que disputar mesmo quando estou
longe do topo do campeonato.

**Prioridade:** Should — é o que substitui o prêmio por rodada (cortado com o
dinheiro) para segurar quem está em 15º na rodada 10.

**Critérios de aceite:**

- Dado que uma rodada foi apurada, quando abro o ranking daquela rodada, então
  vejo os participantes ordenados pelos pontos **daquela rodada apenas**.
- Dado que estou no ranking da rodada, então fica claro que é da rodada e não
  o geral.
- Dado que escolho uma rodada anterior, então vejo o ranking daquela rodada.
- Dado que a rodada tem jogo pendente de apuração, então o ranking da rodada
  aparece como parcial.
- Dado que a rodada não teve nenhum jogo apurado, então vejo mensagem útil em
  vez de lista vazia.

**Tasks:**

_Backend_
- [x] `BE-1` Endpoint de ranking por rodada (depende de PR-1 BE-3)
- [x] `BE-2` Indicar se a rodada está parcial ou completamente apurada (depende de BE-1)
- [x] `BE-3` Autorização e paginação equivalentes ao ranking geral (depende de BE-1)

_Mobile_
- [x] `FE-1` Tela de ranking da rodada, com seleção de rodada (depende de BE-1)
- [x] `FE-2` Distinção visual clara entre ranking da rodada e geral, para não confundir com PR-3
- [x] `FE-3` Estados: rodada sem apuração, rodada parcial, erro com retry

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano em rodada parcial, rodada completa e rodada sem jogo apurado

**Riscos/Dependências:**

- Depende de PR-1 e PR-3.
- **Confundir ranking de rodada com geral é o risco de produto aqui** — um
  participante que se acha em 1º no geral quando está em 1º na rodada vai
  reclamar depois.
- O desempate (PR-5) também se aplica dentro da rodada.

- **06/08:** `FE-1` fica aberta: a tela alterna entre geral e a rodada **atual**
  do bolão, mas ainda não tem seletor de rodada arbitrária. O endpoint já aceita
  qualquer rodada (`BE-1`), então falta só o seletor.

- **06/08:** seletor de rodada feito, cobrindo todo o intervalo do bolão.
  Verificado em device com a faixa "Rodada parcial: 9 de 10 jogos apurados".

- **07/08 — QA:** plano em `docs/testes/PR-4-plano.md`, execução em
  `docs/testes/PR-4-execucao.md` (**10/10 ✅**). Dois casos novos: rodada sem
  nenhum jogo apurado tem texto próprio (diferente de "ranking vazio" do geral) e
  o custo do ranking da rodada também é constante em relação à galera.
- Registrado: o risco desta story é **social** — confundir a liderança da rodada
  com a do bolão. Os casos garantem que uma visão exclui a outra na tela.
