docs: add conception diagrams and business rules

This commit is contained in:
SaidSoighiri94
2026-06-04 13:31:34 +02:00
parent a1591a22a6
commit e8d0f738d6
8 changed files with 1688 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

+235
View File
@@ -0,0 +1,235 @@
```mermaid
erDiagram
CAMPUS {
int id PK
string nom
string adresse
string ville
string code_postal
boolean actif
datetime created_at
datetime updated_at
}
SALLE_PRET {
int id PK
string nom
string localisation
int campus_id FK
boolean actif
datetime created_at
datetime updated_at
}
POSTE_EMPRUNT {
int id PK
string nom
string identifiant_poste
int salle_pret_id FK
boolean actif
datetime created_at
datetime updated_at
}
ROLE {
int id PK
string code UK
string libelle
string description
}
UTILISATEUR {
int id PK
string microsoft_id UK
string nom
string prenom
string email UK
string classe "nullable"
int role_id FK
int campus_id FK
boolean actif
datetime created_at
datetime updated_at
}
CARTE_ETUDIANTE {
int id PK
int utilisateur_id FK
string qr_code
datetime date_activation
datetime date_expiration
boolean actif
datetime created_at
datetime updated_at
}
CATEGORIE_MATERIEL {
int id PK
string nom
string description
boolean actif
datetime created_at
datetime updated_at
}
MATERIEL {
int id PK
string nom
string marque
string modele
string reference
string numero_inventaire
string numero_serie
string statut
string etat_general
int categorie_id FK
int campus_id FK
boolean actif
datetime created_at
datetime updated_at
}
ACCESSOIRE {
int id PK
string nom
string description
boolean actif
datetime created_at
datetime updated_at
}
MATERIEL_ACCESSOIRE {
int id PK
int materiel_id FK
int accessoire_id FK
int quantite_attendue
boolean obligatoire
}
EMPRUNT {
int id PK
int utilisateur_id FK
int materiel_id FK
int campus_id FK
int salle_pret_id FK
int poste_emprunt_id FK
datetime date_emprunt
datetime date_retour_prevue
datetime date_retour_reelle
string statut
string mode_identification_emprunt
string mode_identification_retour
string commentaire_depart
string commentaire_retour
datetime created_at
datetime updated_at
}
CHECKLIST {
int id PK
int emprunt_id FK
int utilisateur_id FK
string type
datetime date_verification
string commentaire
datetime created_at
datetime updated_at
}
CHECKLIST_ELEMENT {
int id PK
int checklist_id FK
int accessoire_id FK
string nom_element
string etat
int quantite_constatee
string commentaire
datetime created_at
datetime updated_at
}
ANOMALIE {
int id PK
int emprunt_id FK
int materiel_id FK
int utilisateur_id FK
int traitee_par_id FK
string type
string description
string statut
boolean detectee_automatiquement
string observation
datetime date_detection
datetime date_resolution
datetime created_at
datetime updated_at
}
HISTORIQUE {
int id PK
int utilisateur_id FK
int emprunt_id FK
int materiel_id FK
int campus_id FK
int salle_pret_id FK
int poste_emprunt_id FK
string action
string description
datetime date_action
datetime created_at
}
NOTIFICATION {
int id PK
int utilisateur_id FK
int anomalie_id FK
string titre
string message
string type
boolean lu
datetime date_creation
}
CAMPUS ||--o{ SALLE_PRET : "contient"
CAMPUS ||--o{ UTILISATEUR : "rattache"
CAMPUS ||--o{ MATERIEL : "possede"
CAMPUS ||--o{ EMPRUNT : "localise"
CAMPUS ||--o{ HISTORIQUE : "concerne"
SALLE_PRET ||--o{ POSTE_EMPRUNT : "possede"
SALLE_PRET ||--o{ EMPRUNT : "concerne"
SALLE_PRET ||--o{ HISTORIQUE : "localise"
POSTE_EMPRUNT ||--o{ EMPRUNT : "enregistre"
POSTE_EMPRUNT ||--o{ HISTORIQUE : "trace_optionnelle"
ROLE ||--o{ UTILISATEUR : "attribue"
UTILISATEUR ||--o{ CARTE_ETUDIANTE : "possede"
UTILISATEUR ||--o{ EMPRUNT : "effectue"
UTILISATEUR ||--o{ CHECKLIST : "renseigne"
UTILISATEUR ||--o{ ANOMALIE : "concerne"
UTILISATEUR ||--o{ ANOMALIE : "traite"
UTILISATEUR ||--o{ HISTORIQUE : "declenche"
UTILISATEUR ||--o{ NOTIFICATION : "recoit"
CATEGORIE_MATERIEL ||--o{ MATERIEL : "classe"
MATERIEL ||--o{ MATERIEL_ACCESSOIRE : "possede"
ACCESSOIRE ||--o{ MATERIEL_ACCESSOIRE : "compose"
MATERIEL ||--o{ EMPRUNT : "concerne"
EMPRUNT ||--o{ CHECKLIST : "possede"
CHECKLIST ||--o{ CHECKLIST_ELEMENT : "contient"
ACCESSOIRE ||--o{ CHECKLIST_ELEMENT : "verifie"
EMPRUNT ||--o{ ANOMALIE : "genere"
MATERIEL ||--o{ ANOMALIE : "concerne"
EMPRUNT ||--o{ HISTORIQUE : "trace"
MATERIEL ||--o{ HISTORIQUE : "concerne"
ANOMALIE ||--o{ NOTIFICATION : "genere"
```
+240
View File
@@ -0,0 +1,240 @@
```mermaid
classDiagram
class Campus {
+int id
+String nom
+String adresse
+String ville
+String codePostal
+Boolean actif
}
class SallePret {
+int id
+String nom
+String localisation
+Boolean actif
}
class PosteEmprunt {
+int id
+String nom
+String identifiantPoste
+Boolean actif
}
class Utilisateur {
+int id
+String microsoftId
+String nom
+String prenom
+String email
+String classe
+Boolean actif
}
class Role {
+int id
+String code
+String libelle
+String description
}
class CarteEtudiante {
+int id
+String qrCode
+DateTime dateActivation
+DateTime dateExpiration
+Boolean actif
}
class CategorieMateriel {
+int id
+String nom
+String description
+Boolean actif
}
class Materiel {
+int id
+String nom
+String marque
+String modele
+String reference
+String numeroInventaire
+String numeroSerie
+StatutMateriel statut
+String etatGeneral
+Boolean actif
+verifierDisponibilite()
+changerStatut()
}
class Accessoire {
+int id
+String nom
+String description
+Boolean actif
}
class MaterielAccessoire {
+int id
+int materielId
+int accessoireId
+int quantiteAttendue
+Boolean obligatoire
}
class Emprunt {
+int id
+DateTime dateEmprunt
+DateTime dateRetourPrevue
+DateTime dateRetourReelle
+StatutEmprunt statut
+ModeIdentification modeIdentificationEmprunt
+ModeIdentification modeIdentificationRetour
+String commentaireDepart
+String commentaireRetour
+creer()
+enregistrerRetour()
+cloturer()
+marquerEnRetard()
}
class Checklist {
+int id
+TypeChecklist type
+DateTime dateVerification
+String commentaire
+valider()
}
class ChecklistElement {
+int id
+String nomElement
+EtatChecklistElement etat
+int quantiteConstatee
+String commentaire
}
class Anomalie {
+int id
+String type
+String description
+StatutAnomalie statut
+Boolean detecteeAutomatiquement
+String observation
+DateTime dateDetection
+DateTime dateResolution
+ajouterObservation()
+changerStatut()
+cloturer()
}
class Historique {
+int id
+String action
+String description
+DateTime dateAction
}
class Notification {
+int id
+String titre
+String message
+String type
+Boolean lu
+DateTime dateCreation
+marquerCommeLue()
}
class StatutMateriel {
<<enumeration>>
DISPONIBLE
EMPRUNTE
NON_CONFORME
DETERIORE
MAINTENANCE
INDISPONIBLE
}
class StatutEmprunt {
<<enumeration>>
EN_COURS
EN_RETARD
CLOTURE
RETOUR_NON_CONFORME
ANNULE
}
class TypeChecklist {
<<enumeration>>
DEPART
RETOUR
}
class EtatChecklistElement {
<<enumeration>>
PRESENT
ABSENT
DETERIORE
}
class StatutAnomalie {
<<enumeration>>
DETECTEE
EN_COURS_TRAITEMENT
RESOLUE
CLOTUREE
}
class ModeIdentification {
<<enumeration>>
QR_CODE
MAIL_ENSUP
}
Campus "1" --> "0..*" SallePret : contient
Campus "1" --> "0..*" Utilisateur : rattache
Campus "1" --> "0..*" Materiel : possede
Campus "1" --> "0..*" Emprunt : localise
Campus "0..1" --> "0..*" Historique : concerne_campus
SallePret "1" --> "0..*" PosteEmprunt : possede
SallePret "1" --> "0..*" Emprunt : concerne
SallePret "0..1" --> "0..*" Historique : localise
PosteEmprunt "1" --> "0..*" Emprunt : enregistre
PosteEmprunt "0..1" --> "0..*" Historique : trace
Role "1" --> "0..*" Utilisateur : attribue
Utilisateur "1" --> "0..*" CarteEtudiante : possede
Utilisateur "1" --> "0..*" Emprunt : effectue
Utilisateur "1" --> "0..*" Checklist : renseigne
Utilisateur "1" --> "0..*" Historique : declenche
Utilisateur "1" --> "0..*" Notification : recoit
CategorieMateriel "1" --> "0..*" Materiel : classe
Materiel "1" --> "0..*" MaterielAccessoire : possede
Accessoire "1" --> "0..*" MaterielAccessoire : compose
Materiel "1" --> "0..*" Emprunt : concerne
Emprunt "1" --> "1..2" Checklist : possede
Checklist "1" --> "1..*" ChecklistElement : contient
Accessoire "0..1" --> "0..*" ChecklistElement : verifie
Emprunt "1" --> "0..*" Anomalie : genere
Materiel "1" --> "0..*" Anomalie : concerne
Utilisateur "1" --> "0..*" Anomalie : concerne_etudiant
Utilisateur "0..1" --> "0..*" Anomalie : traitee_par_responsable
Emprunt "0..1" --> "0..*" Historique : trace
Materiel "0..1" --> "0..*" Historique : concerne
Anomalie "0..1" --> "0..*" Notification : genere
```
+153
View File
@@ -0,0 +1,153 @@
# Règles métier — EME
## Nouveau workflow d'emprunt et de restitution autonome
Les règles métier définissent les contraintes fonctionnelles que l'application EME — Emprunt Matériel ENSUP doit respecter dans le cadre du nouveau workflow validé.
> **Terminologie :** le terme **« responsable matériel »** désigne tout membre habilité de l'équipe pédagogique disposant du rôle technique `RESPONSABLE`. Il s'agit d'une habilitation accordée à un membre de l'équipe pédagogique, et non d'un poste dédié à part entière.
---
## 1. Identification de l'étudiant
**RG01 — Identification obligatoire**
L'étudiant doit obligatoirement être identifié avant de pouvoir emprunter ou restituer du matériel. Si l'étudiant n'est pas reconnu, l'accès au parcours est refusé.
**RG02 — Modes d'identification autorisés**
L'identification se fait par scan du QR code de la carte étudiante dématérialisée ou par saisie du mail ENSUP. Le mode utilisé doit être conservé pour chaque opération.
**RG03 — Récupération automatique du profil**
Après identification, le système récupère automatiquement les informations de l'étudiant : nom, prénom, mail, classe et campus.
---
## 2. Poste dédié et salle de prêt
**RG04 — Opérations depuis un poste dédié**
Les opérations d'emprunt et de restitution doivent être réalisées depuis un poste informatique dédié rattaché à une salle de prêt, elle-même rattachée à un campus.
**RG05 — Traçabilité du lieu d'opération**
Chaque emprunt et restitution doit être associé au poste dédié, à la salle de prêt et au campus utilisés.
---
## 3. Matériel
**RG06 — Identification unique du matériel**
Chaque matériel doit être identifié de manière unique par une référence, un numéro d'inventaire ou un numéro de série, et rattaché à une catégorie, un campus et un statut.
**RG07 — Disponibilité du matériel**
Seuls les matériels ayant le statut `DISPONIBLE` peuvent être empruntés. Un matériel emprunté, non conforme, détérioré, en maintenance ou indisponible ne peut pas faire l'objet d'un nouvel emprunt.
**RG08 — Accessoires attendus**
Chaque matériel peut être associé à une liste d'accessoires attendus (chargeur, souris, câble, housse, etc.).
---
## 4. Emprunt
**RG09 — Démarrage du parcours d'emprunt**
L'étudiant doit choisir l'action `Emprunter` depuis l'écran d'accueil, puis s'identifier, pour démarrer un emprunt.
**RG10 — Affichage des matériels disponibles**
Après identification, le système affiche uniquement les matériels disponibles du campus concerné.
**RG11 — Checklist de départ obligatoire**
Une checklist de départ doit être obligatoirement renseignée avant la création de l'emprunt. Elle reprend les accessoires attendus du matériel sélectionné. L'étudiant indique pour chaque élément son état : `PRESENT`, `ABSENT` ou `DETERIORE`.
**RG12 — Création automatique de l'emprunt**
Après validation de la checklist de départ, le système crée automatiquement l'emprunt, enregistre la date et l'heure, et fait passer le matériel au statut `EMPRUNTE`.
**RG13 — Détection automatique des emprunts en retard**
Lorsqu'un emprunt dépasse sa date de retour prévue sans avoir été restitué, son statut passe automatiquement à `EN_RETARD` et il apparaît dans le tableau de bord du responsable matériel.
---
## 5. Restitution
**RG14 — Démarrage du parcours de restitution**
L'étudiant doit choisir l'action `Restituer` depuis l'écran d'accueil, puis s'identifier, pour démarrer une restitution.
**RG15 — Affichage des emprunts en cours**
Après identification, le système affiche uniquement les emprunts en cours de l'étudiant identifié. Un étudiant ne peut restituer que ses propres emprunts.
**RG16 — Checklist de retour obligatoire**
Une checklist de retour doit obligatoirement être renseignée. Elle reprend les mêmes éléments que la checklist de départ pour permettre la comparaison.
**RG17 — Comparaison automatique des checklists**
Le système compare automatiquement la checklist de départ avec la checklist de retour pour déterminer la conformité de la restitution.
**RG18 — Retour conforme**
Si la checklist de retour correspond à celle de départ, l'emprunt est clôturé et le matériel repasse au statut `DISPONIBLE`.
**RG19 — Retour non conforme**
Si une différence est détectée, l'emprunt passe au statut `RETOUR_NON_CONFORME` et le matériel peut passer à `NON_CONFORME`, `DETERIORE`, `MAINTENANCE` ou `INDISPONIBLE` selon le problème détecté.
---
## 6. Anomalies
**RG20 — Création automatique d'une anomalie**
Une anomalie est créée automatiquement si un élément présent au départ est absent au retour, ou si un élément est déclaré détérioré au retour.
**RG21 — Association de l'anomalie**
Chaque anomalie doit être associée à l'étudiant concerné, au matériel, à l'emprunt et aux éléments de checklist concernés.
**RG22 — Visibilité des anomalies**
Les anomalies sont visibles par le responsable matériel dans son tableau de bord. Un étudiant peut consulter les anomalies liées à ses propres emprunts.
**RG23 — Traitement des anomalies**
Le responsable matériel peut consulter une anomalie, ajouter une observation et modifier son statut selon le cycle : `DETECTEE``EN_COURS_TRAITEMENT``RESOLUE``CLOTUREE`.
---
## 7. Notifications
**RG24 — Création automatique d'une notification**
Lors de la création d'une anomalie, une notification est créée automatiquement et adressée au responsable matériel concerné.
**RG25 — Persistance et lecture des notifications**
Les notifications sont enregistrées en base, consultables a posteriori, et peuvent être marquées comme lues par leur destinataire.
---
## 8. Supervision par le responsable matériel
**RG26 — Périmètre de supervision**
Le responsable matériel agit a posteriori et n'intervient pas en temps réel dans le parcours étudiant. Son rôle est la supervision, la gestion du stock et le traitement des anomalies.
**RG27 — Filtrage par campus**
Un responsable matériel ne peut consulter que les données (matériels, emprunts, anomalies, historique) du campus auquel il est rattaché.
**RG28 — Consultation des emprunts**
Le responsable matériel peut consulter les emprunts en cours, en retard, clôturés et les retours non conformes.
**RG29 — Consultation du stock**
Le responsable matériel peut consulter l'état du stock et les statuts des matériels.
**RG30 — Gestion du matériel et des accessoires**
Le responsable matériel peut gérer les matériels, les accessoires associés, les checklists liées et faire évoluer les statuts.
**RG31 — Consultation de l'historique**
Le responsable matériel peut consulter l'historique des emprunts, restitutions, anomalies et changements de statut.
---
## 9. Historique et traçabilité
**RG32 — Historisation des actions importantes**
Toute opération importante doit être enregistrée dans l'historique : identification d'un étudiant, création d'un emprunt, validation des checklists, restitution, comparaison, création d'une anomalie, changement de statut d'un matériel et traitement d'une anomalie.
**RG33 — Informations conservées dans l'historique**
L'historique doit conserver la date, l'heure, l'utilisateur concerné, le matériel concerné, le poste utilisé, la salle de prêt, le campus et l'action réalisée.
---
## Résumé
Les règles métier du nouveau workflow EME reposent sur un principe d'**autonomie de l'étudiant**.
L'étudiant emprunte ou restitue son matériel depuis un poste dédié, s'identifie par QR code ou mail ENSUP, complète une checklist au départ et au retour, puis le système compare automatiquement les informations saisies.
En cas de différence, une anomalie est créée automatiquement et une notification est envoyée au responsable matériel. L'ensemble des opérations est historisé afin de garantir la traçabilité.
Le responsable matériel agit **a posteriori** : il consulte, traite les anomalies, gère le stock et l'historique de son campus, sans intervenir en temps réel dans le parcours étudiant.
File diff suppressed because it is too large Load Diff