Aller au contenu

Historique enrichi de la démo et densité adaptative des graphes

Billet #352 : Historique enrichi de la démo et densité adaptative des graphes de titres
Type : Fonctionnalité / Expérience utilisateur / Visualisation de données
Composants concernés : code_source_simule/flask_app.py, code_source_simule/portfolio_metrics.py, tests/test_demo.py, tests/test_portfolio_metrics.py, tests/test_titre_detail.py, docs/tests/demo.md, docs/fr/tests/demo.md, docs/tests/stock_detail.md, docs/fr/tests/stock_detail.md, docs/llm-wiki/01_architecture/key-decisions.md, specs/021-graph-historical-density/


1. Contexte

Les pages de détail d'un titre dans la démo publique (ex. /demo/titre/JPM) n'affichaient que 2 points de données sur le graphique, liés au Snapshot History — pas assez pour montrer une tendance crédible aux visiteurs de la vitrine commerciale.

En parallèle, dans l'application sécurisée, l'historique d'un titre remonte au 1er août 2025 avec des relevés quasi quotidiens. Le graphique affichait alors un point par relevé brut, ce qui devient illisible dès qu'un titre accumule plus d'un an d'historique.

2. Objectif

  • Démo : enrichir le Snapshot History de chaque titre pour dessiner une tendance de prix crédible, tout en respectant le plafond de confidentialité déjà en place (10 relevés maximum par titre).
  • Application sécurisée : faire en sorte que le graphique s'adapte à l'ancienneté des données — plus un relevé est ancien, plus les points affichés sont espacés — sans jamais toucher au tableau « Snapshot History », qui doit continuer d'afficher 100 % des relevés bruts.

3. Ce qui a été livré

  • Historique démo enrichi : chaque titre de la démo affiche désormais 10 relevés (les 2 relevés réels existants + 8 nouveaux relevés hebdomadaires), générés par interpolation linéaire déterministe vers le prix déjà utilisé au 28 juin 2026 — aucune valeur aléatoire, pour rester parfaitement reproductible en test.
  • Densité de graphe adaptative dans l'application sécurisée, via une nouvelle fonction pure bucket_history_for_chart (code_source_simule/portfolio_metrics.py) :
    • relevés d'une année déjà terminée → un point par trimestre ;
    • relevés de l'année en cours, mais d'un trimestre déjà terminé → un point par mois ;
    • relevés du trimestre en cours, mais d'une semaine déjà terminée → un point par semaine ;
    • relevés de la semaine en cours → un point par jour disponible.
  • Lorsqu'une période groupée contient plusieurs relevés, seul le plus récent est retenu comme point représentatif ; une période sans aucun relevé ne produit jamais de point inventé.
  • Le tableau « Snapshot History » sous le graphique reste inchangé dans les deux contextes (démo et sécurisé) : il affiche toujours l'intégralité des relevés bruts, indépendamment de la densité appliquée au graphique.
  • Processus complet Spec Kit suivi de bout en bout : spécification, clarification (2 questions résolues, dont un ajustement du périmètre de 20 à 10 relevés démo pour respecter le plafond existant), plan technique, tâches, analyse de cohérence, puis implémentation test-first.
  • Documentation mise à jour : pages de rapport de tests (FR/EN) et nouvelle entrée dans le LLM Wiki (key-decisions.md).

4. Impact business

  • Vitrine plus convaincante : la démo publique montre désormais une tendance de prix crédible sur chaque titre, au lieu de deux points isolés.
  • Lisibilité préservée sur le long terme : dans l'application sécurisée, un titre suivi depuis plus d'un an reste lisible sur son graphique, sans perte d'aucune donnée brute (le tableau reste la source de vérité complète).

5. Validation et statut

  • Suite de tests complète au vert : 283/283 tests passent.
  • Couverture du code applicatif : 79.42 % (code_source_simule/*), en hausse par rapport à la mesure précédente.
  • Score qualité global recalculé : 90/100.
  • Cas de test dédiés ajoutés : tc-demo15, tc-demo16, tc-demo17 (démo), tc-hold03 mis à jour et tc-hold03b (application sécurisée), tc-bucket01 à tc-bucket08 (fonction de densité, incluant les cas de reclassement automatique aux frontières de trimestre et de semaine).
  • Rapports régénérés : coverage.xml, docs/reports/report.xml, docs/reports/report.jsonl, docs/reports/coverage.xml, docs/reports/quality_score.json.
  • Billet de traçabilité associé : #352.

6. Bilan d'utilisation de jetons

Cette implémentation complète (spécification, clarification, plan, tâches, analyse, implémentation test-first et documentation) a consommé 1 623,81 crédits Copilot AI, pour un coût de 16,24 $. Ce coût reste très marginal comparé au coût de cette livraison — spécification, code, tests et documentation bilingue — par une petite équipe de TI (PO, dev et QA).