# 🎤 Guión de Ensayo — Presentación OnAPB
### Taller de Integración — FCYT UADER | 7 de Abril 2026, 18:30 hs
**Presentadores:** Lautaro · Fabricio

---

> **Objetivo de la demo:** ~20 minutos en total.
> Mostrar el sistema funcionando en producción (onapb.com) de principio a fin.
> El hilo conductor es una historia: *un jugador real pide un QR para un partido, y el admin lo escanea en la puerta.*

---

## 🎬 Estructura general

| Bloque | Quién | Tiempo estimado |
|---|---|---|
| **Introducción** (qué es OnAPB y qué problema resuelve) | Lautaro | 2 min |
| **Demo pública** (home, eventos, noticias, promos) | Fabricio | 3 min |
| **Demo jugador** (login, solicitar QR, ver QRs) | Lautaro | 5 min |
| **Demo admin** (panel, gestión, escanear QR) | Fabricio | 6 min |
| **Demo técnica** (tests, backup) | Lautaro | 2 min |
| **Cierre** (conclusiones, pendientes, mejoras) | Ambos | 2 min |

---

## 🟠 Bloque 1 — Introducción (Lautaro)

**Lautaro dice:**

> *"Buenas tardes. Somos Lautaro y Fabricio, y vamos a presentar OnAPB: un sistema web de gestión para asociaciones de básquetbol.*
>
> *El problema que resuelve es simple: hasta ahora, la administración de clubes, jugadores y el acceso a los partidos se hacía completamente en papel o con planillas de Excel desconectadas. Nosotros digitalizamos eso.*
>
> *El sistema está en producción en onapb.com y tiene cargados actualmente 35 equipos y alrededor de 3500 jugadores reales. Fue construido con Laravel 12, MySQL y Bootstrap 5."*

👉 **Abrí el navegador en onapb.com mientras hablás.**

---

## 🟢 Bloque 2 — Demo Pública (Fabricio)

**Fabricio toma el control del teclado/mouse.**

### 2.1 Home
- Mostrá el carrusel/hero de la portada. Decí brevemente:
  > *"Esta es la página pública. Cualquier persona, sin registrarse, puede ver la cartelera de partidos, las noticias y los sponsors de la liga."*

### 2.2 Eventos
- Navegá a `/eventos`.
- Hacé clic en un partido concreto (elegí uno que tenga equipos asignados y estado *Próximo*).
  > *"Acá se ve el detalle del partido: los equipos, la categoría, la fecha y la sede."*

### 2.3 Torneos (posiciones + goleadores)
- Navegá a la sección de torneos.
- Mostrá la tabla de posiciones y la tabla de goleadores.
  > *"El sistema también gestiona torneos con grupos, posiciones acumuladas y ranking de goleadores. Cuando hay playoffs, se genera el bracket automáticamente."*

### 2.4 Promos y Noticias (rápido)
- 15 segundos nomás: mostrá que existen.
  > *"También tenemos noticias publicables y locales con beneficios para los miembros."*

---

## 🔵 Bloque 3 — Demo Jugador (Lautaro)

**Lautaro toma el control. Este es el bloque más importante de cara a la historia principal.**

### 3.1 Login como Jugador
- Ir a la pantalla de login (botón en el menú).
- Pestaña *"Jugadores / Aficionados"*.
- Ingresar un DNI y contraseña reales de un jugador de prueba.
  > *"Los jugadores se loguean con su DNI y contraseña. El captcha de Cloudflare Turnstile protege contra bots."*
- Clic en **Ingresar**. El sistema redirige a la home ya logueado.

### 3.2 Panel de Usuario
- Ir a `/panel-usuario`.
  > *"Este es el panel personal del jugador. Ve sus datos, a qué club pertenece, a qué equipo está asignado, y su categoría, que se calcula automáticamente en base a la fecha de nacimiento."*

### 3.3 ⭐ Solicitar QR para un Partido *(paso a paso detallado)*

Este es el **momento central de la demo**. Hacelo con calma.

1. Desde el panel o desde el menú, navegá a `/eventos`.
2. Hacé clic en el partido preparado con anticipación (uno con estado *Próximo* y que tenga al jugador logueado en uno de los equipos).
3. Mostrá el detalle del partido.
   > *"En el detalle del evento, el jugador puede solicitar su QR. El sistema verifica automáticamente si pertenece a alguno de los equipos del partido."*
4. Hacé clic en **"Solicitar QR"**.
5. El sistema procesa y redirige a "Mis QRs".
   > *"Como el jugador pertenece al equipo local, el sistema le genera 3 QRs: uno para él y dos para que les dé a familiares o acompañantes. Si fuera de categoría Libre, obtendría 1 QR con 50% de descuento."*

### 3.4 Mis QRs
- Mostrá la pantalla de Mis QRs.
- Ampliá uno de los QR para que se vea bien grande.
  > *"Cada QR es único, tiene un solo uso. Su estado es 'Válido' hasta que es escaneado, momento en que pasa a 'Usado'.*
  >
  > *Además, el jugador recibe estos QRs por correo electrónico automáticamente."*

- **Consejo:** si podés, mostrá que el correo llegó a la bandeja (tené el mail abierto en otra pestaña).

### 3.5 Cerrar sesión del jugador
- Clic en **Cerrar sesión**.

---

## 🔴 Bloque 4 — Demo Administrador (Fabricio)

**Fabricio toma el control.**

### 4.1 Login como SuperAdmin
- Login con usuario y contraseña del superadmin.
  > *"Ahora ingresamos como Súper Administrador."*
- Clic en **Ingresar**.

### 4.2 Dashboard Admin
- Mostrá el dashboard con las estadísticas globales (clubes, equipos, jugadores totales).
  > *"El panel de administración tiene visión global de todo el sistema."*

### 4.3 Gestión de Jugadores (rápido)
- Ir a `/admin/jugadores`.
- Mostrá el listado con búsqueda.
  > *"Podemos buscar cualquier jugador. Hay 3500 cargados actualmente."*
- Hacé clic en un jugador para mostrar el formulario de edición. No guardes nada.
  > *"El admin puede editar datos, cambiar el club o eliminar un jugador. Si se elimina, usamos SoftDelete: no se borra físicamente, es recuperable."*

### 4.4 Importación CSV (30 segundos)
- Mostrá el botón de importar en `/admin/jugadores`.
  > *"Una funcionalidad clave fue la importación masiva desde CSV. El sistema soporta el formato oficial de CAB — la Confederación Argentina de Básquet — y también formatos internos. Importamos los 3500 jugadores desde esas planillas."*

### 4.5 Gestión de Eventos (rápido)
- Ir a `/admin/eventos`.
  > *"El admin calendariza los partidos, asigna equipos y controla el estado. Cuando se cargan los resultados, el evento pasa automáticamente a Finalizado y los puntos impactan en la tabla de posiciones."*

### 4.6 ⭐ Escanear el QR *(paso a paso detallado)*

Este es el **cierre de la historia**. Hacelo en vivo.

1. Ir a `/admin/escanear-qr`.
   > *"Esta es la herramienta para usar en la puerta del gimnasio el día del partido. El admin de turno selecciona el evento."*
2. Seleccioná el mismo partido del que Lautaro sacó el QR antes.
3. Activá la cámara o usá el campo de texto para ingresar el ID del QR.
   > *"El árbitro o responsable escanea el código. El sistema valida en tiempo real."*
4. Escaneá (o pegá el ID del QR generado antes).
   > *"¿Ven? El sistema muestra el nombre del titular, el tipo de QR —en este caso 'invitado'— y lo pasa a estado Usado. Si alguien intentara entrar con ese mismo QR de nuevo, el sistema lo rechazaría."*
5. Mostrá el resultado: QR validado, nombre del jugador, estado actualizado.

---

## 🟣 Bloque 5 — Demo Técnica (Lautaro)

**Lautaro toma el control. Abrí una terminal.**

### 5.1 Correr los tests
```bash
php artisan test
```
  > *"El proyecto tiene una suite de pruebas automatizadas con PHPUnit. Tenemos 5 archivos de Feature Tests que cubren el login de los 3 tipos de usuario, el acceso denegado, la solicitud de QR y la prevención de duplicados."*

- Mostrá que todos pasan en verde.

### 5.2 Sistema de Backup
```bash
php artisan backup:run --only-db --disable-notifications
```
  > *"También integramos spatie/laravel-backup para las copias de seguridad automáticas de la base de datos. Esto cubre el requisito de recuperación ante fallos."*

### 5.3 SoftDeletes (explicación verbal, sin demo)
  > *"Además, los modelos críticos —Club, Equipo, Jugador, Evento— implementan SoftDeletes. Esto significa que ningún dato crítico se borra permanentemente: si un admin elimina algo por error, los registros siguen en la base de datos con un timestamp de eliminación y son recuperables."*

---

## ⚪ Bloque 6 — Cierre (Ambos)

**Turno de Fabricio primero:**

> *"En cuanto a lo que quedó pendiente: la integración de pagos con Banco Macro —que llamamos Fase 6— no se implementó porque requiere credenciales y aprobación formal del banco, algo que está fuera del alcance académico. Sin embargo, la arquitectura está preparada para recibirla: tenemos el modelo `PagoMp` y la estructura de datos lista."*

**Cierre de Lautaro:**

> *"Como reflexión del equipo: el mayor desafío fue modelar correctamente la lógica de negocio real de una asociación de básquet —categorías por edad, pases entre clubes, permisos por rol— sin que el sistema se volviera rígido. El uso de SoftDeletes, servicios desacoplados y el scheduler nos permitió tener algo robusto y mantenible.*
>
> *Quedamos a disposición para preguntas."*

---

## ⚠️ Tips para el día de la presentación

- **Elegí con anticipación** el jugador de prueba y el evento para el demo del QR. Verificá que el jugador esté en uno de los equipos del partido.
- **Tené el correo abierto** en una pestaña aparte para mostrar que llegó el mail con el QR.
- Si el profesor pregunta algo que no saben, **no inventen**: digan *"ese detalle lo tenemos en el código, si quiere lo revisamos juntos"*.
- **Turno de hablar**: si uno habla, el otro maneja el mouse, y viceversa. No hablen los dos a la vez.
- **Cronometren** el ensayo. Si lleva más de 25 minutos, recorten las partes "rápido".
