diff --git a/.env b/.env index e6ac054..54c5f51 100644 --- a/.env +++ b/.env @@ -38,6 +38,9 @@ DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&ch ###> app ### RTT_START_DATE=2026-02-23 +# Comma-separated list of public holiday labels to exclude from the government API response +# (typically the "journée de solidarité" worked in many companies) +EXCLUDED_PUBLIC_HOLIDAYS="Lundi de Pentecôte" ###< app ### ###> nelmio/cors-bundle ### diff --git a/CLAUDE.md b/CLAUDE.md index 90a8cef..53ac590 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,6 +35,13 @@ - Absences with `countAsWorkedHours=true`: credit minutes (TIME) or nothing (PRESENCE) - Driver periods (`isDriver=true` on `EmployeeContractPeriod`): separate screen `/driver-hours`, uses `dayHoursMinutes`/`nightHoursMinutes` + meal/overnight flags on `WorkHour` +## Fériés +- Source : API gouv via `PublicHolidayService` (cache 30j) +- Exclusions : env `EXCLUDED_PUBLIC_HOLIDAYS` (CSV de libellés), défaut `"Lundi de Pentecôte"`. Le filtre s'applique après le cache, côté service, donc frontend et calculs backend voient la même liste. +- Écrans Heures / Heures Conducteurs (vue jour) : le nom du férié est affiché en badge `#b3e5fc` avec icône `mdi:calendar-star` dans la colonne Absence (distinct du pill absence). Bouton "Modifier" absence masqué sur férié (comme pour les formations). +- Création/édition d'absence bloquée sur un férié +- Saisie d'heures (ou de jours de présence) autorisée sur un férié — nécessaire pour éviter un déficit hebdomadaire (la référence hebdo n'est pas réduite par les fériés) + ## Validation Rules - `isValid` (RH): locks line for everyone (admin can only untoggle validation) - `isSiteValid` (site manager): locks for non-admin, admin can still edit diff --git a/config/services.yaml b/config/services.yaml index 511f83d..92dac45 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -25,6 +25,7 @@ services: App\Service\PublicHolidayService: arguments: $holidayUrl: '%env(HOLIDAY_URL)%' + $excludedLabels: '%env(default::EXCLUDED_PUBLIC_HOLIDAYS)%' App\Service\Rtt\RttRecoveryComputationService: arguments: diff --git a/deploy/docker/.env.example b/deploy/docker/.env.example index bc2bdec..d66befc 100644 --- a/deploy/docker/.env.example +++ b/deploy/docker/.env.example @@ -23,3 +23,4 @@ DEFAULT_URI=https://sirh.malio-dev.fr APP_SHARE_DIR=var/share RTT_START_DATE=2026-02-23 HOLIDAY_URL="https://calendrier.api.gouv.fr/jours-feries/" +EXCLUDED_PUBLIC_HOLIDAYS="Lundi de Pentecôte" diff --git a/doc/functional-rules.md b/doc/functional-rules.md index 0f3d26b..e9bdf66 100644 --- a/doc/functional-rules.md +++ b/doc/functional-rules.md @@ -161,10 +161,14 @@ Documents complementaires: ## 7) Fériés - Les jours fériés sont identifiés et affichés +- Source: API `calendrier.api.gouv.fr/jours-feries/` via `PublicHolidayService` (cache 30j) +- Exclusions configurables: variable d'env `EXCLUDED_PUBLIC_HOLIDAYS` (liste de libellés séparés par virgules). Par défaut `"Lundi de Pentecôte"` — journée de solidarité généralement travaillée. Le filtre s'applique à tous les consommateurs (frontend + calculs backend) en amont du retour du service. - Onglet congés: jours fériés affichés sur le calendrier avec fond `rgb(179, 229, 252)` et nom au survol +- Écran Heures et Heures Conducteurs (vue jour): le nom du férié est affiché dans la colonne Absence sous forme de pill (fond `#b3e5fc`, icône `mdi:calendar-star`), distinct du pill absence - Règle courante: - - absences bloquées sur jour férié - - saisie d'heures autorisée + - absences bloquées sur jour férié (création/édition) — bouton "Modifier" masqué comme pour les formations + - saisie d'heures ou de jours de présence autorisée — les heures saisies comptent normalement dans le total hebdo et le calcul RTT + - la référence hebdomadaire n'est pas réduite par un férié: un salarié qui ne saisit rien sur un férié est en déficit de la journée correspondante ## 8) Impression absences (PDF) diff --git a/frontend/components/driver-hours/DriverHoursDayView.vue b/frontend/components/driver-hours/DriverHoursDayView.vue index 3c4783e..89989e3 100644 --- a/frontend/components/driver-hours/DriverHoursDayView.vue +++ b/frontend/components/driver-hours/DriverHoursDayView.vue @@ -56,19 +56,31 @@

-

- {{ getRowAbsenceLabel(employee.id) || '—' }} -

+
+

+ {{ getRowAbsenceLabel(employee.id) || '—' }} +

+

+ + {{ holidayLabel || 'Férié' }} +

+