# pointeuse-optimisator Saisie des horaires de travail avec calcul en temps réel de l'heure de sortie optimale pour finir la semaine à **exactement 0h d'heures supplémentaires**. ![Interface principale](docs/screenshot.png) --- ## Démarrage rapide Avant le premier lancement, copie et adapte le fichier de config (voir [Configuration](#configuration) plus bas) : ```bash cp data/config.example.json data/config.json ``` Pour surcharger `compose.yml` localement (ports, variables d'env, volumes...) sans modifier le fichier versionné, crée un `compose.override.yml` — il est chargé automatiquement par `docker compose` et déjà ignoré par git. --- ## Principe La semaine cible est **39h** (7h48 / jour). Les directives imposent des plages de présence minimum : | Demi-journée | Plage minimale | |---|---| | Matin | 09:00 → 12:00 | | Après-midi | 14:00 → 17:00 | L'outil calcule — sans arrondi — **l'heure précise à laquelle partir** chaque jour pour que le total de la semaine tombe pile sur 39h00. --- ## Ce que tu vois dans le tableau | Colonne | Ce qu'elle dit | |---|---| | **Travaillé** | Heures effectivement saisies ce jour | | **Δ jour** | Écart par rapport aux 7h48 dus (affiché dès qu'une heure est enregistrée) | | **Δ sem.** | Solde cumulé depuis lundi — visible uniquement quand la journée est complète et sans jour manquant | | **Fin cible** | L'heure de sortie aprem pour finir la semaine à 0h sup | Les plages qui ne respectent pas les minimums sont signalées en rouge dès la saisie. --- ## Lancement ```bash docker compose up -d ``` Ouvre [http://localhost:8000](http://localhost:8000). Les données (pointages, congés, comptes) sont stockées dans `data/` et ignorées par git.\ Seul `data/config.example.json` est versionné. --- ## Configuration `data/config.json` (voir `data/config.example.json`) : ```json { "heures_jour": 7.8, "log_level": "DEBUG", "allowed_email_domain": "exemple.fr", "mail_from": "no-reply@exemple.fr", "smtp": { "host": "smtp.exemple.fr", "port": 587, "user": "no-reply@exemple.fr", "password": "change-moi", "use_tls": true } } ``` - `heures_jour` — `7.8` = 7h48 = 39h ÷ 5 jours. Modifier cette valeur recentre tous les calculs. - `log_level` — `DEBUG`, `INFO`, `WARNING` ou `ERROR`. Contrôle la verbosité des logs (`docker logs`). - `allowed_email_domain` — seules les adresses de ce domaine peuvent se connecter. - `mail_from` — adresse expéditrice des emails de connexion. - `smtp` — serveur relais utilisé pour l'envoi (host, port, identifiants, TLS). --- ## Congés Trois boutons par ligne : **MA** (matin), **AM** (après-midi), **J** (journée entière).\ Ils réduisent les heures dues et recalculent la **Fin cible** pour les jours restants. --- ## Stack `FastAPI` · `HTMX` · `Jinja2` · fichiers JSON · `Docker`