Empêche la cible de proposer un départ déjà passé quand la semaine est en avance

La répartition de l'avance sur les départs du soir ne vérifiait que le
plancher aprem_fin, pas l'heure actuelle : sur une demi-journée en cours,
elle pouvait recommander de partir à une heure déjà écoulée.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Antoine
2026-08-06 17:22:41 +02:00
parent 205d14416a
commit 3162968bfb
2 changed files with 47 additions and 0 deletions

View File

@ -220,6 +220,16 @@ def compute_week(pointages: list[dict], conges: list[dict], heures_jour_min: int
adjs[i] -= take
left -= take
def _en_cours(jour, half: str) -> bool:
"""True si cette demi-journée est déjà commencée aujourd'hui (entrée pointée,
pas encore de sortie) : la cible ne peut alors pas retomber avant l'heure
actuelle, sinon on recommanderait un départ déjà passé."""
return (
jour["date"] == today
and bool(jour.get(f"{half}_entree"))
and not jour.get(f"{half}_sortie")
)
# Le matin propose toujours son horaire nominal (jamais ajusté par le rattrapage
# hebdomadaire) ; l'après-midi propose son horaire nominal éventuellement décalé
# par l'écart (retard ou avance) réparti ci-dessus.
@ -229,12 +239,16 @@ def compute_week(pointages: list[dict], conges: list[dict], heures_jour_min: int
# Pas de plancher matin_fin ici : le nominal est déjà borné par cap (≤ matin_fin
# - debut), donc debut + nominal ne peut pas dépasser matin_fin de lui-même.
sortie_min = s["debut"] + s["nominal"]
if _en_cours(s["jour"], "matin"):
sortie_min = max(sortie_min, now_min)
entree = f"{s['debut'] // 60:02d}:{s['debut'] % 60:02d}"
s["jour"]["cible_matin_entree"] = entree
s["jour"]["cible_matin"] = f"{sortie_min // 60:02d}:{sortie_min % 60:02d}"
for i, s in enumerate(aprem_slots):
sortie_min = max(s["debut"] + s["nominal"] + adjs[i], aprem_fin_min)
if _en_cours(s["jour"], "aprem"):
sortie_min = max(sortie_min, now_min)
entree = f"{s['debut'] // 60:02d}:{s['debut'] % 60:02d}"
s["jour"]["cible_aprem_entree"] = entree
s["jour"]["cible_aprem"] = f"{sortie_min // 60:02d}:{sortie_min % 60:02d}"