rayhan-erp/Livrables/rapport-projet.md

13 KiB

title subtitle author date lang
Rapport de Projet — ERP SUARL Rayhan Projet de Fin d'Études — Ali Guennari Ali Guennari Avril 2026 fr

Rapport de Projet de Fin d'Études

ERP Sur Mesure pour SUARL Rayhan

Étudiant : Ali Guennari
Entreprise d'accueil : SUARL Rayhan — Plasturgie, Tataouine, Tunisie
Encadrant académique : À compléter
Encadrant professionnel : À compléter
Année universitaire : 2025 / 2026


Chapitre 1 — Présentation du Projet

1.1 Contexte

SUARL Rayhan est une entreprise tunisienne spécialisée dans la fabrication d'emballages plastiques (sacs Bertel, sacs poubelles, sacs alimentaires, film rétractable) implantée à Tataouine. Face à une gestion manuelle de ses processus métier — achats, ventes, production, stock — la direction a exprimé le besoin d'un système d'information intégré permettant de centraliser et automatiser ces opérations.

1.2 Objectif du Projet

Ce projet de fin d'études consiste à concevoir et développer un ERP (Enterprise Resource Planning) sur mesure, adapté aux spécificités de SUARL Rayhan, couvrant :

  • La gestion du référentiel articles (matières premières, produits semi-finis, produits finis)
  • Le cycle d'achat complet (commandes fournisseurs → bons de réception → mise à jour du stock)
  • Le cycle de vente complet (commandes clients → bons de livraison → sortie de stock)
  • La gestion de la production (nomenclatures BOM, ordres de fabrication)
  • Le suivi des stocks en temps réel avec alertes
  • Un tableau de bord KPI pour la direction

1.3 Périmètre Fonctionnel

Module Description
Authentification Connexion sécurisée avec rôles différenciés
Articles Gestion du catalogue (MP, PSF, PF)
Clients & Fournisseurs Annuaire des tiers commerciaux
Cycle Achat Commande → Réception → Stock
Cycle Vente Commande → Livraison → Stock
Production BOM + Ordres de Fabrication
Stock Mouvements, historique, alertes seuil minimum
Tableau de bord KPIs temps réel pour le PDG

Chapitre 2 — Architecture Technique

2.1 Stack Technologique

Couche Technologie Version
Backend API Spring Boot 3.2.5
Langage Java 17 LTS
Sécurité Spring Security + JWT JJWT 0.12.5
Persistance Spring Data JPA / Hibernate 6.4.4
Base de données MySQL 8.0
Conteneurisation Docker + Docker Compose
Frontend (à venir) Flutter 3.x

2.2 Architecture N-Tiers

L'API suit rigoureusement le patron d'architecture Controller → Service → Repository → Model :

┌─────────────────────────────────────────────────────────┐
│               Application Flutter (Client)               │
└─────────────────────┬───────────────────────────────────┘
                      │ HTTP/HTTPS (JWT Bearer Token)
                      ▼
┌─────────────────────────────────────────────────────────┐
│              API REST Spring Boot (Port 8090)            │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │Controller│→ │ Service  │→ │Repository│              │
│  └──────────┘  └──────────┘  └──────────┘              │
│                              ┌──────────┐              │
│                              │   JPA /  │              │
│                              │Hibernate │              │
└──────────────────────────────┴────┬─────┴──────────────┘
                                    │ JDBC
                                    ▼
                        ┌─────────────────────┐
                        │    MySQL 8           │
                        │  rayhan_erp_db       │
                        └─────────────────────┘

2.3 Sécurité — Mécanisme JWT

Le système utilise une authentification stateless basée sur les JSON Web Tokens :

  1. Le client envoie ses identifiants à POST /api/auth/signin
  2. Le serveur valide et retourne un JWT signé (valable 24h)
  3. Le client inclut Authorization: Bearer <token> dans chaque requête
  4. Le filtre AuthTokenFilter intercepte et valide le token avant chaque endpoint

Rôles et Contrôle d'Accès

Rôle Périmètre d'accès
ROLE_PDG Accès complet + tableau de bord
ROLE_RESPONSABLE_VENTE Ventes, clients
ROLE_RESPONSABLE_ACHAT Achats, fournisseurs
ROLE_RESPONSABLE_PRODUCTION Production, BOM, ordres de fabrication
ROLE_MAGASINIER Stock, mouvements de stock
ROLE_RH Ressources humaines, paie

Chaque endpoint est protégé par l'annotation @PreAuthorize :

@PreAuthorize("hasAnyRole('ROLE_PDG', 'ROLE_RESPONSABLE_VENTE')")

2.4 Modèle de Données Relationnel

La base de données rayhan_erp_db contient les tables suivantes :

  • users / roles / user_roles — authentification et droits
  • tiers (table mère), clients, fournisseurs — gestion des tiers (héritage JOINED)
  • articles — catalogue produits avec types MP / PSF / PF
  • bom_lines — nomenclatures de production (Bill of Materials)
  • production_orders — ordres de fabrication avec cycle PLANIFIE → LANCE → TERMINE
  • purchase_orders / purchase_order_lines — commandes fournisseurs
  • goods_receipts / goods_receipt_lines — bons de réception
  • sales_orders / sales_order_lines — commandes clients
  • delivery_notes / delivery_note_lines — bons de livraison
  • stock_movements — historique complet de tous les mouvements de stock

Chapitre 3 — Endpoints de l'API

3.1 Authentification

Méthode URL Description
POST /api/auth/signin Connexion → retourne JWT
POST /api/auth/signup Créer un utilisateur

3.2 Articles

Méthode URL Rôles
GET /api/articles Tous
GET /api/articles/{id} Tous
GET /api/articles/type/{type} Tous (MP, PF, PSF)
GET /api/articles/alertes-stock PDG, Magasinier, Production
POST /api/articles PDG, Production, Magasinier
PUT /api/articles/{id} PDG, Production
DELETE /api/articles/{id} PDG (désactivation logique)

3.3 Clients & Fournisseurs

Méthode URL Rôles
GET /api/clients PDG, Vente
POST /api/clients PDG, Vente
PUT /api/clients/{id} PDG, Vente
GET /api/fournisseurs PDG, Achat
POST /api/fournisseurs PDG, Achat

3.4 Cycle d'Achat

Méthode URL Description
GET /api/purchase-orders Liste des commandes
POST /api/purchase-orders Créer une commande fournisseur
POST /api/purchase-orders/{id}/receive Réceptionner → crée BR + entre en stock

3.5 Cycle de Vente

Méthode URL Description
GET /api/sales-orders Liste des commandes
POST /api/sales-orders Créer une commande client
POST /api/sales-orders/{id}/deliver Livrer → crée BL + sort du stock

3.6 Production

Méthode URL Description
POST /api/production/bom Définir une nomenclature
POST /api/production/orders/plan Planifier un ordre de fabrication
POST /api/production/orders/{id}/launch Lancer → consomme les MP
POST /api/production/orders/{id}/complete Terminer → entre les PF en stock

3.7 Stock & Tableau de Bord

Méthode URL Description
GET /api/stock/historique/{articleId} Historique des mouvements
POST /api/stock/adjust Ajustement manuel
GET /api/dashboard KPIs pour le PDG

Chapitre 4 — Déploiement

4.1 Infrastructure

L'application est déployée via Docker Compose, accessible publiquement derrière un reverse proxy HTTPS. Deux conteneurs sont en production :

  • rayhan-mysql — MySQL 8, base de données rayhan_erp_db
  • rayhan-backend — Spring Boot, accessible sur le port 8090

4.2 Docker Compose

services:
  mysql:
    image: mysql:8.0
    container_name: rayhan-mysql
    environment:
      MYSQL_DATABASE: rayhan_erp_db
    volumes:
      - mysql_data:/var/lib/mysql

  backend:
    build: ./backend
    container_name: rayhan-backend
    ports:
      - "8090:8080"
    depends_on:
      mysql:
        condition: service_healthy

4.3 Dockerfile — Build Multi-Étapes

# Étape 1 : Compilation Maven
FROM maven:3.9.6-eclipse-temurin-17 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn clean package -DskipTests

# Étape 2 : Image d'exécution légère
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=build /app/target/erp-1.0.0-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

4.4 Accès à l'Application

Service URL
API REST https://rayhan-erp.bolbol.tn
Documentation Swagger UI https://rayhan-erp.bolbol.tn/swagger-ui/index.html
Dépôt source (Gitea) https://gitea.bolbol.tn/bolbol/rayhan-erp

Chapitre 5 — Tests et Validation

5.1 Interface Swagger UI

L'API intègre Swagger UI (SpringDoc OpenAPI 2.5.0), accessible depuis n'importe quel navigateur. Cette interface permet de :

  • Visualiser tous les endpoints disponibles
  • Tester chaque endpoint directement depuis le navigateur
  • S'authentifier avec le JWT via le bouton "Authorize"

Procédure de test :

  1. Ouvrir https://rayhan-erp.bolbol.tn/swagger-ui/index.html
  2. Exécuter POST /api/auth/signin avec {"username":"admin","password":"Rayhan2024!"}
  3. Copier le token de la réponse
  4. Cliquer sur Authorize 🔒 → coller le token → Authorize
  5. Tester librement tous les endpoints

5.2 Scénario de Test Complet

Étape Action Résultat attendu
1 Connexion admin Token JWT retourné
2 Créer article MP-HDPE Article créé, stock = 0
3 Créer commande fournisseur Statut CONFIRMEE
4 Réceptionner commande Stock MP augmente
5 Créer nomenclature BOM Lien PF ↔ MP créé
6 Planifier + Lancer OF Stock MP diminue (consommation)
7 Terminer OF Stock PF augmente
8 Créer commande client Statut CONFIRMEE
9 Livrer commande Stock PF diminue
10 Tableau de bord KPIs mis à jour

Chapitre 6 — Ce qui reste à faire

6.1 Frontend Flutter

Le frontend mobile/desktop sera développé avec Flutter et se connectera à l'API REST via des appels HTTP avec token JWT.

Écrans à développer (par priorité) :

  1. Écran de connexion — formulaire login/password, stockage du token
  2. Tableau de bord — affichage des KPIs (chiffre d'affaires, alertes stock, OF en cours)
  3. Articles — liste, recherche, fiche détail, ajout/modification
  4. Cycle de vente — liste commandes, création, bon de livraison
  5. Cycle d'achat — liste commandes, création, bon de réception
  6. Production — BOM, ordres de fabrication, lancement/terminaison
  7. Stock — historique des mouvements, ajustements

Architecture Flutter proposée :

  • State management : Provider ou Riverpod
  • HTTP client : http ou dio
  • Stockage local : shared_preferences (token JWT)
  • Navigation : go_router

6.2 Modules Complémentaires API

Module Description Priorité
Facturation Génération de factures PDF Haute
Paie / RH Gestion des employés et salaires Moyenne
Rapports Export Excel/PDF des données Moyenne

Annexes

A — Initialisation Automatique

Au premier démarrage, le système crée automatiquement :

  • Les 6 rôles dans la base de données
  • L'utilisateur administrateur : admin / Rayhan2024! avec le rôle PDG

B — Variables d'Environnement Docker

Variable Valeur
SPRING_DATASOURCE_URL jdbc:mysql://mysql:3306/rayhan_erp_db
SPRING_DATASOURCE_USERNAME root
SPRING_DATASOURCE_PASSWORD rayhan_erp_2024
RAYHAN_ERP_JWTSECRET Clé secrète JWT (256 bits)
RAYHAN_ERP_JWTEXPIRATIONMS 86400000 (24 heures)

C — Commandes Docker Utiles

# Démarrer l'application
docker compose up -d

# Reconstruire après modification du code
docker compose up -d --build

# Voir les logs en temps réel
docker logs rayhan-backend -f

# Accéder à MySQL
docker exec -it rayhan-mysql mysql -u root -prayhan_erp_2024 rayhan_erp_db