# Con dos reservas seguidas se pasa el límite de 3 horas

**Etiquetas:** `bug` `reservas` · **Abierto por:** Doris Chumpitaz, administración del complejo

## Contexto

El reglamento dice que nadie puede tener la misma cancha más de 3 horas
seguidas, para que todos tengan su turno. El sábado un equipo reservó de
10:00 a 13:00 y, con otra reserva, de 13:00 a 15:00: cinco horas seguidas en
la cancha de fulbito. El sistema no dijo nada porque cada reserva por
separado tenía 3 horas o menos.

## Lo que esperamos

El límite de 3 horas seguidas vale por persona y por cancha, sumando las
reservas confirmadas que quedan pegadas a la nueva (antes y después). Otra
persona sí puede reservar la hora siguiente, y en otra cancha la cuenta
empieza de cero. Las reservas canceladas no cuentan.

## Criterios de aceptación

Hoy es lunes 9 de marzo de 2026 y todas las reservas son para el martes 10 en
la cancha 1, a nombre de Rosa Quispe (miembro 1), salvo que se diga otra cosa.

1. **Dado** que Rosa tiene de 10:00 a 13:00, **cuando** reserva de 13:00 a
   14:00 (o de 9:00 a 10:00), **entonces** la respuesta es `422` con el código
   `TOO_MANY_HOURS`.
2. **Dado** que Rosa tiene de 15:00 a 17:00, **cuando** reserva de 17:00 a
   19:00, **entonces** se rechaza: serían 4 horas seguidas.
3. **Dado** que Rosa tiene de 10:00 a 11:00 y de 12:00 a 14:00, **cuando**
   reserva de 11:00 a 12:00, **entonces** se rechaza: uniría todo en un bloque
   de 4 horas.
4. **Dado** que Rosa tiene de 10:00 a 11:00, **cuando** reserva de 11:00 a
   13:00, **entonces** se acepta (son 3 horas).
5. **Dado** que Rosa tiene de 10:00 a 13:00, **cuando** reserva de 14:00 a
   15:00, **entonces** se acepta: hay una hora libre en medio.
6. **Dado** que Rosa tiene de 10:00 a 13:00, **cuando** Carmen Flores
   (miembro 3) reserva de 13:00 a 14:00, o Rosa reserva de 13:00 a 14:00 en la
   cancha 2, **entonces** se acepta.
7. **Dado** que Rosa reservó de 10:00 a 13:00 y canceló, **cuando** reserva de
   13:00 a 14:00, **entonces** se acepta.

## Notas técnicas

- Hoy el límite se revisa en `checkBookingRules` (`src/domain/booking.ts`),
  que solo mira la reserva nueva. Las reservas del día se leen en
  `createBooking` (`src/http/handlers.ts`).
- Usen el código `TOO_MANY_HOURS` que ya existe, con un mensaje que explique
  por qué se rechaza.
