3.8 KiB
Onglet "RTT" — fiche employé
Vue d'ensemble
L'onglet RTT de la fiche employé (frontend/components/employees/RttTab.vue) affiche un tableau hebdomadaire détaillé des heures supplémentaires accumulées et payées sur un exercice :
- bandeau de navigation par mois (chevrons gauche/droite) ;
- table semaine par semaine : Heure / Base 25% / 25% / Total 25% / Base 50% / 50% / Total 50% / Total / Cumul ;
- ligne Report (carry N-1 ou cumul mois précédents) ;
- ligne Total mois, ligne Payé, ligne Reste ;
- bouton « + Payer les RTT » dans le bandeau ;
- sélecteur d'exercice en pied de tableau.
L'onglet est masqué pour les contrats FORFAIT (filtre showRttTab dans useEmployeeDetailPage). Les FORFAIT n'accumulent pas de RTT.
Période affichée
Toujours Juin (Y-1) → Mai (Y). Le champ EmployeeRttSummary.year correspond à Y (année de fin d'exercice) ; ex. year=2026 = 01/06/2025 → 31/05/2026.
Sélecteur d'année
Position : sous la table, à l'intérieur de la zone scrollable, à gauche.
Plage proposée :
- du plus récent (= exercice courant) au plus ancien ;
- double plancher :
max(floor_historique_contrat, floor_data_start_date)- floor_historique_contrat : dérivé de
employee.contractHistory[].startDate— premier exercice où l'employé avait un contrat ouvert - floor_data_start_date : exercice contenant
RTT_START_DATE(env, ex.2026-02-23→ exercice 2026)
- floor_historique_contrat : dérivé de
- la valeur est exposée par l'API
GET /employees/{id}/rtt-summaryvia le champrttStartDate(déjà existant — mais peuplé uniquement quand la date tombe dans l'exercice retourné, donc le composable utilise la première réponse pour borner la plage). - format unique :
Juin 2025 → Mai 2026,Juin 2024 → Mai 2025…
Comportement :
- changer d'exercice recharge
getEmployeeRttSummary?year=YYYY(le backend valide 2000–2100) ; - la table redéploie les semaines de l'exercice sélectionné, navigation par mois conservée.
Verrouillage des édition sur exercices passés
Quand selectedYear !== currentYear (consultation d'un exercice antérieur), le bouton + Payer les RTT est désactivé. Justification : un paiement rétroactif sur un exercice clos décalerait les soldes courants et le report N-1 calculé.
La consultation reste possible, l'édition non.
Sélecteur de phase de contrat
L'onglet RTT est visible quand la phase de contrat sélectionnée n'est pas FORFAIT (et non pas le contrat courant). Concrètement, sur un employé passé en FORFAIT après une période 39h :
- En vue
FORFAIT(défaut), l'onglet RTT est masqué. - En vue
39h(phase passée sélectionnée via le pickerVue contrat), l'onglet RTT redevient visible avec les exercices Juin→Mai bornés à la phase.
Le bouton + Payer les RTT est activé uniquement sur le dernier exercice de la phase passée (l'exercice contenant phase.endDate). Les exercices antérieurs sont en lecture seule.
Cf. doc/contract-phase-view.md pour les détails complets.
Implémentation
- Composable :
frontend/composables/useEmployeeRtt.ts- État :
selectedRttYear, computedcurrentRttYear,availableRttYears - API :
setSelectedRttYear(year),loadRttData(),resetLoaded() resetLoaded()(appelé au changement d'employé) remetselectedRttYear = null.
- État :
- Composant :
frontend/components/employees/RttTab.vue- Props :
selectedYear,availableYears,currentYear - Event :
update-selected-year - Renommage
currentYear(computed local de l'année du mois affiché) →displayedMonthYearpour éviter la collision avec la nouvelle prop.
- Props :
- Page :
frontend/pages/employees/[id].vue - Backend : aucun changement —
EmployeeRttSummaryProvideraccepte déjà?year=YYYY(validation 2000–2100) et exposerttStartDate.