test(gherkin): ajouter tests BDD pour toutes clarifications règles métier
Ajoute/modifie tests Gherkin pour couvrir les 7 sections clarifiées : 1. Algorithme recommandation (scoring intérêts nuls) : - Ajout scénarios scoring-recommandation.feature - Cas contenu géo-ancré proche avec intérêts nuls = recommandable - Comparaison scores géo vs intérêts 2. Audio-guides mode voiture (système double clic) : - Nouveau fichier systeme-double-clic-sortie.feature - Premier clic : passage mode manuel + séquence suivante - Deuxième clic <10s : sortie audio-guide - Détection hors itinéraire + reprise 3. Monétisation créateurs (soldes dormants + DAS2) : - Nouveau fichier soldes-dormants-inactifs.feature - Conservation indéfinie si actif - Emails 12/18 mois + versement forcé 18 mois + 30j - Exception soldes <10€ avec proposition don - Modification obligations-fiscales.feature - DAS2 systématique tous montants (même <1200€) 4. Skip et abonnement (neutralisation pénalités) : - Nouveau fichier skip-abonnes-neutralisation.feature - Skip <10s non-abonné : -0.5% - Skip <10s abonné : 0% (neutre) - Métriques engagement : abonnés ne pénalisent pas - Anti-raid naturel (sources non pertinentes) 5. Premium multi-devices (KISS) : - Nouveau fichier multi-devices-dernier-priorite.feature - Règle simple : dernier device prend toujours priorité - Offline connecté vs déconnecté - Détection abus post-MVP (pas automatique) 6. Mode offline (contenus supprimés) : - Nouveau fichier contenus-supprimes-pendant-offline.feature - Suppression immédiate à reconnexion - Modal si contenu en cours d'écoute - Popup récapitulative si 2+ contenus supprimés 7. Publicités (ciblage horaire + fuseaux horaires) : - Nouveau fichier ciblage-horaire-fuseaux-horaires.feature - Ciblage horaire = heure locale utilisateur - France entière = Métropole + DOM - Détection fuseau GPS/device/IP - Cas d'usage restaurant Guadeloupe, assureur national Couverture complète de toutes les règles métier clarifiées.
This commit is contained in:
@@ -178,3 +178,44 @@ Fonctionnalité: Formule de scoring et recommandation
|
||||
Quand l'utilisateur demande le contenu suivant
|
||||
Alors l'algorithme recalcule les scores
|
||||
Et prend en compte les nouveaux contenus publiés
|
||||
|
||||
# Règle: Score géo excellent + intérêts nuls = recommandation possible (MVP)
|
||||
Scénario: Contenu géo-ancré proche avec intérêts nuls reste recommandable
|
||||
Étant donné qu'un contenu géo-ancré "Info trafic local" est à 100m de l'utilisateur
|
||||
Et que le contenu est tagué "Actualités" et "Trafic"
|
||||
Et que l'utilisateur a des jauges à 0% pour ces tags (aucun intérêt marqué)
|
||||
Et que le score_geo = 1.0 (distance 100m, excellent)
|
||||
Et que le score_interets = 0.0 (jauges nulles)
|
||||
Et que le score_engagement = 0.6 (contenu récent, peu d'historique)
|
||||
Quand l'algorithme calcule le score_final pour un contenu géo-ancré
|
||||
Alors score_final = (1.0 × 0.7) + (0.0 × 0.1) + (0.6 × 0.2)
|
||||
Et score_final = 0.7 + 0.0 + 0.12 = 0.82
|
||||
Et le contenu peut être recommandé malgré l'intérêt nul
|
||||
Et ce comportement est accepté pour MVP car:
|
||||
| justification |
|
||||
| Le quota 6 contenus géolocalisés/h protège du spam |
|
||||
| L'info peut être utile contextuellement |
|
||||
| La distinction info/divertissement est reportée post-MVP|
|
||||
|
||||
Scénario: Contenu géo-neutre loin avec intérêts élevés recommandé
|
||||
Étant donné qu'un contenu géo-neutre "Podcast philosophie" est à 150 km
|
||||
Et que le contenu est tagué "Philosophie" et "Culture"
|
||||
Et que l'utilisateur a des jauges à 90% pour ces tags
|
||||
Et que le score_geo = 0.25 (150 km de distance)
|
||||
Et que le score_interets = 0.9 (jauges élevées)
|
||||
Et que le score_engagement = 0.7
|
||||
Quand l'algorithme calcule le score_final pour un contenu géo-neutre
|
||||
Alors score_final = (0.25 × 0.2) + (0.9 × 0.6) + (0.7 × 0.2)
|
||||
Et score_final = 0.05 + 0.54 + 0.14 = 0.73
|
||||
Et le contenu est bien recommandé grâce aux intérêts élevés
|
||||
|
||||
Scénario: Comparaison scores - géo proche vs intérêts élevés
|
||||
Étant donné deux contenus:
|
||||
| contenu | type | distance | score_geo | tags | jauges_user | score_interets | score_engagement |
|
||||
| Info trafic locale | Géo-ancré | 100m | 1.0 | Trafic | 0% | 0.0 | 0.6 |
|
||||
| Podcast philosophie | Géo-neutre | 150 km | 0.25 | Philosophie | 90% | 0.9 | 0.7 |
|
||||
Quand l'algorithme calcule les scores finaux
|
||||
Alors score_final("Info trafic locale") = 0.82
|
||||
Et score_final("Podcast philosophie") = 0.73
|
||||
Et "Info trafic locale" sera proposé avant "Podcast philosophie"
|
||||
Et les deux contenus sont recommandables selon leurs critères différents
|
||||
|
||||
Reference in New Issue
Block a user