Saltar al contenido
SuperScheduler

Clínicas y salud

Agenda de clínicas y consultas en una rejilla de 15 minutos

La agenda de una clínica es una rejilla apretada de citas cortas, y cada una necesita el profesional adecuado, la sala adecuada y unos minutos para prepararla entre paciente y paciente. Esta página explica cómo modelar ese día en SuperScheduler, qué reglas aplica la línea de tiempo mientras se arrastra y cuáles debe asumir tu backend.

Por qué un día en la clínica es más complicado de lo que parece

Recepción trabaja con unidades cortas. Una revisión dura 15 minutos, una sesión de fisioterapia 30 o 45 y una valoración una hora, todas sobre la misma rejilla de cuartos de hora. Los huecos importan tanto como las citas: las salas hay que prepararlas entre pacientes y los profesionales necesitan pausas que no acaben ocupadas por una cita sin que nadie se dé cuenta.

Además, el día cambia sin parar. Los pacientes llegan tarde, cancelan o no se presentan, y una urgencia tiene que encajar sin mover a otras tres personas. Quien reprograma necesita ver dónde están libres a la vez un profesional y una sala, y la interfaz debe rechazar un cambio que ponga a dos pacientes en la misma sala.

Y se trata de datos de salud. Una pantalla compartida en recepción debe mostrar lo mínimo para sacar adelante el día; historiales, reglas y registros de auditoría viven en los sistemas de la clínica, no en el navegador.

Decisiones que recepción toma cada día

  1. 01

    ¿Una fila por profesional o por sala?

    Una cita necesita las dos cosas, pero una fila de la línea de tiempo es un único recurso. La mayoría de las agendas ponen a los profesionales en filas, porque así es como piden los pacientes («el mismo fisio, el martes por la mañana»), y tratan la sala como una restricción que comprueba la aplicación.

  2. 02

    Duración del hueco frente a duración de la cita

    La rejilla suele ser de 15 minutos, mientras que los tipos de cita duran de 15 a 60. Al arrastrar, la cita debe ajustarse a la rejilla, y al redimensionarla debe respetar la duración de su tipo.

  3. 03

    Proteger pausas y tiempo bloqueado

    La comida, las horas de gestión, la formación y una sala cerrada por mantenimiento deben verse como no disponibles y rechazar citas, en lugar de depender de la memoria de nadie.

  4. 04

    Tiempo entre pacientes

    Algunas salas necesitan cinco o diez minutos entre sesiones. Que ese margen sea un bloque visible o una holgura en la validación lo decide la clínica.

  5. 05

    Retrasos y ausencias

    Un paciente que llega tarde acorta su sesión o retrasa la siguiente; una ausencia libera un hueco para la lista de espera. Las dos son cambios de estado que la agenda muestra sin perder la cita original.

Cómo modelar una agenda clínica

Trata la línea de tiempo como una vista de tu almacén de citas: las filas son personas o salas reservables, los eventos son citas y cada regla importante se vuelve a comprobar en el servidor.

Recursos
Usa una fila por profesional, agrupadas por disciplina en un árbol de recursos, con columnas en la cabecera de fila para la especialidad o la sala habitual. Si el recurso más escaso son las salas, pon las salas en filas y guarda el profesional como un campo de cada cita.
Eventos
Cada cita es un intervalo semiabierto en hora civil, por ejemplo de 09:15:00 a 10:00:00, así que una sesión que termina a las 10:00 deja libre el hueco de las 10:00. Incluye el id de tu backend, el tipo de cita y un estado, y pinta solo lo que necesita recepción.
Escala temporal
Usa celdas de 15 minutos con cabeceras por hora y pon showNonBusiness a false para ocultar las horas en que la clínica está cerrada. Un segundo nivel de zoom con celdas de una hora a lo largo de la semana ayuda a planificar una tanda de revisiones.
Reglas
Pon allowEventOverlap a false y deshabilita las celdas de las pausas en onBeforeCellRender. Comprueba los conflictos de sala y el tiempo entre pacientes en onEventMoving, con un mensaje que explique el rechazo, y confirma cada cambio con el backend en onEventMove antes de que se aplique.

Qué hace la librería y qué hace el sistema de tu clínica

  • Una rejilla de cuartos de hora con ajuste, arrastre, redimensionado y, en el modo de teclado completo, movimientos con teclado
  • Rechazo de movimientos sobre tramos ocupados o celdas deshabilitadas, con tu mensaje visible durante el arrastre
  • Tiempo bloqueado y rayado para pausas, horas de gestión y salas cerradas
  • Contenido de las citas mediante slots de renderizado React
  • Un veto asíncrono en onEventMove, para que un cambio pueda esperar al servidor
  • Los historiales de los pacientes y la decisión de qué campos llegan a la pantalla
  • La comprobación definitiva de dobles citas en la base de datos
  • Roles y permisos: quién puede mover, cancelar o dar citas, y para quién
  • Los planes de tratamiento recurrentes, expandidos en citas individuales
  • Recordatorios, listas de espera, facturación, registros de auditoría y conversión de zonas horarias

Ejemplos que funcionan

Errores habituales en las agendas clínicas

Poner detalles clínicos en el texto del evento

Textos, tooltips y burbujas acaban en la página y en una pantalla que puede verse desde la sala de espera. Muestra iniciales o una referencia corta, y carga los detalles bajo demanda tras tus propios controles de acceso.

Dejar las ausencias como eventos que bloquean

Con los solapes rechazados, una ausencia sigue ocupando su hueco. Quítala de los eventos que pasas o permite el solape en onEventMoving cuando todos los eventos de args.conflicts estén cancelados o sean ausencias.

Tratar la hora de fin como incluida

Una cita de 09:00:00 a 09:30:00 termina a las 09:30, y una cita a las 09:30 no se solapa con ella. Sumar un minuto para «cerrar» el intervalo crea falsos conflictos durante todo el día.

Confiar en el navegador como última línea de defensa

La línea de tiempo rechaza el solape que ve, no una cita creada hace un segundo en otro puesto. El servidor debe rechazarla y la aplicación, recargar.

Preguntas

¿Puedo impedir que dos citas se solapen en la misma sala?

Sí. Con las salas como filas, pon allowEventOverlap a false y la línea de tiempo rechazará movimientos, redimensionados y selecciones sobre un tramo ocupado de esa fila. Con los profesionales como filas, comprueba los conflictos de sala en onEventMoving y pon args.allowed a false con un mensaje. En ambos casos, repite la comprobación en el servidor.

¿Cómo muestro huecos de cita de 15 minutos en un scheduler de React?

Usa scale «CellDuration» con cellDuration a 15 y cabeceras de tiempo agrupadas por hora. Arrastres, redimensionados y selecciones se ajustan a la celda por defecto, y showNonBusiness a false oculta las horas fuera de businessBeginsHour y businessEndsHour.

¿SuperScheduler gestiona citas recurrentes?

No como funcionalidad: las opciones de recurrencia están reservadas y no tienen efecto. Expande en tu backend un plan de ocho sesiones semanales en ocho citas, cada una con su propio id, para poder mover una sesión sin tocar las demás.

¿SuperScheduler cumple HIPAA o el RGPD?

El cumplimiento normativo corresponde a un sistema completo, no a un componente de interfaz, y la librería no tiene ninguna certificación. Se ejecuta en el navegador y no almacena ni envía nada por su cuenta; el almacenamiento, el control de acceso, los registros y los acuerdos con proveedores son responsabilidad de tu aplicación y de quienes la operan.

Míralo con datos sintéticos

La demo de Forma reprograma citas de fisioterapia en una escala de minutos y las mantiene fuera del tiempo bloqueado. Usa profesionales inventados y ningún dato de pacientes.

Ejemplos que funcionan