Ajoute les jours fériés, l'astreinte week-end 0h-0h et les ratios éditables

- Bouton F : marque un jour férié (dû 0, sans consommer de congé) ; il
  qualifie les règles « ferie » et étend la fenêtre d'astreinte du jour.
- Samedi, dimanche et fériés : l'astreinte compte de 0h00 à 0h00 ; un jour
  AS déclaré garde sa borne du lendemain 18h pour ne pas tronquer les
  interventions nocturnes.
- Ratios d'astreinte éditables à la main dans Réglages (nom, jours, fenêtre,
  ratio), avec ajout/suppression de règles et validation.
- Un quart d'heure entamé par deux interventions qui se suivent n'est compté
  qu'une fois : les lignes d'événements somment au total du jour.
- Décompte mieux expliqué dans l'interface : quarts d'horloge (:00/:15/:30/:45),
  fenêtre couverte par événement, exemple chiffré.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
Jacquin Antoine
2026-09-08 23:30:15 +02:00
parent 23271d736d
commit dc80e81db2
11 changed files with 599 additions and 111 deletions

View File

@ -171,11 +171,15 @@ docker compose run --rm pointeuse pytest -v
---
## Congés
## Congés & jours fériés
Trois boutons par ligne : **MA** (matin), **AM** (après-midi), **J** (journée entière).\
Ils réduisent les heures dues et recalculent les préconisations **Fin cible** pour les
demi-journées restantes.
Quatre boutons par ligne : **MA** (congé matin), **AM** (congé après-midi), **J**
(journée entière) et **F** (jour férié). Les trois premiers réduisent les heures
dues et recalculent les préconisations **Fin cible** pour les demi-journées
restantes. **F** marque un jour férié (fête locale non calculée, pont...) : heures
dues nulles, aucune présence obligatoire, ligne grisée avec badge « férié » — sans
consommer de congé. Un jour marqué **F** compte aussi comme férié pour les ratios
d'astreinte (×2 en journée par défaut) et pour la fenêtre d'astreinte ci-dessous.
---
@ -183,7 +187,9 @@ demi-journées restantes.
Le bouton **AS** marque un jour d'astreinte : la période couverte va de **18:00
ce jour-là à 18:00 le lendemain** (deux astreintes consécutives se recollent sans
trou). Ce jour et son lendemain, une sous-ligne dédiée apparaît sous la ligne du
trou) — sauf **samedi, dimanche et jour férié**, qui comptent de **0h00 à 0h00**
(journée entière ; un jour AS déclaré sam/dim/férié garde sa borne du lendemain
18:00 pour ne pas tronquer les interventions nocturnes). Ce jour et son lendemain, une sous-ligne dédiée apparaît sous la ligne du
jour, pleine largeur : un menu dépliant fermé par défaut (seuls l'heure de retour
et le total restent visibles). Déplié, il offre autant de lignes que nécessaire
(**+ intervention**) sur trois colonnes : **début**, **fin** et description
@ -215,21 +221,26 @@ décompte de la semaine :
- une demi-journée entièrement couverte par le repos est considérée comme remplie.
Les heures d'astreinte ne comptent **jamais** dans les heures de semaine : elles
sont décomptées à part, par pas de 15 minutes (toute tranche entamée compte en
totalité), dans des compteurs pondérés selon le jour et l'heure. Sous le bandeau
de la semaine s'affiche le détail par événement, les totaux par compteur et le
total pondéré.
sont décomptées à part, par quarts d'heure de l'horloge (:00, :15, :30, :45) —
toute tranche entamée compte en totalité, et un quart partagé par deux
interventions qui se suivent ou se chevauchent n'est compté **qu'une fois**
(attribué à la première, les lignes d'événements somment au total du jour) — dans
des compteurs pondérés selon le jour et l'heure. Sous le bandeau de la semaine
s'affiche le détail par événement, les totaux par compteur et le total pondéré.
Par défaut : **Nuit** (20:00→08:00, tous types de jours) ×1,5 ; **Journée** (semaine
Lun-Ven, 08:00→20:00) ×1 ; **Samedi** (08:00→20:00) ×1,5 ; **Dimanche / férié**
(08:00→20:00) ×2. Ces ratios sont affichés sur la page **Réglages**. Les jours
fériés français (fixes + Pâques, Ascension, Pentecôte)
sont calculés automatiquement.
(08:00→20:00) ×2. Les jours fériés français (fixes + Pâques, Ascension,
Pentecôte) sont calculés automatiquement, et s'ajoutent les jours marqués **F**.
Ces règles sont ajustables dans `data/config.json`, clé `astreinte_facteurs` :
chaque règle porte un `nom`, les `jours` concernés (`semaine`, `sam`, `dim`,
`ferie`), un `debut`, une `fin` et un `facteur`. Une tranche qui ne correspond à
aucune règle est rangée dans « Autre » avec un facteur ×1.
Ces règles sont **éditables à la main** sur la page **Réglages** (section « Ratios
des heures d'astreinte ») : nom, types de jours, fenêtre horaire et ratio de chaque
règle, ajout et suppression de lignes. La première règle qui couvre un quart
gagne — place les fenêtres spécifiques avant les générales. Elles restent aussi
ajustables dans `data/config.json`, clé `astreinte_facteurs` : chaque règle porte
un `nom`, les `jours` concernés (`semaine`, `sam`, `dim`, `ferie`), un `debut`,
une `fin` et un `facteur`. Une tranche qui ne correspond à aucune règle est rangée
dans « Autre » avec un facteur ×1.
Les événements ne s'appliquent que les jours qualifiés (astreinte ou lendemain) :
partout ailleurs ils sont ignorés. Les colonnes **Astreinte** (brut), **Astreinte