diff --git a/CLAUDE.md b/CLAUDE.md index efb07e5..2f171c3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -80,9 +80,9 @@ ## Onglet RTT (fiche employé) - Tableau hebdomadaire (`frontend/components/employees/RttTab.vue`) — exercice fixe Juin(N-1)→Mai(N). Onglet **masqué pour les FORFAIT** (`showRttTab`). -- **Sélecteur d'année** sous le tableau dans la zone scrollable. Même mécanique que l'onglet Congés : borne haute = exercice suivant (courant + 1) sur phase ouverte, double plancher `max(floor_contrat, floor_rttStartDate)`. Format unique : `Juin 2025 → Mai 2026`. +- **Sélecteur d'année** sous le tableau dans la zone scrollable. Double plancher `max(floor_contrat, floor_rttStartDate)`. Borne haute = exercice courant : **contrairement à l'onglet Congés, le RTT ne propose PAS l'exercice suivant** (consulter un exercice RTT à venir — heures non saisies, rien à payer — n'a pas de sens ; cf. `availableRttYears`). Format unique : `Juin 2025 → Mai 2026`. - Changement d'année → recharge via `useEmployeeRtt.setSelectedRttYear(year)` (`getEmployeeRttSummary?year=YYYY`). `EmployeeRttSummary.rttStartDate` est déjà exposé (champ existant) — il sert à la fois au floor du sélecteur et au masquage des lignes Report avant la mise en service. -- Sur un exercice autre que l'exercice courant (passé ou futur), le bouton **+ Payer les RTT** est désactivé (pas de paiement rétroactif ; rien à payer sur un exercice futur). +- Sur un exercice passé, le bouton **+ Payer les RTT** est désactivé (pas de paiement rétroactif). - Doc : `doc/rtt-tab.md`. ## Vue contrat (sélecteur de phase) diff --git a/doc/rtt-tab.md b/doc/rtt-tab.md index 9d014e2..4eb9908 100644 --- a/doc/rtt-tab.md +++ b/doc/rtt-tab.md @@ -21,7 +21,7 @@ Toujours **Juin (Y-1) → Mai (Y)**. Le champ `EmployeeRttSummary.year` correspo Position : sous la table, à l'intérieur de la zone scrollable, à gauche. Plage proposée : -- du plus récent au plus ancien. La borne haute est l'exercice **suivant** (exercice courant + 1) sur une phase ouverte (cohérent avec l'onglet Congés) ; pour une phase clôturée, elle reste l'exercice de fin de phase ; +- du plus récent (= exercice courant) au plus ancien. Contrairement à l'onglet Congés, le RTT **ne propose pas** l'exercice suivant (consulter un exercice RTT à venir n'a pas de sens) ; pour une phase clôturée, la borne haute reste l'exercice de fin de phase ; - **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) @@ -32,9 +32,9 @@ 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 éditions hors exercice courant +## Verrouillage des éditions sur exercices passés -Quand `selectedYear !== currentYear` (consultation d'un exercice **différent de l'exercice courant**, passé ou futur), 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é ; sur un exercice futur, il n'y a rien à payer. +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. diff --git a/frontend/composables/useEmployeeRtt.ts b/frontend/composables/useEmployeeRtt.ts index f5f364d..5fe4a55 100644 --- a/frontend/composables/useEmployeeRtt.ts +++ b/frontend/composables/useEmployeeRtt.ts @@ -35,11 +35,12 @@ export const useEmployeeRtt = ( // Plage = exercices intersectant la phase. const phaseStartYear = computeRttYearForDate(new Date(`${phase.startDate}T00:00:00`)) - // Borne haute : fin de phase si clôturée ; sinon l'exercice SUIVANT (courant + 1), - // pour rester cohérent avec le sélecteur de l'onglet Congés. + // Borne haute : fin de phase si clôturée ; sinon l'exercice courant. + // Contrairement à l'onglet Congés, on NE propose PAS l'exercice suivant en RTT : + // consulter un exercice RTT à venir (heures non saisies, rien à payer) n'a pas de sens. const maxYear = phase.endDate ? computeRttYearForDate(new Date(`${phase.endDate}T00:00:00`)) - : currentRttYear.value + 1 + : currentRttYear.value // Hard floor : rttStartDate (env RTT_START_DATE) — pas d'historique avant. let dataFloor: number | null = null diff --git a/frontend/data/documentation-content.ts b/frontend/data/documentation-content.ts index acfd49f..e04bbd0 100644 --- a/frontend/data/documentation-content.ts +++ b/frontend/data/documentation-content.ts @@ -537,8 +537,7 @@ export const documentationSections: DocSection[] = [ title: 'Consulter un exercice passé', requiredLevel: 'admin', blocks: [ - { type: 'paragraph', content: 'Un sélecteur d\'exercice est disponible en bas du tableau RTT (zone scrollable, à gauche). Il permet de consulter l\'exercice suivant ainsi que les exercices passés (Juin → Mai). La plage proposée part de l\'exercice suivant et remonte jusqu\'au plus récent entre (a) le premier exercice où l\'employé avait un contrat ouvert et (b) l\'exercice de mise en service du logiciel.' }, - { type: 'note', content: 'Sur l\'exercice suivant, le report N-1 affiché est provisoire tant que l\'exercice courant n\'est pas clôturé.' }, + { type: 'paragraph', content: 'Un sélecteur d\'exercice est disponible en bas du tableau RTT (zone scrollable, à gauche). Il permet de consulter les exercices passés (Juin → Mai). La plage proposée part de l\'exercice courant et remonte jusqu\'au plus récent entre (a) le premier exercice où l\'employé avait un contrat ouvert et (b) l\'exercice de mise en service du logiciel. Contrairement à l\'onglet Congés, l\'onglet RTT ne propose pas l\'exercice suivant.' }, { type: 'note', content: 'Sur un exercice passé, le bouton « + Payer les RTT » est désactivé. Aucun paiement rétroactif n\'est autorisé pour préserver la cohérence du report N-1.' }, ], },