Manuel utilisateur
Ce document décrit les fonctionnalités disponibles pour la gestion des utilisateurs dans l'application.
- Gestion des Utilisateurs
- Accès à la section des utilisateurs
- Affichage de la liste des utilisateurs
- Création d'un nouvel utilisateur
- Modification d'un utilisateur
- Recherche et Filtres
- Import / Export
- Gestion des Badges
- Gestion des Transactions
- Gestion des Bornes de Recharge
- Gestion des Groupes
- Affichage et Navigation
- Recherche et Filtres
- Création d'un groupe
- Modification d'un groupe
- Suppression d'un groupe
- Page de Détail d'un Groupe
- Gestion des Locations
- Interface d'affichage
- Recherche
- Création d'une location
- Suppression de locations
- Interaction avec les Bornes de Recharge
- Page de Détail d'une Location
- Gestion de Mon Profil
- Supervision du Smart Charging
- Gestion des Tarifs
- Comprendre la Structure d'un Tarif
- Tableau de Bord des Tarifs
- Création et Modification d'un Tarif
- Actions sur un Tari
- Suivi des Tickets de Maintenance (GMAO)
- AIDE
- Débloquer un compte utilisateur
- Autorisations entre groupes
- Refonte de l'ACL [DOC Technique]
- Accès API
- Nouveau rôle : Gestionnaire
- 📋 Guide EMAT — Comprendre et activer la synchronisation We-Go
- Documentation des flux de paiement
- 1. Flux de paiement en ligne (via QR Code)
- 2. Flux de paiement par badge RFID (Utilisateur Wego)
- 3. Flux de paiement via EMSP
- Documentation : Calcul des taux de disponibilité des bornes de recharge
Gestion des Utilisateurs
Accès à la section des utilisateurs
Pour accéder à la gestion des utilisateurs, naviguez vers la section "Utilisateurs" depuis le menu principal de l'application. L'URL correspondante est `/users`.
Affichage de la liste des utilisateurs
Une fois dans la section, un tableau de bord présente la liste de tous les utilisateurs.
Tableau des utilisateurs : Le tableau affiche les informations principales des utilisateurs, notamment :
- Nom de l'utilisateur (Prénom et Nom)
- Email
- Badge RFID associé
- Groupe(s) d'appartenance
- Société
- Ville
- Plaque d'immatriculation
**Pagination :** Si la liste contient de nombreux utilisateurs, un système de pagination en bas du tableau permet de naviguer entre les différentes pages.
Création d'un nouvel utilisateur
Pour ajouter un nouvel utilisateur, suivez ces étapes :
1. Cliquez sur le bouton permettant d'ajouter un utilisateur (généralement situé en haut du tableau).
2. Un formulaire de création apparaît. Remplissez les champs requis :
- Prénom
- Nom
- Email
- Mot de passe
- Rôle
- Groupe(s)
- Et d'autres informations optionnelles (téléphone, adresse, etc.).
3. Validez le formulaire pour créer le nouvel utilisateur. Un message de confirmation apparaîtra.
Modification d'un utilisateur
Il est possible de modifier les informations d'un utilisateur existant.
- Repérez l'utilisateur à modifier dans la liste.
- Cliquez sur l'icône de modification sur la ligne de l'utilisateur.
- Un formulaire prérempli avec les informations de l'utilisateur s'ouvre.
- Modifiez les informations souhaitées.
- Sauvegardez les changements. Une confirmation du succès de l'opération sera affichée.
Recherche et Filtres
Pour retrouver rapidement un utilisateur, vous pouvez utiliser :
- **La barre de recherche :** Saisissez un nom, un prénom ou un email dans la barre de recherche située au-dessus du tableau et validez pour filtrer la liste.
- **Les filtres :** Des options de filtre peuvent être disponibles pour affiner la recherche par groupe, rôle, etc.
Import / Export
**
Gestion des Badges
Cette section permet de gérer l'ensemble des badges RFID, de les créer et de les associer à des utilisateurs.
Tableau de Bord des Badges
Le tableau principal liste tous les badges enregistrés dans le système.
Colonnes et Informations
- ID du Badge (TagId) :** L'identifiant unique et technique du badge RFID.
- Libellé :** Un nom personnalisé pour identifier facilement le badge.
- Utilisateur :** Le nom de l'utilisateur auquel le badge est actuellement assigné
- Type :** Le type de badge (ex: "Pro")
- Statut :** L'état actuel du badge (ex: "Accepté", "Bloqué")
- Date d'expiration :** Si une date d'expiration est définie, elle s'affiche ici. Les badges expirés sont mis en évidence visuellement.
### Recherche et Filtres
- **Barre de recherche :** Une barre de recherche en haut du tableau permet de trouver rapidement un badge par son ID, son libellé ou l'utilisateur associé.
- **Filtres de colonne :** Des filtres sont disponibles sur les en-têtes de colonnes pour affiner la liste par Type, Statut ou Utilisateur.
Création d'un badge
- Cliquez sur le bouton de création.
2. Une fenêtre de dialogue s'ouvre avec les champs suivants :
- **RFID (ID du Badge) :** Saisissez ici l'identifiant unique du badge. **Ce champ est obligatoire et ne pourra pas être modifié par la suite.**
- **Libellé :** Donnez un nom facile à retenir au badge.
- **Utilisateur :** Choisissez dans une liste déroulante l'utilisateur à qui attribuer le badge.
- **Type et Statut :** Sélectionnez le type et le statut du badge dans les listes déroulantes.
- **Date d'expiration :** Vous pouvez optionnellement définir une date à laquelle le badge deviendra invalide.
3. Validez pour enregistrer le nouveau badge.
Modification d'un badge
- Cliquez directement sur la ligne du badge que vous souhaitez modifier dans le tableau.
- La fenêtre de dialogue de modification s'ouvre.
- Vous pouvez y mettre à jour le **libellé, l'utilisateur assigné, le type, le statut et la date d'expiration**.
- L'ID du badge n'est pas modifiable.
- Sauvegardez les changements
Suppression de badges
- Cochez les cases des badges que vous souhaitez supprimer de la liste
- Un bouton de suppression apparaît. Cliquez dessus.
- Une fenêtre de confirmation vous demandera de valider votre choix avant la suppression définitive.
Gestion des Transactions
Vue Administrateur : Suivi des Transactions du Parc
Tableau de Bord et Indicateurs (KPIs)
En haut de la page, des indicateurs clés (KPIs) fournissent un résumé de l'activité sur la période sélectionnée : - Consommations en kWh : Le total d'énergie délivrée. - Coût total : Le coût total des recharges. - Kilomètres rechargés : Une estimation des kilomètres rechargés.
Filtrage et Recherche
Des outils puissants permettent d'affiner la liste des transactions : - Période : Filtrez par plage de dates. - Groupes : Sélectionnez un ou plusieurs groupes pour n'afficher que leurs transactions. - Utilisateurs : Ciblez un ou plusieurs utilisateurs spécifiques. - Inclure les utilisateurs inconnus : Une case à cocher permet d'inclure les transactions effectuées avec des badges non associés à un utilisateur. - Recherche globale : Une barre de recherche pour trouver une information spécifique dans le tableau.
Liste des Transactions
Le tableau principal affiche les détails de chaque transaction : - Colonnes : Borne, Emi3, Groupe de la borne, Utilisateur, Immatriculation, Date/Heure de début et de fin, Durée, Consommation (kWh), Prix, etc. - Tri : Les colonnes "Consommation" et "Prix" peuvent être triées par ordre croissant ou décroissant. - Détails : Chaque ligne est cliquable et mène à la page de détail de la transaction.
Export CSV
Un bouton "Exporter" permet de télécharger la liste des transactions (en respectant les filtres appliqués) sous forme de fichier CSV pour une analyse externe.
Détail d'une Transaction
Onglet 1 : Détails de la Charge
et onglet est le résumé principal de la session de recharge.
- Informations générales : Affiche le statut de la transaction (Terminée, Active...), le type de connecteur utilisé et sa puissance.
- Indicateurs clés :
- Consommation totale en kWh.
- Estimation des kilomètres rechargés.
- Coût total de la session et description du tarif qui a été appliqué.
- Graphique de consommation : Une courbe montre l'évolution de l'énergie délivrée (kWh) pendant toute la durée de la charge.
- Actions :
- Stopper : Pour une transaction active, permet de forcer l'arrêt de la charge.
- Déclarer/Facturer : Ouvre une fenêtre pour clôturer manuellement une transaction (en cas de blocage) en saisissant la consommation et l'heure de fin.
- Exporter : Télécharge les données de cette transaction au format CSV.
Onglet 2 : KPI (Chronologie)
Cet onglet analyse la durée d'occupation du point de charge.
- Frise chronologique : Une timeline visuelle décompose la session en deux parties :
- La durée de la charge active.
- La durée de stationnement (temps où le véhicule est resté branché après la fin de la charge).
- Graphique circulaire : Un camembert illustre le ratio (en %) entre le temps de charge et le temps de stationnement.
Onglet 3 : Localisation
Cet onglet fournit des informations sur le lieu de la recharge.
- Carte : Une carte Google Maps localise précisément la borne utilisée. Le marqueur est cliquable et renvoie vers la page de détail de la borne.
- Horaires : Affiche les horaires d'ouverture du site.
Gestion des Bornes de Recharge
Tableau de Bord Principal
Le tableau de bord principal est une liste complète de toutes les bornes de recharge.
Colonnes et Informations
-
Open Charge : Un interrupteur permet d'activer/désactiver cette fonctionnalité pour chaque borne.
-
Bornes : Affiche le nom de la borne et son identifiant unique (`chargeboxIdentity`).
-
GMAO : Si activé, affiche les tickets de maintenance (GMAO) en cours pour la borne.
-
Localisations : Indique la station/location à laquelle la borne est rattachée (lien cliquable).
-
Statut : Affiche des icônes de couleur représentant l'état en temps réel de chaque point de charge (EVSE) de la borne :
-
Vert : Disponible
-
Bleu/En charge : En cours de charge
-
Orange : En défaut / Indisponible
-
Gris/Offline : Occupé ou hors ligne
-
Recherche et Filtres
-
Barre de recherche : Permet une recherche globale par nom ou identifiant.
-
Filtres de colonne : Des menus de filtre sont disponibles sur les en-têtes de colonnes pour affiner la recherche par :
-
Statut (Disponible, En charge, etc.)
-
Localisation
-
Activation de "Open Charge" (Oui/Non)
-
Création d'une Borne
-
Cliquez sur le bouton + (vert) en haut à droite du tableau.
-
Vous serez redirigé vers la page de création (/charging-stations/add).
-
Sur cette page, vous devrez choisir un **fabricant** et un **modèle** de borne. Cette sélection préremplit les caractéristiques techniques de la borne.
-
Complétez les autres informations requises et validez pour créer la borne.
Détail et Configuration d'une Borne
En cliquant sur l'icône en forme d'engrenage (pi-cog) depuis la liste des bornes, vous accédez à la page de configuration détaillée de la borne sélectionnée. Cette page est une interface technique puissante organisée en plusieurs onglets.
En-tête
La partie supérieure de la page affiche en permanence le nom de la borne et des boutons d'action principaux :
- Configuration globale : Un bouton "roue dentée" permet de modifier les informations générales de la borne (nom, localisation, etc.).
- Ajouter un EVSE : Permet d'ajouter un nouveau point de charge à la borne (si le modèle le permet).
Onglet 1 : Supervision
Suivi des Points de Charge (EVSEs)
- Liste chaque point de charge (EVSE) de la borne avec son statut (Disponible, En charge, En défaut), le tarif appliqué, et un QR code de paiement.
- Configuration d'un EVSE : Un bouton "roue dentée" sur chaque EVSE permet de modifier sa configuration individuelle (ex: changer le statut déclaratif, assigner un tarif).
- Gestion des Connecteurs : Pour chaque connecteur d'un EVSE, vous pouvez :
- Démarrer/Arrêter une transaction à distance.
- Déverrouiller le connecteur.
Actions sur la Borne
Cette section permet d'envoyer des commandes OCPP directes à la borne :
- Redémarrer la borne (Reboot
HardouSoft). - Vider le cache de la borne.
- Modifier un paramètre de configuration OCPP (ex: changer l'URL du serveur).
- Envoyer des messages de diagnostic (
Heartbeat,BootNotification). - Activer/Désactiver l'Open Charge.
Onglet 2 : Événements
Cet onglet est un outil de diagnostic.
- Badges Refusés : Affiche un historique des badges RFID qui n'ont pas réussi à s'authentifier.
- Logs OCPP : Visualisez le journal complet des messages OCPP échangés entre la borne et le système. C'est un outil très technique pour le débogage. Vous pouvez filtrer, inspecter le contenu des messages (
payload) et même en comparer deux.
Onglet 3 : Disponibilité
Cet onglet présente des statistiques sur la performance de chaque point de charge (EVSE) via des graphiques circulaires.
- Taux de Disponibilité : Pourcentage de temps où l'EVSE était disponible.
- Taux d'Occupation : Pourcentage de temps où l'EVSE était en charge.
- Un filtre par date permet d'analyser ces taux sur la période de votre choix.
Onglet 4 : Statuts des points de charge
Affiche un tableau listant l'historique complet de tous les changements de statut pour chaque point de charge de la borne. Pour chaque entrée, vous voyez le statut, la raison du changement, l'heure de début et l'heure de fin.
Onglet 5 : Tickets
Affiche la liste des tickets de maintenance (GMAO) qui sont spécifiquement liés à cette borne. C'est une vue filtrée de la section "Ticketing" principale.
Actions
Plusieurs actions peuvent être effectuées sur une sélection de bornes.
Suppression
- Cochez les cases des bornes que vous souhaitez supprimer.
- Cliquez sur le bouton "poubelle" (
pi-trash). - Validez la boîte de dialogue de confirmation.
Export de données
- (Optionnel) Sélectionnez les bornes que vous souhaitez exporter. Si aucune n'est sélectionnée, l'export concernera toute la liste (en tenant compte des filtres actifs).
- Cliquez sur le menu déroulant "Exporter".
- Choisissez le type d'export souhaité :
- Général : Informations de base.
- Technique : Informations techniques détaillées.
- Suivi de commande : Informations relatives aux commandes.
- Un fichier CSV sera téléchargé.
Import de données
- Cliquez sur le bouton "Importer".
- Sélectionnez un fichier CSV formaté selon le modèle attendu.
- Le système tentera d'importer les bornes. En cas d'erreurs dans le fichier, une fenêtre s'ouvrira pour lister les problèmes ligne par ligne.
Gestion des Groupes
Ce document décrit les fonctionnalités disponibles pour la gestion des groupes et de leur hiérarchie.
Affichage et Navigation
Les groupes sont présentés dans un tableau hiérarchique qui reflète la structure parent-enfant.
- Hiérarchie : Les groupes enfants sont imbriqués sous leur groupe parent.
- Déplier / Replier : Utilisez les icônes de flèche (▶ et ▼) à gauche du nom du groupe pour afficher ou masquer ses enfants.
- Navigation : Le nom de chaque groupe est un lien cliquable qui vous redirige vers la page de détails de ce groupe.
Recherche et Filtres
- Recherche par nom : Utilisez la barre de recherche en haut de la page pour filtrer la liste et trouver rapidement un groupe par son nom. Appuyez sur "Entrée" pour lancer la recherche.
- Retirer les filtres : Cliquez sur le bouton "Retirer les filtres" pour effacer votre recherche et afficher à nouveau l'arborescence complète des groupes.
Création d'un groupe
La création de groupe est possible de deux manières :
- Créer un groupe racine : Cliquez sur le bouton vert avec une icône
+en haut à droite du tableau pour créer un nouveau groupe au niveau le plus haut de la hiérarchie. - Créer un groupe enfant : Cliquez sur le bouton
+situé sur la ligne d'un groupe existant pour lui ajouter un sous-groupe. Le groupe actuel deviendra le parent du nouveau groupe.
Dans les deux cas, un formulaire apparaîtra pour vous demander de nommer le nouveau groupe et de configurer ses propriétés.
Modification d'un groupe
Pour modifier un groupe existant :
- Cliquez sur l'icône en forme d'engrenage (
pi-cog) sur la ligne du groupe que vous souhaitez éditer. - Un formulaire de modification s'ouvrira.
- Vous pourrez y changer le nom du groupe et, si nécessaire, sélectionner un nouveau groupe parent dans la liste.
Suppression d'un groupe
Pour supprimer un groupe :
- Cliquez sur l'icône en forme de poubelle (
pi-trash) sur la ligne du groupe. - Une boîte de dialogue de confirmation apparaîtra pour éviter toute suppression accidentelle.
Conditions de suppression :
- Un groupe ne peut être supprimé que s'il ne contient aucun sous-groupe. Vous devez d'abord supprimer ou déplacer tous ses enfants.
- Un groupe racine (qui n'a pas de parent) ne peut pas être supprimé. Le bouton de suppression sera désactivé.
Page de Détail d'un Groupe
En cliquant sur le nom d'un groupe dans la liste, vous accédez à son tableau de bord de gestion. C'est une page centrale qui regroupe toutes les informations et configurations relatives à ce groupe, organisées en plusieurs onglets.
En-tête
La partie supérieure de la page affiche le nom du groupe et son identifiant unique ("slug"). Un bouton "roue dentée" permet de modifier les informations de base du groupe (son nom et son groupe parent).
Onglet 1 : Utilisateurs
Affiche la hiérarchie des sous-groupes. Pour chaque ligne, une liste déroulante permet de visualiser tous les utilisateurs appartenant à ce groupe spécifique.
Onglet 2 : Tarifs
Présente la liste des grilles tarifaires qui s'appliquent aux utilisateurs de ce groupe. Chaque tarif est un lien cliquable vers sa page de détail.
Onglet 3 : Stations
Affiche la liste des locations (sites de recharge) qui sont rattachées à ce groupe. C'est une vue filtrée de la page principale des locations.
Onglet 4 : Transactions
Fournit un historique détaillé de toutes les sessions de recharge effectuées par les membres de ce groupe, avec des indicateurs de performance (KPIs) de coût et de consommation.
Onglet 5 : Smart Charging
Intègre le tableau de bord de supervision du Smart Charging, automatiquement filtré pour n'afficher que les données des locations appartenant à ce groupe.
Onglet 6 : Autorisations
Cette section avancée gère les droits de charge entre les groupes. Elle permet de définir quels autres groupes ont l'autorisation d'utiliser les bornes de recharge appartenant à ce groupe.
- Ajouter/Supprimer : Vous pouvez autoriser un nouveau groupe ou révoquer une autorisation existante.
- Héritage : Une option permet d'autoriser automatiquement tous les sous-groupes ("enfants") à se recharger.
Onglet 7 : Configuration
Permet d'activer ou de désactiver des fonctionnalités majeures pour l'ensemble du groupe via des interrupteurs :
- Smart Charging : Active/désactive la recharge intelligente pour le groupe.
- GMAO Mission : Active/désactive l'intégration avec le système de tickets de maintenance.*
Gestion des Locations
Ce document décrit les fonctionnalités de la section "Locations", qui permet de gérer les sites géographiques où se trouvent les bornes de recharge.
Interface d'affichage
L'écran est divisé en deux parties principales : un tableau et une carte.
- Tableau des locations : Affiche la liste de toutes les locations avec des colonnes détaillant le nom de la station, l'adresse, le pays, et les horaires d'ouverture.
- Carte géographique : Située sous le tableau, cette carte (Google Maps) affiche des marqueurs pour chaque location listée. Elle permet de visualiser rapidement la répartition géographique de votre parc.
Recherche
Une barre de recherche est disponible au-dessus du tableau pour filtrer rapidement la liste des locations par nom ou autre critère.
Création d'une location
Pour ajouter une nouvelle station :
- Cliquez sur le bouton de création (généralement une icône
+). - Un formulaire de création s'ouvre. Remplissez les informations textuelles de la location (nom, adresse, ville, code postal, pays, type de location, groupe associé).
- Définition des coordonnées : Une étape cruciale est l'utilisation d'une carte interactive (
app-map-creation) qui apparaît.- Naviguez sur cette carte et cliquez à l'endroit précis où se trouve la station.
- Le fait de placer ce marqueur remplit automatiquement les champs de latitude et de longitude.
- Validez le formulaire pour enregistrer la nouvelle location.
Suppression de locations
- Dans le tableau, cochez la ou les cases des locations que vous souhaitez supprimer.
- Cliquez sur le bouton de suppression (généralement une icône de poubelle).
- Une fenêtre de confirmation apparaîtra pour valider la suppression définitive. Cette action est irréversible.
Interaction avec les Bornes de Recharge
En cliquant sur un marqueur directement sur la carte principale, une fenêtre de détail (app-charging-stations-detail) peut s'afficher, présentant des informations sur les bornes de recharge spécifiques disponibles à cet emplacement.
Page de Détail d'une Location
En cliquant sur le nom d'une location dans la liste principale, vous accédez à son tableau de bord détaillé. Cette page offre une vue à 360° d'un site de recharge spécifique et est organisée en plusieurs onglets.
En-tête
La partie supérieure de la page affiche le nom et l'adresse de la location. Un bouton "Modifier" permet de mettre à jour les informations générales du site (nom, adresse, coordonnées GPS, etc.).
Onglet 1 : Fiche Signalétique
Cet onglet présente les informations de base de la location :
- Adresse complète
- Coordonnées GPS
- Type de location (Parking, Voirie...)
- Horaires d'ouverture
Onglet 2 : Points de Charge
Affiche un tableau qui liste tous les points de charge (EVSEs) installés sur ce site.
- Pour chaque EVSE, on voit le nom de la borne à laquelle il appartient, son identifiant
eMI3, et son statut actuel. - Le nom de la borne est un lien cliquable qui renvoie vers la page de configuration détaillée de cette borne.
Onglet 3 : Transactions
Cet onglet affiche la liste de toutes les transactions de recharge qui ont eu lieu sur ce site.
- Il inclut des indicateurs (KPIs) de consommation et de coût spécifiques à la location.
- Un bouton permet d'exporter ces données au format CSV.
Onglet 4 : KPIs (Indicateurs de performance)
C'est un onglet d'analyse avancée qui présente plusieurs graphiques pour évaluer la performance du site sur une période donnée (filtrable par date).
- Graphiques circulaires : Taux de Disponibilité et taux d'Occupation globaux du site.
- Graphiques en barres :
- Top 5 des points de charge les moins disponibles.
- Top 5 des points de charge les plus occupés.
- Top 5 des points de charge par consommation d'énergie.
- Graphique en courbe : Évolution de la saturation (nombre de points de charge utilisés simultanément).
- Export PDF : Un bouton permet de télécharger un rapport PDF complet de tous ces indicateurs.
Onglet 5 : Notifications
Cet onglet affiche une liste des notifications et alertes qui sont spécifiquement liées à ce site.
Gestion de Mon Profil
Cette section, accessible via le menu utilisateur, est l'espace personnel où chaque utilisateur peut consulter et gérer les informations de son propre compte.
Mes Informations Personnelles
La première partie de la page est un formulaire qui vous permet de mettre à jour vos données personnelles.
- Champs modifiables : Vous pouvez y changer votre prénom, nom, adresse, ville, code postal, plaque d'immatriculation, etc.
- Sauvegarde : Un bouton "Sauvegarder" vous permet d'appliquer les modifications.
Mon Compte et Sécurité
La seconde partie de la page est dédiée à la gestion de votre compte et de sa sécurité.
- Adresse e-mail : Votre e-mail, qui sert d'identifiant de connexion, est affiché ici mais ne peut pas être modifié.
- Changement de mot de passe : C'est ici que vous pouvez mettre à jour votre mot de passe. Le processus est le suivant :
- Saisissez votre nouveau mot de passe dans le champ dédié.
- Confirmez-le dans le second champ pour éviter les erreurs de frappe.
- Validez le changement. Il est possible qu'on vous demande votre ancien mot de passe dans une étape supplémentaire pour des raisons de sécurité.
Changement de Rôle/Groupe Actif
Si votre compte est associé à plusieurs groupes ou possède plusieurs rôles (ex: un rôle "Utilisateur" pour un groupe et "Manager" pour un autre), un menu déroulant peut être présent sur cette page. Il vous permet de visualiser et de basculer entre vos différents profils pour changer votre contexte de travail dans l'application.
Supervision du Smart Charging
Cette section n'est pas un outil de configuration, mais un **tableau de bord de supervision** qui permet de visualiser et de vérifier l'efficacité des profils de recharge intelligente (Smart Charging) appliqués à un site.
Objectif de la Page
1. Objectif de la Page
L'objectif principal de cette page est de comparer la limite de puissance définie par un profil de smart charging avec la consommation réelle d'un site (Location) sur une période donnée. Cela permet de s'assurer que les bornes de recharge respectent bien le plafond de puissance alloué pour éviter les surcharges du réseau électrique du site.
2. Filtres d'Affichage
En haut de la page, un formulaire vous permet de sélectionner les données à afficher :
- Location : Choisissez dans le menu déroulant le site (Location) que vous souhaitez analyser.
- Période : Sélectionnez une plage de dates (début et fin) pour l'analyse des données historiques.
Une fois les filtres appliqués, les KPIs et les graphiques se mettent à jour.
3. Indicateurs Clés (KPIs)
Trois indicateurs principaux vous donnent un aperçu en temps réel de la situation sur le site sélectionné :
- Puissance Limite : Affiche la puissance maximale totale (en kW) autorisée par le profil de smart charging pour l'ensemble du site.
- Puissance Utilisée : Affiche la puissance cumulée (en kW) consommée par toutes les bornes en activité à l'instant T.
- Charges en cours : Indique le nombre de véhicules qui sont actuellement en train de charger.
4. Graphiques de Visualisation
Deux graphiques permettent une analyse plus approfondie.
Graphique 1 : Puissance Maximale par Borne
- Type : Diagramme en barres.
- Description : Ce graphique montre la puissance maximale que chaque borne de recharge individuelle peut délivrer. Il permet d'avoir une vue d'ensemble de la capacité de chaque borne sur le site.
Graphique 2 : Consommation vs. Limite (Graphique Principal)
- Type : Graphique en courbes.
- Description : C'est le graphique le plus important pour la supervision. Il superpose deux courbes sur la période que vous avez sélectionnée :
- Courbe de Limite de Puissance : Représente le plafond de puissance autorisé par le profil de smart charging au fil du temps.
- Courbe de Consommation Réelle : Montre la consommation électrique réelle et cumulée de toutes les bornes du site.
- Analyse : En temps normal, la courbe de consommation réelle doit toujours se trouver en dessous de la courbe de limite de puissance. Si elle s'en approche ou la touche, cela signifie que le smart charging est actif et régule la puissance des bornes.
Gestion des Tarifs
Cette section permet de créer et de gérer les grilles tarifaires complexes qui déterminent le coût d'une session de recharge.
Comprendre la Structure d'un Tarif
-
Le Tarif : C'est le conteneur principal. Il possède un nom (ex: "Tarif de nuit semaine"), une devise (ex: EUR) et est associé à un groupe d'utilisateurs.
-
Les Éléments Tarifaires : Un tarif est composé d'un ou plusieurs "éléments". Chaque élément représente une condition ou une règle. Cette règle définit QUAND un certain prix doit s'appliquer. Les conditions peuvent être basées sur :
- Une plage horaire (ex: de 22h00 à 06h00).
- Des jours de la semaine (ex: du Lundi au Vendredi).
- Une plage de dates (ex: pour un tarif saisonnier).
- Des seuils de consommation (ex: un prix pour les 10 premiers kWh, un autre au-delà).
- Des seuils de puissance ou de durée.
-
Les Composants de Prix : Au sein de chaque "élément tarifaire", on définit le prix à appliquer. Chaque composant définit QUOI facturer :
ENERGY: Le prix de l'énergie consommée (ex: 0,25 € par kWh).TIME: Le prix du temps de charge (ex: 1 € par heure).PARKING_TIME: Le prix du temps de stationnement après la fin de la charge (ex: 5 € par heure pour inciter à libérer la place).FLAT: Un coût fixe pour démarrer la session (ex: 0,50 €).
Exemple : Un tarif "Nuit" pourrait avoir un élément tarifaire pour "tous les jours de 22h à 6h" qui contient un seul composant de prix de type ENERGY à 0.15€/kWh.
Tableau de Bord des Tarifs
La page principale affiche la liste de tous les tarifs créés.
- Informations : Le tableau montre le nom, la description, la devise, le groupe associé et le nombre d'éléments tarifaires pour chaque tarif.
- Recherche et Filtres : Vous pouvez rechercher un tarif par son nom ou filtrer la liste par groupe.
Création et Modification d'un Tarif
-
Création : Le bouton "Créer un nouveau tarif" ouvre une fenêtre de dialogue. Vous y définissez d'abord les informations générales du tarif, puis vous pouvez commencer à ajouter des "éléments tarifaires" et leurs "composants de prix".
-
Modification : Le bouton crayon (
pi-pencil) sur chaque ligne ouvre une interface de modification très complète. C'est ici que vous pouvez finement ajuster un tarif existant en ajoutant, modifiant ou supprimant ses éléments et composants.
Actions sur un Tari
Sur chaque ligne du tableau, vous trouverez trois icônes d'action :
- Œil : Ouvre une page de visualisation détaillée du tarif et de toutes ses règles.
- Crayon : Ouvre la fenêtre de dialogue pour la modification (voir ci-dessus).
- Poubelle : Supprime le tarif après confirmation.
Suivi des Tickets de Maintenance (GMAO)
Cette section est une interface de **consultation** et de **suivi** pour les tickets de maintenance (GMAO - Gestion de la Maintenance Assistée par Ordinateur). Elle permet de visualiser l'état des interventions sur les bornes de recharge.
**Note :** Il n'est pas possible de créer ou de modifier des tickets depuis cette interface. Elle sert uniquement à la visualisation des tickets générés par un système externe.
Indicateurs de Performance (KPIs)
Documentation : Suivi des Tickets de Maintenance (GMAO)
Cette section est une interface de consultation et de suivi pour les tickets de maintenance (GMAO - Gestion de la Maintenance Assistée par Ordinateur). Elle permet de visualiser l'état des interventions sur les bornes de recharge.
Note : Il n'est pas possible de créer ou de modifier des tickets depuis cette interface. Elle sert uniquement à la visualisation des tickets générés par un système externe.
1. Indicateurs de Performance (KPIs)
Le haut de la page présente un tableau de bord avec des statistiques clés sur l'activité de maintenance :
-
Statistiques Générales :
- Total : Le nombre total de tickets enregistrés.
- Fermés : Le nombre de tickets qui ont été résolus.
- Ouverts : Le nombre de tickets actuellement en cours de traitement.
-
Statistiques de Clôture par Équipe :
- Hotline : Tickets résolus par l'assistance téléphonique.
- N1 / N2 : Tickets résolus par les niveaux de support 1 et 2.
- Inter : Tickets nécessitant une intervention physique sur site.
2. Liste et Filtres des Tickets
La partie principale de la page est un tableau listant tous les tickets de maintenance.
Filtres
Vous pouvez affiner la liste des tickets en utilisant les menus déroulants situés au-dessus du tableau :
- Filtrer par Statut : Choisissez "Ouvert" ou "Fermé" pour ne voir que les tickets correspondants.
- Filtrer par Secteur : Sélectionnez un ou plusieurs secteurs pour limiter la vue à une zone géographique ou organisationnelle.
- Filtrer par Site : Après avoir sélectionné un secteur, vous pouvez choisir un ou plusieurs sites spécifiques.
- Retirer les filtres : Un bouton permet de réinitialiser tous les filtres et d'afficher à nouveau la liste complète.
Tableau des Tickets
Le tableau affiche les informations essentielles pour chaque ticket, notamment :
- Numéro du ticket
- Date de début et de clôture
- Statut (avec un code couleur pour une identification rapide)
- Secteur, Site et Borne concernée
- Responsable de l'intervention
3. Consultation du Détail d'un Ticket
Pour obtenir toutes les informations sur un ticket spécifique :
- Cliquez sur l'icône en forme de loupe (
pi-search) sur la ligne du ticket qui vous intéresse. - Une fenêtre de dialogue s'ouvre, présentant une vue détaillée :
- Le statut, la date et le responsable.
- La description du problème rencontré.
- L'action corrective qui a été apportée.
- Le temps de résolution et la date de clôture (pour les tickets fermés).
4. Export du Rapport PDF
Depuis la fenêtre de détail d'un ticket, une icône PDF (pi-file-pdf) est disponible en bas. Cliquez sur cette icône pour télécharger un rapport complet et formaté du ticket au format PDF.
AIDE
Les trucs et astuces
Débloquer un compte utilisateur
Le décorateur AuthRateLimit :
@AuthRateLimit({ attempts: 5, duration: 3600 })
permet de bloquer l'accès à une fonctionnalité si trop de tentatives ont été effectué. L'implémentation est utilisée pour la connexion, dès lors qu'un utilisateur tente de se connecter 5 fois avec le mauvais mot de passe / email, ce dernier doit attendre 1 heure avant d'être débloqué.
Pour débloquer un utilisateur, il faut se connecter à la database de production, soit :
ssh firstName@DB-PROD
Une fois connecté, on se rend dans le répertoire We-Go :
cd /var/wego/
Puis on exécute la commande suivante, afin de se connecter à l'interface redis :
sudo docker exec -it wego-redis-1 redis-cli
On peut lire les différentes clés liées au blocage de connexion avec :
KEYS auth*
Les clés qui commencent par "auth:block" empêchent alors la connexion si la valeur est true. Tandis que les clés qui commencent par "auth:fail" stockent le nombre de tentatives effectuées.
Pour débloquer un utilisateur, il suffit de supprimer la clé "block" liée :
DEL "auth:block:ip:XXX:email:XXX"
Autorisations entre groupes
Introduction
Une nouvelle fonctionnalité apparaît sur We-Go, celle de l'autorisation entre groupes. Dorénavant, un groupe définit ceux qui peuvent se charger chez eux, autrement, l'autorisation sera définit par les emsps.
Fonctionnement
Par défaut, un groupe autorise uniquement les personnes de son propre groupe à pouvoir se charger chez eux. Si on souhaite que les utilisateurs puissent se recharger chez leurs groupes enfants, il faut alors le configurer. Autoriser un groupe à se charger chez soit n'assure pas la réciprocité.
Configuration
La configuration globale actuelle mise en place est la suivante :
- Pour les Clients Externes, chaque groupe n'autorise que lui-même et ses enfants si existants
- Pour les groupes issues de Eiffage, au premier niveau, on autorise Eiffage à se charger chez le groupe sauf pour Eiffage Energie Systèmes
- Pour les groupe issues de Eiffage Energie Systèmes, au premier niveau, là encore, on autorise Eiffage à se charger chez le groupe sauf pour DR_EST
Pour configurer une autorisation, vous devez vous rendre sur la page spécifique d'un groupe, dans l'onglet "Autorisations" tel que :
Depuis cet interface, vous pouvez voir les groupes autorisés à se charger, mais également, vous pouvez définir d'autres autorisations. Le bouton "Autoriser les utilisateurs issus des groupes enfants à venir se charger sur les bornes de ce groupe" permet que les groupes enfants de ce dernier puissent se charger chez lui et inversement. En cochant le bouton, on définit en l'occurence que le groupe "DR_EST" est autorisé à se charger chez "DR_EST" donc ça comprend le groupe et ses enfants.
Tandis que le second paramètre "Autoriser les utilisateurs de ce groupe à se charger sur les bornes de ce groupe" est activé par défaut, cela permet aux utilisateurs possédant un rôle sur DR_EST de pouvoir se charger sur les bornes des stations associées à ce groupe. Si on décoche ce paramètre, cela empêche les utilisateurs internes de ce groupe à pouvoir se charger directement, ils passeront alors via Fulli.
Pour créer une nouvelle autorisation, vous pouvez cliquer sur le bouton "Autoriser un groupe à se charger", ce qui affichera une boite de dialogue vous demandant le groupe à ajouter.
Une fois l'autorisation créée, vous aurez la possibilité de supprimer cette dernière ci-besoin grâce au bouton rouge adéquat.
Etablir Fulli pour l'ensemble d'un groupe
Nous allons analyser le cas DR_EST pour déterminer si les sessions de charges de ce groupe et ses sous-groupes sont liées à Fulli et comment mettre en place cette configuration.
Conditions
- Décocher "Autoriser les utilisateurs de ce groupe à se charger sur les bornes de ce groupe" sur chacun des groupes
- Pas de règles d'autorisations établis tant sur les parents que sur eux-même si cela peut compromettre les charges
Pour la 2e règle, si Eiffage Energie Systèmes, qui est parent de DR_EST, autorise TEST ET ESSAIS ce n'est pas impactant car c'est un groupe externe. En revanche, si il autorise DR_EST directement par exemple, alors tous les sous groupes pourront se charger sans passer par Fulli.
Algorithme
Tout d'abord, un bref rappel de l'algorithme pour déterminer les autorisations entre groupes : Par défaut, on peut se charger dans son propre groupe (l'utilisateur doit posséder un rôle direct).
- Si
sourceautorisetarget-> Autorisé - Si
parent sourceautorisetarget-> Autorisé - Si
sourceautoriseparent target-> Autorisé - Si
parent sourceautoriseparent target-> Autorisé - Si on a décoché la charge sur son groupe et définis aucune autorisation -> Refusé pour tous
- Si on a coché la charge sur son groupe et définis aucune autorisation -> Refusé pour utilisateurs externes mais pas internes (possède un rôle sur le groupe)
- Si des autorisations existent mais sont softdelete -> Refusé
Dès lors qu'on est refusé, on bascule sur les emsps.
Vérifier les autorisations point de vue dev
Récupérons dans un premier temps les id des groupes grâce à :
WITH RECURSIVE GroupHierarchy AS (
SELECT g.id, g.name, g.id_parent_group as idParentGroup FROM groups AS g WHERE g.id = ? AND g.deleted_at IS NULL
UNION ALL
SELECT g.id, g.name, g.id_parent_group as idParentGroup FROM groups AS g
JOIN GroupHierarchy AS rgh ON g.id_parent_group = rgh.id
WHERE g.id_parent_group IS NOT NULL AND g.deleted_at IS NULL
)
SELECT GROUP_CONCAT(id) AS group_ids
FROM GroupHierarchy;
Avec ? étant l'id du groupe que l'on souhaite observer, ici 24 pour DR_EST. Il ne faut pas oublier également les groupes parents de DR_EST soit 23 Eiffage Energie Systèmes, 185 Eiffage et 1 Wego car ils ne doivent pas contenir de règles d'autorisations pouvant impacter les enfants, en l'occurence DR_EST.
On récupère donc les règles d'autorisations sur les parents :
SELECT * FROM group_access_authorizations where id_source_group IN (23, 185, 1) ADN deleted_at IS NULL;
Cela nous donne les autorisations accordées sur Eiffage Energie Systèmes, Eiffage et Wego. On voit ainsi qu'aucune règle n'a été établie. On reproduit l'étape cette fois ci pour DR_EST et ses sous groupes que l'on a récupéré ci-dessus.
+----+-----------------+-----------------+---------------------+---------------------+------------+
| id | id_source_group | id_target_group | created_at | updated_at | deleted_at |
+----+-----------------+-----------------+---------------------+---------------------+------------+
| 51 | 34 | 185 | 2026-01-07 13:56:01 | 2026-01-07 13:56:01 | NULL |
| 52 | 64 | 185 | 2026-01-07 13:56:48 | 2026-01-07 13:56:48 | NULL |
| 53 | 168 | 185 | 2026-01-07 13:57:08 | 2026-01-07 13:57:08 | NULL |
| 54 | 197 | 185 | 2026-01-07 13:57:44 | 2026-01-07 13:57:44 | NULL |
| 55 | 891 | 185 | 2026-01-07 13:58:15 | 2026-01-07 13:58:15 | NULL |
| 56 | 1070 | 185 | 2026-01-07 13:58:34 | 2026-01-07 13:58:34 | NULL |
+----+-----------------+-----------------+---------------------+---------------------+------------+
On observe alors différentes autorisations établies qui permettent à Eiffage de pouvoir se charger.
Enfin dernière étape, on vérifie les configurations_group pour déterminer si on a bien décoché la charge sur son propre groupe avec :
SELECT * FROM configurations_group where id_group IN () AND configuration LIKE "%authorizeChargeOwnUsers%" AND deleted_at IS NULL;
Avec cette requête on voit que seuls les groupes 39 et 445 ont désactivé la charge chez soit car si authorizeChargeOwnUsers: true ou n'est pas définis alors on considère true. Pour passer outre la configuration initiale de pouvoir se charger sur son propre groupe, il faut expliciter authorizeChargeOwnUsers: false.
Conclusion
Dans DR_EST et ses sous groupes :
- BU_00318_LUDRES et BU_00150 sont les seuls à être Fulli Only.
- BU_02154_TROYES, BU_04038_BESANCON, BU_04038_CHALON/SAONE, BU04759 Metz, BU_04570 Chalon et BU_04034_IT_LAN_ARCELORMITAL_FLORANGE autorisent tout Eiffage + leur propre utilisateurs
- Le reste des groupes autorisent leur propre utilisateurs
Sur l'ensemble des groupes, les utilisateurs internes peuvent se charger directement sans passer par Fulli. Ce qu'il faut faire pour que tout passe par Fulli sur les sous groupes DR_EST :
- Décocher la charge sur son groupe pour ceux qui ne l'ont pas (
authorizeChargeOwnUsers: false)) - Supprimer les autorisations sur les groupes BU_02154_TROYES, BU_04038_BESANCON, BU_04038_CHALON/SAONE, BU04759 Metz, BU_04570 Chalon et BU_04034_IT_LAN_ARCELORMITAL_FLORANGE
Script SQL
Je met à disposition le script qui a déjà été injecté :
--Sous groupes de Eiffage Energie Systemes 24 sauf DR EST
-- CY_MULHOUSE
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (1, 67, 185, NOW(), NOW(), NULL);
-- DR Hauts de france
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (2, 50, 185, NOW(), NOW(), NULL);
-- DR I2S
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (3, 217, 185, NOW(), NOW(), NULL);
-- DR MEDITERRANEE
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (4, 488, 185, NOW(), NOW(), NULL);
-- DR Nouvelle Aquitaine
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (5, 165, 185, NOW(), NOW(), NULL);
-- DR Occitanie
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (6, 334, 185, NOW(), NOW(), NULL);
-- DR OUEST
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (7, 143, 185, NOW(), NOW(), NULL);
-- DR IDF ELEC
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (8, 882, 185, NOW(), NOW(), NULL);
-- EES Site Verquin
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (9, 490, 185, NOW(), NOW(), NULL);
-- EES ACCESS GROUP ANNECY BU 04604
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (10, 565, 185, NOW(), NOW(), NULL);
-- EES Centre Normandie
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (11, 179, 185, NOW(), NOW(), NULL);
-- EES NAT Allemagne
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (12, 1000, 185, NOW(), NOW(), NULL);
-- EES DR CENTRE EST
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (13, 223, 185, NOW(), NOW(), NULL);
-- EES NORD
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (14, 53, 185, NOW(), NOW(), NULL);
-- Eiffage Rail 2
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (15, 506, 185, NOW(), NOW(), NULL);
-- EMX
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (16, 941, 185, NOW(), NOW(), NULL);
-- Pole Sud Alsace
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (17, 280, 185, NOW(), NOW(), NULL);
-- Reseau Mobile
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (18, 354, 185, NOW(), NOW(), NULL);
--Sous groupes de Eiffage 185 sauf Eiffage Energie Systeme
-- 00860 Grand Sud Industries
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (19, 187, 185, NOW(), NOW(), NULL);
-- APRR AREA
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (20, 189, 185, NOW(), NOW(), NULL);
-- CONCESSION
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (21, 191, 185, NOW(), NOW(), NULL);
-- DG EIFFAGE
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (22, 118, 185, NOW(), NOW(), NULL);
-- Eiffage Construction
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (23, 553, 185, NOW(), NOW(), NULL);
-- Eiffage Deutschland
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (24, 1021, 185, NOW(), NOW(), NULL);
-- Eiffage Infrastructure
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (25, 186, 185, NOW(), NOW(), NULL);
-- Eiffage Services
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (26, 205, 185, NOW(), NOW(), NULL);
-- EIFFAGE VELIZY
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (27, 229, 185, NOW(), NOW(), NULL);
-- IMPORT VLZ
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (28, 780, 185, NOW(), NOW(), NULL);
-- Sous Traitant
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (29, 1079, 185, NOW(), NOW(), NULL);
--Sous groupes de Clients Externes
-- Arlanxeo pas d'enfants
-- Artois mobilites Lens pas d'enfants
-- ASVEL
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (30, 1148, 1148, NOW(), NOW(), NULL);
-- CAP Val de Saône
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (31, 267, 267, NOW(), NOW(), NULL);
-- CCAS FOUGERES pas d'enfants
-- Centrakor
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (32, 1001, 1001, NOW(), NOW(), NULL);
-- Centre hospitalier de cholet
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (33, 926, 926, NOW(), NOW(), NULL);
-- Charmes Automobiles
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (34, 169, 169, NOW(), NOW(), NULL);
-- Communaute de communes Pays du mont blanc
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (35, 554, 554, NOW(), NOW(), NULL);
-- Communaute de communes Thelloise pas d'enfants
-- CPA REIMS
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (36, 550, 550, NOW(), NOW(), NULL);
-- DAE 2025
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (37, 997, 997, NOW(), NOW(), NULL);
-- DG Des finances publiques DRFIP DIJON pas d'enfants
-- EHPAD
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (38, 953, 953, NOW(), NOW(), NULL);
-- Euroglas pas d'enfants
-- Formes et sculptures bléré pas d'enfants
-- GILL CORPORATION ANGLET pas d'enfants
-- Glas trosch pas d'enfants
-- GRDF
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (39, 733, 733, NOW(), NOW(), NULL);
-- JEL Production Chalets Coeur du lac Malbuisson
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (40, 439, 439, NOW(), NOW(), NULL);
-- John Deere
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (41, 1008, 1008, NOW(), NOW(), NULL);
-- Kelois Bus Besancon pas d'enfants
-- Mademoiselle desserts
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (42, 887, 887, NOW(), NOW(), NULL);
-- Mairie velentigney pas d'eanfnts
-- Marché aux affaires bourguignon pas d'enfants
-- Noremat Ludres pas d'enfants
-- Orange
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (43, 1106, 1106, NOW(), NOW(), NULL);
-- PAX Strasbourg evenements
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (44, 925, 925, NOW(), NOW(), NULL);
-- RTE
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (45, 597, 597, NOW(), NOW(), NULL);
-- SIA Habitat
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (46, 992, 992, NOW(), NOW(), NULL);
-- SKF Saint Cyr Sur Loire pas d'enfants
-- Terres de montaigu communauté d'agglomération
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (47, 511, 511, NOW(), NOW(), NULL);
-- Tun girève pas d'enfants
-- Ville de Mantes La Jolie
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (48, 863, 863, NOW(), NOW(), NULL);
-- Ville de senlis
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (49, 994, 994, NOW(), NOW(), NULL);
-- Ville soissons
INSERT INTO group_access_authorizations (id, id_source_group, id_target_group, created_at, updated_at, deleted_at) VALUES (50, 184, 184, NOW(), NOW(), NULL);
-- Viskase thaon les vosges pas d'enfants
Refonte de l'ACL [DOC Technique]
Contexte
L'actuellement implémentation présente des rôles trop permissifs par rapport à l'utilisation quotidienne qu'ont certains profils utilisateurs. Cela représente un risque de sécurité et également une difficulté à faire évoluer les droits. Il devient necéssaire d'ajouter un nouveau rôle Gestionnaire de parc pour leur restreindre certains droits. L'exploitation a également relevé que certains gestionnaires supprimaient des comptes de membres de l'exploitation car, étant visibles dans leur groupe, ceux-ci sont considérés comme des anomalies aux yeux des gestionnaires qui ne veulent pas les avoir dans leur groupe, ce qui résulte d'une suppression de compte.
But de la refonte des rôles
On aimerait alors une granularité plus fine des permissions. En accord avec l'analyse détaillée de Pierre sur le chantier UX - UI, celui-ci a obtenu nombre de témoignages qui vont en ce sens. Il faut alors créer un nouveau rôle dédié pour ce profil utilisateur.
Actions principales
Mise en place d'une hiérarchie des rôles
Cela permet plus particulièrement lors de suppression / modification d'utilisateur, de ne pouvoir intervenir que si le rôle de la personne modifiée est similiaire ou inférieur au notre. Ainsi, un gestionnaire ne pourra plus supprimer des membres de l'exploitation tel que la hiérarchie définit est la suivante :
MANAGER > TECHNICIAN > FLEET_MANAGER > VIEWER > USER
Refonte font-end de la gestion des droits
L'ACL front-end a été revue pour être plus fidèle à la matrice des droits. Cela assure plus de sécurité et permet une meilleure maintenabilité, évolutivité. Originellement découpé selon canRead et canWrite dans chaque components, on a voulu plutôt retranscrire exhaustivement les droits liés, permettant alors de désactiver directement des pages ou fonctionnalités selon le rôle. Cela facilite la fluidité du parcours utilisateur et on pourra également imaginer à l'avenir des interfaces dédiés plus poussés. Par exemple, concernant la situation écrite en préambule du document, on pourrait personnaliser la page utilisateurs pour afficher 2 boutons distincts, facile d'utilisation, qui expliciterait la suppression du compte ou la suppression du rôle dans le groupe.
Implémentation technique
Le front-end ne sécurise pas seul, c'est le back-end qui vérifie toujours, néanmoins il sert à l'UX.
Back-end
Dans src/acl/roles.enum.ts on retrouve les différents rôles associés aux utilisateurs. Chaque endpoint situé dans les controllers utilise l'ACL par l'intermédiaire de décorateurs. Les guards vérifient la connexion et assurent que le rôle utilisé existe :
@UseGuards(AuthenticationGuard, AuthorizationGuard)
On désigne ensuite quels sont les rôles à pouvoir accéder a l'endpoint :
@ROLES(Role.MANAGER, Role.TECHNICIAN, Role.VIEWER)
Front-end
Dans src/app/models/acl-rights.ts on établit un inventaire exhaustif des fonctionnalités.
On les attribue aux rôles dans src/app/models.roles.ts
Ensuite, dans chaque components on vérifie les droits utilisés qu'on stocke dans la variable aclRights soit :
aclRights: AclRights = {};
constuctor(private aclService: AclService){}
this.aclRights[ACL_READ_LOCATIONS_MAP] = this.aclService.can(ACL_READ_LOCATIONS_MAP);
Matrice des droits
Disponible ci-joint.
Edit 05/05/2026
Je ne crois pas avoir les droits de modifier une pièce jointe, je met donc une capture d'écran en complément sur certaines fonctionnalités qui ont pu changer suite à une réunion le 28/04/2026
Accès API
Fonctionnement & exemple
Cette documentation permet de mieux comprendre le fonctionnement d'accès API en s'appuyant sur l'exemple de la consigne Dynamique/Manuel de smartCharging.
Structure
La table public_api_clients permet de générer une clé API relié à un rôle, elle contient alors :
idroleUserGroupId: pointe versidde role_users_groupsentityName: nom du clientclientCode: nom unique équivalent slugapiKeyHash: clé api hashéefeatures: fonctionnalités autorisées par la cléstatus: état de la clé
Seul le rôle MANAGER peut gérer les clés des autres utilisateurs. Voici les routes principales :
- POST
/public-api-clients/me: pour générer une clé sur son rôle - POST
/users/:idOrUuid/role/:roleId: pour générer la clé d'un id_role_users_groups - GET
/public-api-clients/me: pour récupérer les informations concernant ma clé - PATCH
/public-api-clients/:id/features: pour définir les fonctionnalités autorisés par la clé (vierge à la génération du POST) - POST
/public-api-clients/:id/regenerate-key: pour regénérer la clé - POST
/public-api-clients/:id/revoke: pour révoquer l'état d'une clé
Un Guard CombinedAuthGuard a été mis en place pour permettre d'utiliser une route soit via jwtToken (Supervision) ou par basic token (clé API). Le Guard ApiScopeGuard permet quant à lui d'assurer des droits autorisés pour la clé.
Exemple concret consigne smartCharging externe
Dans notre cas, on souhaite autoriser un client externe à pouvoir modifier la puissance d'une station. Pour se faire, on créé un utilisateur MANAGER ou TECHNICIAN sur le groupe désiré, afin qu'il ait les droits de modifier une station. Pour autant, on ne communiquera pas le mot de passe du compte puisque c'est la clé API générée qui sera utilisée uniquement. Ainsi, grâce à la mise en place de ApiScopeGuard et de features, on évite que le client puisse interférer sur d'autres routes.
@UseGuards(CombinedAuthGuard, AuthorizationGuard, ApiScopeGuard)
@ROLES(Role.MANAGER, Role.TECHNICIAN)
@ApiScope("locations:update")
@ApiParamIdOrSlug
@Put(":idOrSlug")
async update(
@ParseIdOrSlug() idOrSlug: LocationParamIdOrSlugDto,
@Body() location: LocationUpdateDto,
@SessionGroups() inGroups: number[],
@Req() req: Record<string, unknown>,
): Promise<number> {}
L'utilisation de CombinedAuthGuard permet également aux utilisateurs connectés en supervision de pouvoir toujours utiliser la route via jwtToken.
Nouveau rôle : Gestionnaire
Contexte
Les utilisateurs gestionnaires étaient jusqu'alors affectés au rôle de Manager ce qui leur permettaient d'avoir accès à des fonctionnalités trop importantes par rappor tà leur status. Ce rôle permet alors d'assurer une matrice des droits plus fidèle à la réalité.
Changements
Désormais, les gestionnaires n'auront plus le droit de créer ou modifier des bornes (cela comprend également les points de charges et connecteurs), des stations, des groupes et des tarifs. Ils peuvent toutefois toujours gérer les badges et utilisateurs. Notons par ailleurs que lorsqu'ils supprimeront un utilisateur de leur groupe, cela va en réalité supprimer uniquement le rôle associé, empêchant ainsi la suppression d'un compte utilisateur que l'on pouvait observé auparavant.
Actions sur une borne
Concernant les actions possibles sur une borne, ils peuvent :
- Vider le cache d'une borne
- Redémarrer une borne
- Dévérouiller un connecteur
- Démarrer une transaction
- Envoyer un message à la borne type "HeartBeat" ou "BootNotification"
Mode d'emploi
L'entièreté des rôles anciennement Manager ont été basculé en Gestionnaire hors utilisateurs se situant au niveau du groupe racine Wego. Pour appliquer le rôle à de futurs utilisateurs, cela se trouve dans le formulaire de la page utilisateurs suivant :
📋 Guide EMAT — Comprendre et activer la synchronisation We-Go
À destination de : équipe hotline & clients
Sujet : Comment les données We-Go remontent automatiquement dans EMAT
🔍 Comment ça fonctionne ?
Chaque mois, le logiciel EMAT d'Eiffage vient récupérer automatiquement les données du mois précédent depuis la plateforme We-Go.
Il récupère 3 types d'informations :
- 🔌 Les recharges effectuées par les conducteurs
- 📏 Les relevés kilométriques saisis dans l'application
- 🃏 Les badges RFID et les bornes de recharge
⚠️ Important : We-Go ne "pousse" pas les données vers EMAT. C'est EMAT qui vient les chercher, généralement en début de mois pour le mois précédent.
✅ Checklist des prérequis
Pour qu'un conducteur ou une donnée apparaisse dans EMAT, toutes les conditions suivantes doivent être remplies côté We-Go. Utilisez cette checklist pour diagnostiquer un problème.
👤 Pour qu'un conducteur remonte dans EMAT
| # | À vérifier | Pourquoi c'est important |
|---|---|---|
| ☐ 1 | Le conducteur est bien créé dans We-Go | Sans compte, aucune donnée n'est générée |
| ☐ 2 | Le conducteur est rattaché à un groupe Eiffage dans We-Go | Seuls les groupes Eiffage sont exportés vers EMAT |
| ☐ 3 | La plaque d'immatriculation du conducteur est renseignée | 🚨 Sans plaque, le conducteur est invisible dans tous les exports |
| ☐ 4 | Le conducteur a un groupe de facturation (invoiced group) | C'est ce groupe qui détermine son "Entité" dans EMAT |
| ☐ 5 | Le groupe de facturation contient un numéro BU à 5 chiffres dans son nom | Ex : BU12345, 12345-Lyon. Sans les 5 chiffres, l'entité n'est pas reconnue par EMAT |
🔌 Pour qu'une recharge remonte dans EMAT
| # | À vérifier | Pourquoi c'est important |
|---|---|---|
| ☐ 1 | Toutes les conditions du conducteur (tableau ci-dessus) | Prérequis de base |
| ☐ 2 | La recharge a bien une énergie consommée > 0 kWh | Les sessions "à blanc" ou les connexions sans charge ne sont pas exportées |
| ☐ 3 | La recharge est terminée (pas en cours) | Seules les sessions terminées dans le mois précédent sont incluses |
| ☐ 4 | La recharge a été faite sur une borne We-Go (pas en itinérance/roaming) | Les recharges sur des réseaux tiers (via roaming) ne sont pas exportées |
📏 Pour qu'un relevé kilométrique remonte dans EMAT
| # | À vérifier | Pourquoi c'est important |
|---|---|---|
| ☐ 1 | Toutes les conditions du conducteur (tableau ci-dessus) | Prérequis de base |
| ☐ 2 | Le conducteur a saisi son kilométrage dans l'application We-Go ce mois-là | Les relevés ne sont pas automatiques sauf si un système de télématique est connecté |
| ☐ 3 | Le relevé a été saisi durant le mois précédent | Seuls les relevés du mois M-1 sont exportés |
| ☐ 4 | La plaque du véhicule au moment du relevé correspond à la plaque actuelle du conducteur | Si le conducteur a changé de véhicule, les anciens relevés ne remontent pas |
💡 Astuce : Si un conducteur oublie de saisir son kilométrage, il peut le faire rétroactivement dans l'app We-Go, à condition que ce soit pour le mois en cours (le relevé sera exporté le mois suivant).
🏗️ Pour qu'une borne de recharge apparaisse dans EMAT
| # | À vérifier | Pourquoi c'est important |
|---|---|---|
| ☐ 1 | La borne est rattachée à un site (location) d'un groupe Eiffage dans We-Go | Seules les bornes Eiffage sont exportées |
| ☐ 2 | Le nom du groupe du site contient "BU" et un numéro à 5 chiffres | Ex : BU12345 Chantier Paris. C'est ce qui identifie la Business Unit dans EMAT |
| ☐ 3 | La borne possède un identifiant EMI3 | C'est le code unique de la borne dans le système We-Go |
🆘 Mon problème n'est pas résolu — que faire ?
Si après avoir vérifié toutes les cases, les données ne remontent toujours pas, voici les informations à fournir à l'équipe technique We-Go :
- Le nom complet du conducteur concerné
- Sa plaque d'immatriculation telle qu'elle est saisie dans We-Go
- Son groupe de facturation (nom exact)
- La période concernée (quel mois ne s'est pas synchronisé ?)
- Le type de donnée manquante : recharge ? kilométrage ? badge ?
📞 Contact
Pour toute question ou problème de synchronisation : équipe We-Go
Documentation des flux de paiement
Ce document décrit les différents flux de paiement au sein de l'application Wego.
1. Flux de paiement en ligne (via QR Code)
Ce flux est destiné aux utilisateurs non authentifiés qui paient pour une session de recharge unique via une carte de crédit.
Étapes du flux
-
Initiation : L'utilisateur scanne un QR code sur une borne de recharge, ce qui le redirige vers une page web dédiée à cette borne.
-
Création d'une intention de paiement :
- Le frontend appelle l'API pour créer une intention de paiement :
GET /api/payments/evse/:slug/with-capture. - Le backend crée une intention de paiement (Payment Intent) auprès de Stripe avec la méthode de capture manuelle (
capture_method: 'manual'). Cela autorise un montant pré-défini sans le débiter immédiatement. - Un enregistrement est créé dans la table
paymentsavec le statutPAYMENT_CREATEDet untagIdtemporaire est généré. - L'API retourne un
client_secretau frontend.
- Le frontend appelle l'API pour créer une intention de paiement :
-
Confirmation du paiement par l'utilisateur :
- Le frontend utilise le
client_secretpour afficher le formulaire de paiement Stripe. - L'utilisateur saisit ses informations de carte bancaire et valide le paiement.
- Le frontend utilise le
-
Démarrage de la transaction :
- Une fois le paiement confirmé côté client, le frontend appelle l'API :
POST /api/payments/remote-start-after-payment-confirmed. - Le backend vérifie la validité du paiement, met à jour le statut de l'enregistrement
paymentsàPAYMENT_CONFIRMED. - Le backend envoie une commande
RemoteStartTransactionà la borne via le protocole OCPP, en utilisant letagIdtemporaire.
- Une fois le paiement confirmé côté client, le frontend appelle l'API :
-
Session de recharge : La session de recharge est active. Un enregistrement est créé dans la table
transactionset lié à l'enregistrementpayments. -
Arrêt de la transaction :
- L'utilisateur arrête la recharge depuis la page web, ce qui déclenche un appel à
POST /api/payments/transaction/:idOrSlug/stop. - La borne envoie une notification
StopTransactionau backend.
- L'utilisateur arrête la recharge depuis la page web, ce qui déclenche un appel à
-
Capture du paiement :
- La notification
StopTransactiondéclenche un événementtransaction-payment-capture. - Un service écoute cet événement et appelle la méthode
paymentsService.capturePaymentWithCapture(). - Cette méthode finalise la transaction Stripe en capturant le montant final de la recharge (le coût réel de l'énergie consommée).
- Le statut de l'enregistrement
paymentsest mis à jour àPAYMENT_CAPTURED.
- La notification
2. Flux de paiement par badge RFID (Utilisateur Wego)
Ce flux est destiné aux utilisateurs enregistrés sur la plateforme Wego et qui utilisent un badge RFID fourni par Wego.
Étapes du flux
- Authentification : L'utilisateur présente son badge RFID Wego à la borne.
- Autorisation : La borne envoie une requête
Authorizeau backend avec letagIddu badge. Le backend vérifie dans sa base de données locale que le badge est valide et actif. - Démarrage de la transaction :
- La borne envoie une notification
StartTransactionau backend. - Le backend crée un enregistrement dans la table
transactionslié autagIdde l'utilisateur.
- La borne envoie une notification
- Session de recharge : La session est active.
- Arrêt de la transaction : L'utilisateur arrête la recharge. La borne envoie une notification
StopTransactionau backend. - Facturation :
- Le coût de la transaction n'est pas payé immédiatement.
- La transaction est associée à l'utilisateur et à son groupe de facturation (
invoicedGroup). - Le processus de facturation se fait via un processus périodique (batch) qui agrège les transactions par groupe de facturation.
- Le module
ematgère un cas spécifique de facturation pour le groupe Eiffage.
3. Flux de paiement via EMSP
Ce flux s'applique lorsqu'un utilisateur d'un partenaire de roaming (un EMSP) utilise une borne du réseau Wego. La communication se fait via le protocole OCPI.
Étapes du flux
- Autorisation (OCPI) :
- L'utilisateur présente le badge de son EMSP à la borne Wego.
- La borne envoie une requête
Authorizeau backend Wego. - Le backend Wego, ne reconnaissant pas le badge localement, identifie qu'il s'agit d'un badge de roaming et interroge l'EMSP partenaire via l'endpoint OCPI
Tokens(POST /ocpi/2.1.1/tokens/{token_uid}/authorize). - L'EMSP partenaire valide le badge et retourne une réponse positive.
- Le backend Wego crée un enregistrement local
Authorizationqui lie letagIdà l'idEmspdu partenaire.
- Démarrage de la transaction :
- La borne envoie une notification
StartTransaction. - Le backend Wego crée une transaction et l'associe à l'
idEmspgrâce à l'autorisation préalablement enregistrée.
- La borne envoie une notification
- Session de recharge : La session est active.
- Arrêt de la transaction : L'utilisateur arrête la recharge. La borne envoie une notification
StopTransactionau backend Wego. - Génération et Envoi du CDR (Charge Detail Record) :
- À la fin de la transaction, le backend Wego génère un CDR. Ce document est un "ticket de caisse" détaillé de la session de recharge (énergie consommée, durée, coût, etc.).
- Le backend Wego envoie ce CDR à l'EMSP partenaire via son endpoint OCPI
CDRs(POST /ocpi/cpo/2.1.1/cdrs). - L'URL du CDR sur le système de l'EMSP est enregistrée dans le champ
emspCdrUrlde la transaction, servant de confirmation.
- Facturation :
- La facturation finale de l'utilisateur est gérée entièrement par l'EMSP partenaire, sur la base du CDR reçu.
- Le règlement financier entre Wego (le CPO) et l'EMSP se fait en dehors de l'application, selon les accords de roaming établis, en utilisant les CDRs comme preuve de service.
Documentation : Calcul des taux de disponibilité des bornes de recharge
Cette documentation explique comment nous calculons la disponibilité et l’utilisation des bornes de recharge électrique.
1. Concepts clés
a) Temps total suivi
Chaque borne de recharge a un historique d’états dans le système.
- Un état correspond à ce que fait la borne à un moment donné : par exemple
CHARGING(en charge),OUTOFORDER(hors service), ouIDLE(disponible mais non utilisée). - Chaque état a un début (
startTime) et éventuellement une fin (endTime). - Le temps total suivi correspond à la somme de toutes les durées où la borne a eu un état enregistré sur une période donnée.
b) États considérés comme indisponibles
Les états suivants sont considérés comme rendant la borne indisponible :
- Hors service (
OUTOFORDER) - Inopérante (
INOPERATIVE) - Bloquée (
BLOCKED) - En maintenance planifiée ou retirée (
PLANNED,REMOVED) - État inconnu (
UNKNOWN)
Tout le reste est considéré comme disponible.
2. Calcul du taux de disponibilité
Le taux de disponibilité indique la proportion de temps où une borne était disponible sur une période donnée.
Formule :
Disponibilité (%) = 100 - Taux d’indisponibilité (%)
Taux d’indisponibilité (%) = (Temps total indisponible / Temps total suivi) * 100
Exemple simple
- Durée totale sur la période : 10 heures
- Temps où la borne était hors service ou en maintenance : 2 heures
Taux d’indisponibilité = (2 / 10) * 100 = 20%
Taux de disponibilité = 100 - 20 = 80%
3. Calcul du taux d’utilisation (taux de charge)
Le taux d’utilisation indique combien de temps la borne était effectivement en train de charger un véhicule.
Formule : Taux de charge (%) = (Temps total de charge / Temps total suivi) * 100
Le temps où la borne est disponible mais non utilisée est appelé temps inactif (idle).
Taux idle (%) = 100 - Taux de charge (%)
4. Agrégation par localisation
Pour obtenir un taux global sur un site ou un groupe de bornes :
- On calcule le taux de disponibilité et le taux d’utilisation pour chaque borne individuellement.
- On fait la moyenne de toutes les bornes pour obtenir un taux moyen du site.
On peut également identifier :
- Les 5 bornes les moins disponibles (pour prioriser la maintenance)
- Les 5 bornes les plus utilisées (pour mesurer l’impact opérationnel)
5. Données supplémentaires
a) Suivi horaire
On peut calculer combien de bornes sont en charge à chaque heure de la journée, ce qui permet de visualiser les pics d’utilisation.
b) Suivi des charges
On peut aussi résumer le nombre total de sessions de recharge et calculer la moyenne de charges par jour et par borne sur une période donnée.
6. Points pratiques pour l’exploitation
- Une borne est disponible si elle n’est pas en maintenance, hors service ou bloquée.
- Une borne est utilisée si elle est en train de charger un véhicule.
- Les taux sont toujours exprimés en pourcentage (%) pour faciliter la lecture.
- Les calculs prennent en compte uniquement les bornes accessibles pour le groupe d’utilisateurs concerné.