Niveau configurable via LOG_LEVEL (défaut DEBUG). Les erreurs de config JSON invalide remontent maintenant un message clair (fichier + position) au lieu d'un JSONDecodeError brut.
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.
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
cp data/config.example.json data/config.json # à adapter à ton domaine
docker compose up -d
Ouvre 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é — copie-le en data/config.json et adapte-le.
Configuration
data/config.json (voir data/config.example.json) :
{
"heures_jour": 7.8,
"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.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
