# Règles Fonctionnelles SIRH Ce document centralise les règles métier actuellement implémentées dans l'application. ## 1) Utilisateurs et accès - `ROLE_ADMIN` - accès complet aux écrans d'administration - vue semaine des heures - validation RH des lignes d'heures - `ROLE_SELF` - accès limité à son périmètre personnel - Accès "Sites" (via `user_site_roles` avec rôle `SITE_ACCESS`) - accès au périmètre des sites autorisés - validation site des lignes d'heures ## 2) Contrats - Le profil de temps de travail est porté par `Contract`: - `trackingMode`: `TIME` ou `PRESENCE` - `weeklyHours` (ex: 35, 39, 4, etc.) - La nature RH est portée par période employé: - `CDI`, `CDD`, `INTERIM` - Historique des contrats employé: - table `employee_contract_periods` - un employé peut avoir plusieurs périodes ### Règles de période - `CDI`: - `endDate` doit être vide - `CDD` / `INTERIM`: - `endDate` obligatoire - `endDate` ne peut pas être antérieure à `startDate` ## 3) Heures (vue jour) - Saisie par salarié et par date: - matin / après-midi / soir - pour `PRESENCE`: demi-journées matin/après-midi - Calculs affichés: - `Jour`, `Nuit`, `Total` - Heures de nuit: - fenêtres `00:00-06:00` et `21:00-24:00` ## 4) Absences - Les absences sont stockées par jour (découpage lors de l'écriture) - Une absence peut être: - journée complète - demi-journée `AM` ou `PM` - Colonne absence (vue jour): - affiche le libellé - fond coloré selon le type d'absence - Si plusieurs absences de couleurs différentes sur le même jour: - fallback rouge ### Effet absence sur les heures - Absence `AM`: - efface les heures du matin - Absence `PM`: - efface les heures d'après-midi et du soir - Absence journée: - efface toutes les plages horaires ### Absences "comptées comme travaillées" - Si `countAsWorkedHours = true`: - `TIME`: crédit de minutes selon contrat actif du jour - `PRESENCE`: crédit d'unités (0.5 / demi-journée) ## 5) Validations des lignes d'heures - Validation RH (`isValid`) - action admin - Validation site (`isSiteValid`) - action chef de site ### Verrouillage - Ligne validée RH: - verrouillée pour modifications heures/absences - Ligne validée site: - verrouillée pour non-admin - admin peut corriger - Toute vraie modification d'une ligne: - remet `isSiteValid = false` - remet `isValid = false` - Si aucun changement réel à l'enregistrement: - les validations existantes ne sont pas altérées ## 6) Heures supplémentaires (vue semaine) - Base de calcul: - dépend du contrat actif par jour - Tranche 25%: - contrats <= 35h: de 35h à 43h - contrats >= 39h: de 39h à 43h - Tranche 50%: - au-delà de 43h - Nature `INTERIM`: - pas de bonus 25% - pas de bonus 50% - pas de total récup ## 7) Fériés - Les jours fériés sont identifiés et affichés - Règle courante: - absences bloquées sur jour férié - saisie d'heures autorisée ## 8) Impression absences (PDF) Filtres disponibles: - période `from` / `to` - sites - nature de contrat (`CDI`, `CDD`, `INTERIM`) - temps de travail (contrats de type Forfait, 35h, 39h, etc.) Tous les filtres checkbox sont cochés par défaut à l'ouverture du drawer. ## 9) Employés - Création employé: - prénom, nom, site - type de contrat (nature RH) - temps de travail - dates début/fin (selon règles nature) - Modification employé: - uniquement prénom, nom, site - pas de modification de contrat depuis ce drawer