Skip to main content

Motor de Disponibilidad

AppointmentAvailabilityEngine concentra la lógica que decide si una cita o un slot es válido para un empleado, servicio y fecha determinados.

Responsabilidades

  • Cargar configuración activa por organización.
  • Leer duración, precio e intervalo del servicio.
  • Aplicar overrides de precio y duración por empleado-servicio.
  • Validar que el empleado pueda prestar el servicio.
  • Validar días libres de la organización.
  • Validar días libres del empleado.
  • Validar cobertura del horario semanal del empleado.
  • Detectar conflictos con citas existentes pendientes o aprobadas.
  • Aplicar límites diarios por empleado cuando correspondan.
  • Crear slots persistentes para la UI de iDempiere.

Regla de conflicto

Una cita se considera en conflicto cuando otra cita activa del mismo empleado se cruza con el rango nuevo y tiene estado pendiente o aprobado.

existing.StartDateTime < newEnd
AND existing.EndDateTime > newStart
AND existing.Status IN ('PE', 'AP')
AND existing.IsActive = 'Y'

Generación de slots

La generación actual es específica por empleado. El proceso no genera para todos los empleados ni autoasigna el recurso; parte de una selección explícita de empleado, servicio y fecha.

Nota: esta decisión hace que el flujo de UI sea más claro: primero se elige quién atiende, luego qué servicio presta, después se generan horarios disponibles.