## CC-9 — Remover participante do bolão

**PRD:** `docs/prd/criacao-e-convite.md`

**Como** administrador, **quero** remover alguém do bolão, **para** resolver
quem entrou por engano ou não deveria estar lá.

**Prioridade:** Should — resolve um caso pontual do admin; nenhuma rodada
depende disso.

**Critérios de aceite:**

- Dado que sou admin, quando removo um participante, então ele para de palpitar
  e sai do ranking ativo.
- Dado que removi alguém, então **os palpites e pontos já apurados dele
  permanecem no histórico do bolão**, e a pontuação de quem ficou **não é
  recalculada** — mesma regra da saída voluntária (CV-4).
- Dado que fui removido, quando abro o link do convite, então a entrada é
  recusada — igual a quem saiu por vontade própria.
- Dado que sou participante comum, quando tento remover alguém, então a
  requisição é recusada.
- Dado que tento remover o criador do bolão, então a ação é recusada — ele é
  admin permanente (CC-8).
- Dado que fui removido, então paro de receber lembrete de prazo daquele bolão.

**Tasks:**

_Backend_
- [x] `BE-1` Endpoint de remoção de participante, com autorização de admin (depende de CC-1 BE-2)
- [x] `BE-2` Reaproveitar a mesma regra de encerramento de vínculo da saída voluntária, preservando histórico (depende de CV-4 BE-1, CV-4 BE-2)
- [x] `BE-3` Recusar a remoção do criador do bolão (depende de CC-8 BE-1)
- [x] `BE-4` Recusar reentrada de quem foi removido (depende de CV-4 BE-5)
- [x] `BE-5` Parar os lembretes de prazo do removido (depende de PP-8 BE-1)

_Mobile_
- [x] `FE-1` Ação de remover na lista de participantes, visível só para admin (depende de BE-1, CC-7 FE-1)
- [x] `FE-2` Confirmação antes de remover, avisando que é definitivo (depende de BE-1)
- [x] `FE-3` Ação de remover **indisponível** para o criador, com o motivo visível na linha dele (depende de BE-3)
  - **Texto trocado em 07/08 por decisão do dono.** A redação anterior ("mensagem
    clara na recusa") descrevia uma recusa que a UI nunca alcança, porque a ação
    não é oferecida ao criador. Oferecer e recusar ensinaria o admin a tocar em
    algo que sempre falha.

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano tentando remover o criador, como participante comum, e conferindo que o ranking de quem ficou não muda

**Riscos/Dependências:**

- **Decidido em 03/08: os palpites do removido ficam no histórico**, igual à
  saída voluntária. Isso torna `BE-2` um reuso de CV-4, não uma
  implementação nova — e evita que o admin possa apagar histórico alheio.
- Depende de CV-4, CC-7 e CC-8.
- Remoção é irreversível (não há reentrada), então a confirmação de `FE-2` é
  requisito, não polimento.

- **06/08:** `FE-3` ficou aberta de propósito — a ação nem aparece para o criador,
  então a recusa era inalcançável pela UI.
- **07/08 — resolvida:** o dono escolheu manter a ação indisponível e **mostrar o
  motivo**. A linha do criador agora traz "criou o bolão — não pode ser rebaixado
  nem removido", visível só para quem administra (para quem não administra seria
  ruído numa lista que ele só lê). O `ApiError` do servidor continua sendo exibido
  se a recusa acontecer por outro caminho.
- A explicação **acompanha** o estado do palpite, não o substitui: saber quem falta
  palpitar é o que o admin vem fazer nessa tela (`PP-9`). A primeira versão
  substituía, e o teste de `PP-9` pegou na hora.

- **06/08 — QA:** plano em `docs/testes/CC-9-plano.md`, execução em
  `docs/testes/CC-9-execucao.md` (**12/12 ✅**). Seis casos novos, todos verdes:
  ponto de quem ficou não é recalculado, participante comum não remove, removido
  não reentra, removido não recebe lembrete, remover quem já saiu não reescreve a
  data de saída, e auto-remoção é mandada para a ação de sair.
- `FE-3` segue aberta pela decisão pendente do PO já registrada acima — a recusa
  ao remover o criador é inalcançável pela UI.
