2418836cd1
computeDynamicClosingForYear (qui produit le report d'ouverture de l'exercice suivant) ignorait la table employee_leave_balances et recalculait depuis l'embauche, sans absences historiques. Pour un exercice consulté en avance, il cumulait donc une année pleine d'acquisition par exercice antérieur à la mise en service. Cas Aurore (CDI depuis 2022, bootstrap 2026 = report 32 / pris 24) : report d'ouverture 2027 affiché à 88,39 j au lieu de 31. La vue courante était juste car le provider, lui, lit déjà le bootstrap. La clôture dynamique applique désormais la même règle que EmployeeLeaveSummaryProvider::computeYearSummary : si une ligne bootstrap existe pour l'exercice, on part de opening_days/opening_saturdays et on ajoute l'offset taken_days/taken_saturdays, au lieu du report dynamique accumulé. Vérifié sur données réelles : 88,39 -> 31,00 j. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>