## PP-1 — Palpitar nos jogos com prazo aberto

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

**Como** participante do bolão, **quero** informar o placar dos jogos com
prazo aberto em sequência, **para** registrar meus palpites antes do apito
sem depender do grupo do WhatsApp.

**Prioridade:** Must — é a razão de existir do app; sem isso não há bolão.

**Critérios de aceite:**

- Dado que existem jogos com prazo aberto, quando abro a lista de palpites,
  então vejo esses jogos com campo de placar para cada time.
- Dado que informei um placar válido, quando envio, então vejo confirmação
  de que foi salvo e o valor continua lá ao reabrir a tela.
- Dado que informei um placar inválido (negativo, não inteiro, acima do
  limite), quando tento enviar, então o envio é recusado com mensagem no
  próprio campo.
- Dado que o prazo daquele jogo já fechou, quando tento enviar, então o
  servidor recusa e a tela explica que o prazo fechou — não um erro genérico.
- Dado que não sou participante daquele bolão, quando tento palpitar nele,
  então a requisição é recusada pelo servidor.

**Tasks:**

_Backend_
- [x] `BE-1` Modelar palpite: participante, jogo, placar casa/fora, momento do registro
- [x] `BE-2` Endpoint de registro de palpite, com validação de placar e checagem de prazo contra o horário do servidor (depende de BE-1)
- [x] `BE-3` Autorização: só participante do bolão palpita naquele bolão (depende de BE-2)
- [x] `BE-4` Endpoint de leitura dos palpites do próprio participante na rodada (depende de BE-1)

_Mobile_
- [x] `FE-1` Lista de jogos com prazo aberto e campos de placar, com teclado numérico
- [x] `FE-2` Envio com estado de submissão e confirmação visível de salvo (depende de BE-2)
- [x] `FE-3` Validação no app alinhada à do servidor, com erro por campo
- [x] `FE-4` Estados da lista: carregando, vazio (nenhum jogo aberto), erro com retry

_QA_
- [x] `QA-1` Escrever o plano de casos de teste a partir desta story
- [x] `QA-2` Executar o plano, cobrindo prazo vencido e palpite em bolão alheio

**Riscos/Dependências:**

- Depende de CC-1 (bolão criado com jogos carregados) para existir jogo a palpitar.
- O prazo é decidido pelo servidor, nunca pelo relógio do device — regra do PRD.
- O limite superior de gols precisa ser definido no servidor e espelhado no app.

- **07/08 — QA:** plano em `docs/testes/PP-1-plano.md`, execução em
  `docs/testes/PP-1-execucao.md` (**13/13 ✅**). Cinco casos novos de tela em
  `test/pp1_plano_test.dart`, incluindo os limites do campo de placar — que
  precisam ser **os mesmos** do servidor: divergir não gera falha de segurança,
  gera recusa sem explicação, que é o que custa a confiança do participante.
