Import initial de la documentation : statut, roadmap, plans V1/V2, specs verticales (creche, sport), audits securite, plan de test, analyse concurrentielle et maquettes de design. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
11 KiB
Types d'expériences visiteur — SectionParcours
Guide de référence pour comprendre les possibilités offertes aux clients lors de la configuration de leur contenu.
Les 4 types de sections
| Section | Ce que le client pense | Carte | Questions |
|---|---|---|---|
| SectionMap | "Je crée une carte interactive de mon lieu" | Toujours | Non |
| SectionParcours | "Je guide mes visiteurs" | Optionnelle | Optionnelles |
| SectionGame | "Je crée un puzzle image" | Non | Non |
| SectionEvent | "Je crée un événement temporel" | Optionnelle | Non |
SectionParcours — tous les cas d'usage
Propriétés clés
Intention produit —
ShowMapest le commutateur « géolocalisé ou pas » (précisé le 2026-08-05). Ce n'est pas seulement « afficher une carte » :
ShowMap = true→ parcours géolocalisé : le visiteur se déplace physiquement, les étapes ont une position, la carte les montre. Extérieur ou grand site.ShowMap = false→ suite d'énigmes non géolocalisée, dans une pièce ou un espace restreint. Pas de GPS, pas de position sur les étapes, pas de carte. Le GPS n'aurait de toute façon aucune fiabilité en intérieur (précision 10-50 m).Conséquence : les champs géo d'une étape (
Geometry,IsGeoTriggered,ZoneRadiusMeters) n'ont de sens que siShowMap = true, et doivent être masqués dans manager-app sinon.
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
ShowMap |
bool | true | Parcours géolocalisé (carte + positions d'étapes) vs suite d'énigmes en salle |
BaseSectionMapId |
string? | null | SectionMap existante pour les GeoPoints de contexte — fond de carte optionnel, ne conditionne pas l'affichage de la carte |
IsGameMode |
bool | false | Active l'écran de démarrage + message de victoire |
GameMessageDebut |
TranslationAndResource[] | null | Message d'intro si IsGameMode |
GameMessageFin |
TranslationAndResource[] | null | Message de victoire si IsGameMode |
GuidedPaths |
GuidedPath[] | [] | Un ou plusieurs itinéraires au choix du visiteur |
Propriétés GuidedPath
| Propriété | Type | Défaut | Rôle |
|---|---|---|---|
Title |
Translation[] | — | Titre du parcours (multilingue) |
Description |
Translation[] | — | Description avant de démarrer |
ImageResourceId |
string? | null | Image de couverture |
IsLinear |
bool | true | true = le visiteur doit suivre l'ordre des étapes · false = il navigue librement entre les étapes, dans l'ordre qu'il veut |
RequireSuccessToAdvance |
bool | false | Doit valider le défi pour passer à l'étape suivante |
HideNextStepsUntilComplete |
bool | false | Cache les étapes futures |
Ces 3 booléens ne sont plus saisis directement (2026-08-06). Le client répond à une seule question — « Comment le visiteur progresse-t-il ? » — et manager-app en dérive les valeurs (
Parcours/progression_mode.dart) :
Choix client IsLinearRequireSuccessToAdvanceHideNextStepsUntilCompleteLibre — choisit ses étapes dans l'ordre qu'il veut false false false Dans l'ordre — suit la séquence, peut revenir en arrière true false false Étape par étape — chaque étape se débloque en réussissant la précédente true true case à cocher
Comportement visiteur implémenté (2026-08-06), identique mobile et web :
- Navigation libre (
IsLinear = false) : le visiteur atteint n'importe quelle étape — pins de la carte tapables, segments de la barre de progression cliquables. - Sinon : il ne peut revenir que sur les étapes déjà atteintes (relire une étape vue n'est pas de la triche). Les étapes non atteintes s'affichent verrouillées.
- Retour arrière : toujours disponible dès la 2ᵉ étape, dans tous les modes.
HideNextStepsUntilCompletemasque les étapes au-delà de la progression, en mode carte et en mode contenu (avant, seul le mode carte l'appliquait).
Propriétés GuidedStep
| Propriété | Type | Rôle |
|---|---|---|
Title |
Translation[] | Titre de l'étape |
Description |
Translation[] | Contenu de l'étape |
ImageResourceId |
string? | Image de l'étape |
Geometry |
Geometry? | Position / zone de l'étape — coordonnées en [lat, lng], pas en GeoJSON [lng, lat] (miroir du map_geometry_picker de manager-app). Uniquement si ShowMap = true |
IsGeoTriggered |
bool | Active le déblocage de l'étape à l'entrée dans la zone. Uniquement si ShowMap = true |
ZoneRadiusMeters |
double? | Rayon de déclenchement en mètres (1-500) |
IsStepTimer |
bool | Active un compte à rebours sur l'étape |
TimerSeconds |
int? | Durée du timer |
TimerExpiredMessage |
Translation[]? | Message si timer expiré |
QuizQuestions |
QuizQuestion[]? | Défi à valider (QCM, texte libre, digicode, puzzle) |
Supprimés le 2026-08-06 (migration
RemoveDeadGuidedStepFlags) :
IsStepLocked— redondant avecRequireSuccessToAdvance, et son implémentation rendait l'étape définitivement infranchissable (_canAdvancerenvoyaitfalsemême après réussite du défi). Le verrouillage est désormais dérivé de la progression réelle du visiteur.IsHiddenInitially— aucun consommateur dans aucune app, redondant avecHideNextStepsUntilComplete.FactContent— persisté en base, jamais édité ni affiché.
Types de questions (QuizQuestion)
Entité partagée entre SectionQuiz et GuidedStep.
⚠️ Corrigé le 2026-08-05 — l'enum réel (
QuizQuestion.cs:78-83) ne contient que 3 valeurs :Simple,MultipleChoice,Puzzle. Il n'existe niSimpleChoice, niTextLibre, niDigicode, niSlidingPuzzle, ni champExpectedAnswer.
ValidationQuestionType |
Validation | Usage typique |
|---|---|---|
Simple |
Texte libre — la réponse attendue est Responses[0].label (donc traduisible), comparaison insensible à la casse et aux accents |
Escape game — « Quel est le nom du coupable ? » |
MultipleChoice |
Choix parmi plusieurs (Responses[].isGood) |
Quiz pédagogique |
Puzzle |
Puzzle complété — jigsaw, ou glissant si IsSlidingPuzzle = true |
Escape game — reconstituer une image |
Digicode : ce n'est pas un type de question. Si la réponse attendue d'une question Simple est
purement numérique, les apps visiteur affichent automatiquement un pavé 0-9 façon cadenas à la place
du champ texte (guided_step_challenge.dart _isDigicode, ParcoursSection.tsx isDigicodeAnswer).
Rien à configurer dans manager-app.
Puzzle utilise
PuzzleImageId,PuzzleRows,PuzzleCols,IsSlidingPuzzlesurQuizQuestion. Ces champs ne sont proposés dans manager-app que siIsGameMode = truesur le parcours.⚠️ Ces 3 types ne sont disponibles que dans un GuidedStep. Une
SectionQuizautonome utilise un éditeur plus ancien (new_update_question_quizz.dart, modèleQuestionDTO) qui ne fait que du QCM.
Cas d'usage concrets
1. Visite de façades (parcours simple)
Configuration :
ShowMap = trueIsGameMode = falseIsLinear = true- Étapes : chaque façade avec photo + description
- Pas de questions
Expérience visiteur : carte avec les façades numérotées, tap sur chaque étape pour voir la description et la photo.
2. Parcours thématique libre
Configuration :
ShowMap = trueIsGameMode = falseIsLinear = false- Étapes : points d'intérêt à découvrir dans n'importe quel ordre
Expérience visiteur : tous les pins visibles sur la carte dès le départ, le visiteur explore à son rythme.
3. Parcours pédagogique (visite scolaire)
Configuration :
ShowMap = trueoufalseIsGameMode = falseRequireSuccessToAdvance = true- Étapes : contenu + questions
SimpleChoiceouTextLibre
Expérience visiteur : progression étape par étape, doit répondre correctement pour continuer.
4. Escape game indoor
Configuration :
ShowMap = false— pas de déplacement physiqueIsGameMode = trueGameMessageDebut: mise en scène narrativeGameMessageFin: message de victoireRequireSuccessToAdvance = trueHideNextStepsUntilComplete = true- Étapes : énigmes avec des questions
Simple(texte libre, ou digicode si la réponse est numérique) - Pas de géométrie ni de
IsGeoTriggeredsur les étapes — un escape indoor n'est pas géolocalisé
Expérience visiteur : écran de démarrage immersif → suite d'énigmes à résoudre → écran de victoire.
✅ Résolu le 2026-08-06 : le mode contenu applique désormais les mêmes règles de progression que le mode carte (verrouillage dérivé, masquage des étapes non atteintes, navigation libre), sur mobile et sur web. Voir parity-manager-visitapp.md M7/W6/W7.
5. Chasse au trésor / Escape game outdoor
Configuration :
ShowMap = trueBaseSectionMapId= carte du lieu (avec ses points de repère)IsGameMode = trueRequireSuccessToAdvance = trueHideNextStepsUntilComplete = true- Étapes : position géographique (
Geometry+ZoneRadiusMeters) + énigme
Expérience visiteur : carte avec les zones à atteindre, déclenchement automatique à l'approche d'une zone, énigme à résoudre pour passer à la suivante.
6. Guide de visite linéaire (sans carte)
Configuration :
ShowMap = falseIsGameMode = falseIsLinear = true- Étapes : contenu riche (texte, image, audio)
Expérience visiteur : séquence de contenus à consommer dans l'ordre. Proche d'un audioguide interactif.
SectionEvent — cas carnaval
SectionEvent n'est pas un parcours, mais peut en contenir (via GuidedPath.SectionEventId).
Configuration type (carnaval) :
- Créer une SectionMap "Carte du carnaval" avec les scènes, parkings, points de restauration
- Créer un SectionEvent "Carnaval de Marche" lié à cette SectionMap (
BaseSectionMapId) - Ajouter des ProgrammeBlocks (horaires, activités) avec leurs annotations sur la carte
- Optionnellement, ajouter des GuidedPaths à la SectionEvent pour "Suivez le cortège"
Expérience visiteur : SectionEvent apparaît en hero sur le home screen → tap → infos générales de l'événement, carte du cortège, programme avec horaires.
SectionMap — carte pure
Utilisé seul, sans parcours. Points d'intérêt avec catégories, vue liste/carte.
Peut être référencé en BaseSectionMapId par une SectionParcours ou une SectionEvent pour fournir les GeoPoints de contexte.