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_Appointmentreferencia cliente, empleado, servicio y opcionalmente slot.CDS_AppointmentSlotse genera para un empleado, servicio, fecha y rango horario.CDS_EmployeeServicedetermina si un empleado puede prestar un servicio.CDS_EmployeeScheduleLinedefine cuándo puede atender el empleado.CDS_EmployeeDayOffyCDS_OrgDayOffbloquean 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.