Files
SIRH/doc/rtt-tab.md
tristan 47f9bea57d
Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
feat : sélecteur d'exercice sur l'onglet RTT de la fiche employé
Permet de consulter les exercices passés (table hebdomadaire RTT) en
réutilisant le pattern de l'onglet Congés. Plage bornée par
max(début historique contrat, RTT_START_DATE). Bouton + Payer les RTT
verrouillé sur exercices clos. Onglet masqué pour FORFAIT (inchangé).

Backend : rttStartDate désormais toujours exposé sur EmployeeRttSummary
pour que le sélecteur conserve sa borne lors de la navigation vers un
exercice passé. Le masquage existant des lignes Report continue de
fonctionner (comparaison mois-à-mois).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 09:58:50 +02:00

3.1 KiB
Raw Blame History

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 20002100) ;
  • 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 20002100) et expose rttStartDate.