Modelo de Datos Tablas, modelos generados y relaciones principales del módulo. Tablas y Modelo de Datos El 2Pack del plugin define las tablas del módulo y genera modelos Java I_CDS_* y X_CDS_* . El código usa esos modelos como fuente de nombres de tabla, columnas y valores de referencia. Tablas principales Tabla Uso CDS_AppointmentConfig Configuración organizacional de agenda, reglas de asignación, aprobación, límites e intervalos. CDS_AppointmentService Servicios agendables con precio, duración, intervalo de slot, aprobación requerida y capacidad. CDS_AppointmentEmployee Empleado disponible para citas, vinculado a C_BPartner y opcionalmente a AD_User . CDS_EmployeeService Relación empleado-servicio con posibles overrides de precio y duración. CDS_EmployeeScheduleLine Bloques semanales de disponibilidad del empleado por día y rango horario. CDS_EmployeeDayOff Bloqueos de empleado por día completo o rango horario, incluyendo recurrencia anual. CDS_OrgDayOff Bloqueos de organización por día completo o rango horario. Incluye CDS_AppointmentConfig_ID , aunque el motor actual todavía no filtra por configuración. CDS_AppointmentSlot Slots generados para selección desde la ventana iDempiere y consulta desde API. CDS_Appointment Registro principal de cita con cliente, empleado, servicio, fecha, hora, precio, duración, estado y slot. Relaciones clave actuales CDS_Appointment referencia cliente, empleado, servicio y opcionalmente slot. CDS_AppointmentSlot se genera para un empleado, servicio, fecha y rango horario. CDS_EmployeeService determina si un empleado puede prestar un servicio. CDS_EmployeeScheduleLine define cuándo puede atender el empleado. CDS_EmployeeDayOff y CDS_OrgDayOff bloquean disponibilidad. Tabla CDS_AppointmentSlot CDS_AppointmentSlot almacena horarios generados por usuario para que la UI o un cliente API pueda listar opciones disponibles después de ejecutar GenerateAppointmentSlots . Columna Uso Filtro API recomendado CDS_AppointmentSlot_ID Identificador del slot seleccionado. Usar al copiar el slot hacia CDS_Appointment.CDS_AppointmentSlot_ID . AD_Org_ID Organización del slot. Filtrar por organización activa del usuario. AD_User_ID Usuario que generó el slot. Filtrar por usuario actual para no mezclar slots temporales de otros usuarios. CDS_Appointment_ID Cita desde la cual se generó el slot, si aplica. Filtrar cuando los slots se generaron desde una cita específica. CDS_AppointmentEmployee_ID Empleado disponible para atender el slot. Filtrar por empleado seleccionado. CDS_AppointmentService_ID Servicio del slot. Filtrar por servicio seleccionado. SlotDate Fecha del slot normalizada al inicio del día. Filtrar por fecha de la cita. StartDateTime Inicio exacto del horario disponible. Ordenar ascendente o filtrar por rango horario. EndDateTime Fin exacto del horario disponible. Usar junto con StartDateTime para mostrar rango. DisplayName Etiqueta legible del horario. Mostrar como texto de selección. IsAvailable Indica si el slot sigue disponible. Filtrar IsAvailable='Y' . IsActive Control estándar de registro activo. Filtrar IsActive='Y' . AvailableEmployees Cantidad de empleados disponibles para el rango. En el flujo actual por empleado suele quedar en 1 . Usar solo como referencia informativa. Price Precio efectivo del slot. Copiar a la cita si se selecciona el slot. DurationMinutes Duración efectiva del slot. Copiar a la cita si se selecciona el slot. AssignedByRule Indica si el empleado fue asignado por regla automática. Actualmente informativo en el flujo por empleado. AssignmentRuleUsed Regla de asignación usada al generar el slot. Usar para auditoría o depuración. Consulta típica API: después de generar slots, listar CDS_AppointmentSlot filtrando por AD_User_ID , CDS_AppointmentEmployee_ID , CDS_AppointmentService_ID , SlotDate , IsActive='Y' e IsAvailable='Y' , ordenando por StartDateTime . Relación configuración-servicio pendiente El flujo objetivo requiere que cada servicio resuelva una configuración de agenda. Esto permite saber qué reglas de anticipación, horarios macro, días cerrados y aprobación aplican cuando se crea una cita. Necesidad Opción recomendada Validación requerida Servicio pertenece a una configuración Agregar CDS_AppointmentConfig_ID en CDS_AppointmentService . El servicio debe tener una configuración activa cuando se use para generar slots o crear citas. Un servicio no puede tener reglas ambiguas Si se usa tabla intermedia, imponer unicidad por servicio activo. Bloquear más de una configuración activa por servicio. Días libres por configuración Usar el campo existente CDS_AppointmentConfig_ID de CDS_OrgDayOff . El motor debe filtrar bloqueos por organización y por configuración del servicio. Horario macro de configuración pendiente Actualmente solo existe horario de empleado. Para cumplir el flujo objetivo se recomienda agregar una tabla de horario macro, por ejemplo CDS_AppointmentConfigScheduleLine , con una estructura similar a CDS_EmployeeScheduleLine . Campo sugerido Uso CDS_AppointmentConfig_ID Configuración de agenda a la que pertenece el horario macro. WeekDay Día de la semana permitido. StartTime / EndTime Rango horario general de atención. ValidFrom / ValidTo Vigencia opcional del horario. Importante: si el diccionario cambia, se deben regenerar los modelos antes de ajustar el código Java.