BellSera — Gestión de reservas de spa y salón para NexoPOS
BellSera agrega la programación de citas de servicio y las operaciones diarias de servicio a NexoPOS. Conecta el catálogo de productos, los clientes, los pedidos, el personal, las salas, los pagos y el TPV para que un negocio de servicios pueda gestionar reservas programadas y clientes que llegan sin cita desde un solo sistema.
El módulo incluye:
- Una página pública de reserva de autoservicio.
- Tipos de pedidos POS con reserva y sin reserva.
- Un calendario de citas del panel de control y una lista de citas.
- Gestión de la disponibilidad del personal y de las habitaciones.
- Colas de ejecución de múltiples servicios con temporizadores persistentes.
- Herramientas de asistencia, pago, cambio de personal, calificación y generación de informes.
- Mensajes SMS opcionales de confirmación, recordatorio y encuesta a través de NsSMS.
Información del módulo
| Item | Value |
|---|---|
| Display name | BellSera |
| Namespace | NsAppointments |
| Version | 6.2.0 |
| Author | NexoPOS |
| Supported NexoPOS core | 6.2.2 through 6.2.99 |
| Optional integration | NsSMS 6.2.1 or newer |
| Public booking path | /appointments |
Resumen de características
Reserva en línea pública
La página pública de reservas permite que un cliente:
- Explora las categorías de servicios y los servicios disponibles.
- Revisa la imagen, la descripción, la duración, el precio y el requisito de pago de cada servicio.
- Agrega uno o más servicios a un carrito de reservas.
- Elija cualquier miembro del personal disponible o solicite un miembro del personal elegible específico.
- Elija una habitación disponible cuando la asignación de habitaciones esté habilitada.
- Selecciona una fecha y busca un horario de cita válido.
- Ingrese su nombre, dirección de correo electrónico, número de teléfono y notas.
- Envíe la solicitud de cita y reciba una referencia de reserva única.
Los espacios disponibles respetan:
- Días laborables y horarios de apertura configurados.
- El intervalo de ranura.
- Aviso mínimo de reserva.
- La ventana máxima de reserva anticipada.
- Duración del servicio y buffers antes/después.
- Funciones del personal asignadas a cada categoría de servicio.
- Las citas existentes que bloquean al personal, la sala o el recurso seleccionado.
- El estado operativo actual del personal y las habitaciones.
El pago público crea o reutiliza un cliente de NexoPOS, crea un pedido de NexoPOS vinculado y almacena la cita y sus líneas de servicio individuales.
Nota de pago: la página pública calcula si no se requiere ningún pago, un depósito parcial o el pago completo. Registra ese importe como adeudado y muestra las instrucciones de pago manual configuradas. No procesa directamente un pago en línea.
Los endpoints de disponibilidad pública y de checkout están limitados en cuanto a la tasa para reducir el abuso.
Configuración del catálogo de servicios
BellSera amplía el catálogo de NexoPOS en lugar de mantener una base de datos de productos independiente.
En Configuración de BellSera → Catálogo, los administradores pueden definir:
- Categorías de servicio: los productos de estas categorías pueden convertirse en servicios reservables.
- Categorías de productos vendibles: productos minoristas regulares o complementos opcionales para citas.
- Asignación de habitación: si se debe seleccionar una habitación para los servicios de citas en el TPV.
Una categoría no puede ser, al mismo tiempo, una categoría de servicio y una categoría vendible.
Cada producto tiene una pestaña de configuración de Citas con:
- Servicio habilitado/deshabilitado para reservas.
- Duración del servicio en minutos.
- Tiempo de margen antes del servicio.
- Tiempo de espera después del servicio.
- Requisito de pago: ninguno, depósito parcial o pago completo.
- Tipo de depósito: cantidad fija o porcentaje.
- Valor del depósito.
Un servicio debe tener una unidad de venta configurada antes de que pueda programarse.
Inscripción del personal y elegibilidad para el servicio
El personal de citas se basa en usuarios y roles normales de NexoPOS.
Los administradores configuran:
- Los roles de NexoPOS cuyos usuarios activos pueden convertirse en personal de citas.
- Los roles permitidos para prestar servicios en cada categoría de servicio.
- El nombre para mostrar de cada trabajador.
- Si el trabajador tiene habilitadas las citas.
- La disponibilidad actual del trabajador: disponible, no disponible o ocupado.
Los perfiles de los trabajadores se crean automáticamente a partir de los roles configurados. No se pueden crear o eliminar manualmente desde la pantalla del personal de citas; deshabilita un perfil de trabajador en su lugar.
Solo se ofrecen para nuevas reservas los trabajadores activos y disponibles que tengan un rol elegible para una categoría de servicio. Iniciar un servicio marca a su trabajador como ocupado, y completar o detener el último servicio activo del trabajador lo vuelve a dejar disponible.
Gestión de habitaciones
Las habitaciones se pueden crear y administrar desde BellSera → Habitaciones.
Cada habitación admite:
- Nombre.
- Miniatura.
- Descripción.
- Precio adicional.
- Estado de disponibilidad: disponible, no disponible o ocupado.
Solo se pueden asignar habitaciones disponibles. Una habitación puede estar libre o añadir un cargo al servicio.
En el punto de venta, se aplica un cargo por habitación una vez por cada línea de servicio:
total de la línea = (precio unitario del servicio × cantidad − descuento) + cargo por habitación
El cargo de la habitación no se multiplica por la cantidad de servicio. Las habitaciones también se pueden devolver manualmente al estado disponible con Liberar habitación.
Reservas POS y visitas sin cita
El módulo registra dos tipos de pedidos de NexoPOS:
| Order type | Behavior |
|---|---|
| Booking | A scheduled appointment. Staff select a date/time, service staff, optional rooms, and notes. |
| Walk-in | An immediate appointment. The start time defaults to the current time. |
Cuando cualquiera de los tipos de pedido está habilitado en la configuración de tipos de pedido de NexoPOS POS, BellSera agrega el flujo de trabajo de citas al POS:
- Indica al cajero que elija Booking o Walk-in después de restablecer el carrito.
- Reconoce productos configurados como servicios de cita.
- Selecciona una habitación disponible cuando la asignación de habitaciones está habilitada.
- Selecciona al personal elegible que esté disponible en el momento del servicio.
- Muestra el personal asignado y la información de la sala debajo de cada línea de carrito de servicio.
- Permite cambiar las asignaciones de personal y de habitaciones desde el carrito.
- Gestiona las cantidades reservando un trabajador para cada ocurrencia de servicio programada.
- Vuelve a validar la información de la reserva antes del pago cuando cambia el carrito del servicio.
- Evita que una orden pagada/no retenida use un trabajador, una habitación o un intervalo de tiempo no disponible.
- Conserva los campos de la cita cuando una orden se mantiene, se edita y se vuelve a cargar.
- Crea automáticamente una cita vinculada después de que se crea o actualiza el pedido en NexoPOS.
El encabezado del TPV también incluye un botón de Citas que abre el calendario y la interfaz de operaciones de servicios en pantalla completa sin salir del TPV.
Panel de gestión de citas
El menú del panel de BellSera proporciona:
- Calendario
- Citas
- Crear cita
- Habitaciones
- Disponibilidad del personal
- Rendimiento del personal
- Configuración de BellSera
La lista de citas permite crear, editar, eliminar y eliminar en bloque registros de citas según los permisos del usuario actual.
Una cita creada manualmente puede incluir:
- Una referencia generada o personalizada.
- Fecha y hora de inicio y de fin.
- Estado de la cita y origen.
- Personal o sala asignados.
- Nombre del cliente, dirección de correo electrónico y número de teléfono.
- Notas internas.
La programación manual rechaza conflictos de personal o de sala. Debe asignarse al menos un miembro del personal o una sala.
Operaciones de calendario y de día
El calendario muestra las reservas programadas y las visitas sin cita previa, y proporciona una vista operativa detallada para cada cita.
Los operadores pueden:
- Navega por el calendario mensual y abre todas las citas de un día.
- Distingue entre reservas y visitas sin cita.
- Revise la información del cliente, el servicio, el personal, la habitación, el pedido y el pago.
- Cambiar el estado del ciclo de vida de la cita.
- Registrar la asistencia y una nota de asistencia.
- Abre la pestaña de pago de la orden de NexoPOS vinculada para agregar un pago cuando quede un saldo.
- Abra un servicio individual para iniciarlo, supervisarlo, completarlo o detenerlo.
- Supervisa cada servicio que se esté ejecutando actualmente desde el centro de servicios activos.
Los estados del ciclo de vida de la cita son:
- pago_pendiente
- confirmación_pendiente
- confirmado
- registrado/a en el sistema
- completado
- cancelado
- no_show
- caducado
La asistencia se registra de forma independiente como:
- se esperaba
- llegó
- tarde
- no_show
- izquierda
La asistencia y el estado del ciclo de vida se sincronizan de forma flexible. Por ejemplo, marcar como llegado a un cliente confirmado comprueba la cita, mientras que una actualización de asistencia de no presentación puede marcar una cita abierta como no presentada.
Las reservas programadas deben marcarse como Llegado o Tarde antes de que pueda comenzar un servicio. Los clientes sin cita pueden comenzar de inmediato.
Ejecución del servicio, temporizadores y colas
Cada línea de servicio tiene su propio estado operativo:
- pendiente
- listo
- en_progreso
- completado
- incompleto
- cancelado
El primer servicio disponible se promociona a Listo. Los operadores pueden entonces:
- Inicia el servicio listo.
- Sigue un temporizador de tiempo transcurrido o de cuenta regresiva basado en la duración del servicio.
- Cierra y vuelve a abrir el temporizador sin detener el servicio.
- Complete el servicio correctamente.
- Detenga el servicio por estar incompleto.
- Reinicia un servicio incompleto.
- Inicia el siguiente servicio listo.
- Reordena los servicios pendientes, listos y no completos con controles de arrastrar y soltar o flechas.
Los servicios en curso, completados y cancelados están bloqueados y no se pueden reordenar.
Iniciar un servicio marca al trabajador y la sala asignados como ocupados. Al completarlo o detenerlo, se liberan esos recursos cuando no se utilizan en otro servicio en ejecución.
El calendario sondea el servidor para detectar servicios activos y resalta los servicios que han alcanzado su duración esperada.
Un trabajo de seguridad por hora puede detener automáticamente los servicios que hayan permanecido en curso durante más tiempo que el umbral de inactividad configurado. Establezca Service Idle Auto-Stop en 0 para desactivar este comportamiento.
Cambio de personal
Los servicios elegibles pueden reasignarse a otro trabajador disponible.
El módulo:
- Muestra solo a los trabajadores que son elegibles para la categoría de servicio y que son gratuitos para la ventana de servicio.
- Requiere una razón para el cambio.
- Detiene un servicio en curso como incompleto antes de cambiar.
- Libera al trabajador anterior cuando corresponda.
- Registra una entrada de auditoría que contiene el trabajador anterior, el nuevo trabajador, el motivo, el estado del servicio y la hora de cambio.
- Recuentos de servicios desviados en los informes de desempeño del personal.
Calificaciones y encuestas de clientes
Los servicios completados pueden recibir una calificación de 1 a 5.
Las calificaciones se pueden introducir:
- Por un operador autorizado desde la pantalla de operaciones del servicio.
- Por el cliente a través de un enlace de encuesta pública único enviado por SMS.
Cada enlace de encuesta pertenece a un servicio completado y solo puede usarse mientras ese servicio siga siendo elegible para recibir una calificación. Una vez enviado, la calificación y la marca de tiempo se almacenan en el elemento de la cita.
Informe del desempeño del personal
La página de rendimiento del personal acepta un intervalo de fechas y muestra lo siguiente por trabajador y como totales:
- Los servicios se han iniciado.
- Servicios completados.
- Los servicios se detuvieron por estar incompletos.
- Servicios cambiados.
- Número de servicios calificados.
- Calificación promedio.
- Tasa de finalización.
De forma predeterminada, el informe cubre el inicio del mes actual hasta hoy.
Notificaciones SMS opcionales
La entrega de SMS es una integración flexible con el módulo opcional NsSMS. La falta o el fallo en la entrega de SMS nunca bloquea el flujo de trabajo de una cita.
Cuando NsSMS se instala, se habilita y se configura con un proveedor, BellSera puede enviar:
- Una confirmación cuando una cita pasa por primera vez a confirmada.
- Un recordatorio antes de una cita confirmada.
- Un enlace de encuesta único cuando se completa un servicio.
Las opciones de antelación para el recordatorio son 1, 3, 6, 12 o 24 horas.
Las plantillas admiten estas etiquetas:
#customer_name# #customer_phone# #appointment_reference# #starts_at# #ends_at# #service_name# #staff_name# #room_name# #store_name# #survey_url#
Los mensajes de confirmación, recordatorio y encuesta se envían, como máximo, una vez para el registro correspondiente.
Lista de verificación de configuración
Use este orden al configurar una nueva instalación:
- Habilitar el módulo NsAppointments.
- Abra Configuración de BellSera → Catálogo y seleccione las categorías de servicios y vendibles.
- Edita cada producto de servicio y configura su pestaña de Citas.
- Selecciona los roles de NexoPOS que deben crear el personal de citas.
- Edita cada categoría de servicio y asigna los roles que pueden realizarla.
- Revisa los perfiles de trabajadores generados en Disponibilidad del personal.
- Crea salas y habilita la asignación de salas si el negocio utiliza salas.
- Configura los días laborables, el horario, el intervalo de las franjas, el aviso y la ventana de reserva.
- Habilitar reservas y/o visitas sin cita en la configuración del tipo de pedido en NexoPOS.
- Opcionalmente, instala y configura NsSMS y, a continuación, personaliza las plantillas de SMS de las citas.
- Asegúrate de que el programador de Laravel y el trabajador de colas estén en ejecución si se requieren recordatorios por SMS o la detención automática por inactividad.
Referencia de configuración
Catálogo
| Setting | Purpose |
|---|---|
| Sellable Product Categories | Regular products and appointment add-ons. |
| Service Categories | Product categories treated as bookable services. |
| Room Assignment | Requires room selection for appointment service lines at the POS. |
Personal
| Setting | Purpose |
|---|---|
| Staff Roles | Active users in these roles are provisioned as appointment workers. |
Reserva
| Setting | Default | Purpose |
|---|---|---|
| Public Booking | Enabled | Shows or disables the public booking storefront. |
| Business Days | Monday–Saturday | Days on which public slots may be generated. |
| Opening Time | 09:00 | First possible public slot. |
| Closing Time | 18:00 | End of the public booking day. |
| Slot Interval | 15 minutes | Step between generated slot start times. |
| Minimum Notice | 120 minutes | Earliest allowed public booking relative to now. |
| Maximum Booking Window | 30 days | Furthest date available for public booking. |
| Manual Payment Instructions | Empty | Instructions displayed when a deposit or full payment is due. |
| Service Idle Auto-Stop | 180 minutes | Stops overlong in-progress services; 0 disables it. |
SMS
| Setting | Purpose |
|---|---|
| Enable SMS | Master switch for appointment SMS messages. |
| Confirmation | Send and customize confirmation messages. |
| Reminder | Enable reminders, choose lead time, and customize the template. |
| Survey | Send a one-time rating link after service completion. |
Permisos
Las migraciones de módulos asignan todos los permisos de BellSera a los roles Administrador de NexoPOS y Administrador de la Tienda.
| Permission | Current use |
|---|---|
| ns.appointments.read | View the appointment list, calendar, and appointment details. |
| ns.appointments.create | Create appointments and use appointment POS context/validation. |
| ns.appointments.update | Edit appointments, status, attendance, service queues, timers, staff switches, and ratings. |
| ns.appointments.delete | Delete appointments. |
| ns.appointments.manage-staff | View and update appointment worker profiles. |
| ns.appointments.manage-rooms | Create, update, free, and delete rooms. |
| ns.appointments.manage-settings | Open and save BellSera and SMS settings. |
| ns.appointments.view-reports | View staff performance reports. |
| ns.appointments.cancel | Reserved appointment permission; current calendar status changes use ns.appointments.update. |
| ns.appointments.manage-services | Reserved appointment permission; service products and categories continue to use their normal NexoPOS CRUD access. |
Las rutas del servidor aplican estos permisos; la visibilidad del menú no es el límite de seguridad.
Automatización programada
El módulo contribuye con dos trabajos programados:
| Job | Schedule | Purpose |
|---|---|---|
| ns-appointments-reminder-sms | Every 15 minutes | Sends due reminders for confirmed appointments. |
| ns-appointments-idle-service-stop | Hourly | Stops in-progress services that exceed the configured idle threshold. |
Ambos trabajos implementan el contrato de trabajos en cola de Laravel. Las implementaciones en producción que utilicen estas funciones deben ejecutar el programador de NexoPOS/Laravel y un trabajador de cola.
Datos de demostración
La pantalla de restablecimiento de NexoPOS incluye un modo de demostración de Spa Appointments. Proporciona:
- Categorías de servicios y comercio minorista orientadas al spa.
- Productos de servicios reservables con duraciones, buffers, precios y depósitos.
- Funciones del personal de citas.
- Clientes de demostración.
- Habitaciones con imágenes y precios.
- Programación de citas adecuada para el spa de muestra.
Advertencia: esta opción realiza un restablecimiento suave de NexoPOS antes de cargar la demostración. Úsela solo cuando el restablecimiento de los datos de la aplicación sea intencional.
Modelo de datos principal
BellSera almacena sus datos de dominio en estas tablas:
| Table | Responsibility |
|---|---|
| nexopos_appointments | Appointment header, customer snapshot, schedule, status, attendance, payment summary, and linked order. |
| nexopos_appointment_items | Individual services, staff/room assignments, timing, queue state, ratings, and survey state. |
| nexopos_appointment_services | Per-product duration, buffers, activation, and payment/deposit settings. |
| nexopos_appointment_workers | Appointment worker profiles and operational availability. |
| nexopos_appointment_rooms | Rooms, prices, media, descriptions, and availability. |
| nexopos_appointment_category_roles | Roles eligible for each service category. |
| nexopos_appointment_category_workers | Materialized category-to-worker assignments. |
| nexopos_appointment_resources | Additional schedulable resources supported by the scheduling domain. |
| nexopos_appointment_staff_switches | Staff reassignment audit trail. |
El módulo también agrega campos de citas a los pedidos de NexoPOS y a los productos del pedido para que las asignaciones de POS sobrevivan al guardado, la retención, la edición y la recarga del pedido.
HTTP expone
Páginas públicas
| Method | Path | Purpose |
|---|---|---|
| GET | /appointments | Public booking storefront. |
| GET | /appointments/survey/{token} | Public service-rating page. |
API pública
Todos los caminos de la API están bajo /api/ns-appointments/public.
| Method | Path | Purpose |
|---|---|---|
| GET | /catalog | Booking settings, categories, services, rooms, and staff. |
| GET | /services/{product} | One public service. |
| GET | /availability | Available slots for the requested services. |
| POST | /checkout | Create the customer, order, appointment, and service items. |
| GET | /appointments/{reference} | Booking confirmation payload. |
| GET | /survey/{token} | Load a service survey. |
| POST | /survey/{token} | Submit a service rating. |
Los paneles autenticados, las API de POS, de configuración y de informes se definen en Routes/api.php y están protegidas por los permisos de BellSera.
Diseño del contenido
| Path | Responsibility |
|---|---|
| Crud/ | Appointment, room, and worker dashboard CRUD resources. |
| Http/Controllers/ | Public, POS, calendar, settings, room, and report endpoints. |
| Http/Requests/ | Public and POS request validation. |
| Listeners/ | NexoPOS order synchronization, validation, product metadata persistence, and asset injection. |
| Migrations/ | Module tables, order extensions, and permissions. |
| Models/ | Appointment domain models. |
| Resources/Views/ | Public, dashboard, POS, settings, and survey Blade entry points. |
| Resources/ts/ | Vue/TypeScript applications and POS integration. |
| Services/ | Scheduling, availability, checkout, operations, SMS, reporting, and demo logic. |
| Tests/Frontend/ | PHPUnit feature coverage and the POS order-type JavaScript test. |
| Public/build/ | Compiled module assets loaded by NexoPOS. |
El proyecto/directorio independiente no forma parte de las entradas de activos del módulo NexoPOS en funcionamiento. El frontend del módulo activo se compila desde Resources/ts/ usando el archivo raíz vite.config.js.
Desarrollo
Ejecuta una prueba de módulo enfocada:
php artisan test --compact modules/NsAppointments/Tests/Frontend/PublicBookingFlowTest.php
Otros tests de funciones en modules/NsAppointments/Tests/Frontend cubren:
- Reservas públicas y comprobaciones de disponibilidad en tiempo real.
- Creación de pedidos POS y campos de cita entre el pedido y el producto del pedido persistidos.
- Comportamiento del calendario y asistencia.
- Asignación de habitaciones y de categoría/personal.
- Colas de servicio, temporizadores, cambio de personal, calificaciones e informes.
- Configuración de SMS, recordatorios y encuestas.
- Permisos y definiciones de demostración.
Crea el frontend del módulo:
npm run build -- --config modules/NsAppointments/vite.config.js
Los puntos de entrada de Vite son:
- Recursos/ts/pos.ts
- Recursos/ts/booking.ts
- Recursos/ts/calendar.ts
- Recursos/ts/rendimiento-del-personal.ts
- Recursos/ts/settings.ts
- Recursos/ts/survey.ts
Los recursos compilados se escriben en Public/build y se cargan mediante directivas de activos del módulo NexoPOS.