| 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é Reviewed-on: #20 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
4.2 KiB
Afficher l'en-cours d'acquisition « net / brut » sur l'onglet Congés
Date : 2026-05-26 Ticket : SIRH-32 (retour RH) Statut : design validé
Contexte
Sur l'onglet Congés de la fiche employé, la case « En cours d'acquisition » affiche un seul nombre. Ce nombre est l'en-cours net : quand un salarié pose des congés en anticipé (au-delà de son report acquis), ces jours sont imputés sur la génération de l'exercice et réduisent l'en-cours affiché.
La RH a besoin de voir aussi le total brut généré sur l'exercice à ce jour, afin de connaître ce qui a réellement été acquis indépendamment de ce qui a déjà été consommé en anticipé.
Nouveau format demandé : {net} / {brut} — ex. 14,50 / 17,50.
Définitions (non-forfait, CDI_CDD_NON_FORFAIT)
Dans EmployeeLeaveSummaryProvider::computeYearSummary :
generatedDays/generatedSaturdays= acquisition brute de l'exercice à ce jour (prorata mensuel, capée à aujourd'hui pour l'exercice courant).remainingToImpute(+ samedis) = congés pris au-delà du report acquis, imputés sur la génération.accruingDays(champ existant, numérateur) =(generatedDays − remainingToImpute) + (generatedSaturdays − remainingSaturdaysToImpute)→ en-cours net.- Nouveau :
accruingDaysTotal(dénominateur) =generatedDays + generatedSaturdays→ brut généré à ce jour, avant imputation des congés anticipés.
Invariant : accruingDays ≤ accruingDaysTotal. La différence = jours pris en
anticipé imputés sur la génération.
Côté forfait (FORFAIT_218) : pas d'acquisition « en cours »
(accruingDays = 0) → accruingDaysTotal = 0.
Changements
1. Backend
EmployeeLeaveSummaryProvider::computeYearSummary: ajouteraccruingDaysTotalau tableau retourné.- Branche non-forfait :
generatedDays + generatedSaturdays. - Branche forfait :
0.0.
- Branche non-forfait :
App\ApiResource\EmployeeLeaveSummary: nouvelle propriété publiquefloat $accruingDaysTotal = 0.0.- Le provider recopie
yearSummary['accruingDaysTotal']dans$summary->accruingDaysTotal(à côté deaccruingDays). Sur retour anticipé (yearSummary === null), la valeur reste0.0(commeaccruingDays).
2. Frontend
frontend/services/dto/employee-leave-summary.ts: ajouteraccruingDaysTotal: number.frontend/components/employees/LeaveTab.vue, case « En cours d'acquisition » :- Non-forfait : afficher
{{ formatCount(accruingDays) }} / {{ formatCount(accruingDaysTotal) }}. - Forfait : inchangé (afficher
accruingDaysseul, soit0). - Réutiliser
isForfaitRule(déjà présent) pour la condition.
- Non-forfait : afficher
3. Documentation
doc/leave-tab.md: décrire le formatnet / brutde l'en-cours d'acquisition.frontend/data/documentation-content.ts: note expliquant que l'en-cours affichenet / total brut acquiset que les congés anticipés réduisent le net.
Comportements conservés
- Quand aucun congé anticipé n'est pris : numérateur = dénominateur
(ex.
17,50 / 17,50). C'est voulu — la RH veut le total visible en permanence. - Les autres compteurs du header (Année acquis, Pris, Reste à prendre, Samedis, N-1…) sont inchangés.
- Aucun changement de calcul :
accruingDaysTotalest une exposition d'une valeur déjà calculée (generatedDays + generatedSaturdays), pas une nouvelle règle métier.
Hors périmètre
- Onglet RTT (pas d'en-cours d'acquisition).
- Écran Récap congés (pas de colonne en-cours d'acquisition).
- Header de la fiche employé (présence / jours à travailler) — inchangé.
- Affichage de la fraction pour le forfait (pas d'en-cours → non pertinent).
Tests
- Backend : ajouter un test sur
computeYearSummary(via le harnais de tests existant du provider, par réflexion) vérifiant queaccruingDaysTotal=generatedDays + generatedSaturdayset≥ accruingDaysdans un cas avec congés anticipés. À défaut de chemin testable simple (collaborateursfinal), couvrir l'arithmétique exposée et vérifier manuellement l'affichage. - Pas de harnais de test frontend ; vérification manuelle de l'affichage
net / brut(non-forfait) et0(forfait).