# language: fr @api @audio-guides @geolocation @mvp Fonctionnalité: Détection automatique du mode de déplacement En tant qu'utilisateur Je veux que l'application détecte automatiquement mon mode de déplacement Afin d'adapter l'expérience audio-guide (voiture, piéton, vélo, transports) Contexte: Étant donné que le système utilise les capteurs suivants pour la détection: | Capteur | Utilisation | | GPS (vitesse) | Vitesse de déplacement | | Accéléromètre | Détection de la marche | | Gyroscope | Détection de mouvements | | Bluetooth | Connexion CarPlay/Android Auto | | Activité (CoreMotion) | walking, running, cycling, automotive | Scénario: Détection automatique du mode voiture Étant donné un utilisateur "alice@roadwave.fr" en déplacement Quand le système détecte les indicateurs suivants: | Indicateur | Valeur | | Vitesse GPS | 45 km/h | | Accélération longitudinale | Typique d'une voiture| | Bluetooth connecté | CarPlay | | Activity Recognition | automotive | | Stabilité du mouvement | Haute | Alors le mode de déplacement "voiture" est sélectionné avec confiance: 95% Et l'interface passe en mode voiture: | Caractéristique | État | | Notifications visuelles | Minimales | | Notifications audio | Prioritaires | | Affichage des distances | Mètres + temps ETA | | Auto-play au point d'intérêt | Activé | Et un événement "TRAVEL_MODE_DETECTED_CAR" est enregistré Et la métrique "travel_mode.detected.car" est incrémentée Scénario: Détection automatique du mode piéton Étant donné un utilisateur "bob@roadwave.fr" en déplacement Quand le système détecte les indicateurs suivants: | Indicateur | Valeur | | Vitesse GPS | 4 km/h | | Accéléromètre | Pattern de marche | | Fréquence de pas | 110 pas/min | | Activity Recognition | walking | | Bluetooth connecté | Non | Alors le mode de déplacement "piéton" est sélectionné avec confiance: 92% Et l'interface passe en mode piéton: | Caractéristique | État | | Notifications visuelles | Complètes | | Navigation libre | Activée | | Affichage carte | Complet | | Auto-play publicité | Autorisé | Et un événement "TRAVEL_MODE_DETECTED_WALKING" est enregistré Et la métrique "travel_mode.detected.walking" est incrémentée Scénario: Détection automatique du mode vélo Étant donné un utilisateur "charlie@roadwave.fr" en déplacement Quand le système détecte les indicateurs suivants: | Indicateur | Valeur | | Vitesse GPS | 18 km/h | | Accéléromètre | Vibrations régulières| | Pattern de mouvement | Cyclique | | Activity Recognition | cycling | | Variations de vitesse | Moyennes | Alors le mode de déplacement "vélo" est sélectionné avec confiance: 88% Et l'interface passe en mode vélo: | Caractéristique | État | | Notifications visuelles | Limitées | | Notifications audio | Prioritaires | | Affichage des distances | Mètres | | Auto-play au point d'intérêt | Optionnel | Et un événement "TRAVEL_MODE_DETECTED_CYCLING" est enregistré Et la métrique "travel_mode.detected.cycling" est incrémentée Scénario: Détection automatique du mode transports en commun Étant donné un utilisateur "david@roadwave.fr" en déplacement Quand le système détecte les indicateurs suivants: | Indicateur | Valeur | | Vitesse GPS | 35 km/h avec arrêts | | Pattern d'arrêts | Régulier (stations) | | Accéléromètre | Stationnaire par moments| | Précision GPS | Variable (tunnels) | | Activity Recognition | automotive + stationary | Alors le mode de déplacement "transports" est sélectionné avec confiance: 80% Et l'interface passe en mode transports: | Caractéristique | État | | Notifications visuelles | Complètes | | Auto-play aux stations | Activé | | Affichage carte | Complet | | Prise en compte des tunnels | Activée | Et un événement "TRAVEL_MODE_DETECTED_TRANSIT" est enregistré Et la métrique "travel_mode.detected.transit" est incrémentée Scénario: Changement dynamique de mode détecté (voiture → piéton) Étant donné un utilisateur "eve@roadwave.fr" en mode voiture Et il roule à 50 km/h Quand l'utilisateur se gare et sort de la voiture: | Temps | Vitesse | Activity | Bluetooth | | T+0s | 50 km/h | automotive | CarPlay | | T+30s | 0 km/h | stationary | CarPlay | | T+60s | 0 km/h | stationary | Déconnecté| | T+90s | 4 km/h | walking | Non | Alors le mode bascule automatiquement de "voiture" à "piéton" Et une notification discrète s'affiche: "Mode piéton activé" Et l'interface s'adapte instantanément au mode piéton Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "car_to_walking" Et la métrique "travel_mode.transition.car_to_walking" est incrémentée Scénario: Changement dynamique de mode détecté (piéton → vélo) Étant donné un utilisateur "frank@roadwave.fr" en mode piéton Et il marche à 4 km/h Quand l'utilisateur monte sur un vélo: | Temps | Vitesse | Activity | Pattern | | T+0s | 4 km/h | walking | Marche | | T+10s | 8 km/h | cycling | Cyclique | | T+20s | 15 km/h | cycling | Cyclique | | T+30s | 18 km/h | cycling | Cyclique stable| Alors le mode bascule automatiquement de "piéton" à "vélo" Et une notification s'affiche: "Mode vélo activé" Et les paramètres audio sont ajustés pour réduire les notifications visuelles Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "walking_to_cycling" Et la métrique "travel_mode.transition.walking_to_cycling" est incrémentée Scénario: Détection ambiguë avec faible confiance Étant donné un utilisateur "grace@roadwave.fr" en déplacement Quand le système détecte des indicateurs contradictoires: | Indicateur | Valeur | | Vitesse GPS | 12 km/h | | Activity Recognition | unknown | | Accéléromètre | Pattern irrégulier | | Confiance de détection | 45% | Alors le mode actuel est conservé (pas de changement) Et une icône d'interrogation s'affiche discrètement Et l'utilisateur peut forcer manuellement le mode via un menu rapide Et un événement "TRAVEL_MODE_UNCERTAIN" est enregistré Et la métrique "travel_mode.uncertain" est incrémentée Scénario: Forçage manuel du mode de déplacement Étant donné un utilisateur "henry@roadwave.fr" en mode auto-détecté "piéton" Mais il est en réalité en voiture (passager) Quand l'utilisateur ouvre le menu rapide et sélectionne "Mode voiture" Alors le mode "voiture" est forcé manuellement Et l'auto-détection est temporairement désactivée pour 30 minutes Et un événement "TRAVEL_MODE_FORCED_MANUAL" est enregistré avec ancienMode: "walking", nouveauMode: "car" Et la métrique "travel_mode.manual_override" est incrémentée Et après 30 minutes, l'auto-détection se réactive automatiquement Scénario: Mode stationnaire détecté (arrêt prolongé) Étant donné un utilisateur "iris@roadwave.fr" en mode voiture Et il est arrêté à un feu rouge depuis 2 minutes Quand le système détecte: | Indicateur | Valeur | | Vitesse GPS | 0 km/h | | Activity Recognition | stationary | | Durée d'immobilité | 120 secondes | | Bluetooth connecté | CarPlay | Alors le mode reste "voiture" (pas de changement) Mais un flag "stationary" est activé Et l'audio en cours continue de jouer normalement Et aucun nouveau contenu n'est déclenché automatiquement Et un événement "TRAVEL_MODE_STATIONARY" est enregistré Et la métrique "travel_mode.stationary" est incrémentée Scénario: Reprise du mouvement après mode stationnaire Étant donné un utilisateur "jack@roadwave.fr" en mode "voiture stationary" Et il est arrêté depuis 3 minutes Quand le système détecte: | Temps | Vitesse | Activity | | T+0s | 0 km/h | stationary | | T+5s | 10 km/h | automotive | | T+10s | 30 km/h | automotive | Alors le flag "stationary" est désactivé Et le mode "voiture" normal est restauré Et la logique de déclenchement automatique des audio-guides est réactivée Et un événement "TRAVEL_MODE_RESUMED" est enregistré Et la métrique "travel_mode.resumed" est incrémentée Scénario: Gestion des permissions de localisation et capteurs Étant donné un utilisateur "kate@roadwave.fr" qui lance l'application Quand les permissions suivantes sont refusées: | Permission | État | | Localisation GPS | Refusée | | Motion & Fitness | Refusée | Alors l'auto-détection du mode est désactivée Et un message s'affiche: "Pour bénéficier de l'expérience optimale, activez les permissions de localisation et mouvement" Et un bouton "Activer les permissions" redirige vers les Réglages Et l'utilisateur doit sélectionner manuellement son mode de déplacement Et un événement "TRAVEL_MODE_PERMISSIONS_DENIED" est enregistré Et la métrique "travel_mode.permissions_denied" est incrémentée Scénario: Optimisation de la batterie avec détection adaptative Étant donné un utilisateur "luke@roadwave.fr" avec batterie < 20% Quand le mode économie d'énergie est activé Alors la fréquence de détection du mode est réduite: | Mode normal | Mode économie d'énergie | | Toutes les 5s | Toutes les 30s | Et l'utilisation du GPS est optimisée (requêtes moins fréquentes) Et l'accéléromètre et gyroscope sont consultés moins souvent Et la précision de détection peut être légèrement réduite Et un événement "TRAVEL_MODE_BATTERY_SAVER" est enregistré Et la métrique "travel_mode.battery_saver.enabled" est incrémentée Scénario: Historique des modes de déplacement pour statistiques Étant donné un utilisateur "mary@roadwave.fr" qui utilise l'application depuis 1 mois Quand l'utilisateur accède à "Mon compte > Statistiques > Modes de déplacement" Alors l'utilisateur voit un graphique avec répartition: | Mode | Temps total | Pourcentage | | Voiture | 15h 30min | 45% | | Piéton | 12h 10min | 35% | | Vélo | 5h 20min | 15% | | Transports | 1h 40min | 5% | Et des insights sont affichés: "Vous utilisez principalement RoadWave en voiture" Et les données sont conservées de manière agrégée pour respecter le RGPD Scénario: Métriques de performance de la détection Étant donné que le système traite 100 000 détections de mode par heure Quand les métriques de performance sont collectées Alors les indicateurs suivants sont respectés: | Métrique | Valeur cible | | Temps de détection du mode | < 100ms | | Précision de détection (voiture) | > 95% | | Précision de détection (piéton) | > 90% | | Précision de détection (vélo) | > 85% | | Taux de transitions incorrectes | < 5% | | Consommation batterie par détection | < 0.01% | Et les métriques sont exportées vers le système de monitoring Et des alertes sont déclenchées si la précision < 80% Scénario: A/B testing des algorithmes de détection Étant donné que le système teste 2 algorithmes de détection: | Algorithme | Description | | A | Basé sur CoreMotion uniquement | | B | Combinaison capteurs + ML | Quand un utilisateur "nathan@roadwave.fr" est assigné au groupe B Alors l'algorithme B est utilisé pour la détection Et les métriques de précision sont tracées séparément par algorithme Et les événements incluent le tag "algorithm_version: B" Et après analyse, l'algorithme le plus performant est déployé à 100%