---
suivi: 1896
date: 2026-10-14
sujet: Visites guidées parcelles et tuile facture
chantier: foncier / accueil
type: evolution
statut: poussé
hash: 4ae9167c5
fichiers:
  - resources/js/visites/index.js
  - resources/js/Components/VisiteGuidee.vue
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - resources/js/Pages/Foncier/Parcelles/Show.vue
  - resources/js/Components/Foncier/ParcelleFicheNavigation.vue
  - resources/js/Components/Dashboard/OuEnEstFactureWidget.vue
  - app/Http/Controllers/VisiteGuideeController.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/VisiteGuidee1896Test.php
  - public/build/
  - docs/suivi/SUIVI_1896_visites_parcelles_facture.md
---

# SUIVI #1896 — Visites guidées parcelles et tuile facture

## PROMPT ENVOYÉ

La même visite guidée que Plume / Brainstorming sur la liste des parcelles, la fiche parcelle, et la tuile d’accueil « Où en est une facture ? ». Première visite automatique, mémorisée côté serveur, une visite par écran. Bouton « ? » pour relancer. « Passer » marque comme vue. Étapes ancrées sur data-visite. Une étape dont l’élément est absent est sautée. Textes imposés.

## Fiches lues

- #1817 LEÇON : une entrée dans visites/index.js, l’identifiant dans VisiteGuideeController::VISITES, data-visite sur la page, VisiteGuidee + bouton qui appelle relancer(). Mémorisation users.preferences.visites_vues. Pas de migration, pas de localStorage. Monter la version pour reproposer. Le composant saute déjà une cible absente.

## Mapping

| Écran | Identifiant | Bouton | Ancres |
|---|---|---|---|
| Liste Foncier › Parcelles | foncier.parcelles | ? à côté du titre | chiffres, qui, recherche, filtre-colonne, filtre, statut, destination, urbanisme-valeur, personnaliser, ajouter, ouvrir |
| Fiche parcelle | foncier.parcelle | ? à côté du retour | entete, modifier, filiation, acheter, historique, identification, surfaces, urbanisme, proprietaires, complements, plan, actes, navigation |
| Tuile « Où en est une facture ? » | accueil.facture | ? dans la tuile | champs, resultats |

Les deux premières étapes de la liste et la première et la dernière de la tuile n’ont pas d’ancre : bulle centrée.

## SYNTHÈSE

Le mécanisme de #1817 est repris : VisiteGuidee.vue, POST /visites/vue, préférence partagée par HandleInertiaRequests. Trois identifiants indépendants, version 1. etapesAncrees retire une étape dont la cible n’est pas dans le document. La première référence de liste seule porte ouvrir. L’entonnoir du menu Filtre (fermé au chargement) n’est pas ancré, pour ne pas voler l’étape « Filtrer ». La zone de résultats de la tuile est toujours dans le document, même sans recherche. Aucune migration. Le comportement de recherche, des montants et des droits n’est pas modifié.

Bundles : Index-COAV28YS.js (liste), Show-1bIAgxp8.js (fiche), Index-CLBDruAh.js (accueil), VisiteGuidee-Chw_5Xhz.js, VisiteGuidee-DxYNRMfR.css, app-MglKn64r.js. DepotFactureSaisieForm-FtL6ZVhE.js inchangé, cie_effacement_confirme = 1.

## DÉPLOIEMENT-TEST

git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync

Pas de migration, pas de route nouvelle.

1. Premier passage sur chaque écran : la visite démarre. Second passage : non.
2. « ? » relance.
3. Sans droit de gestion, colonnes masquées, ou parcelle sans acte : les étapes correspondantes sont sautées.
4. Sous 768 px, la bulle reste en bas de l’écran.

## LEÇON

Une visite par écran, identifiant stable. Ne pas poser le même data-visite sur un panneau fermé qui précède l’ancre voulue dans le document : querySelector prend le premier. Ne pas poser ouvrir sur chaque ligne. Ne pas stocker en localStorage. Ne monter la version que si le texte doit être revu par ceux qui l’ont déjà passée.
