corentin_wakdo/docs/uml/use-cases.md
Imugiii b8cb3ef68d docs(merise): commit P1 conception v0.1 (dictionary, MCD, MCT, MLT, MLD) + UML
Baseline of the P1 conception work produced over sessions 5-7 (was
uncommitted in the working tree). 11-entity model, French naming.
Superseded next by the prod-like revision (English, ~16 entities) per
the 2026-06-04 decision session - this commit preserves the baseline
in history before that rewrite.
2026-06-04 10:19:25 +00:00

11 KiB

Diagramme de cas d'utilisation - Wakdo

Phase UML : P1 - Conception, complement UML (apres MCD) Statut : v0.1 Date : 2026-05-21 Branche : feat/p1-conception Auteur methodologie : BYAN


1. Objet du document

Ce document recense les cas d'utilisation de Wakdo, c'est-a-dire les fonctionnalites observables du systeme du point de vue de ses acteurs. Il complete le MCD (docs/merise/mcd.md) et le dictionnaire (docs/merise/dictionary.md) en passant de la vue donnees a la vue usages.

Le diagramme reste au niveau conceptuel. Il ne prejuge pas de l'ecran ou de l'endpoint qui realisera chaque cas, mais identifie qui fait quoi.

Sources :

  • docs/PROJECT_CONTEXT.md sections 2 (acteurs, processus), 7 (scope RBAC)
  • docs/merise/dictionary.md (entites commande, role, user)

2. Acteurs - perimetre et challenge de pertinence

Le brief (PROJECT_CONTEXT.md section 2 et section 7) definit les acteurs metier. Avant de les retenir, chaque acteur propose dans la consigne initiale est confronte au perimetre reel du projet.

Acteur candidat Statut Justification (perimetre reel)
Client (borne kiosk) Retenu Acteur central du Bloc 1. Compose et valide une commande sur la borne tactile autonome (canal kiosk). Non authentifie.
Manager / Admin Retenu, fusionne en Administration Le brief ne distingue pas "manager" et "admin" comme deux roles. Le role RBAC reel est admin (section 7). Il porte le CRUD catalogue, la gestion des utilisateurs/roles et les stats. On nomme l'acteur Administration pour coller au vocabulaire du brief.
Cuisine Retenu, renomme Preparation Correspond au role RBAC preparation (section 7). Voit la file des commandes a preparer triees par heure de livraison croissante et fait avancer leur statut. Le terme "Cuisine" est un synonyme metier ; le role technique est preparation.
Caisse Ecarte comme acteur distinct Challenge : il n'existe pas de role RBAC caisse (les 3 roles sont admin, preparation, accueil). Le paiement existe dans le cycle (cote Client sur la borne et cote Accueil au comptoir/drive), mais aucun acteur "Caisse" dedie n'est modelise. L'equivalent operationnel le plus proche est l'Accueil (role accueil) qui saisit les commandes au comptoir/drive et remet les commandes livrees.
Accueil Retenu (non liste dans la consigne mais present au brief) Role RBAC accueil. Saisit les commandes au comptoir (canal counter) ou au drive (canal drive), puis remet les commandes au client (passage a delivered). C'est l'acteur qui recouvre le besoin que la consigne attribuait a "Caisse".

Decision sur les acteurs retenus

Quatre acteurs sont conserves au diagramme :

  1. Client (borne, non authentifie)
  2. Administration (role admin)
  3. Preparation (role preparation, ex-"Cuisine")
  4. Accueil (role accueil, recouvre le besoin "Caisse")

Decision actee : il n'y a pas de parcours employe dedie modelise a part. Les cas d'usage des employes (Administration, Preparation, Accueil) sont couverts directement ici. Cette decision suit le mantra du Rasoir d'Ockham (#37) : on evite une couche de modelisation redondante tant qu'aucun besoin ne la justifie.


3. Diagramme de cas d'utilisation

Mermaid ne fournit pas de type usecase natif. La representation ci-dessous utilise un flowchart : les acteurs sont des noeuds a gauche, les cas d'utilisation sont des noeuds arrondis regroupes par sous-systeme, et les fleches portent les relations (<<include>>, <<extend>>) la ou elles ont du sens.

flowchart LR
    %% Acteurs
    Client(("Client<br/>borne kiosk"))
    Admin(("Administration<br/>role admin"))
    Prep(("Preparation<br/>role preparation"))
    Accueil(("Accueil<br/>role accueil"))

    %% Sous-systeme Borne client
    subgraph BORNE["Borne client - Bloc 1"]
        UC1(["Consulter le catalogue"])
        UC2(["Composer un menu"])
        UC3(["Passer une commande"])
        UC4(["Saisir le numero de retrait"])
        UC5(["Recevoir la confirmation"])
        UC6(["Payer la commande"])
    end

    %% Sous-systeme Back-office
    subgraph BACK["Back-office - Bloc 2"]
        UC10(["Gerer le catalogue<br/>categories, produits, menus"])
        UC11(["Gerer les utilisateurs et roles"])
        UC12(["Consulter les statistiques"])
        UC20(["Consulter la file de preparation"])
        UC21(["Faire avancer une commande"])
        UC30(["Saisir une commande<br/>comptoir ou drive"])
        UC31(["Remettre la commande au client"])
        UC40(["S'authentifier"])
    end

    %% Relations Client
    Client --> UC1
    Client --> UC2
    Client --> UC3
    Client --> UC6
    Client --> UC5

    %% include / extend cote borne
    UC3 -. include .-> UC4
    UC3 -. include .-> UC6
    UC2 -. include .-> UC1
    UC3 -. extend .-> UC2

    %% Relations Administration
    Admin --> UC40
    Admin --> UC10
    Admin --> UC11
    Admin --> UC12

    %% Relations Preparation
    Prep --> UC40
    Prep --> UC20
    Prep --> UC21

    %% Relations Accueil
    Accueil --> UC40
    Accueil --> UC30
    Accueil --> UC31
    UC30 -. include .-> UC1

    %% Authentification mutualisee
    UC10 -. include .-> UC40
    UC11 -. include .-> UC40
    UC20 -. include .-> UC40
    UC30 -. include .-> UC40

4. Description des cas d'utilisation

4.1 Acteur Client (borne kiosk)

Cas Description Entites manipulees
Consulter le catalogue Parcourir les categories, produits et menus disponibles. Charges via GET /api/categories, /api/products, /api/menus (ou JSON fallback). categorie, produit, menu
Composer un menu Choisir burger + accompagnement + boisson + sauce, regler les options de taille (normale / grande) et de personnalisation. Etend "Passer une commande" car un menu compose est une variante d'item au panier. menu, menu_produit, produit
Passer une commande Valider le panier, declencher la creation de la commande composee. Inclut la saisie du numero de retrait et le paiement. commande, ligne_commande
Saisir le numero de retrait Renseigner le numero qui identifie le client au comptoir. Cas inclus par "Passer une commande". commande.numero
Payer la commande Regler la commande une fois le panier compose et valide. Materialise la transition pending_payment -> paid de state-commande.md. Cas inclus par "Passer une commande". commande.statut, commande.paye_a
Recevoir la confirmation Afficher l'ecran de confirmation avec le numero, apres paiement. commande

Note de coherence : le cycle de vie comporte deux phases successives, la composition de la commande puis son paiement (regle metier confirmee). Le cas "Payer la commande" est retenu cote Client et materialise la transition pending_payment -> paid de l'ENUM statut (dictionary.md 3.5, state-commande.md).

4.2 Acteur Administration (role admin)

Cas Description Entites manipulees
Gerer le catalogue CRUD sur categories, produits et menus (libelles, prix, images, disponibilite, composition de menu). categorie, produit, menu, menu_produit
Gerer les utilisateurs et roles CRUD sur les comptes back-office et leurs roles ; consultation de la matrice de permissions. user, role, permission, role_permission
Consulter les statistiques Voir les commandes du jour de service, le chiffre d'affaires, les produits les plus commandes. commande, ligne_commande

4.3 Acteur Preparation (role preparation, ex-Cuisine)

Cas Description Entites manipulees
Consulter la file de preparation Afficher les commandes a preparer triees par heure de livraison croissante, tous canaux confondus. commande, ligne_commande
Faire avancer une commande Declarer une commande "preparee", ce qui declenche une transition de statut (voir state-commande.md). commande.statut

4.4 Acteur Accueil (role accueil, recouvre Caisse)

Cas Description Entites manipulees
Saisir une commande Creer une commande pour un client au comptoir (counter) ou au drive (drive), en consultant le catalogue. commande, ligne_commande, produit, menu
Remettre la commande au client Declarer une commande "livree" au moment de la remise physique. commande.statut

4.5 Cas transverse - S'authentifier

Tous les acteurs du back-office (Administration, Preparation, Accueil) passent par "S'authentifier" avant d'acceder a leurs cas. Modelise comme cas inclus (<<include>>) par chaque cas back-office pour eviter de surcharger le diagramme. Le Client de la borne n'est pas authentifie (canal kiosk public).


5. Relations include / extend retenues

Relation Type Justification
Passer une commande -> Saisir le numero de retrait include La saisie du numero fait partie integrante de toute validation de commande.
Passer une commande -> Payer la commande include Le paiement suit la composition du panier et fait partie integrante du parcours (phase 2 du cycle de vie).
Composer un menu -> Consulter le catalogue include Composer un menu suppose de parcourir les produits eligibles a chaque slot.
Passer une commande -> Composer un menu extend Le menu est un cas optionnel : une commande peut ne contenir que des produits a la carte. La composition etend le parcours seulement si le client choisit un menu.
Saisir une commande (Accueil) -> Consulter le catalogue include L'equipier consulte le catalogue pour saisir au comptoir / drive.
Cas back-office -> S'authentifier include Acces conditionne a une session authentifiee.

6. Incoherences remontees vers les autres livrables

Ces ecarts entre les sources sont signales pour arbitrage de l'auteur (la modelisation finale releve de sa decision, mantra de validation humaine).

  1. ENUM statut et phase de paiement (tranche) Le dictionnaire (dictionary.md 3.5) definit statut ENUM('pending_payment','paid','preparing','ready','delivered','cancelled') avec un paiement explicite. La regle metier confirmee fixe deux phases successives, la composition de la commande puis son paiement. Le cas "Payer la commande" est donc retenu cote Client et materialise la transition pending_payment -> paid. Cet ecart est tranche : la machine canonique de state-commande.md fait foi.

  2. Acteur "Caisse" absent du RBAC Aucun role caisse n'existe (PROJECT_CONTEXT.md section 7 : admin, preparation, accueil). La fonction d'encaissement de la consigne a ete rattachee a l'acteur Accueil. A confirmer.

  3. "Manager" vs "Admin" La consigne parle de "Manager/Admin" ; le brief ne connait que admin. Les deux ont ete fusionnes en un acteur Administration. A confirmer si un role manager intermediaire est souhaite (le dictionnaire 3.8 mentionne un role manager extensible, non present dans le scope section 7).