Procesos y Eventos
El plugin mantiene pocos procesos activos y concentra las reglas críticas en eventos de modelo.
Procesos activos
| Proceso | Uso |
|---|---|
GenerateAppointmentSlots | Genera slots para el empleado, servicio y fecha seleccionados. Puede resolver valores desde la cita actual cuando se ejecuta desde ventana. |
ReopenAppointment | Reabre una cita procesada cambiándola a pendiente y limpiando Processed mediante un contexto controlado. |
Validación por evento actual
AppointmentModelValidator se ejecuta antes de crear o cambiar una cita. Para citas pendientes o aprobadas valida los datos mínimos y la disponibilidad real.
- Cliente requerido.
- Empleado requerido.
- Servicio requerido.
- Fecha de cita requerida.
- Hora inicial y final requeridas.
- Hora inicial menor que hora final.
- Fecha de cita igual al día de la hora inicial.
- Duración mayor que cero.
- Precio no negativo.
- Empleado habilitado para prestar el servicio.
- Slot consistente con empleado, servicio, horas, duración y precio.
- Sin bloqueo por día libre de organización o empleado.
- Horario cubierto por agenda del empleado.
- Sin conflicto con otra cita activa pendiente o aprobada.
Estados y procesamiento actual
- Si el estado viene vacío, se asigna
Draft. - Los estados finales marcan
Processed = true. - Los estados no finales limpian
Processed. - Una cita procesada no se puede modificar salvo mediante reapertura controlada.
Roadmap de validaciones en eventos
Las siguientes reglas deben agregarse al evento para que el comportamiento sea consistente desde ventanas iDempiere y desde REST/API.
| Validación pendiente | Momento sugerido | Regla esperada |
|---|---|---|
| Resolver configuración desde servicio | BeforeNew y BeforeChange | El servicio debe indicar qué configuración de agenda aplica. La cita usa esa configuración para anticipación, horario macro y aprobación. |
| Servicio con una sola configuración | Al guardar servicio o relación configuración-servicio | Un servicio no debe estar asociado a más de una configuración activa. |
| Anticipación mínima | BeforeNew y generación de slots | Si StartDateTime está antes de ahora + MinAdvanceHours, la cita o slot debe bloquearse. |
| Anticipación máxima | BeforeNew y generación de slots | Si StartDateTime supera hoy + MaxAdvanceDays, la cita o slot debe bloquearse. |
| Horario macro de configuración | BeforeNew, BeforeChange y generación de slots | El horario de agenda general debe contener el rango solicitado antes de evaluar el horario del empleado. |
| Forzar aprobación | BeforeNew | Si la configuración tiene ForceApproval=Y, la cita debe quedar pendiente aunque el servicio permita aprobación automática. |
| Autoaprobar si el servicio lo permite | BeforeNew | Si AutoApproveIfServiceAllows=Y y el servicio no requiere aprobación, la cita puede quedar Approved. |
Orden recomendado de validación
- Resolver servicio, empleado y organización.
- Resolver configuración de agenda desde el servicio.
- Aplicar reglas de anticipación mínima y máxima.
- Validar horario macro de configuración.
- Validar días libres de organización vinculados a la configuración.
- Validar relación empleado-servicio.
- Validar horario y días libres del empleado.
- Validar slot seleccionado.
- Validar conflictos con citas existentes.
- Resolver estado de aprobación: pendiente o aprobada.