BellSera — Gestion de la réservation Spa & Salon pour NexoPOS
BellSera ajoute la planification des rendez-vous de service et les opérations quotidiennes de service à NexoPOS. Elle relie le catalogue de produits, les clients, les commandes, le personnel, les salles, les paiements et le point de vente afin qu’une entreprise de services puisse gérer à la fois les réservations planifiées et les clients de passage depuis un seul système.
Le module comprend :
- Une page de réservation en libre-service pour le public.
- Types de commande POS : réservation et sans réservation.
- Un calendrier de rendez-vous et une liste de rendez-vous.
- Gestion de la disponibilité du personnel et des salles.
- Files d’exécution multi-services avec minuteries persistantes.
- Outils de présence, de paiement, de changement de personnel, d’évaluation et de reporting.
- Messages SMS optionnels de confirmation, de rappel et d’enquête via NsSMS.
Informations sur le module
| 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 |
Aperçu des fonctionnalités
Réservation en ligne publique
La page publique de réservation permet à un client :
- Parcourez les catégories de services et les services disponibles.
- Passez en revue l’image, la description, la durée, le prix et l’exigence de paiement de chaque service.
- Ajoutez un ou plusieurs services à un panier de réservation.
- Choisissez n’importe quel membre du personnel disponible ou demandez un membre du personnel éligible spécifique.
- Choisissez une chambre disponible lorsque l’attribution des chambres est activée.
- Choisissez une date et recherchez un créneau de rendez-vous valide.
- Entrez leur nom, leur adresse e-mail, leur numéro de téléphone et leurs notes.
- Soumettez la demande de rendez-vous et recevez une référence de réservation unique.
Les créneaux disponibles respectent :
- Jours ouvrés et horaires d’ouverture configurés.
- L’intervalle de créneau.
- Délai minimum de réservation.
- La fenêtre maximale de réservation à l’avance.
- Durée du service et tampons avant/après.
- Rôles du personnel assignés à chaque catégorie de service.
- Rendez-vous existants qui bloquent le personnel, la salle ou la ressource sélectionnés.
- L’état opérationnel actuel du personnel et des salles.
Le paiement public crée ou réutilise un client NexoPOS, crée une commande NexoPOS liée et enregistre le rendez-vous ainsi que ses lignes de services individuelles.
Note de paiement : la page publique calcule s’il n’y a aucun paiement à effectuer, un acompte partiel ou un paiement intégral requis. Elle enregistre le montant comme dû et affiche les instructions de paiement manuel configurées. Elle ne traite pas directement un paiement en ligne.
Les points de terminaison de disponibilité publique et de paiement sont limités en débit afin de réduire les abus.
Configuration du catalogue de services
BellSera étend le catalogue NexoPOS plutôt que de maintenir une base de données produit distincte.
Dans les paramètres de BellSera → Catalogue, les administrateurs peuvent définir :
- Catégories de services — les produits de ces catégories peuvent devenir des services réservables.
- Catégories de produits vendables — produits de vente au détail réguliers ou modules complémentaires optionnels pour rendez-vous.
- Affectation de salle — si une salle doit être sélectionnée pour les services de rendez-vous au point de vente (POS).
Une catégorie ne peut pas être à la fois une catégorie de service et une catégorie vendable.
Chaque produit possède un onglet de configuration Rendez-vous avec :
- Service réservable activé/désactivé.
- Durée du service en minutes.
- Temps tampon avant le service.
- Temps tampon après le service.
- Exigence de paiement : aucune, acompte partiel ou paiement intégral.
- Type de dépôt : montant fixe ou pourcentage.
- Valeur du dépôt.
Un service doit disposer d’une unité de vente configurée avant de pouvoir être planifié.
Inscription du personnel et admissibilité aux services
Le personnel des rendez-vous est basé sur les utilisateurs et les rôles NexoPOS normaux.
Les administrateurs configurent :
- Les rôles NexoPOS dont les utilisateurs actifs peuvent devenir du personnel de rendez-vous.
- Les rôles autorisés à effectuer des services dans chaque catégorie de services.
- Le nom d’affichage de chaque travailleur.
- Que le travailleur soit autorisé pour les rendez-vous.
- La disponibilité actuelle du travailleur : disponible, indisponible ou occupé.
Les profils des travailleurs sont créés automatiquement à partir des rôles configurés. Ils ne peuvent pas être créés manuellement ni supprimés depuis l’écran du personnel des rendez-vous ; désactivez plutôt un profil de travailleur.
Seuls les travailleurs actifs et disponibles disposant d’un rôle éligible pour une catégorie de service sont proposés pour de nouvelles réservations. Démarrer un service rend le travailleur occupé, et terminer ou arrêter le dernier service actif du travailleur le rend à nouveau disponible.
Gestion de la salle
Les salles peuvent être créées et gérées depuis BellSera → Salles.
Chaque pièce prend en charge :
- Nom.
- Miniature.
- Description.
- Prix supplémentaire.
- Statut de disponibilité : disponible, indisponible ou occupé.
Seules les chambres disponibles peuvent être attribuées. Une chambre peut être libre ou ajouter un supplément au service.
Au point de vente, des frais de chambre sont appliqués une fois par ligne de service :
total ligne = (prix unitaire du service × quantité − remise) + frais de chambre
Le tarif de la chambre n’est pas multiplié par la quantité de service. Les chambres peuvent également être renvoyées manuellement à l’état disponible avec Définir la chambre libre.
Réservations POS et entrées sans réservation
Le module enregistre deux types de commandes 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. |
Lorsque l’un ou l’autre type de commande est activé dans les paramètres des types de commande de NexoPOS, BellSera ajoute le flux de travail de rendez-vous à la caisse :
- Invite le/la caissier(ère) à choisir Réservation ou Sans réservation après une réinitialisation du panier.
- Reconnaît les produits configurés comme des services sur rendez-vous.
- Sélectionne une chambre disponible lorsque l’attribution des chambres est activée.
- Sélectionne le personnel éligible disponible à l’heure du service.
- Affiche le personnel assigné et les informations de la salle sous chaque ligne de chariot de service.
- Permet de modifier les affectations du personnel et des salles depuis le panier.
- Gère les quantités en réservant un travailleur pour chaque occurrence de service planifiée.
- Revalide les informations de réservation avant le paiement lorsque le panier de services change.
- Empêche une commande payée/non conservée d’utiliser un travailleur, une salle ou un créneau horaire indisponible.
- Conserve les champs de rendez-vous lorsqu’une commande est mise en attente, modifiée, puis rechargée.
- Crée automatiquement un rendez-vous lié après la création ou la mise à jour de la commande NexoPOS.
L’en-tête du point de vente inclut également un bouton Rendez-vous qui ouvre le calendrier et l’interface des opérations de service en plein écran, sans quitter le point de vente.
Gestion des rendez-vous du tableau de bord
Le menu du tableau de bord BellSera fournit :
- Calendrier
- Rendez-vous
- Créer un rendez-vous
- Pièces
- Disponibilité du personnel
- Performance du personnel
- Paramètres de BellSera
La liste des rendez-vous permet de créer, modifier, supprimer et supprimer en bloc des enregistrements de rendez-vous conformément aux autorisations de l’utilisateur actuel.
Un rendez-vous créé manuellement peut inclure :
- Une référence générée ou personnalisée.
- Date/heure de début et de fin.
- Statut du rendez-vous et source.
- Personnel ou salle assigné(e).
- Nom du client, adresse e-mail et numéro de téléphone.
- Notes internes.
La planification manuelle rejette les conflits de personnel ou de salle. Au moins un membre du personnel ou une salle doit être affecté(e).
Opérations sur le calendrier et les jours
Le calendrier affiche les réservations planifiées et les visites sans rendez-vous, et offre une vue opérationnelle détaillée pour chaque rendez-vous.
Les opérateurs peuvent :
- Accédez au calendrier mensuel et ouvrez tous les rendez-vous pour une journée.
- Distinguer les réservations des clients sans réservation.
- Vérifiez les informations relatives aux clients, au service, au personnel, à la chambre, à la commande et au paiement.
- Modifier le statut du cycle de vie du rendez-vous.
- Enregistrer la présence et une note de présence.
- Ouvrez l’onglet de paiement de la commande NexoPOS liée pour ajouter un paiement lorsqu’un solde reste disponible.
- Ouvrez un service individuel pour le démarrer, le surveiller, le terminer ou l’arrêter.
- Surveillez chaque service actuellement en cours d’exécution depuis le hub des services actifs.
Les statuts du cycle de vie des rendez-vous sont :
- paiement en attente
- en attente de confirmation
- confirmé
- enregistré(e)
- terminé
- annulé
- no_show
- expiré
La présence est suivie indépendamment comme suit :
- attendu
- arrivé
- tard
- no_show
- gauche
La présence et le statut du cycle de vie sont synchronisés de manière souple. Par exemple, marquer un client confirmé comme arrivé vérifie le rendez-vous, tandis qu’une mise à jour de présence en cas de non-présentation peut marquer un rendez-vous ouvert comme une non-présentation.
Les réservations planifiées doivent être marquées Arrivé ou En retard avant qu’un service puisse commencer. Les clients sans réservation peuvent commencer immédiatement.
Exécution du service, minuteries et files d’attente
Chaque ligne de service a son propre état opérationnel :
- en attente
- prêt
- en cours
- terminé
- incomplet
- annulé
Le premier service disponible est promu à l’état Prêt. Les opérateurs peuvent ensuite :
- Démarrez le service prêt.
- Suivez un minuteur de temps écoulé/décompte basé sur la durée du service.
- Fermez et rouvrez le minuteur sans arrêter le service.
- Terminez le service avec succès.
- Arrêtez le service car il est incomplet.
- Redémarrer un service incomplet.
- Démarrez le prochain service prêt.
- Réorganisez les services en attente, prêts et incomplets à l’aide du glisser-déposer ou des contrôles par flèches.
Les services en cours, terminés et annulés sont verrouillés et ne peuvent pas être réorganisés.
Démarrer un service marque l’agent et la salle assignés comme occupés. Le terminer ou l’arrêter libère ces ressources lorsqu’elles ne sont pas utilisées par un autre service en cours.
Le calendrier interroge le serveur pour les services actifs et met en évidence les services dont la durée prévue est atteinte.
Un travail de sécurité horaire peut automatiquement arrêter les services qui sont restés en cours plus longtemps que le seuil d’inactivité configuré. Définissez Service Idle Auto-Stop sur 0 pour désactiver ce comportement.
Changement de personnel
Les services éligibles peuvent être réaffectés à un autre travailleur disponible.
Le module :
- Affiche uniquement les travailleurs éligibles à la catégorie de service et gratuits pour la fenêtre de service.
- Nécessite une raison pour le changement.
- Arrête un service en cours avant de le remplacer, car il est incomplet.
- Libère le travailleur précédent lorsque cela est approprié.
- Enregistre une entrée d’audit contenant l’ancien travailleur, le nouveau travailleur, la raison, l’état du service et l’heure de basculement.
- Nombre de services transférés hors de l’équipe dans les rapports de performance du personnel.
Notes et enquêtes clients
Les services terminés peuvent recevoir une note de 1 à 5.
Les notes peuvent être saisies :
- Par un opérateur autorisé depuis l’écran des opérations de service.
- Par le client via un lien d’enquête publique unique envoyé par SMS.
Chaque lien d’enquête est associé à un seul service terminé et ne peut être utilisé que tant que ce service reste éligible à l’évaluation. Une fois soumis, l’évaluation et l’horodatage sont enregistrés sur l’élément de rendez-vous.
Rapports sur la performance du personnel
La page **Performances du personnel** accepte une période et affiche ce qui suit par employé et en totaux :
- Services démarrés.
- Services terminés.
- Services arrêtés car incomplets.
- Services désactivés.
- Nombre de services évalués.
- Note moyenne.
- Taux d’achèvement.
Par défaut, le rapport couvre le début du mois en cours jusqu’à aujourd’hui.
Notifications SMS facultatives
La livraison SMS est une intégration souple avec le module optionnel NsSMS. Une livraison SMS manquante ou échouée ne bloque jamais un flux de travail de rendez-vous.
Lorsque NsSMS est installé, activé et configuré avec un fournisseur, BellSera peut envoyer :
- Une confirmation lorsque le rendez-vous passe pour la première fois à confirmé.
- Un rappel avant un rendez-vous confirmé.
- Un lien d’enquête unique une fois le service terminé.
Les choix du délai de prévenance sont de 1, 3, 6, 12 ou 24 heures.
Les modèles prennent en charge ces balises :
#customer_name# #customer_phone# #appointment_reference# #starts_at# #ends_at# #service_name# #staff_name# #room_name# #store_name# #survey_url#
Les messages de confirmation, de rappel et d’enquête sont envoyés au plus une fois pour l’enregistrement correspondant.
Liste de contrôle de configuration
Utilisez cet ordre lors de la configuration d’une nouvelle installation :
- Activez le module NsAppointments.
- Ouvrez les paramètres de BellSera → Catalogue, puis sélectionnez les catégories de services et de produits vendables.
- Modifiez chaque produit de service et configurez son onglet Rendez-vous.
- Sélectionnez les rôles NexoPOS qui doivent créer le personnel des rendez-vous.
- Modifiez chaque catégorie de service et attribuez les rôles qui peuvent l’effectuer.
- Vérifiez les profils de travailleurs générés sous Disponibilité du personnel.
- Créez des salles et activez l’attribution des salles si l’entreprise utilise des salles.
- Configurer les jours ouvrés, les heures, l’intervalle de créneau, le délai de préavis et la fenêtre de réservation.
- Activer la réservation et/ou le service sans rendez-vous dans les paramètres du type de commande NexoPOS.
- Installez et configurez éventuellement NsSMS, puis personnalisez les modèles SMS des rendez-vous.
- Assurez-vous que le planificateur Laravel et le worker de file d’attente sont en cours d’exécution si des rappels SMS ou un arrêt automatique en cas d’inactivité sont requis.
Référence des paramètres
Catalogue
| 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. |
Personnel
| Setting | Purpose |
|---|---|
| Staff Roles | Active users in these roles are provisioned as appointment workers. |
Réservation
| 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. |
Autorisations
Les migrations de module attribuent toutes les autorisations BellSera aux rôles Administrateur NexoPOS et Administrateur de magasin.
| 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. |
Les routes du serveur appliquent ces autorisations ; la visibilité du menu n’est pas la limite de sécurité.
Automatisation planifiée
Le module contribue à deux tâches planifiées :
| 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. |
Les deux emplois implémentent le contrat de job en file d’attente de Laravel. Les déploiements en production qui utilisent ces fonctionnalités doivent exécuter le planificateur NexoPOS/Laravel et un worker de file d’attente.
Données de démonstration
L’écran de réinitialisation NexoPOS inclut un mode de démonstration des rendez-vous Spa. Il provisionne :
- Catégories de services et de vente au détail axées sur le spa.
- Produits de services réservables avec durées, temps tampons, prix et acomptes.
- Rôles du personnel pour les rendez-vous.
- Clients démo.
- Chambres avec images et prix.
- Prise de rendez-vous adaptée au spa de démonstration.
Avertissement : cette option effectue une réinitialisation logicielle de NexoPOS avant de charger la démo. Utilisez-la uniquement lorsque la réinitialisation des données de l’application est intentionnelle.
Modèle de données principal
BellSera stocke ses données de domaine dans ces tables :
| 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. |
Le module ajoute également des champs de rendez-vous aux commandes NexoPOS et aux produits de commande afin que les attributions du point de vente restent valides lors de l’enregistrement, de la mise en attente, de la modification et du rechargement de la commande.
Exposition HTTP
Pages publiques
| Method | Path | Purpose |
|---|---|---|
| GET | /appointments | Public booking storefront. |
| GET | /appointments/survey/{token} | Public service-rating page. |
API publique
Tous les chemins d’API se trouvent sous /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. |
Le tableau de bord authentifié, les API POS, les paramètres et les API de rapport sont définis dans Routes/api.php et protégés par les autorisations BellSera.
Disposition du contenu
| 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. |
Le projet autonome / le répertoire n’est pas inclus dans les entrées d’assets du module NexoPOS en production. Le frontend du module actif est construit à partir de Resources/ts/ en utilisant le fichier racine vite.config.js.
Développement
Exécutez un test de module ciblé :
php artisan test --compact modules/NsAppointments/Tests/Frontend/PublicBookingFlowTest.php
D’autres tests de fonctionnalités dans modules/NsAppointments/Tests/Frontend portent sur :
- Réservation publique et vérifications de disponibilité strictes.
- Création de commande POS et champs d’association commande-produit persistés.
- Comportement du calendrier et présence.
- Attribution des chambres et de la catégorie / du personnel.
- Files d’attente de service, minuteries, basculement du personnel, évaluations et rapports.
- Paramètres SMS, rappels et enquêtes.
- Autorisations et définitions de démonstration.
Construire le module frontend :
npm run build -- --config modules/NsAppointments/vite.config.js
Les points d’entrée Vite sont :
- Ressources/ts/pos.ts
- Ressources/ts/booking.ts
- Ressources/ts/calendar.ts
- Ressources/ts/staff-performance.ts
- Ressources/ts/settings.ts
- Ressources/ts/survey.ts
Les ressources compilées sont écrites dans Public/build et chargées via les directives d’assets du module NexoPOS.