BDD Scenarios: Sistema de Reservas de Turnos¶
Proposito¶
Escenarios de comportamiento en formato Given/When/Then para la feature de reservas. Estos escenarios son la especificacion ejecutable: cada uno debe poder convertirse en un test automatizado.
Cuando usarlo¶
- Como input para escribir tests de integracion y E2E.
- Para alinear con QA y Product sobre el comportamiento esperado.
- Como contexto para que la IA genere tests automatizados.
Feature: Busqueda de Disponibilidad¶
Scenario: Paciente busca disponibilidad por especialidad¶
Given un medico "Dra. Ana Garcia" con especialidad "Cardiologia"
And tiene disponibilidad los Lunes de 09:00 a 13:00 con slots de 30 min
And tiene disponibilidad los Miercoles de 14:00 a 18:00 con slots de 30 min
And hoy es Sabado 2025-03-22
When el paciente busca disponibilidad del 2025-03-24 al 2025-03-30
Then ve 8 slots el Lunes 24 (09:00, 09:30, 10:00, 10:30, 11:00, 11:30, 12:00, 12:30)
And ve 8 slots el Miercoles 26 (14:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30)
Scenario: Disponibilidad excluye slots ya reservados¶
Given un medico "Dr. Carlos Lopez" con disponibilidad Lunes 09:00-13:00, slots de 30 min
And existe un booking confirmado para el Lunes 2025-03-24 a las 10:00
When el paciente busca disponibilidad para el Lunes 2025-03-24
Then ve 7 slots disponibles
And el slot de 10:00 a 10:30 NO aparece en la lista
Scenario: Disponibilidad excluye dias bloqueados¶
Given un medico "Dra. Ana Garcia" con disponibilidad Lunes y Miercoles
And el Lunes 2025-03-24 esta bloqueado con razon "Vacaciones"
When el paciente busca disponibilidad del 2025-03-24 al 2025-03-30
Then solo ve slots del Miercoles 26
And no ve ningun slot del Lunes 24
Scenario: No hay disponibilidad en los proximos 30 dias¶
Given un medico "Dr. Juan Martinez" sin disponibilidad configurada
When el paciente busca disponibilidad
Then ve el mensaje "No hay turnos disponibles en los proximos 30 dias"
And ve una sugerencia de otros medicos de la misma especialidad
Feature: Reserva de Turno¶
Scenario: Paciente reserva un turno exitosamente¶
Given un paciente autenticado "Juan Perez"
And un slot disponible con "Dra. Ana Garcia" el 2025-03-24 a las 09:00
When el paciente reserva el slot
Then se crea un booking con status "CONFIRMED"
And el paciente recibe un email de confirmacion
And el medico recibe una notificacion de nueva reserva
And el slot deja de estar disponible para otros pacientes
Scenario: Conflicto de concurrencia - dos pacientes reservan el mismo slot¶
Given un slot disponible con "Dra. Ana Garcia" el 2025-03-24 a las 09:00
And el paciente "Juan Perez" inicia la reserva
And el paciente "Maria Lopez" inicia la reserva del mismo slot
When "Juan Perez" confirma primero
And "Maria Lopez" confirma segundo
Then "Juan Perez" obtiene la reserva exitosamente
And "Maria Lopez" ve el mensaje "Este horario acaba de ser reservado"
And a "Maria Lopez" se le sugiere el siguiente slot disponible (09:30)
Scenario: Paciente intenta reservar con menos de 2 horas de anticipacion¶
Given la hora actual es 2025-03-24 08:30
And un slot disponible a las 10:00 del mismo dia
When el paciente intenta reservar el slot de las 10:00
Then la reserva es rechazada con error "SLOT_TOO_SOON"
And ve el mensaje "Los turnos deben reservarse con al menos 2 horas de anticipacion"
Scenario: Paciente ya tiene turno con el mismo medico hoy¶
Given el paciente "Juan Perez" tiene un booking CONFIRMED con "Dra. Ana Garcia" el 2025-03-24 a las 09:00
When intenta reservar otro slot con "Dra. Ana Garcia" el 2025-03-24 a las 10:00
Then la reserva es rechazada con error "DUPLICATE_BOOKING"
And ve el mensaje "Ya tienes un turno pendiente con este medico para hoy"
Scenario: Paciente bloqueado intenta reservar¶
Given el paciente "Pedro Gomez" tiene 3 penalizaciones activas
And esta bloqueado hasta 2025-04-15
And hoy es 2025-03-25
When intenta reservar un turno
Then la reserva es rechazada con error "PATIENT_BLOCKED"
And ve el mensaje "Tu cuenta esta temporalmente bloqueada hasta el 15/04/2025"
Feature: Cancelacion de Turno¶
Scenario: Paciente cancela con mas de 24 horas de anticipacion¶
Given el paciente "Juan Perez" tiene un booking CONFIRMED para el 2025-03-26 a las 09:00
And la hora actual es 2025-03-24 15:00 (mas de 24h antes)
When el paciente cancela el turno
Then el booking cambia a status "CANCELLED"
And NO se registra penalizacion
And el paciente recibe email de confirmacion de cancelacion
And el slot vuelve a estar disponible
Scenario: Paciente cancela con menos de 24 horas (penalizacion)¶
Given el paciente "Juan Perez" tiene un booking CONFIRMED para el 2025-03-25 a las 09:00
And la hora actual es 2025-03-24 10:00 (menos de 24h antes)
When el paciente cancela el turno
Then el booking cambia a status "CANCELLED"
And se registra una penalizacion
And el paciente ve el mensaje "Se aplico penalizacion por cancelacion tardia"
And el slot vuelve a estar disponible
Scenario: Tercera penalizacion bloquea al paciente¶
Given el paciente "Pedro Gomez" tiene 2 penalizaciones activas
And tiene un booking CONFIRMED para manana
And faltan menos de 24h para el turno
When cancela el turno
Then se registra la tercera penalizacion
And el paciente queda bloqueado por 30 dias
And ve el mensaje "Tu cuenta ha sido bloqueada por 30 dias debido a cancelaciones tardias reiteradas"
Scenario: Medico cancela un turno¶
Given el medico "Dra. Ana Garcia" tiene un booking con "Juan Perez" el 2025-03-26
When la medica cancela el turno con razon "Emergencia personal"
Then el booking cambia a status "CANCELLED"
And NO se aplica penalizacion al paciente
And el paciente recibe email: "Tu turno fue cancelado por el medico"
Scenario: Intentar cancelar un turno ya completado¶
Given un booking con status "COMPLETED"
When el paciente intenta cancelarlo
Then recibe error "BOOKING_NOT_CANCELLABLE"
And el booking mantiene su status "COMPLETED"
Feature: Gestion de Agenda del Medico¶
Scenario: Medico marca turno como completado¶
Given el medico "Dra. Ana Garcia" tiene un booking CONFIRMED con "Juan Perez" para hoy a las 09:00
And la hora actual es 09:35 (despues del turno)
When la medica marca el turno como completado
Then el booking cambia a status "COMPLETED"
Scenario: Medico marca no-show¶
Given el medico "Dra. Ana Garcia" tiene un booking CONFIRMED con "Pedro Gomez" para hoy a las 09:00
And la hora actual es 09:20 (el paciente no llego)
When la medica marca el turno como no-show
Then el booking cambia a status "NO_SHOW"
And se emite evento PatientNoShow
Checklist de Completitud¶
- Happy paths cubiertos (busqueda, reserva, cancelacion)
- Escenarios de error cubiertos (conflicto, bloqueo, duplicado)
- Edge cases de tiempo cubiertos (< 2h, < 24h)
- Escenarios de penalizacion cubiertos
- Perspectiva del medico incluida
- Revisada por QA
- Revisada por Product Owner
- Derivados generados (tests automatizados)
Archivos relacionados¶
- _template.test-plan.md - Plantilla de test plan
- test-plan-auth.md - Plan de auth
- testing-pyramid.md - Guia de piramide
- ../01-specs/feature-booking-system.spec.md - Spec de reservas
- ../04-api-contracts/api-bookings.md - API contract