From daa4bbd028a08f51d8dadb9adc3a689a67822ebb Mon Sep 17 00:00:00 2001 From: "Adrien W." Date: Sun, 20 Sep 2026 13:40:27 +0200 Subject: [PATCH] Added stats page --- README.md | 39 +++++- src/App.svelte | 10 +- src/components/DayEditor.svelte | 12 +- src/lib/router.svelte.js | 4 +- src/lib/stats.js | 123 +++++++++++++++++ src/lib/stats.test.js | 126 +++++++++++++++++ src/routes/Resume.svelte | 5 - src/routes/Settings.svelte | 7 +- src/routes/Stats.svelte | 236 ++++++++++++++++++++++++++++++++ 9 files changed, 547 insertions(+), 15 deletions(-) create mode 100644 src/lib/stats.js create mode 100644 src/lib/stats.test.js create mode 100644 src/routes/Stats.svelte diff --git a/README.md b/README.md index a7297bf..588ca75 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,10 @@ Le **Total travaillé** exclut le repas, qui reste affiché séparément dans le récapitulatif et le texte copié. Les totaux suivent le réglage d'arrondi existant. Dans **Journée**, touchez un poste dans **Postes de la journée** pour modifier -son début, sa fin, sa tâche, son client ou son type (travail, transport, repas). +son début, sa fin, sa tâche ou son client. La case **Pause déjeuner** distingue +le repas du travail : il n'y a plus de menu « Type de poste ». Le type interne +d'un transport déjà enregistré est conservé quand on corrige ses horaires ou +son libellé. Les sélecteurs d'heure ne proposent pas de date : ils conservent la date du poste. Les minutes et les boutons d'ajustement suivent l'arrondi choisi dans les réglages (1, 5, 15 ou 30 minutes). Les tâches, clients et restaurants utilisent @@ -107,7 +110,7 @@ Il suffit de changer une seule borne pour corriger le début ou la fin de la pla Les portions avant et après sont conservées avec leur tâche et leur client. Par exemple, un poste 08:00–12:00 peut devenir 08:00–09:00, une tâche oubliée 09:00–10:00, puis 10:00–12:00. -Le type **Repas** permet aussi d'ajouter une pause oubliée et de renseigner +La case **Pause déjeuner** permet aussi d'ajouter une pause oubliée et de renseigner panier ou restaurant. Pour ajouter juste après une frontière existante, choisissez le poste qui commence à cette frontière. @@ -123,6 +126,38 @@ Chaque correction est transactionnelle. Les horaires inversés, les insertions hors de la plage choisie et les formulaires devenus périmés après une autre modification sont refusés sans écriture partielle. +## Statistiques + +Ouvrez **Réglages → Consulter les statistiques**. Le bouton **Stats** de la barre +du bas n'apparaît que sur cette page ; les autres écrans gardent leurs trois +boutons habituels. La page fonctionne hors ligne et ne transmet aucune donnée. + +Les filtres couvrent tout l'historique, le mois, l'année, les 30 derniers jours +ou une plage de dates inclusive. Les journées en cours sont exclues par défaut. +L'option pour les inclure affiche des cumuls et détails provisoires. Les moyennes +de « Repères et observations », la médiane, les extrêmes et les profils par jour +de semaine restent calculés sur les seules journées terminées enregistrées. + +Les statistiques présentent : + +- Le travail hors repas, les pauses, le transport identifié, les nombres de + journées, postes, tâches et clients. +- Les heures par client et par tâche, leurs parts du travail, les nombres de + journées concernées et les détails croisés, accessibles en ouvrant une ligne. +- L'évolution par mois ou semaine, sans inventer des heures pour les jours absents. +- Les journées avec repas panier ou restaurant, les restaurants fréquentés, + les durées de pause et les journées sans pause enregistrée. Plusieurs fragments + de repas le même jour ne créent pas plusieurs journées de repas. +- Les moyennes, la médiane, les journées extrêmes, les principales concentrations + de temps par client et tâche, et le détail quotidien. +- Les clients ou restaurants non renseignés, les postes à zéro après arrondi, + les journées vides, les plages non couvertes et les chevauchements éventuels. + +Le calcul reprend l'arrondi du récapitulatif et exclut toujours le repas du travail. +Seules les données encore conservées sont analysées : les jours absents ou purgés +ne permettent pas de conclure à une absence de travail. Le transport identifié +repose sur le type enregistré, pas sur une déduction à partir du nom de la tâche. + In dev the console exposes `timelog.seed()` to generate 20 days of realistic history (useful for exercising the suggestion engine) and `timelog.wipe()` to clear it. diff --git a/src/App.svelte b/src/App.svelte index 2ab90e0..b78f250 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -6,6 +6,7 @@ import Resume from './routes/Resume.svelte'; import Settings from './routes/Settings.svelte'; import Today from './routes/Today.svelte'; + import Stats from './routes/Stats.svelte'; let ready = $state(false); @@ -54,11 +55,13 @@ {:else if view === 'today'} + {:else if view === 'stats'} + {:else} {/if} -