# Plano de testes — `PR-6` Recalcular pontos quando um placar é corrigido

**Story:** `docs/stories/PR-6-recalculo-placar-corrigido.md`

Por que esta story concentra risco: ponto que **cai** sem explicação é
indistinguível de bug — ou de fraude. O recálculo tem que ser completo e a
mudança tem que ficar contável no extrato.

| ID | Título | Tipo | Prioridade |
| -- | ------ | ---- | ---------- |
| PR-6-01 | Correção recalcula todos os palpites do jogo | caminho feliz | alta |
| PR-6-02 | Correção que não muda ponto de ninguém | borda | alta |
| PR-6-03 | Correção que altera o desempate | borda | alta |
| PR-6-04 | Extrato mostra o placar anterior | caminho feliz | alta |
| PR-6-05 | Extrato distingue fonte de admin | borda | alta |
| PR-6-06 | Jogo sem correção não ganha marca | borda | média |
| PR-6-07 | Correção de jogo que não tinha placar | borda | média |
| PR-6-08 | Duas correções seguidas mostram a última | borda | média |
| PR-6-09 | Soma do extrato continua batendo com o ranking | borda | alta |
| PR-6-10 | Recálculo não duplica revisão de palpite | borda | média |

---

### PR-6-01 — Correção recalcula todos os palpites do jogo
**Tipo:** caminho feliz · **Prioridade:** alta
**Pré-condições:** 3 participantes com palpites diferentes num jogo apurado.
**Resultado esperado:** os 3 reapurados numa só operação; `afetados: 3`.
Recalcular só quem "parecia afetado" deixaria pontuação velha no banco.

### PR-6-02 — Correção que não muda ponto de ninguém
**Tipo:** borda · **Prioridade:** alta
**Dados de teste:** oficial `2x0` → `3x0`; único palpite é `0x2` (errou nos
dois casos).
**Resultado esperado:** pontos inalterados e **nenhum aviso** para esse
participante. Aviso sem mudança treina o participante a ignorar avisos.

### PR-6-03 — Correção que altera o desempate
**Tipo:** borda · **Prioridade:** alta
**Pré-condições:** dois empatados em pontos, um com 1 exato a mais.
**Passos:**
1. Corrigir o placar de forma a tirar o exato do primeiro.
**Resultado esperado:** a ordem entre eles inverte, `decidedBy` reflete o novo
critério, e **os dois** recebem aviso (a posição de ambos mudou).

### PR-6-04 — Extrato mostra o placar anterior
**Tipo:** caminho feliz · **Prioridade:** alta
**Resultado esperado:** a linha do jogo traz "placar corrigido — antes era 1x1".
Sem o valor anterior, o participante não tem como conferir a conta.

### PR-6-05 — Extrato distingue fonte de admin
**Tipo:** borda · **Prioridade:** alta
**Resultado esperado:** correção com `source: MANUAL` acrescenta "alterado pelo
administrador"; com `OFFICIAL`, **não** acrescenta. Atribuir ao admin uma
correção da fonte inventa intervenção humana onde não houve.

### PR-6-06 — Jogo sem correção não ganha marca
**Tipo:** borda · **Prioridade:** média
**Resultado esperado:** `correction: null` e nenhuma marca na tela.

### PR-6-07 — Correção de jogo que não tinha placar
**Tipo:** borda · **Prioridade:** média
**Pré-condições:** jogo terminado sem placar (fonte atrasou), depois corrigido.
**Resultado esperado:** o extrato descreve o anterior como "sem placar", não
como `0x0` — `0x0` seria um empate que nunca existiu.

### PR-6-08 — Duas correções seguidas mostram a última
**Tipo:** borda · **Prioridade:** média
**Passos:**
1. Corrigir `2x0` → `2x1`.
2. Corrigir `2x1` → `3x1`.
**Resultado esperado:** o extrato mostra "antes era 2x1" (a última), e o
histórico do jogo lista as **duas** alterações em ordem decrescente.

### PR-6-09 — Soma do extrato continua batendo com o ranking
**Tipo:** borda · **Prioridade:** alta
**Passos:**
1. Somar os pontos do extrato da rodada após a correção.
2. Comparar com o total do participante no ranking da rodada.
**Resultado esperado:** valores iguais. Divergência aqui é a briga mais difícil
de resolver, porque as duas telas parecem certas.

### PR-6-10 — Recálculo não duplica revisão de palpite
**Tipo:** borda · **Prioridade:** média
**Resultado esperado:** a contagem de `prediction_revisions` do palpite não muda
com a correção — o recálculo mexe em ponto, não no histórico do que foi
palpitado.
