148 lines
4.0 KiB
Markdown
148 lines
4.0 KiB
Markdown
# 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
|
|
|
|
## 10) Notifications
|
|
|
|
- Icône cloche en topbar:
|
|
- badge = nombre de notifications non lues
|
|
- ouverture panneau = liste des non lues
|
|
- fermeture panneau = marquage "lu" en masse
|
|
|
|
### Règle métier de déclenchement
|
|
|
|
- Les notifications de validation site ne sont pas envoyées ligne par ligne.
|
|
- Une notification est créée uniquement quand un chef de site termine la validation complète:
|
|
- condition: plus aucune ligne `work_hours` du site à la date concernée avec `isSiteValid = false`
|
|
- destinataires: utilisateurs `ROLE_ADMIN`
|