# Resumen del Plugin

El plugin `com.cdsoftware.appointment` agrega a iDempiere 12 un módulo reutilizable para gestionar citas, servicios, empleados, horarios, días no disponibles y disponibilidad de agenda.

> **Idea clave:** la disponibilidad no depende solo de la interfaz. La validación queda centralizada en backend para proteger tanto las citas creadas desde ventanas iDempiere como las creadas desde REST/API.

## Objetivo

El objetivo es permitir que una organización configure servicios agendables, defina qué empleados pueden atender cada servicio, establezca horarios de atención y bloquee días o rangos no disponibles. Con esa información, el sistema genera slots disponibles y valida cada cita antes de guardarla.

## Alcance funcional

<table id="bkmrk-%C3%81reaqu%C3%A9-cubreconfigu" style="width:100%;border-collapse:collapse;margin:12px 0 20px 0;"><thead><tr><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Área</th><th style="border:1px solid #d8dee9;padding:12px;background:#eef2f7;text-align:left;">Qué cubre</th></tr></thead><tbody><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Configuración**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Parámetros generales por organización, límites de anticipación, reglas de aprobación e intervalos de slots.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Servicios**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Servicios agendables con precio, duración, intervalo, capacidad y requerimiento de aprobación.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Empleados**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Personas o usuarios disponibles para atender citas, vinculados a terceros y opcionalmente a usuarios iDempiere.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Disponibilidad**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Horarios semanales, días libres de empleado, días libres de organización y validación de conflictos.</td></tr><tr><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">**Citas**</td><td style="border:1px solid #d8dee9;padding:12px;vertical-align:top;">Registro principal de la cita con cliente, empleado, servicio, fecha, hora, duración, precio, estado y slot seleccionado.</td></tr></tbody></table>

## Principios de diseño

- El plugin es genérico y no depende del proyecto IEA.
- La creación desde REST/API usa la tabla estándar `CDS_Appointment`.
- Las reglas críticas se validan en eventos de modelo, no solo en callouts.
- Los modelos generados `I_CDS_*` y `X_CDS_*` son la fuente de constantes de tabla, columnas y valores.
- El campo `R_Request_ID` puede existir como referencia manual, pero el código del plugin no depende de solicitudes.