# Estado das entregas e pendências (2026-05-19)

Documento único para **auditoria antes do commit**: o que **já está em `main`**, o que **ainda falta commitar** na árvore local e o que **falta como produto/deploy** (fora do Git).

**Última verificação:** 2026-05-20 — lote **zerar respostas** commitado (`9b1196c`). Pendente atual: [pendente-commit-perfil-auth-provider-2026-05-20.md](./pendente-commit-perfil-auth-provider-2026-05-20.md).

---

## 1. Resumo executivo

| Situação | Lotes |
|----------|--------|
| **Já commitado** (`main`, sincronizado com `origin/main`) | BI dashboard, UI portal/game (hub, splash, botão 3D), correção upload GD iCCP, login branding, jogar (progresso/modais), resultado com ranking, ranking home |
| **Commitado** (`9b1196c`) | Zerar respostas na bateria (todos / por participante), só Admin global |
| **Pendente de `git add` + commit** | Perfil PT + `auth_provider` Microsoft — ver [pendente-commit-perfil-auth-provider-2026-05-20.md](./pendente-commit-perfil-auth-provider-2026-05-20.md) |
| **Deploy / QA** | `npm run build` em produção; QA manual dos fluxos listados abaixo |

---

## 2. Já commitado em `main` (referência)

Commits recentes (ordem do mais novo):

| Commit | Mensagem (resumo) | Conteúdo principal |
|--------|-------------------|-------------------|
| `308e9fe` | Ajustes solicitados (FE) | Lote UI (b): login branding, modal erro, resultado+ranking, `battery-ranking.css`, docs |
| `6d333b5` | Documentações | `bi-dashboard.md`, `portal-questionario-ui-game.md`, `registro-entregas.md` |
| `af118d8` | KV + BI | Dashboard `/dashboard`, Chart.js, KPIs, filtros, relatórios |
| `52f3e55` | Correção upload imagem | `GdImageFactory`, normalizers favicon/logo |
| `77bfe46` | Questionário + ranking | Base experiência portal e ranking |

### 2.1 BI — painel de gestão

- Rota `/dashboard` (KPIs, filtros, gráficos, listagens, relatório).
- `TrainingDashboardService` + repository; `last_login_at` no login.
- Doc: [bi-dashboard.md](./bi-dashboard.md).

### 2.2 UI portal / questionário game

- Hub, splash SVG, botão 3D (`game-start-button.css`), shell portal, ranking na home.
- Doc: [portal-questionario-ui-game.md](./portal-questionario-ui-game.md).

### 2.3 Login, jogar, modais, resultado

- Login com logo/favicon e gradiente game (single-tenant).
- Jogar: barra de progresso, relógio no HUD, confirmar 3D, modal de erro.
- Resultado: resumo + pódio/top 10 (sem lista pergunta a pergunta).
- Doc: [lote-ui-login-jogar-resultado-2026-05-19.md](./lote-ui-login-jogar-resultado-2026-05-19.md).

### 2.4 Upload imagens (GD / iCCP)

- `App\Support\GdImageFactory` — evita 500 em PNG com perfil iCCP.
- Doc: [correcao-upload-imagens-gd-iccp.md](./correcao-upload-imagens-gd-iccp.md).

### 2.5 Deploy questionário

- Checklist produção: [deploy-producao-questionario-experiencia.md](./deploy-producao-questionario-experiencia.md).

---

## 3. Pendente de commit (working tree actual)

**Único lote não commitado.** Feature de **testes**: zerar sessões/respostas de participantes numa bateria.

### 3.1 Produto

| Funcionalidade | Descrição |
|----------------|-----------|
| Onde | Treinamento → Baterias → detalhe da bateria (`training/question-batteries/{id}`) |
| Quem vê | Utilizador com **Admin global** (`hasGlobalLegacyAdminRole()` — role `Admin`, `company_id` null na role) |
| Zerar todos | Remove todas as `questionnaire_participant_sessions` da bateria (respostas em cascata) |
| Zerar um | Select com participantes que têm sessão; remove só essa sessão |
| UX | Bloco amarelo “Testes — zerar respostas”; confirmação `confirm()` no browser |

### 3.2 Arquitetura

```
POST training/question-batteries/{id}/reset-participant-responses
  → ResetQuestionBatteryParticipantResponsesRequest
  → QuestionBatteryController::resetParticipantResponses
  → QuestionnaireBatteryParticipantResetService
  → QuestionnaireParticipantSessionRepository (delete)
```

Policy: `QuestionBatteryPolicy::resetParticipantResponses`.

### 3.3 Inventário de ficheiros (não staged)

**Criados**

| Ficheiro |
|----------|
| `app/Http/Requests/Training/ResetQuestionBatteryParticipantResponsesRequest.php` |
| `app/Services/QuestionnaireBatteryParticipantResetService.php` |
| `resources/views/training/question-batteries/_participant-response-reset.blade.php` |
| `tests/Feature/Training/QuestionBatteryParticipantResponseResetTest.php` |

**Alterados**

| Ficheiro |
|----------|
| `app/Http/Controllers/Training/QuestionBatteryController.php` |
| `app/Policies/QuestionBatteryPolicy.php` |
| `app/Repositories/Contracts/QuestionnaireParticipantSessionRepositoryInterface.php` |
| `app/Repositories/Eloquent/QuestionnaireParticipantSessionRepository.php` |
| `resources/views/training/question-batteries/show.blade.php` |
| `routes/web.php` |

### 3.4 Verificação antes do commit

```bash
php artisan test --filter=QuestionBatteryParticipantResponseResetTest
```

### 3.5 Comandos Git sugeridos

```bash
git add \
  app/Http/Controllers/Training/QuestionBatteryController.php \
  app/Http/Requests/Training/ResetQuestionBatteryParticipantResponsesRequest.php \
  app/Policies/QuestionBatteryPolicy.php \
  app/Repositories/Contracts/QuestionnaireParticipantSessionRepositoryInterface.php \
  app/Repositories/Eloquent/QuestionnaireParticipantSessionRepository.php \
  app/Services/QuestionnaireBatteryParticipantResetService.php \
  resources/views/training/question-batteries/_participant-response-reset.blade.php \
  resources/views/training/question-batteries/show.blade.php \
  routes/web.php \
  tests/Feature/Training/QuestionBatteryParticipantResponseResetTest.php \
  docs/estado-entregas-e-pendencias-2026-05-19.md \
  docs/registro-entregas.md

git commit -m "$(cat <<'EOF'
feat(training): zerar respostas da bateria para Admin global (testes)

Permite remover sessões e respostas de todos os participantes ou de um
participante na tela da bateria, para repetir o questionário em QA.
EOF
)"
```

### 3.6 Mensagem de commit (texto)

```
feat(training): zerar respostas da bateria para Admin global (testes)

- Bloco na show da bateria: zerar todos ou por participante
- Policy resetParticipantResponses (Admin global + view bateria)
- Service + repository delete sessões (cascade nas respostas)
- Testes QuestionBatteryParticipantResponseResetTest
```

---

## 4. O que ainda falta (fora deste commit)

| Item | Notas |
|------|--------|
| **Commit do lote §3** | Única alteração de código pendente no repositório local |
| **Push para remoto** | Após commit, `git push` se quiser deploy/PR |
| **Build front em produção** | `npm ci && npm run build`; `public/build` não vai no Git |
| **QA manual pós-deploy** | Login, jogar (acerto/erro), resultado, home ranking, dashboard BI, upload logo/favicon, **zerar respostas** como admin |
| **Documentar reset no deploy** | Opcional: uma linha em `deploy-producao-questionario-experiencia.md` (ferramenta só gestão, não portal) |
| **Remover ferramenta em produção final** | Se o reset for só fase de testes, planear flag/env ou remover antes do go-live público |

Não há migrations novas nos lotes recentes. Não há outros ficheiros untracked além do lote §3 e esta documentação.

---

## 5. Mapa de documentação

| Documento | Conteúdo |
|-----------|----------|
| [README.md](./README.md) | Índice geral |
| [registro-entregas.md](./registro-entregas.md) | Histórico por data (actualizar status commitado vs pendente) |
| [estado-entregas-e-pendencias-2026-05-19.md](./estado-entregas-e-pendencias-2026-05-19.md) | **Este ficheiro** — snapshot commit vs pendente |
| [lote-ui-login-jogar-resultado-2026-05-19.md](./lote-ui-login-jogar-resultado-2026-05-19.md) | UI login/jogar/resultado (commitado) |
| [bi-dashboard.md](./bi-dashboard.md) | Dashboard (commitado) |
| [portal-questionario-ui-game.md](./portal-questionario-ui-game.md) | Hub/splash/game (commitado) |
| [correcao-upload-imagens-gd-iccp.md](./correcao-upload-imagens-gd-iccp.md) | GD iCCP (commitado) |
| [deploy-producao-questionario-experiencia.md](./deploy-producao-questionario-experiencia.md) | Deploy portal questionário |

---

## 6. Checklist rápido para quem vai commitar

- [ ] `php artisan test --filter=QuestionnaireParticipantResponseResetTest` (ou suite completa)
- [ ] `git add` ficheiros do §3.3 + docs
- [ ] Commit com mensagem §3.6
- [ ] `git push` (se aplicável)
- [ ] Em staging/produção: `npm run build`, migrar se houver migrations futuras, QA §4
