Simulateur
Page permettant de comparer automatiquement toutes les offres d'électricité en utilisant les données de consommation réelles sur 12 mois.
Features
| Feature | Statut |
|---|---|
| Selection PDL et filtrage | FAIT |
| Selecteur de periode | FAIT |
| Recuperation donnees 365j | FAIT |
| Tableau comparatif | FAIT |
| Details expandables | FAIT |
| Export PDF | FAIT |
| Informations additionnelles | FAIT |
| Support 8 types d'offres | FAIT |
| Cache partage | FAIT |
Fichiers
| Type | Fichier |
|---|---|
| Page | apps/web/src/pages/Simulator.tsx |
| Composants | apps/web/src/pages/Simulator/components/ |
| Periode | apps/web/src/components/PeriodSelector.tsx |
| API | apps/web/src/api/enedis.ts, energy.ts |
| Backend | apps/api/src/routers/enedis.py, energy.py |
Details implementation
Selection PDL et filtrage (FAIT)
- Sélection du PDL (si plusieurs actifs)
- Filtrage automatique selon puissance souscrite
- Bouton "Lancer la simulation"
Selecteur de periode (FAIT)
Composant PeriodSelector reutilisable permettant de choisir la plage de dates pour la simulation.
Raccourcis :
| Raccourci | Comportement | Condition d'affichage |
|---|---|---|
| Mon profil | Plage calculee depuis datePreferencesStore | Masque si profil = rolling |
| Glissant | 365 derniers jours (J-1 a J-365) | Toujours visible |
| 2025 | 1er janvier au 31 decembre (ou J-1 si annee en cours) | Toujours visible |
| 2024 | Annee complete 2024 | Toujours visible |
Le raccourci "Mon profil" affiche le label du preset entre parentheses (ex: "Mon profil (Annee Tempo)").
Selection personnalisee :
- Deux calendriers
DayPickerindependants (date debut / date fin) - Navigation par dropdowns mois/annee (pas de fleches)
- Locale francaise avec mois capitalises
- Dates futures desactivees (limite a J-1)
- Dates sans donnees en cache grisees via
availableDates - Date minimum basee sur
oldest_available_data_dateouactivation_datedu PDL
Initialisation depuis le profil utilisateur :
Au montage, le selecteur lit le preset configure dans datePreferencesStore (page Parametres) :
| Preset profil | Periode initiale du simulateur |
|---|---|
rolling | Raccourci "Annee glissante" |
calendar | Raccourci "Mon profil" |
tempo | Raccourci "Mon profil" |
custom (j/m) | Raccourci "Mon profil" |
Les raccourcis restent disponibles pour changer de periode apres initialisation.
Comportement :
- Changement de periode relance automatiquement la simulation si deja executee
- Retour au mode "Glissant" par defaut si dates personnalisees non definies
- Le
periodLabels'affiche dans la barre de progression et les resultats
Recuperation des donnees (FAIT)
- Chargement données horaires sur 365 jours
- Par périodes de 7 jours avec chevauchement
- Barre de progression détaillée
- Cache React Query (staleTime: 7 jours)
Resultats de simulation (FAIT)
- Tableau comparatif classé par coût total
- Pour chaque offre : Rang, fournisseur, type, coûts détaillés, écarts
- Badges d'alerte (avertissements, tarifs anciens)
- Highlight meilleure offre (fond vert)
Details expandables (FAIT)
- Répartition consommation par type
- Calculs détaillés : kWh × prix = coût
- Grille tarifaire complète
- Messages d'avertissement
Export PDF (FAIT)
- PDF multi-pages professionnel
- Page 1 : Résumé + Top 10
- Pages suivantes : Détails complets (1 page/offre)
- Footer avec pagination et branding
Informations additionnelles (FAIT)
- Consommation totale sur période
- Économies potentielles
- Bloc d'information toujours visible
Types d'offres supportées
- BASE : Tarif unique
- BASE_WEEKEND : Différencié semaine/week-end
- HC_HP : Selon config PDL
- HC_NUIT_WEEKEND : 23h-6h + week-end
- HC_WEEKEND : Week-end + heures PDL
- SEASONAL : Hiver/Été avec jours de pointe
- TEMPO : 3 couleurs (Bleu/Blanc/Rouge)
- EJP : 22 jours de pointe/an
Optimisations
- Cache partagé avec /consumption (évite appels redondants)
- Auto-lancement si cache présent (≥2/3 périodes)
- Récupération intelligente avec vérification cache
- Lazy loading des détails expandables
Notes importantes
- Données par périodes de 7 jours (pas mois)
- Cache 7 jours (pas 24h)
- Filtrage automatique selon puissance PDL
- Couleurs TEMPO en temps réel (API RTE)
- Support complet mode sombre
Design moderne
Boutons modernisés
La page utilise le composant ModernButton pour une expérience utilisateur améliorée :
Bouton principal "Lancer la simulation" :
- Variant :
primaryavec gradient bleu - Taille :
lg(large) avecfullWidth - États : Loading avec spinner animé
- Icône : Calculator (masquée pendant le loading)
Bouton "Exporter en PDF" :
- Variant :
gradient(bleu → indigo → violet) - Taille :
sm(compact) - Icône : FileDown à gauche
- Affichage conditionnel (seulement si résultats disponibles)
Avantages du design
- Glassmorphism : Effet de transparence avec backdrop-blur
- Gradients animés : Shine effect au hover
- Performance : Animations GPU-accelerated
- Accessibilité : Support complet des attributs ARIA
- Dark mode : Variantes optimisées pour mode sombre
- Responsive : Adapté mobile avec boutons full-width
Voir documentation complète : docs/design/components/07-buttons.md