Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Validación de horarios en la reserva de consultas.

Actualmente el sistema valida disponibilidad comparando únicamente el campo fecha, por ejemplo usando:

existsByMedicoIdAndFecha(...)

Entiendo que esto funciona si las consultas solo pueden agendarse en horarios exactos (por ejemplo 10:00, 11:00, 12:00) y todas duran lo mismo.

Pero mi duda es: ¿qué sucede si alguien intenta reservar a las 10:15 y ya existe una consulta a las 10:00 que dura 30 minutos?

En ese caso no habría igualdad exacta de fecha, pero sí habría solapamiento de horarios (10:00–10:30 con 10:15–10:45).

Entonces mi pregunta es:

¿El sistema está diseñado para permitir únicamente horarios cerrados (por ejemplo cada hora exacta)?
¿O más adelante se implementará una validación por rango de tiempo para evitar solapamientos?

También me surgió la duda de si este tipo de validación debería vivir en MedicoRepository o si conceptualmente sería más correcto manejarla desde ConsultaRepository, ya que el conflicto ocurre entre consultas y no directamente entre médicos.

Gracias

1 respuesta

Hola Carolina, espero que estés bien

Entiendo tu preocupación con respecto a la validación de horarios para evitar solapamientos en las reservas de consultas. Actualmente, según el contexto proporcionado, el sistema parece estar diseñado para manejar horarios exactos, como mencionaste, usando el método existsByMedicoIdAndFecha(...). Esto significa que, en su estado actual, el sistema no está preparado para manejar solapamientos de horarios, como el caso que planteas de una consulta a las 10:15 cuando ya hay una a las 10:00 que dura 30 minutos.

Para abordar este problema, sería necesario implementar una validación adicional que verifique los rangos de tiempo y no solo la igualdad de fechas. Un enfoque podría ser crear un método en el ConsultaRepository que compruebe si existe alguna consulta en un rango de tiempo que se solape con la nueva reserva. Por ejemplo:

public boolean existeSolapamiento(Long medicoId, LocalDateTime inicio, LocalDateTime fin) {
    return consultaRepository.existsByMedicoIdAndFechaBetween(medicoId, inicio, fin);
}

Este método podría ser llamado dentro de una nueva clase de validación, similar a las que ya tienes, para asegurar que no haya solapamientos antes de confirmar una nueva reserva.

Respecto a dónde debería vivir esta validación, conceptualmente, tiene más sentido que esté en el ConsultaRepository, ya que el solapamiento ocurre entre consultas. Sin embargo, la lógica de validación en sí misma podría estar en una clase separada dentro de tu paquete de validaciones, como las otras validaciones que ya has implementado.

Espero que estas sugerencias te sean útiles para mejorar la lógica de validación de tu sistema. ¡Bons estudios!