# Proceso de una actividad · orbitadeportiva

## Roles

| Rol | Cuenta asignada | Permisos |
|---|---|---|
| Administrador | appdev.jr2024@gmail.com | Crear actividades y gestionar decisiones y asistencia de cualquier actividad. |
| Organizador | ritterj010@gmail.com | Crear actividades y gestionar sus propias actividades, participantes y decisiones. |
| Usuario | j-ritter@hotmail.com | Explorar, iniciar sesión para ver detalles, inscribirse, cancelar su participación y consultar avisos. |

Las asignaciones requieren correo confirmado. No se crean contraseñas ni se confirman correos automáticamente.

```mermaid
flowchart TD
 A[Administrador u organizador crea un borrador] --> B[Deporte, lugar, fecha, horario, mínimo, cupo y costo]
 B --> C[Publicar actividad]
 C --> D[Exploración pública; detalles con sesión iniciada]
 D --> E{¿Hay fecha fija?}
 E -->|No| F[Registrar interés; definir fecha y solicitar confirmación]
 F --> G
 E -->|Sí| G{¿Hay cupo disponible?}
 G -->|Sí| H[Usuario confirma y reserva un lugar; notificar]
 G -->|No| I[Lista de espera; notificar]
 I --> J[Se libera un lugar: oferta por 30 min, como máximo hasta el inicio]
 J -->|Acepta| H
 J -->|Vence| I2[Notificar vencimiento; ofrecer al siguiente]
 H --> K[Una hora antes del inicio]
 K --> L{¿Existe una decisión manual vigente?}
 L -->|Sí| M[Respetar la decisión del organizador]
 L -->|No| N{¿Inscritos confirmados ≥ mínimo?}
 N -->|Sí| O[Confirmar automáticamente]
 N -->|No| P[Cancelar automáticamente]
 O --> Q[Notificar a participantes y organizador]
 P --> Q
 M --> Q
 R[Organizador o administrador: decisión manual con motivo] --> M
 Q --> S{¿Se realizará?}
 S -->|No| T[Actividad cancelada; conservar avisos]
 S -->|Sí| U[Inicio del horario previsto]
 U --> V[Registrar asistencia real; usuario puede pedir revisión]
 V --> W[Organizador confirma realización y finaliza; notificar]
 X[Cambio de fecha, lugar o costo] --> Y[Notificar y solicitar reconfirmación antes de la nueva decisión]
 Y --> H
```

## Reglas de decisión

- **Decisión = inicio menos una hora**, según la zona horaria del evento. Publicación y reprogramación con más de una hora de anticipación.
- Se cuentan únicamente inscripciones confirmadas. El interés, las ofertas pendientes y la lista de espera no cuentan para el mínimo.
- El organizador no ocupa plaza automáticamente: debe inscribirse si también participa.
- Sin decisión manual: mínimo alcanzado → confirmación; mínimo no alcanzado → cancelación.
- El organizador de la actividad y el administrador pueden confirmar o cancelar con un motivo. Su decisión tiene prioridad; antes del inicio también pueden recuperar una actividad cancelada automáticamente.
- Tras la confirmación, una baja que deje el grupo por debajo del mínimo avisa al organizador. No provoca otra cancelación automática: el organizador debe decidir y comunicarla.
- Las plazas de reconfirmación se reservan hasta el momento de decisión. Sin respuesta, se liberan y se notifica al usuario.
- El reloj del servidor revisa cada minuto. La hora de decisión queda fijada exactamente a −1 h; la ejecución puede demorarse hasta aproximadamente un minuto, o más si el servicio está interrumpido. La revisión al abrir detalles también recupera decisiones pendientes.
- Entrar en el horario previsto no prueba que el evento haya ocurrido. La finalización y la asistencia requieren comprobación del organizador.
- Las repeticiones del formulario son una preferencia guardada; todavía no generan encuentros independientes automáticamente.

## Notificaciones

Se guardan avisos privados en la cuenta por inscripción, lista de espera, oferta y vencimiento, baja, cambios que requieren reconfirmación, decisión automática o manual, inicio previsto, cierre y asistencia. El organizador recibe los cambios de participantes y las solicitudes de revisión. La campana muestra avisos sin leer. Los avisos permanecen aunque el usuario tenga el navegador cerrado.

En esta versión el canal implementado es **dentro de la plataforma**. Correo, SMS y notificaciones push requieren una integración adicional; no se afirma su envío. Si hubo pago directo, cancelaciones y devoluciones se resuelven con el organizador según sus condiciones; la plataforma no cobra automáticamente.
