stations-service-naftomanager

byReal Pets

Crée une application SaaS moderne appelée « NaftoManager » pour la gestion des stations-service en Algérie. L’interface doit être entièrement en français, responsive et adaptée aux ordinateurs, tablettes et mobiles. OBJECTIF Permettre aux propriétaires et gérants de gérer une ou plusieurs stations-service : ventes de carburant, pompes, cuves, stocks, livraisons, fournisseurs, dépenses, caisses, employés, maintenance et rapports. DESIGN - Style professionnel, simple et facile à utiliser par un personnel non technique. - Couleurs : bleu foncé pour la navigation, jaune/orange pour les actions, vert pour les revenus et validations, rouge pour les alertes. - Mode clair et mode sombre. - Interface responsive. - Devise : DZD / DA. - Date : DD/MM/YYYY. - Prévoir les wilayas et communes d’Algérie. - Utiliser une navigation latérale, des cartes KPI, tableaux filtrables, graphiques et fenêtres modales. - Ajouter des états de chargement, erreurs, succès et écrans vides explicatifs. ARCHITECTURE SAAS - Application multi-tenant. - Une entreprise peut gérer plusieurs stations. - Isolation stricte des données entre entreprises. - Authentification sécurisée par email et mot de passe. - Gestion des rôles et permissions. - Journal d’audit pour les actions importantes. - Prévoir une architecture évolutive pour une future application mobile. RÔLES - Super administrateur : gestion de la plateforme, entreprises et abonnements. - Propriétaire : accès à toutes les stations, rapports, utilisateurs et paramètres. - Gérant : gestion opérationnelle d’une station. - Caissier : ventes, paiements et clôture de caisse. - Employé de piste : opérations liées aux pompes et signalement des problèmes. - Responsable stock : stocks, cuves, livraisons et ajustements. - Comptable : revenus, dépenses, factures et rapports financiers. PAGES PRINCIPALES 1. Connexion : email, mot de passe, mot de passe oublié. 2. Tableau de bord : chiffre d’affaires, litres vendus, transactions, stocks, dépenses, marges estimées et alertes. 3. Stations : liste, ajout, modification, adresse, localisation, statut et contacts. 4. Détail d’une station : pompes, cuves, employés, ventes, stocks, dépenses et activité. 5. Ventes : création, historique, filtres par période, produit, pompe et employé. 6. Pompes : compteur initial, compteur final, volume distribué, état et anomalies. 7. Cuves et stocks : capacité, niveau actuel, seuil minimum, entrées et sorties. 8. Fournisseurs : coordonnées, produits, livraisons et historique des achats. 9. Livraisons : fournisseur, produit, quantité, prix d’achat, date et document. 10. Dépenses : catégorie, montant, date, justificatif et commentaire. 11. Caisse : ouverture, mouvements, paiements, clôture et rapprochement. 12. Clients : particuliers, entreprises, historique et crédit éventuel. 13. Employés : utilisateurs, rôles, horaires, station et statut. 14. Maintenance : incidents, équipements, interventions, coûts et statut. 15. Rapports : ventes, stocks, dépenses, caisse, livraisons et performances. 16. Paramètres : entreprise, stations, produits, taxes, utilisateurs et permissions. 17. Abonnement : plan actuel, utilisateurs, stations, factures et renouvellement. CARBURANTS Inclure par défaut : - Essence sans plomb - Gasoil - GPL carburant Chaque produit doit contenir : - Nom et code - Prix de vente - Prix d’achat - Unité en litre - Stock minimum - Couleur - Statut actif/inactif Les prix doivent être configurables par station. Ne jamais coder les prix ou les taxes en dur. Les taxes doivent être configurables. VENTES Une vente doit contenir : - Station et pompe - Produit - Quantité en litres - Prix unitaire - Montant total en DA - Mode de paiement - Employé - Date et heure Modes de paiement : - Espèces - Carte bancaire - Paiement électronique - Crédit client, si activé Calculer automatiquement le montant total. Prévoir la validation, l’annulation, les corrections et un journal d’audit. STOCKS - Suivre les stocks par cuve et par produit. - Enregistrer automatiquement les entrées et sorties. - Afficher le stock actuel, la capacité, le pourcentage de remplissage, le seuil minimum et la dernière livraison. - Déclencher une alerte en cas de stock faible. - Autoriser les ajustements manuels avec motif obligatoire. - Afficher l’historique complet des mouvements. TABLEAU DE BORD Afficher : - Chiffre d’affaires du jour et du mois - Litres vendus - Nombre de transactions - Stock disponible - Produit le plus vendu - Meilleure station - Dépenses du mois - Marge estimée - Alertes de stock - Pompes hors service - Livraisons récentes Créer des graphiques pour : - Ventes par jour - Ventes par carburant - Évolution du chiffre d’affaires - Comparaison des stations - Dépenses par catégorie - Niveau des stocks RAPPORTS Ajouter des filtres par station, période, produit, pompe, employé et mode de paiement. Prévoir : - Rapport journalier des ventes - Rapport mensuel - Rapport de caisse - Rapport des stocks - Rapport des livraisons - Rapport des dépenses - Rapport de marge estimée - Rapport de performance par station Permettre l’export en PDF et Excel avec le logo, le nom de l’entreprise, la station, la période et la date de génération. CONTEXTE ALGÉRIEN Utiliser les champs suivants : - Wilaya - Commune - Adresse - Téléphone algérien - Numéro d’identification fiscale - Registre de commerce Afficher les montants en « DA ». Ne pas imposer un taux de TVA fixe. Prévoir des horaires d’ouverture configurables par station. L’interface initiale est en français LTR. NOTIFICATIONS Créer des notifications pour : - Stock faible - Livraison reçue - Pompe hors service - Dépense importante - Écart de caisse - Création d’utilisateur - Clôture de caisse réussie ou échouée ABONNEMENTS Prévoir trois plans : - Essentiel : une station, ventes, stocks et rapports de base. - Professionnel : plusieurs stations, employés, dépenses, maintenance et rapports avancés. - Entreprise : stations et utilisateurs illimités, permissions avancées, exports, API et support prioritaire. Afficher le plan actuel, les limites utilisées, la date de renouvellement, les factures et le changement de plan. BASE DE DONNÉES Créer les entités suivantes : Entreprises, stations, utilisateurs, rôles, permissions, pompes, cuves, produits, ventes, lignes de vente, mouvements de stock, fournisseurs, livraisons, dépenses, caisses, mouvements de caisse, clients, employés, incidents, interventions, notifications et journal d’audit. SÉCURITÉ - Hashage des mots de passe. - Gestion sécurisée des sessions. - Contrôle d’accès par rôle. - Protection contre l’accès aux données d’une autre entreprise. - Confirmation avant suppression. - Archivage lorsque nécessaire. - Sauvegardes régulières. - Variables d’environnement pour les données sensibles. - Ne jamais exposer de données sensibles dans le frontend. DONNÉES DE DÉMONSTRATION Créer des données réalistes pour une entreprise algérienne avec trois stations situées dans différentes wilayas, plusieurs pompes, cuves, ventes, livraisons, dépenses, employés et alertes de stock. CONTRAINTES TECHNIQUES - Séparer clairement frontend, backend et base de données. - Utiliser des composants réutilisables. - Ne pas utiliser de données statiques dans les écrans finaux. - Prévoir des API sécurisées. - Optimiser les tableaux pour un grand volume de données. - Ajouter recherche, filtres, pagination et tri. - Prévoir une future compatibilité RTL, mais garder l’interface initiale en français LTR. COMMENCER PAR 1. L’architecture fonctionnelle. 2. Le schéma de base de données. 3. La structure des pages. 4. Les parcours utilisateurs. 5. Les composants UI réutilisables. Ensuite, développer progressivement : authentification, tableau de bord, stations, pompes, carburants, ventes, stocks, livraisons, dépenses, rapports, utilisateurs et abonnements.

No preview

Comments (0)

No comments yet. Be the first!

System Requirements

Page 1 of 26

System Requirements Document for stations-service-naftomanager

1. Introduction

NaftoManager est une application SaaS moderne de gestion des stations-service en Algérie. Elle permet aux propriétaires et aux gérants d'exploiter une ou plusieurs stations-service : ventes de carburant, pompes, cuves, stocks, livraisons, fournisseurs, dépenses, caisses, employés, maintenance et rapports.

L'interface est entièrement en français, responsive et adaptée aux ordinateurs, tablettes et mobiles. Le style est professionnel, simple et facile à utiliser par un personnel non technique. La devise affichée est le DZD / DA, les dates sont au format DD/MM/YYYY, et l'interface initiale est en français LTR, avec une future compatibilité RTL prévue mais non activée.

Public visé : super administrateur de la plateforme, propriétaires d'entreprises de distribution de carburant, gérants de station, caissiers, employés de piste, responsables stock et comptables.

Page 2 of 26

2. System Overview

NaftoManager est une plateforme multi-tenant : une entreprise peut gérer plusieurs stations, avec isolation stricte des données entre entreprises. L'accès se fait par authentification sécurisée par email et mot de passe, avec gestion des rôles et permissions et journal d'audit des actions importantes. L'architecture est prévue pour évoluer vers une future application mobile.

Le produit couvre les domaines suivants :

  • Exploitation : ventes, pompes, cuves et stocks, livraisons, fournisseurs, maintenance.
  • Finances : dépenses, caisse, rapports financiers, marges estimées.
  • Réseau : stations, détail d'une station, comparaison inter-stations.
  • Administration : employés, clients, paramètres (entreprise, produits, taxes, utilisateurs, permissions), abonnement.

Les carburants par défaut sont l'Essence sans plomb, le Gasoil et le GPL carburant. Chaque produit contient un nom et un code, un prix de vente, un prix d'achat, une unité en litre, un stock minimum, une couleur et un statut actif/inactif. Les prix sont configurables par station et les taxes sont configurables ; aucun prix ni taxe n'est codé en dur, et aucun taux de TVA fixe n'est imposé.

Page 3 of 26

2a. Product Interpretation and Delivery Boundary

NaftoManager est livré comme une application web first-party, avec un frontend, un backend et une base de données clairement séparés, exposant des API sécurisées. Toutes les surfaces de travail opérationnelles sont détenues par l'application : la plateforme ne délègue à aucun fournisseur externe la gestion des ventes, des stocks, de la caisse, des rapports ou de l'administration.

L'identité est détenue par l'application : un compte est créé ou provisionné de façon sécurisée, avec attribution d'un rôle et d'une entreprise, puis vérifié par email et mot de passe avant tout accès aux données protégées. L'entrée publique (Landing) et la Connexion sont accessibles sans session ; toutes les autres surfaces exigent une session authentifiée et un contrôle d'accès par rôle et permissions.

Périmètre actuel : l'ensemble des pages principales, des rôles, des flux opérationnels et financiers décrits dans ce document.

Hors périmètre actuel : l'application mobile native (architecture seulement prévue pour l'accueillir), l'activation de l'interface RTL (compatibilité future seulement), et tout taux de TVA imposé par défaut.

2b. Page Content and Component Coverage

Page 4 of 26

Landing

  • Information / état : présentation publique de NaftoManager — gestion des stations-service en Algérie, utilisateurs concernés (propriétaires, gérants, caissiers, employés de piste, responsables stock, comptables), et domaines couverts (ventes, pompes, cuves et stocks, livraisons, dépenses, caisse, rapports).
  • Actions principales : accéder à la Connexion.
  • Actions de support : consulter les domaines couverts et les plans d'abonnement présentés.
  • Entités de domaine : Entreprise, Station, Produit, Plan d'abonnement.
  • Responsabilités des composants : panneau de présentation, lignes de preuve numérotées, bandeau wilaya codé, appel à l'action vers la Connexion.
  • États : chargement (squelette du panneau), succès (contenu affiché), erreur (message explicatif et possibilité de recharger), écran vide non applicable (contenu statique de présentation).

Connexion

  • Information / état : champs email et mot de passe, lien mot de passe oublié, bandeau wilaya codé.
  • Actions principales : se connecter avec email et mot de passe ; demander la réinitialisation du mot de passe oublié.
  • Actions de support : revenir à la Landing.
  • Entités de domaine : Utilisateur, Entreprise, Rôle, Session.
  • Responsabilités des composants : formulaire d'authentification, validation des champs, gestion des erreurs d'identifiants, confirmation d'envoi de réinitialisation.
  • États : chargement (soumission en cours), succès (redirection vers la surface autorisée), erreur (identifiants invalides, compte inactif, service indisponible), écran vide non applicable.

Tableau de bord

  • Information / état : chiffre d'affaires du jour et du mois, litres vendus, nombre de transactions, stock disponible, produit le plus vendu, meilleure station, dépenses du mois, marge estimée, alertes de stock, pompes hors service, livraisons récentes.
  • Actions principales : consulter les KPI et graphiques ; ouvrir une alerte, une pompe hors service ou une livraison récente.
  • Actions de support : filtrer par station et période ; naviguer vers les surfaces détaillées.
  • Entités de domaine : Vente, Ligne de vente, Produit, Station, Pompe, Cuve, Mouvement de stock, Livraison, Dépense, Alerte, Notification.
  • Responsabilités des composants : bande de cartes KPI (règle supérieure, libellé 12px majuscules espacé, valeur en chiffres tabulaires, règle gauche codée), graphiques (ventes par jour, ventes par carburant, évolution du chiffre d'affaires, comparaison des stations, dépenses par catégorie, niveau des stocks), panneau alertes et livraisons récentes.
  • États : chargement (squelettes de cartes et de graphiques), succès, erreur (message explicatif et rechargement), écran vide explicatif (aucune activité sur la période, aucune alerte, aucune livraison récente).
Page 5 of 26

Stations

  • Information / état : liste des stations avec adresse, localisation (wilaya, commune), statut et contacts ; code wilaya à deux lettres.
  • Actions principales : ajouter une station ; modifier une station ; ouvrir le détail d'une station.
  • Actions de support : rechercher, filtrer, trier, paginer ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Entreprise, Station, Wilaya, Commune, Contact.
  • Responsabilités des composants : tableau dense avec en-tête collant, barre de filtres horizontale, règle gauche codée par station, fenêtres modales d'ajout et de modification, confirmation de suppression.
  • États : chargement, succès, erreur, écran vide explicatif (aucune station enregistrée, avec action d'ajout).

Détail d'une station

  • Information / état : pompes, cuves, employés, ventes, stocks, dépenses et activité de la station ; horaires d'ouverture configurables.
  • Actions principales : consulter chaque onglet numéroté (01 Pompes, 02 Cuves, 03 Ventes, 04 Dépenses, 05 Activité) ; agir sur les ressources de la station selon le rôle.
  • Actions de support : revenir à la liste des stations ; filtrer l'activité.
  • Entités de domaine : Station, Pompe, Cuve, Employé, Vente, Mouvement de stock, Dépense, Incident.
  • Responsabilités des composants : bandeau d'identité de station, bandeau d'onglets numérotés, tableaux et barres de remplissage par onglet.
  • États : chargement, succès, erreur, écran vide explicatif par onglet (aucune pompe, aucune cuve, aucune vente, aucune dépense, aucune activité).

Ventes

  • Information / état : historique des ventes avec station et pompe, produit, quantité en litres, prix unitaire, montant total en DA, mode de paiement, employé, date et heure.
  • Actions principales : créer une vente ; valider une vente ; annuler une vente ; corriger une vente.
  • Actions de support : filtrer par période, produit, pompe et employé ; rechercher, trier, paginer ; consulter le journal d'audit des validations, annulations et corrections.
  • Entités de domaine : Vente, Ligne de vente, Station, Pompe, Produit, Employé, Client, Mode de paiement, Journal d'audit.
  • Responsabilités des composants : formulaire de création avec calcul automatique du montant total, sélecteur de mode de paiement (espèces, carte bancaire, paiement électronique, crédit client si activé), tableau d'historique, modales de validation, d'annulation et de correction.
  • États : chargement, succès (vente enregistrée et montant total calculé), erreur (produit indisponible, pompe hors service, crédit client non activé, échec d'enregistrement), écran vide explicatif (aucune vente sur les filtres choisis).
Page 6 of 26

Pompes

  • Information / état : compteur initial, compteur final, volume distribué, état et anomalies.
  • Actions principales : saisir les compteurs ; mettre à jour l'état d'une pompe ; signaler une anomalie.
  • Actions de support : filtrer par station et par état ; rechercher, trier, paginer.
  • Entités de domaine : Pompe, Station, Produit, Incident, Employé.
  • Responsabilités des composants : tableau des pompes avec compteurs en chiffres tabulaires, indicateur d'état, formulaire de signalement d'anomalie.
  • États : chargement, succès, erreur, écran vide explicatif (aucune pompe enregistrée pour la station).

Cuves et stocks

  • Information / état : capacité, niveau actuel, pourcentage de remplissage, seuil minimum, dernière livraison, stock par cuve et par produit, historique complet des mouvements.
  • Actions principales : enregistrer une entrée ou une sortie ; effectuer un ajustement manuel avec motif obligatoire.
  • Actions de support : filtrer par station, cuve et produit ; rechercher, trier, paginer ; consulter l'historique des mouvements.
  • Entités de domaine : Cuve, Produit, Mouvement de stock, Livraison, Station, Alerte.
  • Responsabilités des composants : barres de remplissage horizontales avec pourcentage en chiffres tabulaires et repère vertical de seuil minimum, tableau des mouvements, modale d'ajustement manuel exigeant un motif.
  • États : chargement, succès, erreur (motif manquant pour un ajustement), écran vide explicatif (aucune cuve, aucun mouvement).

Fournisseurs

  • Information / état : coordonnées, produits associés, livraisons et historique des achats.
  • Actions principales : ajouter un fournisseur ; modifier un fournisseur ; consulter l'historique des achats.
  • Actions de support : rechercher, filtrer, trier, paginer ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Fournisseur, Produit, Livraison, Achat.
  • Responsabilités des composants : tableau des fournisseurs, fiche fournisseur, historique des achats.
  • États : chargement, succès, erreur, écran vide explicatif (aucun fournisseur enregistré).
Page 7 of 26

Livraisons

  • Information / état : fournisseur, produit, quantité, prix d'achat, date et document.
  • Actions principales : enregistrer une livraison ; rattacher le document ; consulter le détail d'une livraison.
  • Actions de support : filtrer par station, fournisseur, produit et période ; rechercher, trier, paginer.
  • Entités de domaine : Livraison, Fournisseur, Produit, Cuve, Mouvement de stock, Document, Station.
  • Responsabilités des composants : formulaire de livraison, téléversement de document, tableau des livraisons, mise à jour automatique des entrées de stock.
  • États : chargement, succès (livraison enregistrée et entrée de stock créée), erreur (document manquant, quantité invalide), écran vide explicatif (aucune livraison enregistrée).

Dépenses

  • Information / état : catégorie, montant, date, justificatif et commentaire.
  • Actions principales : enregistrer une dépense ; rattacher un justificatif ; modifier une dépense.
  • Actions de support : filtrer par station, catégorie et période ; rechercher, trier, paginer ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Dépense, Catégorie, Justificatif, Station, Notification.
  • Responsabilités des composants : formulaire de dépense, téléversement de justificatif, tableau des dépenses, déclenchement de notification pour dépense importante.
  • États : chargement, succès, erreur (justificatif invalide, montant manquant), écran vide explicatif (aucune dépense enregistrée).

Caisse

  • Information / état : ouverture, mouvements, paiements, clôture et rapprochement ; écart de caisse éventuel.
  • Actions principales : ouvrir la caisse ; enregistrer un mouvement ; enregistrer un paiement ; clôturer la caisse ; effectuer le rapprochement.
  • Actions de support : consulter l'historique des mouvements de caisse ; filtrer par station et période.
  • Entités de domaine : Caisse, Mouvement de caisse, Paiement, Vente, Employé, Notification, Journal d'audit.
  • Responsabilités des composants : panneau d'ouverture, tableau des mouvements, formulaire de paiement, assistant de clôture et de rapprochement, notification de clôture réussie ou échouée.
  • États : chargement, succès (clôture réussie), erreur (clôture échouée, écart de caisse détecté), écran vide explicatif (aucune caisse ouverte, aucun mouvement).
Page 8 of 26

Clients

  • Information / état : particuliers et entreprises, historique et crédit éventuel.
  • Actions principales : ajouter un client ; modifier un client ; consulter l'historique ; gérer le crédit lorsqu'il est activé.
  • Actions de support : rechercher, filtrer, trier, paginer ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Client, Vente, Crédit, Station.
  • Responsabilités des composants : tableau des clients, fiche client, historique des ventes, indicateur de crédit activé.
  • États : chargement, succès, erreur, écran vide explicatif (aucun client enregistré).

Employés

  • Information / état : utilisateurs, rôles, horaires, station et statut.
  • Actions principales : créer un utilisateur ; attribuer un rôle et une station ; définir les horaires ; activer ou désactiver un statut.
  • Actions de support : rechercher, filtrer, trier, paginer ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Utilisateur, Rôle, Permission, Employé, Station, Horaire, Notification, Journal d'audit.
  • Responsabilités des composants : tableau des employés, modale de création d'utilisateur, sélecteur de rôle et de station, éditeur d'horaires, déclenchement de notification de création d'utilisateur.
  • États : chargement, succès (utilisateur créé), erreur (email déjà utilisé, rôle manquant), écran vide explicatif (aucun employé enregistré).

Maintenance

  • Information / état : incidents, équipements, interventions, coûts et statut.
  • Actions principales : signaler un incident ; enregistrer une intervention ; renseigner le coût ; mettre à jour le statut.
  • Actions de support : filtrer par station, équipement et statut ; rechercher, trier, paginer.
  • Entités de domaine : Incident, Intervention, Équipement, Pompe, Cuve, Coût, Station, Notification.
  • Responsabilités des composants : tableau des incidents, formulaire d'intervention, suivi de statut, déclenchement de notification pour pompe hors service.
  • États : chargement, succès, erreur, écran vide explicatif (aucun incident enregistré).
Page 9 of 26

Rapports

  • Information / état : en-tête imprimable avec logo, nom de l'entreprise, station, période et date de génération ; sommaire numéroté des huit types de rapports ; résultats filtrés.
  • Actions principales : générer un rapport ; exporter en PDF ; exporter en Excel.
  • Actions de support : filtrer par station, période, produit, pompe, employé et mode de paiement ; rechercher, trier, paginer.
  • Entités de domaine : Vente, Ligne de vente, Mouvement de stock, Dépense, Caisse, Livraison, Station, Produit, Pompe, Employé, Mode de paiement, Entreprise.
  • Responsabilités des composants : bloc d'en-tête réglé, sommaire numéroté (rapport journalier des ventes, rapport mensuel, rapport de caisse, rapport des stocks, rapport des livraisons, rapport des dépenses, rapport de marge estimée, rapport de performance par station), tableaux réglés, barre d'export orange fixe en bas de vue.
  • États : chargement, succès (rapport généré et export disponible), erreur (période invalide, export échoué), écran vide explicatif (aucune donnée pour les filtres choisis).

Paramètres

  • Information / état : entreprise, stations, produits, taxes, utilisateurs et permissions ; champs algériens (wilaya, commune, adresse, téléphone algérien, numéro d'identification fiscale, registre de commerce) ; horaires d'ouverture configurables par station.
  • Actions principales : configurer l'entreprise ; configurer les stations ; configurer les produits (nom et code, prix de vente, prix d'achat, unité en litre, stock minimum, couleur, statut actif/inactif) ; configurer les taxes ; gérer les utilisateurs et permissions.
  • Actions de support : définir les prix par station ; confirmer avant suppression ; archiver lorsque nécessaire.
  • Entités de domaine : Entreprise, Station, Produit, Taxe, Utilisateur, Rôle, Permission, Wilaya, Commune.
  • Responsabilités des composants : onglets de configuration, formulaires d'entreprise et de station, éditeur de produits avec sélecteur de couleur, éditeur de taxes, matrice de permissions.
  • États : chargement, succès, erreur (champ obligatoire manquant, taxe invalide), écran vide explicatif (aucun produit, aucune taxe, aucun utilisateur).

Abonnement

  • Information / état : plan actuel, limites utilisées, date de renouvellement, factures.
  • Actions principales : consulter le plan actuel ; consulter les limites utilisées ; consulter les factures ; changer de plan.
  • Actions de support : comparer les trois plans (Essentiel, Professionnel, Entreprise).
  • Entités de domaine : Abonnement, Plan, Limite, Facture, Entreprise, Utilisateur, Station.
  • Responsabilités des composants : carte de plan actuel, jauges de limites utilisées, tableau des factures, comparateur de plans, action de changement de plan.
  • États : chargement, succès, erreur (changement de plan refusé, limite atteinte), écran vide explicatif (aucune facture disponible).
Page 10 of 26

3. Functional Requirements

FR-01 — Application SaaS multi-tenant (explicit) As a Super administrateur, I should disposer d'une plateforme SaaS multi-tenant où une entreprise peut gérer plusieurs stations, afin d'exploiter plusieurs réseaux de stations-service.

  • Déclencheur / entrée : création ou provisionnement d'une entreprise.
  • Résultat observable : l'entreprise et ses stations sont isolées des autres entreprises.
  • État d'accès : session authentifiée, rôle super administrateur.
  • Échec / reprise : en cas d'échec de provisionnement, l'entreprise n'est pas créée et un message explicatif est affiché.
  • Continuation : l'entreprise peut ensuite être configurée et ses utilisateurs créés.

FR-02 — Isolation stricte des données entre entreprises (explicit) As a Propriétaire, I should que les données de mon entreprise soient strictement isolées de celles des autres entreprises, afin de protéger mes informations commerciales.

  • Déclencheur / entrée : toute requête vers une ressource de l'entreprise.
  • Résultat observable : aucune donnée d'une autre entreprise n'est accessible ni exposée.
  • État d'accès : session authentifiée rattachée à une entreprise.
  • Échec / reprise : une tentative d'accès hors périmètre est refusée et journalisée.
  • Continuation : l'utilisateur reste sur sa surface autorisée.

FR-03 — Authentification sécurisée par email et mot de passe (explicit) As a Utilisateur, I should me connecter avec mon email et mon mot de passe, afin d'accéder à mes données protégées.

  • Déclencheur / entrée : saisie de l'email et du mot de passe sur la Connexion.
  • Résultat observable : session ouverte et redirection vers la surface autorisée.
  • État d'accès : anonyme avant connexion, authentifié après.
  • Échec / reprise : identifiants invalides ou compte inactif → message explicatif, possibilité de réessayer.
  • Continuation : accès aux surfaces autorisées par le rôle.

FR-04 — Mot de passe oublié (explicit) As a Utilisateur, I should demander la réinitialisation de mon mot de passe oublié, afin de retrouver l'accès à mon compte.

  • Déclencheur / entrée : action « mot de passe oublié » depuis la Connexion.
  • Résultat observable : confirmation d'envoi de la demande de réinitialisation.
  • État d'accès : anonyme.
  • Échec / reprise : email inconnu → message neutre sans révéler l'existence du compte.
  • Continuation : retour à la Connexion.

FR-05 — Création ou provisionnement sécurisé des comptes (required_inference) As a Propriétaire, I should créer ou faire provisionner de façon sécurisée les comptes de mes collaborateurs avec attribution d'un rôle et d'une entreprise, afin que chacun accède uniquement à ce qui le concerne.

  • Déclencheur / entrée : création d'un utilisateur depuis Employés ou Paramètres.
  • Résultat observable : compte créé, rattaché à l'entreprise et au rôle choisi, notification de création d'utilisateur émise.
  • État d'accès : session authentifiée avec permission de gestion des utilisateurs.
  • Échec / reprise : email déjà utilisé ou rôle manquant → erreur explicite, aucune création partielle.
  • Continuation : l'utilisateur créé peut se connecter et voir ses surfaces autorisées.

FR-06 — Vérification récurrente avant accès aux données protégées (required_inference) As a Utilisateur, I should être vérifié par email et mot de passe avant chaque accès aux données protégées, afin que mes données restent inaccessibles sans session valide.

  • Déclencheur / entrée : ouverture d'une surface protégée.
  • Résultat observable : session valide → accès ; session absente ou expirée → retour à la Connexion.
  • État d'accès : protégé.
  • Échec / reprise : session expirée → reconnexion puis retour à la surface demandée.
  • Continuation : reprise du travail là où il s'était arrêté.

FR-07 — Gestion des rôles et permissions (explicit) As a Propriétaire, I should gérer les rôles et permissions, afin que chaque collaborateur dispose des accès correspondant à sa fonction.

  • Déclencheur / entrée : attribution ou modification d'un rôle et de permissions.
  • Résultat observable : les surfaces et actions visibles correspondent au rôle et aux permissions.
  • État d'accès : session authentifiée avec permission de gestion des permissions.
  • Échec / reprise : modification refusée → message explicatif, permissions inchangées.
  • Continuation : les utilisateurs concernés voient leurs accès mis à jour.

FR-08 — Journal d'audit des actions importantes (explicit) As a Propriétaire, I should consulter un journal d'audit des actions importantes, afin de tracer les opérations sensibles.

  • Déclencheur / entrée : validation, annulation ou correction de vente, ajustement de stock, clôture de caisse, création d'utilisateur, modification de paramètres.
  • Résultat observable : entrée d'audit horodatée avec auteur et action.
  • État d'accès : session authentifiée avec permission de consultation de l'audit.
  • Échec / reprise : écriture d'audit impossible → l'action sensible est refusée.
  • Continuation : consultation ultérieure du journal.

FR-09 — Configuration initiale de l'entreprise et de la station (required_inference) As a Propriétaire, I should configurer au moins une entreprise, une station et les produits ou paramètres nécessaires aux opérations, afin de démarrer l'exploitation.

  • Déclencheur / entrée : première configuration depuis Paramètres.
  • Résultat observable : entreprise, station et produits disponibles pour les opérations.
  • État d'accès : session authentifiée avec permission de configuration.
  • Échec / reprise : champ obligatoire manquant → erreur explicite, configuration non enregistrée.
  • Continuation : les ventes, stocks et rapports peuvent être utilisés.

FR-10 — Gestion des stations (explicit) As a Propriétaire, I should lister, ajouter et modifier mes stations avec adresse, localisation, statut et contacts, afin de tenir à jour mon réseau.

  • Déclencheur / entrée : ajout ou modification d'une station.
  • Résultat observable : station enregistrée avec adresse, wilaya, commune, statut et contacts.
  • État d'accès : session authentifiée, rôle propriétaire ou super administrateur.
  • Échec / reprise : données invalides → erreur explicite, aucune modification partielle.
  • Continuation : la station apparaît dans la liste et son détail est consultable.

FR-11 — Détail d'une station (explicit) As a Gérant, I should consulter le détail d'une station avec ses pompes, cuves, employés, ventes, stocks, dépenses et activité, afin de piloter l'exploitation quotidienne.

  • Déclencheur / entrée : ouverture du détail d'une station.
  • Résultat observable : onglets 01 Pompes, 02 Cuves, 03 Ventes, 04 Dépenses, 05 Activité alimentés par les données réelles.
  • État d'accès : session authentifiée, rôle propriétaire ou gérant.
  • Échec / reprise : station inaccessible → message explicatif et retour à la liste.
  • Continuation : navigation vers les surfaces détaillées concernées.

FR-12 — Création d'une vente (explicit) As a Caissier, I should créer une vente contenant station et pompe, produit, quantité en litres, prix unitaire, montant total en DA, mode de paiement, employé, date et heure, afin d'enregistrer la transaction.

  • Déclencheur / entrée : saisie de la vente sur la surface Ventes.
  • Résultat observable : montant total calculé automatiquement et vente enregistrée.
  • État d'accès : session authentifiée, rôle caissier, gérant, propriétaire ou comptable.
  • Échec / reprise : produit indisponible, pompe hors service ou échec d'enregistrement → erreur explicite, vente non créée.
  • Continuation : la vente apparaît dans l'historique et alimente le tableau de bord.

FR-13 — Modes de paiement (explicit) As a Caissier, I should choisir le mode de paiement parmi espèces, carte bancaire, paiement électronique et crédit client si activé, afin d'encaisser correctement la vente.

  • Déclencheur / entrée : sélection du mode de paiement lors de la création de la vente.
  • Résultat observable : mode de paiement enregistré avec la vente.
  • État d'accès : session authentifiée, rôle autorisé à créer une vente.
  • Échec / reprise : crédit client non activé → option indisponible et message explicatif.
  • Continuation : la vente est validée avec le mode choisi.

FR-14 — Validation, annulation et correction des ventes (explicit) As a Caissier, I should valider, annuler et corriger une vente, afin de traiter les erreurs de saisie et les retours.

  • Déclencheur / entrée : action de validation, d'annulation ou de correction sur une vente.
  • Résultat observable : statut de la vente mis à jour et entrée correspondante dans le journal d'audit.
  • État d'accès : session authentifiée, rôle autorisé.
  • Échec / reprise : action refusée → message explicatif, vente inchangée.
  • Continuation : l'historique et les rapports reflètent le nouveau statut.

FR-15 — Historique et filtres des ventes (explicit) As a Comptable, I should consulter l'historique des ventes et le filtrer par période, produit, pompe et employé, afin d'analyser l'activité.

  • Déclencheur / entrée : application de filtres sur la surface Ventes.
  • Résultat observable : liste filtrée, recherchable, triable et paginée.
  • État d'accès : session authentifiée, rôle autorisé.
  • Échec / reprise : aucun résultat → écran vide explicatif avec réinitialisation des filtres.
  • Continuation : export ou consultation du détail d'une vente.

FR-16 — Suivi des pompes (explicit) As a Employé de piste, I should renseigner le compteur initial, le compteur final, le volume distribué, l'état et les anomalies d'une pompe, afin de suivre la distribution réelle.

  • Déclencheur / entrée : saisie des compteurs ou mise à jour de l'état.
  • Résultat observable : volume distribué calculé et état de la pompe à jour.
  • État d'accès : session authentifiée, rôle gérant ou employé de piste.
  • Échec / reprise : compteur final inférieur au compteur initial → erreur explicite, saisie refusée.
  • Continuation : la pompe apparaît à jour dans le détail de station et le tableau de bord.

FR-17 — Signalement des problèmes et anomalies (explicit) As a Employé de piste, I should signaler les problèmes et anomalies de pompes ou d'équipements, afin que la maintenance intervienne.

  • Déclencheur / entrée : signalement d'une anomalie depuis Pompes ou Maintenance.
  • Résultat observable : incident créé avec équipement, description et statut ; notification de pompe hors service émise si applicable.
  • État d'accès : session authentifiée, rôle employé de piste, gérant ou propriétaire.
  • Échec / reprise : signalement non enregistré → message explicatif, possibilité de réessayer.
  • Continuation : l'incident est suivi dans Maintenance jusqu'à clôture.

FR-18 — Suivi des stocks par cuve et par produit (explicit) As a Responsable stock, I should suivre les stocks par cuve et par produit, avec stock actuel, capacité, pourcentage de remplissage, seuil minimum et dernière livraison, afin de maîtriser les niveaux.

  • Déclencheur / entrée : consultation de la surface Cuves et stocks.
  • Résultat observable : niveau, capacité, pourcentage de remplissage, seuil minimum et dernière livraison affichés par cuve et par produit.
  • État d'accès : session authentifiée, rôle gérant ou responsable stock.
  • Échec / reprise : données indisponibles → message explicatif et rechargement.
  • Continuation : action sur les entrées, sorties ou ajustements.

FR-19 — Enregistrement automatique des entrées et sorties de stock (explicit) As a Responsable stock, I should que les entrées et sorties de stock soient enregistrées automatiquement, afin que les niveaux restent exacts sans saisie manuelle.

  • Déclencheur / entrée : validation d'une vente ou enregistrement d'une livraison.
  • Résultat observable : mouvement de stock créé et niveau de cuve mis à jour.
  • État d'accès : système, déclenché par une action authentifiée.
  • Échec / reprise : échec d'écriture du mouvement → l'opération d'origine est refusée.
  • Continuation : l'historique complet des mouvements reflète l'entrée ou la sortie.

FR-20 — Alerte de stock faible (explicit) As a Responsable stock, I should être alerté en cas de stock faible, afin de déclencher un réapprovisionnement.

  • Déclencheur / entrée : niveau de cuve passant sous le seuil minimum.
  • Résultat observable : alerte de stock faible créée et visible dans le tableau de bord et les notifications.
  • État d'accès : système, visible par les rôles autorisés.
  • Échec / reprise : alerte non émise → signalée comme anomalie de traitement.
  • Continuation : l'alerte reste active jusqu'au retour au-dessus du seuil.

FR-21 — Ajustements manuels de stock avec motif obligatoire (explicit) As a Responsable stock, I should effectuer des ajustements manuels de stock uniquement avec un motif obligatoire, afin de justifier tout écart.

  • Déclencheur / entrée : saisie d'un ajustement manuel.
  • Résultat observable : mouvement de stock ajusté avec motif enregistré.
  • État d'accès : session authentifiée, rôle gérant ou responsable stock.
  • Échec / reprise : motif absent → ajustement refusé avec message explicite.
  • Continuation : l'ajustement apparaît dans l'historique complet des mouvements.

FR-22 — Historique complet des mouvements de stock (explicit) As a Responsable stock, I should consulter l'historique complet des mouvements, afin de reconstituer l'évolution des stocks.

  • Déclencheur / entrée : consultation de l'historique sur Cuves et stocks.
  • Résultat observable : liste chronologique des entrées, sorties et ajustements.
  • État d'accès : session authentifiée, rôle autorisé.
  • Échec / reprise : aucun mouvement → écran vide explicatif.
  • Continuation : filtrage par cuve, produit et période.

FR-23 — Gestion des fournisseurs (explicit) As a Responsable stock, I should gérer les coordonnées des fournisseurs, leurs produits, leurs livraisons et l'historique des achats, afin de suivre mes approvisionnements.

  • Déclencheur / entrée : ajout ou modification d'un fournisseur.
  • Résultat observable : fournisseur enregistré avec coordonnées, produits associés et historique des achats.
  • État d'accès : session authentifiée, rôle propriétaire, gérant ou responsable stock.
  • Échec / reprise : données invalides → erreur explicite.
  • Continuation : le fournisseur est sélectionnable lors d'une livraison.

FR-24 — Enregistrement des livraisons (explicit) As a Responsable stock, I should enregistrer une livraison avec fournisseur, produit, quantité, prix d'achat, date et document, afin de tracer les approvisionnements.

  • Déclencheur / entrée : saisie d'une livraison.
  • Résultat observable : livraison enregistrée avec document rattaché et entrée de stock créée.
  • État d'accès : session authentifiée, rôle gérant ou responsable stock.
  • Échec / reprise : document manquant ou quantité invalide → erreur explicite, livraison non enregistrée.
  • Continuation : notification de livraison reçue et mise à jour des stocks.

FR-25 — Gestion des dépenses (explicit) As a Comptable, I should enregistrer une dépense avec catégorie, montant, date, justificatif et commentaire, afin de suivre les charges.

  • Déclencheur / entrée : saisie d'une dépense.
  • Résultat observable : dépense enregistrée avec justificatif et commentaire.
  • État d'accès : session authentifiée, rôle propriétaire, gérant ou comptable.
  • Échec / reprise : justificatif invalide ou montant manquant → erreur explicite.
  • Continuation : la dépense alimente le tableau de bord et les rapports.

FR-26 — Ouverture, mouvements et paiements de caisse (explicit) As a Caissier, I should ouvrir la caisse, enregistrer les mouvements et les paiements, afin de suivre les encaissements de la journée.

  • Déclencheur / entrée : ouverture de caisse puis saisie d'un mouvement ou d'un paiement.
  • Résultat observable : caisse ouverte et mouvements enregistrés.
  • État d'accès : session authentifiée, rôle gérant, caissier ou comptable.
  • Échec / reprise : caisse déjà ouverte ou mouvement invalide → erreur explicite.
  • Continuation : clôture et rapprochement en fin de journée.

FR-27 — Clôture et rapprochement de caisse (explicit) As a Caissier, I should clôturer la caisse et effectuer le rapprochement, afin de valider les encaissements et détecter les écarts.

  • Déclencheur / entrée : action de clôture de caisse.
  • Résultat observable : clôture enregistrée, rapprochement effectué, notification de clôture réussie ou échouée émise.
  • État d'accès : session authentifiée, rôle gérant, caissier ou comptable.
  • Échec / reprise : écart de caisse détecté → clôture échouée, notification d'écart de caisse émise, possibilité de corriger puis reclôturer.
  • Continuation : le rapport de caisse reflète la clôture.

FR-28 — Gestion des clients (explicit) As a Caissier, I should gérer les clients particuliers et entreprises, leur historique et leur crédit éventuel, afin de suivre la relation commerciale.

  • Déclencheur / entrée : ajout ou modification d'un client.
  • Résultat observable : client enregistré avec type, historique et crédit lorsqu'il est activé.
  • État d'accès : session authentifiée, rôle gérant, caissier ou comptable.
  • Échec / reprise : données invalides → erreur explicite.
  • Continuation : le client est sélectionnable lors d'une vente à crédit si le crédit est activé.

FR-29 — Crédit client conditionnel (required_inference) As a Caissier, I should utiliser le crédit client uniquement lorsqu'il est activé, afin de ne pas enregistrer de ventes à crédit non autorisées.

  • Déclencheur / entrée : sélection du mode de paiement crédit client.
  • Résultat observable : crédit disponible → vente enregistrée ; crédit non activé → option indisponible.
  • État d'accès : session authentifiée, rôle autorisé à créer une vente.
  • Échec / reprise : crédit non activé → message explicatif, choix d'un autre mode de paiement.
  • Continuation : la vente est validée avec un mode autorisé.

FR-30 — Gestion des employés (explicit) As a Gérant, I should gérer les utilisateurs, rôles, horaires, station et statut des employés, afin d'organiser le personnel de la station.

  • Déclencheur / entrée : création ou modification d'un employé.
  • Résultat observable : employé enregistré avec rôle, horaires, station et statut.
  • État d'accès : session authentifiée, rôle propriétaire ou gérant.
  • Échec / reprise : rôle ou station manquant → erreur explicite.
  • Continuation : l'employé apparaît dans le détail de station et peut se connecter selon son rôle.

FR-31 — Gestion de la maintenance (explicit) As a Gérant, I should suivre les incidents, équipements, interventions, coûts et statuts, afin de maintenir les équipements en service.

  • Déclencheur / entrée : création d'un incident ou enregistrement d'une intervention.
  • Résultat observable : incident et intervention enregistrés avec coût et statut.
  • État d'accès : session authentifiée, rôle propriétaire, gérant ou employé de piste.
  • Échec / reprise : données incomplètes → erreur explicite.
  • Continuation : l'incident est clôturé lorsque l'intervention est terminée.

FR-32 — Tableau de bord (explicit) As a Propriétaire, I should consulter un tableau de bord affichant chiffre d'affaires du jour et du mois, litres vendus, nombre de transactions, stock disponible, produit le plus vendu, meilleure station, dépenses du mois, marge estimée, alertes de stock, pompes hors service et livraisons récentes, afin de piloter l'activité.

  • Déclencheur / entrée : ouverture du tableau de bord.
  • Résultat observable : KPI et listes d'alertes, pompes hors service et livraisons récentes affichés.
  • État d'accès : session authentifiée.
  • Échec / reprise : données indisponibles → message explicatif et rechargement.
  • Continuation : navigation vers les surfaces détaillées.

FR-33 — Graphiques du tableau de bord (explicit) As a Propriétaire, I should consulter des graphiques de ventes par jour, ventes par carburant, évolution du chiffre d'affaires, comparaison des stations, dépenses par catégorie et niveau des stocks, afin de visualiser les tendances.

  • Déclencheur / entrée : ouverture du tableau de bord.
  • Résultat observable : six graphiques alimentés par les données réelles.
  • État d'accès : session authentifiée.
  • Échec / reprise : graphique indisponible → état d'erreur localisé sans bloquer le reste de la page.
  • Continuation : filtrage par station et période.

FR-34 — Rapports filtrables (explicit) As a Comptable, I should générer des rapports filtrables par station, période, produit, pompe, employé et mode de paiement, afin d'analyser précisément l'activité.

  • Déclencheur / entrée : sélection des filtres sur la surface Rapports.
  • Résultat observable : rapport filtré affiché.
  • État d'accès : session authentifiée, rôle propriétaire, gérant ou comptable.
  • Échec / reprise : période invalide → erreur explicite ; aucune donnée → écran vide explicatif.
  • Continuation : export du rapport.

FR-35 — Types de rapports (explicit) As a Comptable, I should disposer du rapport journalier des ventes, du rapport mensuel, du rapport de caisse, du rapport des stocks, du rapport des livraisons, du rapport des dépenses, du rapport de marge estimée et du rapport de performance par station, afin de couvrir tous les besoins d'analyse.

  • Déclencheur / entrée : sélection d'un type de rapport dans le sommaire numéroté.
  • Résultat observable : rapport correspondant généré.
  • État d'accès : session authentifiée, rôle autorisé.
  • Échec / reprise : génération impossible → message explicatif et possibilité de relancer.
  • Continuation : export ou changement de type de rapport.

FR-36 — Export PDF et Excel (explicit) As a Comptable, I should exporter les rapports en PDF et Excel avec logo, nom de l'entreprise, station, période et date de génération, afin de les diffuser et les archiver.

  • Déclencheur / entrée : action d'export PDF ou Excel.
  • Résultat observable : fichier exporté contenant logo, nom de l'entreprise, station, période et date de génération.
  • État d'accès : session authentifiée, rôle autorisé.
  • Échec / reprise : export échoué → message explicatif et possibilité de relancer.
  • Continuation : le rapport reste consultable à l'écran.

FR-37 — Notifications (explicit) As a Gérant, I should recevoir des notifications pour stock faible, livraison reçue, pompe hors service, dépense importante, écart de caisse, création d'utilisateur et clôture de caisse réussie ou échouée, afin de réagir rapidement.

  • Déclencheur / entrée : survenance de l'un des événements listés.
  • Résultat observable : notification créée et visible par les rôles concernés.
  • État d'accès : session authentifiée.
  • Échec / reprise : notification non émise → signalée comme anomalie de traitement.
  • Continuation : consultation de la notification et navigation vers l'élément concerné.

FR-38 — Gestion des abonnements (explicit) As a Super administrateur, I should gérer les plans Essentiel, Professionnel et Entreprise, afin d'attribuer et de suivre les abonnements des entreprises.

  • Déclencheur / entrée : attribution ou changement de plan.
  • Résultat observable : plan attribué avec limites correspondantes.
  • État d'accès : session authentifiée, rôle super administrateur.
  • Échec / reprise : changement refusé → message explicite, plan inchangé.
  • Continuation : l'entreprise voit son plan actuel et ses limites.

FR-39 — Consultation de l'abonnement (explicit) As a Propriétaire, I should consulter le plan actuel, les limites utilisées, la date de renouvellement, les factures et changer de plan, afin de gérer mon abonnement.

  • Déclencheur / entrée : ouverture de la surface Abonnement.
  • Résultat observable : plan actuel, limites utilisées, date de renouvellement et factures affichés.
  • État d'accès : session authentifiée, rôle propriétaire ou super administrateur.
  • Échec / reprise : limite atteinte → message explicatif lors du changement de plan.
  • Continuation : changement de plan ou consultation des factures.

FR-40 — Paramétrage de l'entreprise, des produits et des taxes (explicit) As a Propriétaire, I should configurer l'entreprise, les stations, les produits, les taxes, les utilisateurs et les permissions, afin d'adapter la plateforme à mon exploitation.

  • Déclencheur / entrée : modification d'un paramètre.
  • Résultat observable : paramètres enregistrés et appliqués aux opérations.
  • État d'accès : session authentifiée, rôle propriétaire ou super administrateur.
  • Échec / reprise : champ obligatoire manquant ou taxe invalide → erreur explicite.
  • Continuation : les nouvelles valeurs s'appliquent aux ventes et rapports suivants.

FR-41 — Produits carburant par défaut (explicit) As a Propriétaire, I should disposer par défaut de l'Essence sans plomb, du Gasoil et du GPL carburant, chacun avec nom et code, prix de vente, prix d'achat, unité en litre, stock minimum, couleur et statut actif/inactif, afin de démarrer sans configuration exhaustive.

  • Déclencheur / entrée : initialisation de l'entreprise.
  • Résultat observable : trois produits carburant disponibles avec tous les attributs requis.
  • État d'accès : session authentifiée avec permission de configuration.
  • Échec / reprise : création impossible → message explicatif.
  • Continuation : les produits sont sélectionnables dans les ventes, livraisons et stocks.

FR-42 — Prix configurables par station et taxes configurables (explicit) As a Propriétaire, I should configurer les prix par station et les taxes, sans jamais coder les prix ou les taxes en dur et sans imposer un taux de TVA fixe, afin de refléter la réalité commerciale de chaque station.

  • Déclencheur / entrée : modification d'un prix de station ou d'une taxe.
  • Résultat observable : prix et taxes appliqués par station, sans valeur codée en dur.
  • État d'accès : session authentifiée avec permission de configuration.
  • Échec / reprise : valeur invalide → erreur explicite, ancienne valeur conservée.
  • Continuation : les ventes suivantes utilisent les valeurs configurées.

FR-43 — Champs du contexte algérien (explicit) As a Propriétaire, I should renseigner wilaya, commune, adresse, téléphone algérien, numéro d'identification fiscale et registre de commerce, afin de conformer mes données au contexte algérien.

  • Déclencheur / entrée : saisie des champs lors de la configuration de l'entreprise ou d'une station.
  • Résultat observable : champs enregistrés et affichés avec les wilayas et communes d'Algérie.
  • État d'accès : session authentifiée avec permission de configuration.
  • Échec / reprise : format invalide → erreur explicite.
  • Continuation : les champs apparaissent dans les en-têtes de rapports et d'exports.

FR-44 — Horaires d'ouverture configurables par station (explicit) As a Gérant, I should configurer les horaires d'ouverture de ma station, afin de refléter son fonctionnement réel.

  • Déclencheur / entrée : saisie des horaires sur la station.
  • Résultat observable : horaires enregistrés et affichés sur le détail de la station.
  • État d'accès : session authentifiée, rôle propriétaire ou gérant.
  • Échec / reprise : horaires incohérents → erreur explicite.
  • Continuation : les horaires sont consultables dans le détail de station.

FR-45 — Devise et format de date (explicit) As a Utilisateur, I should voir les montants en « DA » et les dates au format DD/MM/YYYY, afin de lire les données sans ambiguïté.

  • Déclencheur / entrée : affichage de tout montant ou de toute date.
  • Résultat observable : montants suffixés « DA » et dates au format DD/MM/YYYY.
  • État d'accès : toutes les surfaces.
  • Échec / reprise : non applicable (règle d'affichage).
  • Continuation : cohérence sur toutes les surfaces et exports.

FR-46 — Interface en français LTR et compatibilité RTL future (explicit) As a Utilisateur, I should utiliser une interface entièrement en français LTR, avec une compatibilité RTL prévue mais non activée, afin de travailler dans ma langue tout en préparant l'avenir.

  • Déclencheur / entrée : ouverture de toute surface.
  • Résultat observable : libellés en français, direction LTR.
  • État d'accès : toutes les surfaces.
  • Échec / reprise : non applicable.
  • Continuation : la structure reste compatible avec une future direction RTL.

FR-47 — Mode clair et mode sombre (explicit) As a Utilisateur, I should basculer entre mode clair et mode sombre, afin de travailler confortablement selon l'éclairage.

  • Déclencheur / entrée : bascule de thème.
  • Résultat observable : palette claire ou sombre appliquée à toutes les surfaces.
  • État d'accès : toutes les surfaces.
  • Échec / reprise : préférence non enregistrée → thème par défaut appliqué.
  • Continuation : la préférence persiste entre les sessions.

FR-48 — Interface responsive (explicit) As a Utilisateur, I should utiliser l'application sur ordinateur, tablette et mobile, afin de travailler au bureau comme sur la piste.

  • Déclencheur / entrée : ouverture sur un viewport donné.
  • Résultat observable : navigation latérale 264px sur desktop, rail d'icônes 64px à 768px, bottom sheet à 375px ; textes et contrôles restent entiers dans le viewport.
  • État d'accès : toutes les surfaces.
  • Échec / reprise : non applicable.
  • Continuation : mêmes capacités sur tous les formats.

FR-49 — États de chargement, erreurs, succès et écrans vides (explicit) As a Utilisateur, I should voir des états de chargement, des erreurs, des succès et des écrans vides explicatifs, afin de comprendre l'état du système.

  • Déclencheur / entrée : chargement, échec, réussite ou absence de données.
  • Résultat observable : état correspondant affiché avec message explicatif et action de reprise.
  • État d'accès : toutes les surfaces.
  • Échec / reprise : erreur → message et possibilité de recharger.
  • Continuation : reprise de l'action après correction.

FR-50 — Tableaux optimisés avec recherche, filtres, pagination et tri (explicit) As a Utilisateur, I should disposer de tableaux optimisés pour un grand volume de données avec recherche, filtres, pagination et tri, afin de retrouver rapidement une information.

  • Déclencheur / entrée : saisie d'une recherche, application d'un filtre, changement de page ou de tri.
  • Résultat observable : tableau dense (40px de ligne), en-tête collant, résultats mis à jour.
  • État d'accès : surfaces authentifiées.
  • Échec / reprise : aucun résultat → écran vide explicatif.
  • Continuation : navigation dans les pages ou réinitialisation des filtres.

FR-51 — Confirmation avant suppression et archivage (explicit) As a Propriétaire, I should confirmer avant toute suppression et archiver lorsque nécessaire, afin d'éviter les pertes de données.

  • Déclencheur / entrée : action de suppression.
  • Résultat observable : confirmation demandée ; après confirmation, suppression ou archivage effectué.
  • État d'accès : session authentifiée avec permission correspondante.
  • Échec / reprise : confirmation refusée → aucune modification.
  • Continuation : l'élément disparaît de la liste active ou reste consultable en archive.

FR-52 — Sécurité des mots de passe et des sessions (explicit) As a Super administrateur, I should que les mots de passe soient hashés et les sessions gérées de façon sécurisée, afin de protéger les comptes.

  • Déclencheur / entrée : création de compte, connexion, expiration de session.
  • Résultat observable : mots de passe jamais stockés en clair ; sessions sécurisées et expirantes.
  • État d'accès : système.
  • Échec / reprise : session invalide → retour à la Connexion.
  • Continuation : reconnexion et reprise du travail.

FR-53 — Protection contre l'accès aux données d'une autre entreprise (explicit) As a Super administrateur, I should garantir qu'aucun utilisateur n'accède aux données d'une autre entreprise, afin de préserver la confidentialité multi-tenant.

  • Déclencheur / entrée : toute requête vers une ressource.
  • Résultat observable : accès refusé hors périmètre d'entreprise.
  • État d'accès : système, sur requêtes authentifiées.
  • Échec / reprise : tentative refusée et journalisée.
  • Continuation : l'utilisateur reste sur sa surface autorisée.

FR-54 — Sauvegardes régulières et variables d'environnement (explicit) As a Super administrateur, I should disposer de sauvegardes régulières et stocker les données sensibles dans des variables d'environnement, sans jamais les exposer dans le frontend, afin de garantir la résilience et la confidentialité.

  • Déclencheur / entrée : planification des sauvegardes ; chargement de la configuration.
  • Résultat observable : sauvegardes réalisées régulièrement ; aucune donnée sensible exposée côté frontend.
  • État d'accès : système.
  • Échec / reprise : sauvegarde échouée → signalée comme anomalie de traitement.
  • Continuation : restauration possible en cas d'incident.

FR-55 — Données de démonstration (explicit) As a Propriétaire, I should disposer de données de démonstration réalistes pour une entreprise algérienne avec trois stations dans différentes wilayas, plusieurs pompes, cuves, ventes, livraisons, dépenses, employés et alertes de stock, afin d'évaluer la plateforme.

  • Déclencheur / entrée : initialisation de l'environnement de démonstration.
  • Résultat observable : jeu de données cohérent couvrant les trois stations et les domaines listés.
  • État d'accès : environnement de démonstration.
  • Échec / reprise : initialisation échouée → message explicatif.
  • Continuation : exploration des surfaces avec des données réalistes.

FR-56 — Séparation frontend, backend et base de données avec API sécurisées (explicit) As a Super administrateur, I should disposer d'une séparation claire entre frontend, backend et base de données, exposant des API sécurisées, afin de garantir maintenabilité et sécurité.

  • Déclencheur / entrée : toute interaction client-serveur.
  • Résultat observable : frontend, backend et base de données distincts ; API authentifiées et autorisées.
  • État d'accès : système.
  • Échec / reprise : appel non autorisé → refus explicite.
  • Continuation : fonctionnement normal des surfaces.

FR-57 — Composants réutilisables et absence de données statiques (explicit) As a Super administrateur, I should que les écrans finaux utilisent des composants réutilisables et aucune donnée statique, afin de garantir cohérence et fiabilité.

  • Déclencheur / entrée : rendu de toute surface finale.
  • Résultat observable : composants partagés (cartes KPI, tableaux, modales, barres de remplissage) alimentés par les API.
  • État d'accès : surfaces authentifiées.
  • Échec / reprise : données indisponibles → état d'erreur ou écran vide explicatif, jamais de valeur fictive.
  • Continuation : rechargement des données réelles.

FR-58 — Architecture évolutive pour une future application mobile (explicit) As a Super administrateur, I should disposer d'une architecture évolutive prête pour une future application mobile, afin de préparer l'extension du produit.

  • Déclencheur / entrée : conception des API et des contrats de données.
  • Résultat observable : API sécurisées réutilisables par un futur client mobile.
  • État d'accès : système.
  • Échec / reprise : non applicable.
  • Continuation : aucune application mobile n'est livrée dans le périmètre actuel.
Page 11 of 26

4. User Personas

Super administrateur

  • Contexte produit : opère la plateforme SaaS elle-même, au-dessus des entreprises clientes.
  • Objectif principal : maintenir la plateforme opérationnelle et gérer les entreprises clientes et leurs abonnements.
  • Responsabilités acceptées : gestion de la plateforme, des entreprises et des abonnements ; suivi des plans, des limites et des renouvellements ; accès à la configuration des paramètres et à la surface Abonnement.
  • Entrées et décisions : attribution ou changement de plan ; arbitrage des limites (stations, utilisateurs) ; contrôle de l'isolation entre entreprises.
  • Interactions avec les autres participants : fournit aux propriétaires le plan et les limites dont dépendent leurs opérations ; reçoit les demandes de changement de plan.
  • Succès observable : chaque entreprise dispose du plan attendu, avec des limites cohérentes et des données strictement isolées.

Propriétaire

  • Contexte produit : dirige une entreprise de distribution de carburant pouvant exploiter plusieurs stations dans différentes wilayas.
  • Objectif principal : piloter la performance multi-stations, les marges estimées et la configuration de l'entreprise.
  • Responsabilités acceptées : accès à toutes les stations, aux rapports, aux utilisateurs et aux paramètres ; configuration de l'entreprise, des stations, des produits, des taxes et des permissions ; gestion des employés ; consultation de l'abonnement.
  • Entrées et décisions : prix par station, taxes configurables, seuils de stock minimum, rôles et permissions, choix du plan d'abonnement.
  • Interactions avec les autres participants : crée et habilite les gérants, caissiers, employés de piste, responsables stock et comptables ; consomme les rapports produits par le comptable et les alertes remontées par le gérant.
  • Succès observable : chiffre d'affaires, marges estimées et comparaison des stations lisibles ; chaque collaborateur dispose des accès correspondant à sa fonction.

Gérant

  • Contexte produit : responsable de l'exploitation quotidienne d'une station donnée.
  • Objectif principal : garantir l'exploitation de sa station au jour le jour.
  • Responsabilités acceptées : gestion opérationnelle d'une station — ventes, pompes, cuves, stocks, livraisons, dépenses, caisse, employés et maintenance ; suivi des alertes et de l'activité quotidienne ; configuration des horaires d'ouverture.
  • Entrées et décisions : arbitrage des priorités de maintenance, validation des livraisons, suivi des écarts de caisse, affectation des employés à la station.
  • Interactions avec les autres participants : encadre le caissier, l'employé de piste et le responsable stock ; remonte au propriétaire les incidents et les écarts significatifs.
  • Succès observable : station exploitée sans rupture de stock ni pompe hors service prolongée ; activité quotidienne et dépenses visibles dans le détail de station.
Page 12 of 26

Caissier

  • Contexte produit : poste d'encaissement en station, sous pression temporelle et parfois en forte luminosité.
  • Objectif principal : enregistrer rapidement et correctement les ventes et les paiements, puis clôturer sa caisse.
  • Responsabilités acceptées : ventes, paiements (espèces, carte bancaire, paiement électronique, crédit client si activé) et clôture de caisse avec rapprochement ; traitement des corrections et annulations de ventes avec journal d'audit ; gestion des clients et de leur crédit éventuel.
  • Entrées et décisions : choix du produit, de la pompe, de la quantité en litres et du mode de paiement ; décision de corriger ou d'annuler une vente erronée.
  • Interactions avec les autres participants : dépend des prix configurés par le propriétaire et des niveaux de stock suivis par le responsable stock ; signale au gérant tout écart de caisse.
  • Succès observable : montant total calculé automatiquement, vente validée, clôture réussie ou écart explicitement notifié.

Employé de piste

  • Contexte produit : travaille directement au contact des pompes et des équipements.
  • Objectif principal : tenir les compteurs à jour et faire remonter les problèmes matériels.
  • Responsabilités acceptées : opérations liées aux pompes (compteur initial, compteur final, volume distribué, état) et signalement des problèmes et anomalies de pompes ou d'équipements.
  • Entrées et décisions : relevé des compteurs, qualification de l'anomalie, mise à jour de l'état de la pompe.
  • Interactions avec les autres participants : alimente le gérant et la maintenance en incidents ; ses relevés conditionnent la cohérence des volumes distribués vus par le comptable.
  • Succès observable : volume distribué calculé, état de pompe à jour, incident créé et suivi jusqu'à clôture.

Responsable stock

  • Contexte produit : garant des niveaux de carburant par cuve et par produit sur une ou plusieurs stations.
  • Objectif principal : éviter les ruptures et justifier tout écart de stock.
  • Responsabilités acceptées : stocks par cuve et par produit, entrées et sorties, livraisons et ajustements manuels avec motif obligatoire ; surveillance des niveaux, seuils minimums et alertes de stock faible ; gestion des fournisseurs et de l'historique des achats.
  • Entrées et décisions : validation des livraisons reçues, décision d'ajustement manuel et rédaction du motif, arbitrage de réapprovisionnement.
  • Interactions avec les autres participants : travaille avec le gérant sur les priorités de réapprovisionnement et avec le caissier dont les ventes consomment le stock.
  • Succès observable : niveaux, capacités, pourcentages de remplissage et seuils lisibles ; historique complet des mouvements disponible ; alertes de stock faible traitées.
Page 13 of 26

Comptable

  • Contexte produit : suit la dimension financière de l'entreprise et de ses stations.
  • Objectif principal : produire des états financiers fiables et exportables.
  • Responsabilités acceptées : revenus, dépenses, factures et rapports financiers, y compris marges estimées, caisse et performances par station, avec export PDF/Excel ; consultation de l'historique des ventes et des rapports filtrables.
  • Entrées et décisions : choix des filtres (station, période, produit, pompe, employé, mode de paiement), validation des justificatifs de dépense, contrôle des rapports de caisse.
  • Interactions avec les autres participants : dépend des ventes du caissier, des livraisons du responsable stock et des dépenses du gérant ; fournit au propriétaire les rapports de marge et de performance.
  • Succès observable : rapports générés avec logo, nom de l'entreprise, station, période et date de génération, exportables en PDF et Excel.

5. Core User Flows

Flux 1 — Découverte publique puis connexion (tous rôles)

  1. L'utilisateur ouvre la Landing sans session ; il lit la présentation de NaftoManager, les domaines couverts et les plans.
  2. Il actionne l'appel à l'action vers la Connexion.
  3. Sur la Connexion, il saisit son email et son mot de passe, puis valide.
  4. Résultat observable : session ouverte et redirection vers la surface autorisée par son rôle.
  5. Échec / reprise : identifiants invalides ou compte inactif → message explicatif, nouvelle tentative possible.
  6. Continuation : l'utilisateur reprend son travail sur la surface autorisée.

Flux 2 — Mot de passe oublié (tous rôles)

  1. Depuis la Connexion, l'utilisateur actionne « mot de passe oublié ».
  2. Il saisit son email et confirme.
  3. Résultat observable : confirmation d'envoi de la demande de réinitialisation, sans révéler l'existence du compte.
  4. Échec / reprise : service indisponible → message explicatif et nouvelle tentative.
  5. Continuation : retour à la Connexion pour se connecter.
Page 14 of 26

Flux 3 — Configuration initiale de l'entreprise (Propriétaire)

  1. Le propriétaire se connecte et ouvre Paramètres.
  2. Il renseigne l'entreprise : wilaya, commune, adresse, téléphone algérien, numéro d'identification fiscale, registre de commerce.
  3. Il crée au moins une Station avec adresse, localisation, statut, contacts et horaires d'ouverture configurables.
  4. Il vérifie les produits carburant par défaut (Essence sans plomb, Gasoil, GPL carburant) avec nom et code, prix de vente, prix d'achat, unité en litre, stock minimum, couleur et statut actif/inactif.
  5. Il configure les prix par station et les taxes, sans valeur codée en dur et sans taux de TVA imposé.
  6. Résultat observable : entreprise, station, produits, prix et taxes enregistrés et opérationnels.
  7. Échec / reprise : champ obligatoire manquant ou taxe invalide → erreur explicite, configuration non enregistrée.
  8. Continuation : les ventes, stocks et rapports peuvent être utilisés.

Flux 4 — Création des utilisateurs et attribution des rôles (Propriétaire)

  1. Le propriétaire ouvre Employés.
  2. Il crée un utilisateur en renseignant l'email, le rôle, la station et les horaires.
  3. Résultat observable : compte créé, rattaché à l'entreprise et au rôle, notification de création d'utilisateur émise.
  4. Échec / reprise : email déjà utilisé ou rôle manquant → erreur explicite, aucune création partielle.
  5. Continuation : l'utilisateur créé se connecte et ne voit que les surfaces autorisées par ses permissions.

Flux 5 — Enregistrement d'une vente (Caissier)

  1. Le caissier se connecte et ouvre Ventes.
  2. Il sélectionne la station et la pompe, puis le produit.
  3. Il saisit la quantité en litres ; le prix unitaire est celui configuré pour la station.
  4. Résultat observable : le montant total en DA est calculé automatiquement.
  5. Il choisit le mode de paiement : espèces, carte bancaire, paiement électronique, ou crédit client si activé.
  6. Il valide la vente ; l'employé, la date et l'heure sont enregistrés.
  7. Résultat observable : vente enregistrée, sortie de stock créée automatiquement, vente visible dans l'historique.
  8. Échec / reprise : produit indisponible, pompe hors service, crédit client non activé ou échec d'enregistrement → erreur explicite, vente non créée.
  9. Continuation : le caissier enchaîne la vente suivante ou consulte l'historique.
Page 15 of 26

Flux 6 — Correction ou annulation d'une vente (Caissier)

  1. Depuis Ventes, le caissier retrouve la vente via les filtres par période, produit, pompe et employé.
  2. Il ouvre la vente et actionne la correction ou l'annulation.
  3. Résultat observable : statut de la vente mis à jour et entrée correspondante dans le journal d'audit.
  4. Échec / reprise : action refusée → message explicatif, vente inchangée.
  5. Continuation : l'historique et les rapports reflètent le nouveau statut.

Flux 7 — Relevé des compteurs et signalement d'anomalie (Employé de piste)

  1. L'employé de piste se connecte et ouvre Pompes.
  2. Il saisit le compteur initial et le compteur final de la pompe.
  3. Résultat observable : le volume distribué est calculé et l'état de la pompe est mis à jour.
  4. En cas de problème, il ouvre Maintenance et signale l'anomalie avec l'équipement concerné.
  5. Résultat observable : incident créé avec statut ; si la pompe est hors service, une notification de pompe hors service est émise.
  6. Échec / reprise : compteur final inférieur au compteur initial → erreur explicite, saisie refusée.
  7. Continuation : l'incident est suivi dans Maintenance jusqu'à clôture par le gérant.

Flux 8 — Réception d'une livraison (Responsable stock)

  1. Le responsable stock ouvre Livraisons.
  2. Il sélectionne le fournisseur (défini dans Fournisseurs), le produit, la quantité, le prix d'achat et la date, puis rattache le document.
  3. Il valide la livraison.
  4. Résultat observable : livraison enregistrée, entrée de stock créée automatiquement, notification de livraison reçue émise.
  5. Échec / reprise : document manquant ou quantité invalide → erreur explicite, livraison non enregistrée.
  6. Continuation : le niveau de la cuve et la dernière livraison sont à jour dans Cuves et stocks.
Page 16 of 26

Flux 9 — Suivi des stocks et ajustement manuel (Responsable stock)

  1. Le responsable stock ouvre Cuves et stocks.
  2. Il consulte, par cuve et par produit, le stock actuel, la capacité, le pourcentage de remplissage, le seuil minimum et la dernière livraison.
  3. Résultat observable : barres de remplissage avec pourcentage en chiffres tabulaires et repère de seuil minimum ; barre rouge lorsque le niveau passe sous le seuil.
  4. Si un écart est constaté, il effectue un ajustement manuel en saisissant un motif obligatoire.
  5. Résultat observable : ajustement enregistré dans l'historique complet des mouvements.
  6. Échec / reprise : motif absent → ajustement refusé avec message explicite.
  7. Continuation : une alerte de stock faible est émise si le niveau reste sous le seuil.

Flux 10 — Ouverture, mouvements et clôture de caisse (Caissier)

  1. Le caissier ouvre Caisse et effectue l'ouverture de caisse.
  2. Il enregistre les mouvements et les paiements de la journée.
  3. Résultat observable : mouvements de caisse enregistrés et rattachés aux ventes.
  4. En fin de journée, il lance la clôture et effectue le rapprochement.
  5. Résultat observable : clôture réussie → notification de clôture réussie ; écart détecté → clôture échouée et notification d'écart de caisse.
  6. Échec / reprise : écart de caisse → le caissier corrige les mouvements concernés puis relance la clôture.
  7. Continuation : le rapport de caisse reflète la clôture pour le comptable.

Flux 11 — Enregistrement d'une dépense (Comptable ou Gérant)

  1. L'utilisateur ouvre Dépenses.
  2. Il saisit la catégorie, le montant, la date, le justificatif et un commentaire.
  3. Résultat observable : dépense enregistrée ; une notification de dépense importante est émise si le montant est significatif.
  4. Échec / reprise : justificatif invalide ou montant manquant → erreur explicite.
  5. Continuation : la dépense alimente le tableau de bord et les rapports.
Page 17 of 26

Flux 12 — Gestion des clients et du crédit (Caissier)

  1. Le caissier ouvre Clients.
  2. Il crée ou modifie un client particulier ou entreprise et consulte son historique.
  3. Lors d'une vente, il sélectionne le mode de paiement crédit client si le crédit est activé.
  4. Résultat observable : vente à crédit enregistrée et rattachée au client ; si le crédit n'est pas activé, l'option est indisponible.
  5. Échec / reprise : crédit non activé → message explicatif, choix d'un autre mode de paiement.
  6. Continuation : l'historique du client reflète la vente.

Flux 13 — Suivi de la maintenance (Gérant)

  1. Le gérant ouvre Maintenance et consulte les incidents signalés.
  2. Il enregistre une intervention avec l'équipement, le coût et le statut.
  3. Résultat observable : intervention enregistrée et statut de l'incident mis à jour.
  4. Échec / reprise : données incomplètes → erreur explicite.
  5. Continuation : l'incident est clôturé lorsque l'intervention est terminée ; la pompe repasse en service.

Flux 14 — Pilotage quotidien par le gérant (Gérant)

  1. Le gérant se connecte et ouvre Tableau de bord.
  2. Il consulte chiffre d'affaires du jour et du mois, litres vendus, nombre de transactions, stock disponible, produit le plus vendu, meilleure station, dépenses du mois, marge estimée, alertes de stock, pompes hors service et livraisons récentes.
  3. Il consulte les graphiques : ventes par jour, ventes par carburant, évolution du chiffre d'affaires, comparaison des stations, dépenses par catégorie, niveau des stocks.
  4. Il ouvre Détail d'une station et parcourt les onglets 01 Pompes, 02 Cuves, 03 Ventes, 04 Dépenses, 05 Activité.
  5. Résultat observable : alertes, pompes hors service et livraisons récentes traitées ou escaladées.
  6. Échec / reprise : données indisponibles → message explicatif et rechargement.
  7. Continuation : actions correctives sur les surfaces concernées.
Page 18 of 26

Flux 15 — Génération et export de rapports (Comptable)

  1. Le comptable ouvre Rapports.
  2. Il choisit un type parmi le sommaire numéroté : rapport journalier des ventes, rapport mensuel, rapport de caisse, rapport des stocks, rapport des livraisons, rapport des dépenses, rapport de marge estimée, rapport de performance par station.
  3. Il applique les filtres par station, période, produit, pompe, employé et mode de paiement.
  4. Résultat observable : rapport affiché avec en-tête imprimable (logo, nom de l'entreprise, station, période, date de génération).
  5. Il exporte en PDF ou Excel via la barre d'export fixe.
  6. Échec / reprise : période invalide → erreur explicite ; export échoué → message explicatif et nouvelle tentative ; aucune donnée → écran vide explicatif.
  7. Continuation : le rapport reste consultable à l'écran.

Flux 16 — Gestion de l'abonnement (Propriétaire)

  1. Le propriétaire ouvre Abonnement.
  2. Il consulte le plan actuel, les limites utilisées, la date de renouvellement et les factures.
  3. Il compare les plans Essentiel (une station, ventes, stocks, rapports de base), Professionnel (plusieurs stations, employés, dépenses, maintenance, rapports avancés) et Entreprise (stations et utilisateurs illimités, permissions avancées, exports, API, support prioritaire).
  4. Il actionne un changement de plan.
  5. Résultat observable : nouveau plan appliqué avec ses limites.
  6. Échec / reprise : limite atteinte ou changement refusé → message explicatif, plan inchangé.
  7. Continuation : les limites mises à jour s'appliquent aux opérations suivantes.

Flux 17 — Administration de la plateforme (Super administrateur)

  1. Le super administrateur se connecte et ouvre Abonnement.
  2. Il consulte les entreprises clientes, leurs plans, limites et renouvellements.
  3. Il attribue ou modifie un plan.
  4. Résultat observable : plan attribué avec les limites correspondantes ; l'entreprise concernée voit son plan actuel mis à jour.
  5. Échec / reprise : changement refusé → message explicite, plan inchangé.
  6. Continuation : suivi des renouvellements et des limites utilisées.
Page 19 of 26

Flux 18 — Consultation du détail d'une station (Propriétaire)

  1. Le propriétaire ouvre Stations et sélectionne une station.
  2. Il parcourt les onglets 01 Pompes, 02 Cuves, 03 Ventes, 04 Dépenses, 05 Activité.
  3. Résultat observable : pompes, cuves, employés, ventes, stocks, dépenses et activité de la station affichés.
  4. Échec / reprise : station inaccessible → message explicatif et retour à la liste.
  5. Continuation : navigation vers les surfaces détaillées concernées ou retour à la liste des stations.

6. Visuals Colors and Theme

Muse : Erik Spiekermann. Direction retenue : typographic infrastructure for a fuel network — signal colours as wayfinding, Fira Sans as the system. L'interface est un système de signalétique, pas un site marketing : lisibilité sous le soleil de la piste, calme sous pression, ordre strict.

Page 20 of 26

Palette — mode clair

RôleValeur
Fond (papier chaud)#F4F1EA
Surface (panneaux)#FFFFFF
Texte#16181C
Primaire (navigation, règles de section)#12294A
Accent (actions et états actifs uniquement)#E8660B
Atténué (libellés, métadonnées, en-têtes de tableau)#6E6A62
Vert sémantique (revenus, validations, niveaux au-dessus du seuil)#1F7A4D
Rouge sémantique (alertes, écarts de caisse, pompes hors service)#B3261E
Surface verte teintée (petit texte)#E7F2EB
Surface rouge teintée (petit texte)#FBEAE8
Filet 1px#DCD6CA
Page 21 of 26

Palette — mode sombre

RôleValeur
Fond#121417
Surface#1B1E23
Texte#F2EFE9
Primaire (navigation)#2C4A75
Accent#F0781E
Atténué#9A958C
Surface verte teintée#16301F
Surface rouge teintée#3A1A18
Filet 1px#2A2E34

Le vert et le rouge ne sont jamais décoratifs : ils portent une signification (revenus/validations/niveaux au-dessus du seuil ; alertes/écarts/pompes hors service) et ne s'appliquent à du petit texte que sur leurs surfaces teintées. Chaque paire de données atteint 4.5:1 au corps de texte dans les deux modes.

Typographie

  • Titres et corps : Fira Sans (humaniste, chaleureuse, dans un ordre strict). Aucune autre famille n'est utilisée.
  • Titres : graisse 600–700, interlettrage -0.01em.
  • Libellés de section : 600, majuscules, interlettrage 0.14em — lecture « signalétique de station ».
  • Chiffres tabulaires partout : litres, montants en DA, compteurs s'alignent en colonnes.
  • Échelle modulaire 1.25, base 16px : 40 / 32 / 26 / 20 / 18 / 16 / 14 / 12.
  • Titre de page du tableau de bord : clamp(26px, 3.2vw, 40px). Valeur KPI : clamp(24px, 2.6vw, 34px). Corps de tableau : 14px. Micro-libellés : 12px majuscules, interlettrage 0.14em.
Page 22 of 26

Langage de forme

Rectiligne et honnête. Rayon 6px sur les champs, boutons et cartes ; 2px sur les cellules de tableau et les badges. Filets 1px #DCD6CA (clair) / #2A2E34 (sombre) séparent chaque ligne et chaque panneau : la grille est visible, jamais suggérée. Aucune pastille, aucune forme organique, aucun rayon de 20px et plus. Des règles gauches codées de 4px marquent les lignes de station et les cartes d'alerte comme des lignes de transit.

Mise en page

Grille de 12 colonnes avec barre latérale navy fixe de 264px sur desktop (pictogrammes 2px + libellés français, groupes : Exploitation / Finances / Réseau / Administration), repliée en rail d'icônes de 64px à 768px et en bottom sheet à 375px. Colonne de contenu limitée à 1440px. Le tableau de bord ouvre sur une bande de 4 cartes KPI, puis un partage 2/3 + 1/3 : graphiques de ventes à gauche, alertes et livraisons récentes à droite. Tableaux denses (lignes de 40px), en-tête collant, filtres dans une barre horizontale au-dessus, pagination et export ancrés en bas à droite. Le détail de station utilise un bandeau d'onglets numérotés (01 Pompes, 02 Cuves, 03 Ventes, 04 Dépenses, 05 Activité).

Imagerie

Aucune photographie de stock, aucun rendu 3D. L'imagerie est le système lui-même : pictogrammes linéaires schématiques d'une pompe, d'une cuve, d'un camion-citerne, d'un tiroir-caisse et d'une clé, tracés à 2px en navy ; carte des wilayas d'Algérie en contour plat avec des points codés par station ; sparklines et graphiques à barres comme seules « images ». Chaque produit carburant porte sa couleur configurée en carré plein de 10px à côté de son nom — la couleur du produit est son icône.

Page 23 of 26

7. Signature Design Concept

La Connexion est le héros : un mur de signalétique, pas une carte centrée.

  • Panneau gauche, 58 % de la largeur, plein bord, navy #12294A : titre Fira Sans surdimensionné, aligné au fer à gauche, en français — « GÉREZ VOS STATIONS, PAS VOS CLASSEURS » — à clamp(34px, 5vw, 72px), graisse 700, interligne serré. Une règle orange #E8660B unique souligne le titre. Trois lignes de preuve numérotées suivent, en 12px majuscules, interlettrage 0.14em : 01 Ventes · 02 Cuves · 03 Rapports.
  • Panneau droit, 42 %, surface blanche : le formulaire — email, mot de passe, mot de passe oublié, un unique bouton de soumission orange. En bas, une bande wilaya codée (par exemple 16 ALGER, 31 ORAN, 25 CONSTANTINE) rappelle que le réseau est un système codé.
  • Mobile : le panneau navy se replie en une bande de 180px au-dessus du formulaire, titre à 34px, lignes de preuve sur une seule rangée.
  • Interdits respectés : aucun dégradé, aucune forme organique, aucune illustration, aucun héros marketing centré avec titre, sous-texte et bouton unique.

Ce concept ne recompose que du contenu, des états et des contrôles acceptés : la présentation du produit, les champs email/mot de passe, le lien mot de passe oublié et l'action de connexion.

8. Interaction Model & Motion Direction

Interaction Model: Static (direction) Motion Tempo: restrained Hero Dimensionality: flat

Landing Hero Motion Brief

  • Sujet focal : le panneau navy de signalétique portant le titre « GÉREZ VOS STATIONS, PAS VOS CLASSEURS », la règle orange et les trois lignes de preuve numérotées, face au panneau blanc du formulaire de connexion.
  • Thèse entrée → transformation → résultat : l'utilisateur saisit son email et son mot de passe (entrée) → la soumission est validée et la session ouverte (transformation) → il est redirigé vers la surface autorisée par son rôle (résultat). Aucune autre transformation n'est jouée : le héros ne met en scène que la connexion acceptée.
  • Vocabulaire de mouvement : fonctionnel uniquement — 140ms ease-out sur le survol, le focus et les transitions de route ; les valeurs KPI comptent une fois au montage ; les barres de niveau de cuve animent leur remplissage sur 400ms ; les lignes d'alerte clignotent une seule fois sur deux images à l'arrivée, puis restent immobiles. Aucun parallaxe, aucun scroll-jacking, aucune boucle décorative.
  • Première image composée : panneau navy plein bord à gauche avec titre aligné au fer à gauche, règle orange unique, trois lignes de preuve en 12px majuscules espacées ; panneau blanc à droite avec les champs email et mot de passe, le lien mot de passe oublié, le bouton orange et la bande wilaya codée en bas.
  • État réduit-mouvement : prefers-reduced-motion supprime les comptes à l'augmentation et les animations de remplissage ; les changements d'état sont instantanés et tout le contenu reste entier et lisible.
Page 24 of 26

9. Non-Functional Requirements

  • NFR-01 — Langue et direction (explicit) : interface entièrement en français, direction LTR ; compatibilité RTL prévue mais non activée. Rationale : exigence explicite de l'utilisateur.
  • NFR-02 — Responsive (explicit) : adaptation aux ordinateurs, tablettes et mobiles ; textes et contrôles restent entiers dans le viewport et leur conteneur à 375px, 768px et 1280px. Rationale : personnel non technique travaillant au bureau et sur la piste.
  • NFR-03 — Devise et dates (explicit) : montants affichés en « DA », dates au format DD/MM/YYYY. Rationale : contexte algérien.
  • NFR-04 — Isolation multi-tenant (explicit) : isolation stricte des données entre entreprises et protection contre l'accès aux données d'une autre entreprise. Rationale : confidentialité commerciale.
  • NFR-05 — Sécurité des identifiants et sessions (explicit) : hashage des mots de passe, gestion sécurisée des sessions, contrôle d'accès par rôle. Rationale : exigence explicite de sécurité.
  • NFR-06 — Non-exposition des données sensibles (explicit) : aucune donnée sensible exposée dans le frontend ; variables d'environnement pour les données sensibles. Rationale : exigence explicite de sécurité.
  • NFR-07 — Sauvegardes régulières (explicit) : sauvegardes régulières de la base de données. Rationale : continuité d'exploitation.
  • NFR-08 — Confirmation et archivage (explicit) : confirmation avant suppression ; archivage lorsque nécessaire. Rationale : prévention des pertes de données.
  • NFR-09 — Performance des tableaux (explicit) : tableaux optimisés pour un grand volume de données, avec recherche, filtres, pagination et tri. Rationale : volume de transactions d'un réseau de stations.
  • NFR-10 — API sécurisées (explicit) : API authentifiées et autorisées, séparant clairement frontend, backend et base de données. Rationale : maintenabilité et sécurité.
  • NFR-11 — Absence de données statiques (explicit) : aucun écran final ne s'appuie sur des données statiques. Rationale : fiabilité des chiffres affichés.
  • NFR-12 — Accessibilité des couleurs (required_inference) : chaque paire de données atteint un contraste de 4.5:1 au corps de texte dans les deux modes ; vert et rouge ne portent du petit texte que sur leurs surfaces teintées. Rationale : lisibilité sous forte luminosité en station.
  • NFR-13 — Mouvement fonctionnel (explicit, direction) : 140ms ease-out sur survol, focus et transitions de route ; respect de prefers-reduced-motion. Rationale : écrans opérationnels, pas de mouvement décoratif.
  • NFR-14 — Évolutivité mobile (explicit) : architecture évolutive pour une future application mobile. Rationale : horizon produit annoncé.
  • NFR-15 — Journal d'audit (explicit) : traçabilité des actions importantes (validations, annulations, corrections de ventes, ajustements de stock, clôtures de caisse, créations d'utilisateur, modifications de paramètres). Rationale : contrôle interne.

10. Tech Stack

  • Frontend : application web React, composants réutilisables, navigation latérale, cartes KPI, tableaux filtrables, graphiques et fenêtres modales ; thème clair et sombre ; Fira Sans comme unique famille typographique.
  • Backend : Python / FastAPI, exposant des API sécurisées et assurant le contrôle d'accès par rôle, l'isolation multi-tenant et le journal d'audit.
  • Base de données : base relationnelle hébergeant les entités Entreprises, stations, utilisateurs, rôles, permissions, pompes, cuves, produits, ventes, lignes de vente, mouvements de stock, fournisseurs, livraisons, dépenses, caisses, mouvements de caisse, clients, employés, incidents, interventions, notifications et journal d'audit.
  • Conteneurisation : Docker / docker-compose pour l'exécution locale et les environnements de démonstration.
  • Configuration : variables d'environnement pour toutes les données sensibles.
  • Exports : génération PDF et Excel des rapports avec logo, nom de l'entreprise, station, période et date de génération.
Page 25 of 26

11. Assumptions and Constraints

Contraintes explicites

  • Interface entièrement en français, LTR ; compatibilité RTL prévue mais non activée initialement.
  • Isolation stricte des données entre entreprises ; protection contre l'accès aux données d'une autre entreprise.
  • Ne jamais coder les prix ou les taxes en dur ; prix configurables par station et taxes configurables.
  • Ne pas imposer un taux de TVA fixe.
  • Ne jamais exposer de données sensibles dans le frontend ; variables d'environnement pour les données sensibles.
  • Ne pas utiliser de données statiques dans les écrans finaux.
  • Ajustements manuels de stock autorisés uniquement avec motif obligatoire.
  • Confirmation avant suppression ; archivage lorsque nécessaire.
  • Contrôle d'accès par rôle et gestion des permissions.
  • Devise DZD / DA ; dates DD/MM/YYYY.
  • Séparation claire frontend, backend et base de données ; API sécurisées.
  • Tableaux optimisés pour un grand volume de données avec recherche, filtres, pagination et tri.
  • Hashage des mots de passe ; gestion sécurisée des sessions ; sauvegardes régulières.
  • Crédit client disponible uniquement s'il est activé.

Hypothèses

  • (required_inference) La création ou le provisionnement sécurisé des comptes, avec attribution d'un rôle et d'une entreprise, est nécessaire pour rendre exécutable le parcours de connexion accepté.
  • (required_inference) La vérification récurrente par email et mot de passe avant l'accès aux données protégées est nécessaire pour que l'authentification acceptée protège réellement les données.
  • (required_inference) Une configuration initiale d'au moins une entreprise, une station et les produits ou paramètres nécessaires est nécessaire pour démarrer les opérations.
  • (required_inference) L'entrée publique (Landing) précède la Connexion et n'expose aucune donnée protégée.
  • (required_inference) Les surfaces protégées exigent une session authentifiée ; la Landing et la Connexion sont accessibles sans session.
  • (required_inference) Les rôles et permissions déterminent la visibilité et les actions autorisées sur les surfaces partagées de l'entreprise.

Hors périmètre actuel

  • Application mobile native (architecture seulement préparée).
  • Activation de l'interface RTL (compatibilité future seulement).
  • Tout taux de TVA imposé par défaut.

Défauts de présentation et de technologie (Default — not specified by user)

  • Bibliothèque de graphiques et bibliothèque de composants UI : non spécifiées par l'utilisateur, à choisir en cohérence avec React et avec la direction visuelle.
  • Mécanisme exact de génération PDF/Excel : non spécifié par l'utilisateur.
  • Fournisseur d'infrastructure d'hébergement : non spécifié par l'utilisateur.
Page 26 of 26

12. Glossary

  • NaftoManager : nom de l'application SaaS de gestion des stations-service.
  • Multi-tenant : architecture où plusieurs entreprises clientes partagent la plateforme avec une isolation stricte de leurs données.
  • Entreprise : entité cliente pouvant gérer une ou plusieurs stations.
  • Station : site d'exploitation d'une station-service, rattaché à une entreprise, localisé par wilaya et commune.
  • Wilaya / Commune : découpage administratif algérien utilisé pour localiser les stations et l'entreprise.
  • Pompe : équipement de distribution de carburant, suivi par compteur initial, compteur final, volume distribué, état et anomalies.
  • Cuve : réservoir de carburant suivi par capacité, niveau actuel, seuil minimum et pourcentage de remplissage.
  • Produit : carburant ou article vendu, défini par nom et code, prix de vente, prix d'achat, unité en litre, stock minimum, couleur et statut actif/inactif.
  • Vente : transaction comprenant station et pompe, produit, quantité en litres, prix unitaire, montant total en DA, mode de paiement, employé, date et heure.
  • Ligne de vente : détail d'un produit vendu au sein d'une vente.
  • Mouvement de stock : entrée, sortie ou ajustement affectant le niveau d'une cuve ou d'un produit.
  • Ajustement manuel : correction de stock exigeant un motif obligatoire.
  • Livraison : approvisionnement enregistré avec fournisseur, produit, quantité, prix d'achat, date et document.
  • Fournisseur : partenaire d'approvisionnement avec coordonnées, produits associés et historique des achats.
  • Dépense : charge enregistrée avec catégorie, montant, date, justificatif et commentaire.
  • Caisse : poste d'encaissement suivi par ouverture, mouvements, paiements, clôture et rapprochement.
  • Mouvement de caisse : entrée ou sortie d'espèces enregistrée dans une caisse.
  • Écart de caisse : différence constatée lors du rapprochement de clôture.
  • Client : particulier ou entreprise avec historique et crédit éventuel.
  • Crédit client : mode de paiement disponible uniquement lorsqu'il est activé.
  • Incident : problème ou anomalie signalé sur un équipement.
  • Intervention : action de maintenance enregistrée avec équipement, coût et statut.
  • Notification : message émis pour stock faible, livraison reçue, pompe hors service, dépense importante, écart de caisse, création d'utilisateur, clôture de caisse réussie ou échouée.
  • Journal d'audit : registre horodaté des actions importantes.
  • Rôle : ensemble de permissions attribué à un utilisateur (super administrateur, propriétaire, gérant, caissier, employé de piste, responsable stock, comptable).
  • Permission : autorisation élémentaire déterminant les surfaces et actions accessibles.
  • Plan Essentiel : une station, ventes, stocks et rapports de base.
  • Plan Professionnel : plusieurs stations, employés, dépenses, maintenance et rapports avancés.
  • Plan Entreprise : stations et utilisateurs illimités, permissions avancées, exports, API et support prioritaire.
  • DA / DZD : dinar algérien, devise d'affichage des montants.
  • NIF : numéro d'identification fiscale.
  • Registre de commerce : identifiant commercial légal de l'entreprise.
  • RTL : direction d'écriture de droite à gauche, prévue pour une compatibilité future mais non activée.

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing: Découvrir la plateforme
Connexion: Se connecter
Ventes: Créer une vente
Ventes: Choisir le mode de paiement
Ventes: 1. Valider la vente
Clients: Créer un client
Ventes: Sélectionner crédit client
Caisse: Ouvrir la caisse
Caisse: Enregistrer un paiement
Caisse: 1. Clôturer la caisse
Caisse: 2. Effectuer le rapprochement
Caisse: 3. Corriger les mouvements
Ventes: 2. Corriger une vente
Ventes: 3. Consulter l’historique
Rapports: Générer le rapport de caisse
Clients: Consulter l’historique client

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing: Découvrir la plateforme
Connexion: Se connecter
Ventes: Créer une vente
Ventes: Choisir le mode de paiement
Ventes: 1. Valider la vente
Clients: Créer un client
Ventes: Sélectionner crédit client
Caisse: Ouvrir la caisse
Caisse: Enregistrer un paiement
Caisse: 1. Clôturer la caisse
Caisse: 2. Effectuer le rapprochement
Caisse: 3. Corriger les mouvements
Ventes: 2. Corriger une vente
Ventes: 3. Consulter l’historique
Rapports: Générer le rapport de caisse
Clients: Consulter l’historique client