diff --git a/README.md b/README.md index 7977476..99c75cf 100644 --- a/README.md +++ b/README.md @@ -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 [Configuration](#configuration)). -Quand un écart apparaît, l'outil ne le reporte pas d'un coup sur la fin de la journée en -cours : il **répartit le manque à parts égales sur toutes les demi-journées restantes** -de la semaine (matin et après-midi, aujourd'hui compris), pour un rattrapage progressif -et confortable plutôt qu'un rush le soir même. Si le rythme normal suffit déjà à rentrer -dans les clous, aucune préconisation n'est affichée. +Le matin n'est **jamais** touché : sa durée nominale est fixe, et si elle ne rentre pas +avant la pause déjeuner, le surplus est reporté sur l'après-midi du même jour. Quand un +écart hebdomadaire apparaît, il est **réparti uniquement sur les heures de départ du +soir** des demi-journées restantes (répartition égale, recalculée à chaque fois qu'un +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//`. + +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 ```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.** - `mail_from` — adresse expéditrice des emails de connexion. - `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 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 ```bash