Saltar a contenido

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