## CV-3 — Encerramento antecipado pelo admin

**PRD:** `docs/prd/ciclo-de-vida-do-bolao.md`

**Como** administrador, **quero** poder encerrar o bolão antes do fim das
rodadas, **para** resolver o bolão que travou — por jogo adiado sem data, ou
porque a galera abandonou.

**Prioridade:** Should — é a saída para o estado indefinido; sem ela um bolão
travado fica travado para sempre.

**Critérios de aceite:**

- Dado que sou admin, quando encerro o bolão antecipadamente, então ele é
  encerrado com o ranking apurado até aquele momento.
- Dado que vou encerrar antecipadamente, então recebo confirmação explícita
  antes, dizendo que a ação não tem volta e que jogos não apurados ficam sem
  pontuar.
- Dado que o bolão foi encerrado antecipadamente, então isso fica visível a
  todos — não parece um encerramento normal.
- Dado que sou participante comum, quando tento encerrar, então a requisição é
  recusada.
- Dado que existem jogos com prazo aberto, quando encerro, então eles são
  fechados e não aceitam mais palpite.

**Tasks:**

_Backend_
- [x] `BE-1` Endpoint de encerramento antecipado, com autorização de admin (depende de CV-1 BE-3)
- [x] `BE-2` Marcar o encerramento como antecipado, distinguível do encerramento normal (depende de BE-1)
- [x] `BE-3` Fechar jogos com prazo aberto ao encerrar (depende de BE-1)

_Mobile_
- [x] `FE-1` Ação de encerrar antecipadamente, visível só para admin (depende de BE-1)
- [x] `FE-2` Confirmação antes de encerrar, explicando que é irreversível (depende de BE-1)
- [x] `FE-3` Indicar na tela de encerramento que foi antecipado (depende de BE-2)

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano com jogos abertos, como participante comum, e conferindo a marca de antecipado

**Riscos/Dependências:**

- Depende de CV-1.
- **É ação irreversível de admin** — a confirmação de FE-2 não é polimento, é
  requisito.
- Um admin encerrando o bolão que ele mesmo está perdendo é o cenário de abuso
  óbvio. Não foi tratado no PRD; vale decidir se o encerramento antecipado
  deveria exigir algo mais (aviso ao grupo, prazo de contestação).

- **07/08 — QA:** plano em `docs/testes/CV-3-plano.md`, execução em
  `docs/testes/CV-3-execucao.md` (**9/9 ✅**). Dois casos novos: palpite recusado
  depois do encerramento (com o motivo certo — "encerrado", não "prazo fechado")
  e segundo encerramento antecipado recusado com 409.
- Registrado: a assimetria é proposital. Encerramento **normal** é idempotente —
  é assim que o app relê o campeão; **antecipado** recusa a segunda vez, porque
  repetir reescreveria a data e a marca do título.
