Aller au contenu

E7 - ✅ Valider les résultats Tadarida

← Retour au hub story mapping · Parcours principal : P7 - Valider les résultats Tadarida · 🟠 SHOULD (cible étirable, filet de sécurité MUST si la SAE déborde du périmètre fil rouge)

Portée : tout le travail post-Tadarida — récupérer le CSV de résultats automatiques, le passer en revue espèce par espèce, valider ou corriger chaque classification, exporter le fichier consolidé pour Vigie-Chiro. C'est la cible étirable principale : si la SAE déborde du périmètre fil rouge, c'est elle qui sert de filet de sécurité.

Les gains de productivité avancés (regroupement multi-nuits P9, bibliothèque sons de référence P10) sont sortis dans une épopée distincte E8 pour avoir un arbitrage MoSCoW plus net (E7 SHOULD vs E8 COULD).

Persona principal : Marie pour la validation simple ; Samuel pour la validation intensive sur grands volumes.

Pré-requis : E0.S5 (DAO observations + taxons), E0.S7 (reprise de validation en suspens), E2.S6 (séquences d'écoute disponibles), E4.S3 (passage déposé).

E7.S1 - Importer un CSV de résultats Tadarida et l'associer à un passage

En tant que Marie

Je veux charger dans l'application le fichier CSV des résultats Tadarida que j'ai téléchargé depuis le portail Vigie-Chiro et l'associer au bon passage

Afin de pouvoir ensuite passer en revue les classifications proposées et les valider

Critères d'acceptation :

  • Sur la fiche d'un passage au statut Déposé, un bouton « Importer les résultats Tadarida » est mis en avant.
  • Le clic ouvre un sélecteur de fichier (filtre .csv).
  • L'application détecte automatiquement le format du CSV : Brut (sortie brute Tadarida) ou Vu (déjà partiellement validé) (R17).
  • Pour chaque ligne du CSV, l'application associe l'observation à la séquence d'écoute correspondante par matching du nom de fichier.
  • Les observations dont la séquence n'existe pas dans le passage (orphelines) sont signalées dans un récapitulatif post-import (« 12 observations sur 4031 n'ont pas de séquence correspondante - vérifiez la cohérence du dépôt »).
  • Si le passage a déjà un import Tadarida actif, l'application demande confirmation : remplacer l'import existant (perd les validations en cours) ou annuler.
  • Le passage transitionne au statut Annoté Tadarida après import réussi.
  • La date d'import et le chemin du CSV source sont persistés (E0.S5).
  • Volumétrie cible : un CSV de 4 000+ observations doit s'importer en moins de 10 s sans freezer l'IHM.

Parcours rattaché : P7, étapes 1-3
Maquettes cibles : M-Vision-Tadarida (zone d'import + récapitulatif post-import)
Dépendances : E0.S5, E2.S6, E4.S3
Complexité : ★★ (simple — parsing CSV avec 2 variantes de format, bulk insert via E0.S5, matching de noms)
MoSCoW : 🟠 SHOULD


E7.S2 - Vue de validation : liste des observations + panneau de détail

En tant que Marie

Je veux voir toutes les observations importées sous forme de liste à gauche, avec un panneau de détail à droite qui se rafraîchit selon l'observation sélectionnée

Afin de pouvoir balayer rapidement les observations et avoir tout le contexte nécessaire (séquence audio, taxon proposé, probabilité) au même endroit pour décider

Critères d'acceptation :

  • L'écran de validation est divisé en deux colonnes : liste des observations à gauche (tableau triable), panneau de détail à droite.
  • Colonnes de la liste : nom du fichier de séquence, taxon Tadarida, probabilité Tadarida, statut de validation (À voir / Validée / Corrigée), commentaire (icône si présent).
  • Tri possible par chaque colonne ; tri par défaut : ordre du CSV (souvent chronologique).
  • Le panneau de détail affiche : nom du taxon proposé (avec nom latin et vernaculaire), probabilité Tadarida, fréquence médiane, lecteur audio pour la séquence (réutilise E3.S3), spectrogramme (cf. E7.S3), boutons d'action (cf. E7.S4).
  • La sélection d'une ligne déclenche le chargement immédiat du détail (idéal sous 200 ms).
  • Raccourcis clavier : ↑/↓ pour naviguer dans la liste, Espace pour lecture/pause de la séquence courante.
  • Volumétrie cible : la liste reste réactive avec 5 000+ observations (virtualisation TableView).

Parcours rattaché : P7, étapes 3-4
Maquettes cibles : M-Vision-Tadarida (layout deux colonnes liste + détail)
Dépendances : E3.S3, E7.S1
Complexité : ★★★ (moyen — TableView avec virtualisation + panneau détail synchronisé + raccourcis clavier)
MoSCoW : 🟠 SHOULD


E7.S3 - Intégrer le composant de vue audio (sonogramme + spectrogramme)

En tant que Marie ou Samuel

Je veux voir un sonogramme et un spectrogramme synchronisés de la séquence courante, avec possibilité de zoomer sur le spectrogramme

Afin de distinguer les caractéristiques discriminantes d'un cri (forme, fréquence dominante, harmoniques) qui complètent l'écoute pour prendre une décision de classification éclairée

Composant fourni

Le composant de vue audio (sonogramme + spectrogramme avec zoom) est fourni par l'équipe pédagogique. Vous ne réimplémentez pas le calcul FFT ni le rendu graphique du spectrogramme. Cette story se concentre sur l'intégration : instancier le composant, le lier au cycle de lecture audio, et synchroniser le cursor avec le player. Ce composant est réutilisé tel quel dans E3.S3 (M-Qualification).

Critères d'acceptation :

  • Le panneau de détail (E7.S2) affiche le composant audio fourni, alimenté par le chemin de la séquence courante (WAV ralenti ×10, cf. R10).
  • Le cursor de lecture est synchronisé entre le sonogramme (en haut), le spectrogramme (en bas) et le player audio.
  • Les contrôles de zoom du spectrogramme (molette ou slider, indépendants pour temps et fréquence) sont accessibles à l'utilisateur. Bouton « Reset zoom » disponible.
  • Quand l'utilisateur change de séquence, le composant se recharge proprement (pas de fuite mémoire ni de freeze).
  • Si la séquence est introuvable sur disque, le composant affiche un placeholder explicite plutôt que de planter.
  • Test d'intégration : navigation séquentielle dans 100 observations vérifie que le composant reste réactif (< 200 ms de bascule).

Parcours rattaché : P7, étape 4
Maquettes cibles : M-Vision-Tadarida (section vue audio combinée)
Dépendances : E2.S6, E7.S2, composant audio fourni par l'équipe pédagogique
Complexité : ★★★ (moyen — intégration et synchronisation, calcul FFT/rendu fourni par le composant)
MoSCoW : 🟠 SHOULD (Samuel l'a demandé en priorité ; sans elle, la validation reste possible mais se fait à l'oreille seulement, ce qui est moins fiable)


E7.S4 - Valider ou corriger le taxon d'une observation

En tant que Marie

Je veux pouvoir confirmer en un clic que la classification Tadarida est correcte, ou la corriger en saisissant un autre taxon, et accompagner ma décision d'un commentaire libre

Afin de consolider la base de données nationale Vigie-Chiro avec mes apports d'expertise

Critères d'acceptation :

  • Le panneau de détail propose deux boutons primaires : « Valider » (le taxon Tadarida est correct) et « Corriger » (saisir un autre taxon).
  • Valider : taxon observateur = taxon Tadarida et probabilité observateur renseignée à 100 % par défaut (modifiable). Statut → Validée (R15).
  • Corriger : ouvre un sélecteur de taxon (autocomplétion sur le code à 6 lettres ou nom latin/vernaculaire). À la validation, statut → Corrigée (R16).
  • Un champ texte multi-ligne permet d'ajouter un commentaire libre (ex. « pic 39 kHz, morphologie atypique »).
  • Le commentaire est persisté avec l'observation et visible dans la liste sous forme d'icône cliquable.
  • Après validation/correction, la liste passe automatiquement à l'observation suivante (avec retour visuel rapide, animation discrète).
  • Les observations non touchées par l'utilisateur (statut À voir) conservent uniquement les colonnes tadarida_* et seront exportées telles quelles (R17).
  • Bouton « Annuler ma validation » sur une observation déjà validée (revient à À voir).

Parcours rattaché : P7, étape 5
Maquettes cibles : M-Vision-Tadarida (zone d'action + sélecteur de taxon)
Dépendances : E0.S5, E7.S2
Complexité : ★★ (simple — boutons + sélecteur autocomplétion + persistance)
MoSCoW : 🟠 SHOULD


E7.S5 - Filtrer les observations par critères multiples

En tant que Samuel

Je veux pouvoir filtrer la liste des observations par taxon, par groupe taxonomique (« toutes les pipistrelles », « tous les murins »), par seuil de probabilité, ou par plage horaire

Afin de structurer ma revue en m'attaquant à un sous-ensemble cohérent à la fois (ex. « ce soir je traite tous les murins »)

Critères d'acceptation :

  • Une barre de filtres au-dessus de la liste propose : taxon (multi-select), groupe taxonomique (Pipistrelles / Murins / Noctules / etc., cf. C15), seuil de probabilité min/max, plage horaire (timestamp début/fin), statut de validation (À voir / Validée / Corrigée).
  • Les filtres se cumulent en logique ET.
  • Compteur visible : « N/M observations affichées (filtre actif) ».
  • Bouton « Réinitialiser les filtres » bien visible.
  • Les filtres actifs sont affichés sous forme de chips supprimables au-dessus de la liste.
  • Les filtres sont mémorisés en session (pas persistés entre redémarrages, sauf si combinés à E0.S7 reprise de validation).
  • Compatible avec le tri de E7.S2.

Parcours rattaché : P7, étape 6
Maquettes cibles : M-Vision-Tadarida (barre de filtres + chips au-dessus de la liste)
Dépendances : E0.S5, E7.S2
Complexité : ★★★ (moyen — composition de filtres + chips + intégration TableView)
MoSCoW : 🟠 SHOULD (utile dès qu'on a quelques centaines d'observations)


E7.S6 - Choisir le mode de validation : inventaire vs activité

En tant que Marie ou Samuel

Je veux déclarer au démarrage de ma session de validation si je veux juste produire la liste des espèces présentes (inventaire) ou si je veux quantifier l'activité (toutes les observations validées)

Afin que l'application adapte son ergonomie à mon objectif et m'évite du travail inutile

Critères d'acceptation :

  • À l'ouverture de la vue de validation pour un passage, l'application demande le mode (toggle ou modal) :
    • Mode inventaire : Marie cherche juste à savoir quelles espèces sont présentes. Une fois une espèce validée avec confiance sur une nuit, les autres détections de la même espèce sur la même nuit sont marquées automatiquement comme « secondaires » (statut spécial) et ne demandent pas de validation manuelle.
    • Mode activité : Samuel veut quantifier. Toutes les observations doivent être passées en revue.
  • Le mode choisi est persisté par passage : on peut ouvrir un passage en mode inventaire et un autre en mode activité.
  • Le mode peut être changé en cours de session (avec avertissement explicite : « Vous avez X observations marquées secondaires, elles redeviendront À voir si vous passez en mode activité »).
  • L'export Vu.csv (E7.S7) reflète le mode : en mode inventaire, les observations secondaires reprennent les valeurs Tadarida (puisque non validées manuellement, R17).
  • Documentation in-app du sens des deux modes (tooltip ou page d'aide) (R18).

Parcours rattaché : P7, Notes importantes - deux modes
Maquettes cibles : M-Vision-Tadarida (modal de choix de mode au démarrage + indicateur du mode courant)
Dépendances : E0.S5, E7.S4
Complexité : ★★ (simple — toggle + logique différenciée à la validation + ajustement de l'export)
MoSCoW : ⚪ COULD (le mode activité par défaut suffit pour le MVP ; le mode inventaire est un raffinement productivité)


E7.S7 - Exporter le fichier de résultats validés (Vu.csv)

En tant que Marie

Je veux exporter mes validations sous forme d'un fichier *_Vu.csv au format attendu par Vigie-Chiro

Afin de pouvoir le re-téléverser sur le portail et finaliser ma contribution

Critères d'acceptation :

  • Bouton « Exporter Vu.csv » dans la vue de validation, désactivé tant qu'aucune observation n'a été validée/corrigée.
  • Le fichier produit reprend la structure exacte du CSV d'observations Tadarida (cf. Expression du besoin) avec les colonnes observateur_taxon et observateur_probabilite remplies pour les observations validées/corrigées.
  • Les observations non touchées (statut À voir) conservent les colonnes Tadarida d'origine sans modification (R17).
  • Encodage CSV identique à la sortie Tadarida (séparateur ;, doubles guillemets vides """" pour les champs nuls).
  • Le fichier est nommé automatiquement au format <nom_csv_source>_Vu.csv (ex. 8a4fa…-observations_Vu.csv).
  • L'utilisateur choisit le dossier de destination via un sélecteur natif.
  • Bouton « Ouvrir le dossier » après export pour faciliter le téléversement manuel sur Vigie-Chiro.
  • Tests d'intégration : export d'un passage avec mix de Validées/Corrigées/À voir, vérification de la conformité du CSV produit (lecture round-trip).

Parcours rattaché : P7, étape 8
Maquettes cibles : M-Vision-Tadarida (bouton « Exporter Vu.csv » + modal de récapitulatif)
Dépendances : E0.S5, E7.S4
Complexité : ★★ (simple — sérialisation CSV au format défini)
MoSCoW : 🟠 SHOULD