# 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) - la valeur est exposée par l'API `GET /employees/{id}/rtt-summary` via le champ `rttStartDate` (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. ## Implémentation - Composable : `frontend/composables/useEmployeeRtt.ts` - État : `selectedRttYear`, computed `currentRttYear`, `availableRttYears` - API : `setSelectedRttYear(year)`, `loadRttData()`, `resetLoaded()` - `resetLoaded()` (appelé au changement d'employé) remet `selectedRttYear = null`. - 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é) → `displayedMonthYear` pour éviter la collision avec la nouvelle prop. - Page : `frontend/pages/employees/[id].vue` - Backend : aucun changement — `EmployeeRttSummaryProvider` accepte déjà `?year=YYYY` (validation 2000–2100) et expose `rttStartDate`.