Files
SIRH/docs/superpowers/specs/2026-05-26-en-cours-acquisition-net-brut-design.md
T
tristan cf2e12c8ba
Auto Tag Develop / tag (push) Successful in 9s
[#SIRH-32] Ajouter l'exercice 2026/2027 dans les congés/RTT (#20)
| 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>
2026-05-26 14:09:02 +00:00

4.2 KiB
Raw Blame History

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 : ajouter accruingDaysTotal au tableau retourné.
    • Branche non-forfait : generatedDays + generatedSaturdays.
    • Branche forfait : 0.0.
  • App\ApiResource\EmployeeLeaveSummary : nouvelle propriété publique float $accruingDaysTotal = 0.0.
  • Le provider recopie yearSummary['accruingDaysTotal'] dans $summary->accruingDaysTotal (à côté de accruingDays). Sur retour anticipé (yearSummary === null), la valeur reste 0.0 (comme accruingDays).

2. Frontend

  • frontend/services/dto/employee-leave-summary.ts : ajouter accruingDaysTotal: number.
  • frontend/components/employees/LeaveTab.vue, case « En cours d'acquisition » :
    • Non-forfait : afficher {{ formatCount(accruingDays) }} / {{ formatCount(accruingDaysTotal) }}.
    • Forfait : inchangé (afficher accruingDays seul, soit 0).
    • Réutiliser isForfaitRule (déjà présent) pour la condition.

3. Documentation

  • doc/leave-tab.md : décrire le format net / brut de l'en-cours d'acquisition.
  • frontend/data/documentation-content.ts : note expliquant que l'en-cours affiche net / total brut acquis et 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 : accruingDaysTotal est 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 que accruingDaysTotal = generatedDays + generatedSaturdays et ≥ accruingDays dans un cas avec congés anticipés. À défaut de chemin testable simple (collaborateurs final), 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) et 0 (forfait).