docs(leave) : document forfait mid-year entry leave calculation

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-20 16:29:38 +02:00
parent d2a9bd5191
commit 0e5661bb7f
3 changed files with 18 additions and 0 deletions

View File

@@ -59,6 +59,21 @@ Le cumul 218 jours est **par année civile**. Toute consultation FORFAIT cape :
Ex. switch 39h → FORFAIT au 01/05/2026, vue FORFAIT année 2026 → période = [01/05/2026, 31/12/2026].
#### Entrée en FORFAIT en cours d'année civile
L'**année d'entrée** (période partielle, ex. 01/05 → 31/12) ne calcule pas `max(0, businessDays 218)` (qui donnerait 0) mais :
jours_repos_année = jours_ouvrés_année 218 25
jours_repos_proratisés = jours_repos_année × (jours_ouvrés_période / jours_ouvrés_année)
congés_à_poser = jours_repos_proratisés + CP_reportés_phase_précédente
- jours ouvrés = Lun-Ven fériés en semaine (liste brute, incl. Pentecôte) ; prorata par jours ouvrés.
- `CP_reportés` = solde de la phase non-forfait précédente : jours ouvrés **nets** (acquis + en cours jours ouvrés posés) + samedis **bruts**. Un **samedi déjà posé ne réduit pas** le report (seuls les jours ouvrés posés le réduisent — règle comptable). Jours fractionnés exclus. Nouvel embauché forfait (pas de phase précédente) → 0, donc repos proratisés seuls.
- Périmètre : **uniquement l'année d'entrée**. Les années pleines suivantes et les forfaits démarrant un 1er janvier gardent le calcul 218 (→ 34).
- Détection : `EmployeeLeaveSummaryProvider::isForfaitEntryYear` ; calcul : `computeProratedForfaitRepoDays` + `resolveCarriedCpFromPriorPhase`.
Exemple Grégory BARRIBAULT (forfait 01/05/2026 après 39h, exercice 2026) : `6 repos + ~7 CP = ≈ 13 jours`.
### Phase non-forfait (35h / 39h / CUSTOM / INTERIM)
L'exercice CP est **annuel** (Juin N-1 → Mai N) et continu à travers les changements d'heures contractuelles dans le même régime non-forfait. La cap **n'applique pas** sur `from` :