feat(leave) : add prorated forfait repo days helper

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-20 16:04:00 +02:00
parent 907eb1a277
commit 2718d05cfe
2 changed files with 56 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ use Throwable;
final readonly class EmployeeLeaveSummaryProvider implements ProviderInterface
{
private const int FORFAIT_TARGET_WORKED_DAYS = 218;
private const int FORFAIT_STANDARD_CP_DAYS = 25;
private const float CDI_NON_FORFAIT_STANDARD_ACQUIRED_DAYS = 25.0;
private const float CDI_NON_FORFAIT_STANDARD_ACQUIRED_SATURDAYS = 5.0;
private const float CDI_NON_FORFAIT_STANDARD_ACCRUAL_PER_MONTH = self::CDI_NON_FORFAIT_STANDARD_ACQUIRED_DAYS / 12.0;
@@ -768,6 +769,23 @@ final readonly class EmployeeLeaveSummaryProvider implements ProviderInterface
];
}
/**
* Jours de repos forfait proratisés sur la fraction de jours ouvrés couverte.
*
* Repos année pleine = jours_ouvrés_année 218 (cible travaillée) 25 (CP standard).
* Pour 2026 : 252 218 25 = 9, proratisés au ratio jours_ouvrés_période / jours_ouvrés_année.
*/
private function computeProratedForfaitRepoDays(int $businessDaysYear, int $businessDaysPeriod): float
{
if ($businessDaysYear <= 0) {
return 0.0;
}
$repoDaysYear = max(0, $businessDaysYear - self::FORFAIT_TARGET_WORKED_DAYS - self::FORFAIT_STANDARD_CP_DAYS);
return $repoDaysYear * $businessDaysPeriod / $businessDaysYear;
}
/**
* @param null|array<string, string> $publicHolidays pre-built map (built if null)
*/