# Cahier des Charges — Back-Office Exploitant ## Projet : Laverie Connectée — Interface d'Administration **Version :** 2.0 **Stack principale :** Laravel 11 + Vue.js 3 + Inertia.js **Positionnement :** V1 simple, cloisonnée par exploitant, démontrable rapidement --- ## 1. Contexte & Objectifs ### 1.1 Objectif Le back-office permet à un exploitant de piloter ses laveries sans exposer les données des autres exploitants présents sur la plateforme. ### 1.2 Objectifs V1 - authentifier les exploitants, - afficher les machines et leur état, - afficher les indicateurs métier de base, - consulter réservations et lavages, - gérer les tarifs, - consulter les alertes techniques simples, - garantir un cloisonnement strict par exploitant. ### 1.3 Principes - une organisation ne voit que ses établissements, - un manager peut être restreint à un établissement, - la V1 privilégie la lisibilité et la fiabilité plutôt que la richesse fonctionnelle, - le temps réel peut être simulé ou remplacé par du polling si nécessaire. --- ## 2. Périmètre fonctionnel ### 2.1 MVP V1 - connexion superviseur, - tableau de bord simple, - liste des machines, - détail machine, - liste des réservations, - liste des lavages, - gestion simple des tarifs, - consultation simple des promotions si activées en V1, - affichage des alertes de base, - audit minimal des actions sensibles. ### 2.2 V2 prévue - campagnes de notifications, - exports avancés, - analytics détaillées, - gestion multi-utilisateurs plus riche, - segmentation marketing, - vue consolidée plus poussée pour groupes de laveries. ### 2.3 Hors périmètre V1 - CRM, - marketing automation, - édition de rapports complexes, - configuration technique profonde des intégrations machines. --- ## 3. Utilisateurs et droits | Rôle | Portée | Droits | |------|--------|--------| | `platform_admin` | plateforme complète | vision globale, administration complète | | `owner` | organization complète | accès complet à ses laveries | | `manager` | organization ou établissement | gestion opérationnelle | | `viewer` | organization ou établissement | lecture seule | ### 3.1 Règle de cloisonnement Toute donnée visible dans le back-office doit être filtrée au minimum par `organization_id`. Si le superviseur est attaché à un établissement précis, la visibilité est encore plus restreinte. --- ## 4. Stack Technique | Composant | Technologie | Version | Commentaire | |-----------|-------------|---------|-------------| | Backend | Laravel 11 | — | Backend partagé avec l'API | | Rendu SPA | Inertia.js | 2.x | Intégration Laravel / Vue | | UI | Vue.js | 3.x | Composition API | | UI kit | PrimeVue | 4.x | Rapide pour dashboard / tables | | Styles | Tailwind CSS | 3.x | Mise en forme rapide | | State | Pinia | 2.x | Si besoin de stores front | | Graphiques | Chart.js | 4.x | KPIs simples | | Tests front | Vitest + Vue Test Utils | — | Composants critiques | | Tests E2E | Playwright | — | Flux exploitant | ### 4.1 Temps réel Le temps réel n'est pas un prérequis absolu de la V1. Deux stratégies possibles : - **V1 rapide** : polling 15 à 30 secondes, - **V1 enrichie** : Laravel Echo / Soketi ou Pusher. Si le délai est serré, le polling est acceptable. --- ## 5. Architecture recommandée ``` resources/js/ ├── Components/ │ ├── Layout/ │ ├── Dashboard/ │ ├── Machines/ │ ├── Pricing/ │ ├── Bookings/ │ ├── Washes/ │ └── UI/ ├── Pages/ │ ├── Auth/ │ ├── Dashboard/ │ ├── Machines/ │ ├── Pricing/ │ ├── Bookings/ │ ├── Washes/ │ └── Settings/ └── app.js ``` ### 5.1 Principe de navigation - menu latéral simple, - accès rapide au dashboard, - pages data-centric, - peu de modales complexes en V1. --- ## 6. Écrans V1 ## 6.1 Connexion ### Fonctionnalités - email, - mot de passe, - message d'erreur clair, - redirection vers dashboard si session active. ### Sécurité - session cookie, - CSRF, - rate limiting. --- ## 6.2 Tableau de bord ### Objectif Donner à l'exploitant une vue immédiate de l'état de ses laveries. ### KPIs V1 - chiffre d'affaires du jour, - nombre de lavages du jour, - réservations du jour, - taux d'occupation courant, - nombre de machines offline / en erreur. ### Sections recommandées - bandeau KPI, - liste des alertes, - aperçu du parc machines, - graphique simple de CA ou occupation. ### Données affichées Toujours filtrées sur le périmètre du superviseur connecté. --- ## 6.3 Liste des machines ### Colonnes minimales - nom, - établissement, - type, - statut, - dernier heartbeat, - utilisateur courant anonymisé si pertinent, - actions. ### Filtres - établissement, - statut, - type. ### Actions V1 - voir détail, - basculer maintenance si autorisé, - forcer disponibilité seulement si besoin réel et journalisé. --- ## 6.4 Détail machine ### Contenu - informations générales, - statut actuel, - historique récent des cycles, - historique récent des événements machines, - tarification appliquée, - alertes récentes, - uptime simple si disponible. Cette page est très utile pour la démo car elle montre la profondeur du produit sans nécessiter trop d'écrans. --- ## 6.5 Réservations ### Vue liste - utilisateur anonymisé, - machine, - établissement, - créneau, - statut, - montant réservé, - pénalité éventuelle. ### Filtres - période, - établissement, - machine, - statut. --- ## 6.6 Lavages ### Vue liste - utilisateur anonymisé, - machine, - établissement, - heure de démarrage, - heure de fin, - coût, - statut. ### Intérêt Permet à l'exploitant de relier l'activité terrain au chiffre d'affaires. --- ## 6.7 Tarification ### Vue liste - établissement, - machine ou type de machine, - plage horaire, - prix, - libellé, - actif / inactif. ### Formulaire V1 - machine ou type, - jours applicables, - heure début / fin, - prix, - libellé, - tarif exclusif app si retenu. ### Validations - pas de plage inversée, - pas de conflit de règles non géré, - audit de toute modification. --- ## 6.8 Promotions Si activé en V1, les promotions restent simples : - portée établissement, - type de machine, - réduction fixe ou pourcentage, - date début / fin. Si le timing est trop serré, cette page peut être préparée mais non activée en démonstration. --- ## 6.9 Paramètres ### Contenu minimal - profil superviseur, - établissement ou organisation associés, - informations de session, - éventuellement préférences simples. --- ## 7. Cloisonnement des données ### Règles obligatoires - `platform_admin` : accès global, - `owner` : toutes les laveries de son organization, - `manager` : selon son scope, - `viewer` : lecture seule. ### Implémentation - policies Laravel, - query scopes, - tests dédiés au cloisonnement. ### Interdiction Aucune page ne doit faire remonter des agrégats globaux non filtrés à un exploitant local. --- ## 8. Audit ### Actions à journaliser - connexion superviseur, - modification de tarif, - création / modification de promotion, - changement manuel de statut machine, - toute action d'administration sensible. ### Utilité - sécurité, - compréhension métier, - support, - preuve en cas de litige. --- ## 9. Temps réel / polling ### Option 1 - Polling V1 recommandé si délai serré - refresh du dashboard toutes les 30 secondes, - refresh détail machine toutes les 15 à 30 secondes. ### Option 2 - Temps réel enrichi - Echo, - Soketi ou Pusher, - mise à jour machine / alertes / KPIs. ### Recommandation Pour la démo de fin de mois, le polling propre est souvent suffisant. --- ## 10. Sécurité ### 10.1 Authentification - session cookie sécurisée, - CSRF, - timeout de session, - rate limiting login. ### 10.2 Autorisation - policies explicites par rôle, - filtre systématique des établissements. ### 10.3 Données utilisateur - anonymisation des noms dans les écrans exploitants si non nécessaire, - pas d'affichage d'email complet côté exploitation terrain. --- ## 11. Dashboard de démo Le dashboard de démo doit montrer visuellement : - plusieurs laveries sur la plateforme, - un exploitant qui ne voit que les siennes, - des machines dans plusieurs états, - un lavage qui démarre puis se termine, - un KPI qui évolue, - une tarification modifiable. C'est le meilleur compromis entre crédibilité et temps de développement. --- ## 12. Tests | Type | Outil | Portée | |------|-------|--------| | Controllers | Pest | Accès dashboard, pricing, machines | | Components | Vitest | KPIs, listes, formulaires | | E2E | Playwright | Connexion, dashboard, tarif, machine | ### Cas critiques 1. un exploitant A ne voit pas les données de B, 2. un viewer ne peut pas modifier un tarif, 3. un manager voit les bons KPI, 4. une machine passe de disponible à en cours, 5. une modification de tarif est auditée. --- ## 13. Livrables attendus - code source back-office, - pages Inertia principales, - dataset de démonstration multi-exploitants, - audit minimal, - tests critiques, - guide court de démonstration.