[#SIRH-32] Ajouter l'exercice 2026/2027 dans les congés/RTT #20

Merged
tristan merged 16 commits from feature/SIRH-32-ajouter-l-exercice-2026-2027-dans-les-conges-rtt into develop 2026-05-26 14:09:03 +00:00
Owner
Numéro du ticket Titre du ticket

Description de la PR

Modification du .env

Check list

  • Pas de régression
  • TU/TI/TF rédigée
  • TU/TI/TF OK
  • CHANGELOG modifié
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [x] Pas de régression - [x] TU/TI/TF rédigée - [x] TU/TI/TF OK - [ ] CHANGELOG modifié
tristan self-assigned this 2026-05-26 09:48:36 +00:00
tristan added 10 commits 2026-05-26 09:48:36 +00:00
Le watch sur le changement de phase (useEmployeeLeave/useEmployeeRtt)
remettait selectedYear à null pendant l'await du chargement eager du
récap congés, à la résolution initiale de la phase (undefined → phase
courante). Comme le chargement eager marquait ensuite leaveDataLoaded=true
et que le watch de useEmployeeDetailPage ignore la résolution initiale
(oldId === undefined), l'année restait à null et le <select> s'affichait
vide. L'onglet RTT y échappait car chargé en lazy.

Ajoute le garde oldId === undefined dans les watchs des deux composables,
même convention que useEmployeeDetailPage : la résolution initiale est
ignorée, seul un vrai changement de phase réinitialise l'année.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sur une phase de contrat ouverte, la borne haute des sélecteurs d'exercice
(availableLeaveYears / availableRttYears) passe de l'exercice courant à
l'exercice suivant (courant + 1), pour consulter en avance les congés/RTT
posés sur l'exercice à venir. Phase clôturée : borne inchangée (fin de phase).
Sélection par défaut et verrouillage des éditions inchangés.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Suite à l'ajout de l'exercice suivant dans les sélecteurs, isHistoricalYear
(selectedYear !== currentYear) s'applique aussi à l'exercice futur. Les docs
parlaient uniquement d'exercice passé/antérieur ; clarifié pour couvrir passé
ET futur.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
Consulter un exercice RTT à venir n'a pas de sens (heures non saisies,
rien à payer). La borne haute du sélecteur RTT redevient l'exercice
courant sur une phase ouverte ; l'onglet Congés conserve l'exercice
suivant. Docs et verrouillage RTT réalignés (passé uniquement).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
LeaveRolloverCommand::resolveCarry se fiait au closing_days stocké quand
une ligne existait pour l'exercice précédent. Or closing_days n'est jamais
recalculé après création (toujours = opening, ou 0 sur un bootstrap), donc
le report propageait l'ouverture sans créditer l'acquisition de l'année.
Cas Aurore : bascule 2026->2027 aurait reporté 0 au lieu de 31.

resolveCarry calcule désormais toujours la clôture réelle via
computeDynamicClosingForYear (bootstrap-aware, intègre acquisition + samedis
+ fractionnés − pris), puis fige ce résultat dans closing_days de l'exercice
qui se termine. Vérifié sur données réelles : report 2027 d'Aurore = 31,00 j
/ 5,00 samedis (au lieu de 0).

Corrections manuelles préservées : le cron reste idempotent (ne réécrit pas
une ligne existante) et le bon levier de correction devient opening_days
(propagé par le recalcul), pas closing_days.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tristan added 6 commits 2026-05-26 14:08:37 +00:00
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Repasse sur une interpolation simple (au lieu de <template v-if>) : le mode
condense de Vue supprimait l'espace avant le <template>, d'où le « :17,50 »
collé. Aligne le rendu sur les autres compteurs du bandeau et retire le
suffixe « Jours » sur cette case.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tristan merged commit cf2e12c8ba into develop 2026-05-26 14:09:03 +00:00
tristan deleted branch feature/SIRH-32-ajouter-l-exercice-2026-2027-dans-les-conges-rtt 2026-05-26 14:09:03 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/SIRH#20