fix : ancrer la clôture dynamique des congés sur le solde bootstrap
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>
This commit is contained in:
@@ -68,6 +68,7 @@ Etat implementation:
|
||||
- la table est creee
|
||||
- le calcul de synthese conges lit en priorite `opening_days/opening_saturdays` de cette table quand une ligne existe pour `(employee, rule_code, year)`
|
||||
- si aucune ligne n'existe, le calcul reste base sur le report dynamique N-1
|
||||
- **le report dynamique (`LeaveBalanceComputationService::computeDynamicClosingForYear`, qui alimente le solde d'ouverture de l'exercice suivant) ancre lui aussi sur cette table** : pour chaque exercice de sa boucle, si une ligne bootstrap existe il part de `opening_days/opening_saturdays` (et ajoute l'offset `taken_days/taken_saturdays`) au lieu de recalculer depuis l'embauche. Sans cet ancrage, la clôture d'un exercice consulté en avance (ex. exercice suivant) cumulerait une année pleine d'acquisition par exercice antérieur à la mise en service — aucune absence historique n'étant saisie (cas Aurore : 88 jours au lieu de 31).
|
||||
- la commande `app:leave:rollover` calcule aussi le report dynamique N-1 si la ligne N-1 n'est pas encore persistée (pas de reset a 0 par defaut)
|
||||
|
||||
### Definition des colonnes
|
||||
|
||||
Reference in New Issue
Block a user