## PP-2 — Editar palpite enquanto o prazo estiver aberto

**PRD:** `docs/prd/palpite-e-prazo.md`

**Como** participante competitivo, **quero** alterar meu palpite quantas
vezes quiser até o prazo daquele jogo fechar, **para** ajustar com base em
escalação e lesão, que saem uma hora antes do jogo.

**Prioridade:** Must — decisão explícita do PRD (edição livre até o prazo);
sem isso o casual que errou de dedo perde o jogo.

**Critérios de aceite:**

- Dado que já palpitei num jogo com prazo aberto, quando altero o placar e
  envio, então o palpite novo substitui o anterior e eu vejo a confirmação.
- Dado que alterei o palpite várias vezes, quando o prazo fecha, então vale
  a última versão enviada antes do fechamento.
- Dado que o prazo fechou entre eu abrir a tela e enviar a alteração, então
  o servidor recusa e a tela informa que o prazo fechou, mantendo visível o
  palpite que valeu.
- Dado que tento editar o palpite de outro participante, então a requisição
  é recusada pelo servidor.

**Tasks:**

_Backend_
- [x] `BE-1` Permitir substituição do palpite enquanto o prazo do jogo estiver aberto (depende de PP-1 BE-2)
- [x] `BE-2` Registrar qual versão do palpite valeu no fechamento, para auditoria de disputa (depende de BE-1)
- [x] `BE-3` Autorização: participante só edita o próprio palpite

_Mobile_
- [x] `FE-1` Tela de palpite pré-preenchida com o palpite atual, editável
- [x] `FE-2` Tratar a recusa por prazo vencido como fluxo esperado, mostrando o palpite que valeu (depende de BE-1)

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano, incluindo edição na virada do prazo e edição de palpite alheio

**Riscos/Dependências:**

- Depende de PP-1.
- Corrida na virada do prazo é o caso de borda real: dois envios quase
  simultâneos, um antes e um depois do fechamento.
- Guardar o histórico de versões é o que permite responder "eu mudei antes
  do apito" sem discussão.

- **06/08:** `FE-2` estava incompleta de um jeito que produz briga: a recusa por
  prazo aparecia como aviso, mas o valor **recusado** continuava nos campos. O
  participante ficava acreditando num palpite que não conta e só descobriria no
  extrato. Agora o valor recusado é descartado, o campo volta ao que está salvo
  no servidor, e a mensagem diz "vale o palpite que estava salvo".

- **07/08 — QA:** plano em `docs/testes/PP-2-plano.md`, execução em
  `docs/testes/PP-2-execucao.md` (**9/9 ✅**). Dois casos novos: a apuração usa a
  **última** versão enviada antes do apito (e a tentativa depois do apito não
  muda o que valeu), e campo `userId` no corpo é **recusado com 400**, não
  ignorado — ignorar em silêncio faz uma tentativa de furar autorização parecer
  que funcionou.
