Met à jour le README : Principe, comptes, pages, présence/ntfy

La section Principe décrivait un rattrapage répandu sur matin+après-midi,
alors qu'il ne touche plus que les départs du soir depuis b9a75ff.
Ajoute aussi ce qui manquait : auth par compte, pages Statistiques/
Journaux/export, webhooks de présence et notifications ntfy, et
force_secure_cookies dans Configuration.
This commit is contained in:
Antoine
2026-08-20 17:43:21 +02:00
parent f3670f56fe
commit c31fcd28ec

View File

@ -33,11 +33,17 @@ La semaine cible est **39h** (7h48 / jour). Les directives imposent des plages d
Ces horaires sont réglables par utilisateur depuis la page **Réglages** de l'app (voir Ces horaires sont réglables par utilisateur depuis la page **Réglages** de l'app (voir
[Configuration](#configuration)). [Configuration](#configuration)).
Quand un écart apparaît, l'outil ne le reporte pas d'un coup sur la fin de la journée en Le matin n'est **jamais** touché : sa durée nominale est fixe, et si elle ne rentre pas
cours : il **répartit le manque à parts égales sur toutes les demi-journées restantes** avant la pause déjeuner, le surplus est reporté sur l'après-midi du même jour. Quand un
de la semaine (matin et après-midi, aujourd'hui compris), pour un rattrapage progressif écart hebdomadaire apparaît, il est **réparti uniquement sur les heures de départ du
et confortable plutôt qu'un rush le soir même. Si le rythme normal suffit déjà à rentrer soir** des demi-journées restantes (répartition égale, recalculée à chaque fois qu'un
dans les clous, aucune préconisation n'est affichée. départ atteint sa limite) :
- un **retard** repousse les départs — d'abord dans la marge de confort `depart_vise`,
puis au-delà si besoin (jusqu'à minuit) ;
- une **avance** avance les départs, mais jamais en dessous du minimum de présence de
l'après-midi.
Si le rythme normal suffit déjà à rentrer dans les clous, aucune préconisation n'est affichée.
--- ---
@ -58,6 +64,33 @@ supplémentaire moyenne à ajouter sur chacune.
--- ---
## Pages
| Page | Contenu |
|---|---|
| **Semaine courante** (`/`) | Le tableau de saisie ci-dessus, pour la semaine en cours ou une autre semaine choisie via le calendrier. |
| **Statistiques** (`/stats`) | Conformité aux plages obligatoires, ponctualité moyenne par demi-journée, distribution des horaires, graphique des soldes hebdomadaires. |
| **Journaux** (`/logs`) | Historique par utilisateur : changements de réglages, notifications ntfy envoyées, pointages de présence reçus. |
| **Réglages** (`/settings`) | Plages horaires personnelles, notifications ntfy, URLs des webhooks de présence — voir [Configuration](#configuration) et [Présence & notifications](#présence--notifications). |
| **Aide** (`/aide`) | Guide de configuration de ntfy et de l'app de présence (Automation/Tasker). |
| **Export** | Boutons **⇩ Exporter** (semaine, dans l'en-tête) et **⇩ {année}** (dans l'historique) : téléchargent un fichier `.ods`. |
---
## Comptes & connexion
Chaque personne a son propre compte, ses propres pointages, congés, réglages et jetons de
présence — tout est stocké séparément dans `data/users/<identifiant>/`.
Connexion par email + mot de passe, restreinte au domaine `allowed_email_domain` (voir
[Configuration](#configuration)). Pour un compte qui n'a pas encore de mot de passe, se
connecter avec son adresse envoie un lien (valable 24h) pour en définir un — c'est aussi
le seul moyen d'en obtenir un : il n'y a pas de "mot de passe oublié" en libre-service une
fois un mot de passe défini. La session est un cookie signé (HMAC), sans base de données
de sessions côté serveur.
---
## Lancement ## Lancement
```bash ```bash
@ -104,6 +137,9 @@ Seul `data/config.example.json` est versionné.
refusé par sécurité (anti open-redirect). **Toujours renseigner `base_url` en production.** refusé par sécurité (anti open-redirect). **Toujours renseigner `base_url` en production.**
- `mail_from` — adresse expéditrice des emails de connexion. - `mail_from` — adresse expéditrice des emails de connexion.
- `smtp` — serveur relais utilisé pour l'envoi (host, port, identifiants, TLS). - `smtp` — serveur relais utilisé pour l'envoi (host, port, identifiants, TLS).
- `force_secure_cookies` (optionnel, `false` par défaut) — force le flag `Secure` sur le
cookie de session même si la requête entrante n'est pas vue comme HTTPS par l'app
(utile derrière un reverse proxy qui termine le TLS).
Les rappels ntfy (topic, serveur, plage horaire) et les **plages horaires** (bornes de Les rappels ntfy (topic, serveur, plage horaire) et les **plages horaires** (bornes de
présence obligatoire matin/après-midi, voir [Principe](#principe), et heure de reprise présence obligatoire matin/après-midi, voir [Principe](#principe), et heure de reprise
@ -113,6 +149,20 @@ les avertissements de saisie, les stats de conformité et les préconisations de
--- ---
## Présence & notifications
La page **Réglages** fournit, par utilisateur, deux URLs à jeton unique
(`/presence/{token}/arrivee` et `/presence/{token}/depart`) — sans autre authentification,
la sécurité vient de l'imprévisibilité du jeton. Une app comme **Automation** (alternative
libre à Tasker) les appelle depuis le téléphone en entrant/sortant d'une zone (wifi,
géofence...) pour signaler l'arrivée ou le départ.
Une fois configuré, l'app peut envoyer un rappel [ntfy](https://ntfy.sh) si quelqu'un est
détecté présent sans avoir pointé son arrivée, ou parti sans avoir pointé son départ,
uniquement pendant les jours/heures de travail. Guide complet sur la page **Aide**.
---
## Tests ## Tests
```bash ```bash