Périmètre 1-6 du design 2026-05-22-absence-legal-compliance-fixes (points lourds — ancienneté, CP pendant maladie, rétention — reportés en backlog). - Événements familiaux sans solde : AbsenceType::decrementsBalance() ne vaut true que pour les CP. Mariage/PACS, naissance, décès = droits par événement ; congé parental = suspension ; maladie = Sécu. Plus de solde fantôme. - Décès : daysPerEvent = null (selon lien de parenté) + motif obligatoire à la création (REST + MCP), les minimums légaux étant rappelés dans l'aide. - Ajout du congé naissance (type, policy 3 j, justificatif, libellés/couleur front). - Garde-fou demi-journée : -0,5 appliqué uniquement si le jour-borne est réellement décompté (corrige un sous-décompte week-end/férié) — TDD. - CCN documentée : paramètre app.absence.convention = "Syntec (IDCC 1486)", rappelée en sous-titre admin et dans l'aide /help. Tests : AbsenceDayCalculatorTest (garde-fou demi-journée), AbsenceRequestLifecycle (motif décès obligatoire + aucun solde touché). make test 52/52, build Nuxt OK. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.1 KiB
Absences
Le module Absences gère les congés des salariés : demande, validation, et suivi du solde de congés payés (CP). Les congés pour événements familiaux (mariage/PACS, naissance, décès) sont des droits par événement : ils sont enregistrés et validés mais ne se déduisent pas d'un solde. Le congé parental et l'arrêt maladie sont des suspensions, sans impact sur les soldes.
Convention de référence pour les valeurs par défaut : Syntec (IDCC 1486) — à confirmer selon le code APE de l'entreprise (une CCN ne se déduit pas de la seule activité).
Il y a deux espaces :
- Mes absences (
/absences) — accessible à tout salarié : poser une demande et consulter ses soldes. - Absences équipe (
/team-absences) — réservé aux administrateurs : valider les demandes, voir le calendrier d'équipe, ajuster les soldes et gérer la fiche RH des salariés.
🛡️ La gestion des salariés (onglet Employés) et la validation des demandes sont aujourd'hui réservées au rôle ROLE_ADMIN.
Poser une demande (tout salarié)
Depuis Mes absences → bouton Nouvelle demande :
- Type : Congés payés, Mariage/PACS, Naissance, Congé parental, Décès, ou Maladie.
- Dates : début et fin. Une demi-journée (matin / après-midi) peut être posée sur le premier ou le dernier jour (décompte −0,5, uniquement si ce jour-borne est un jour décompté).
- Motif et justificatif (selon le type). Le motif est obligatoire pour le décès : il sert à préciser le lien de parenté, qui détermine le nombre de jours légal.
La demande passe au statut En attente, puis un administrateur la valide ou la refuse. Pour les CP uniquement, les jours sont immédiatement réservés dans le solde « en attente » pour éviter de poser deux fois les mêmes congés.
Congés pour événements familiaux — minimums légaux (rappel). Mariage/PACS : 4 jours. Naissance : 3 jours (hors congé paternité). Décès : selon le lien — enfant : au moins 5 jours + 8 jours de congé de deuil, conjoint/partenaire/parent/frère/sœur : 3 jours. L'administrateur accorde le nombre de jours légal en validant les dates. La convention Syntec peut prévoir des durées supérieures.
Lire ses soldes
Chaque solde de CP se lit sur une période de référence (par défaut 1er juin → 31 mai) et se décompose en :
| Bucket | Signification |
|---|---|
| Acquis (N-1) | Jours déjà acquis sur la période précédente, disponibles maintenant |
| En cours d'acquisition (N) | Jours qui s'accumulent ce mois-ci, disponibles à la prochaine période |
| En attente | Jours réservés par des demandes non encore validées |
| Pris | Jours de demandes validées |
Le disponible = acquis + acquis-en-cours − en attente − pris.
Comment les congés payés sont comptés
L'acquisition est mensuelle, créditée par une tâche planifiée (commande app:accrue-leave, lancée par un cron en début de mois) :
acquisition mensuelle = (jours de CP annuels ÷ 12) × quotité de travail
Pour un temps plein à 25 jours/an, cela fait ≈ 2,08 jour/mois crédités dans « en cours d'acquisition (N) ». À chaque changement de période de référence, le « en cours (N) » bascule automatiquement en « acquis (N-1) ».
Le décompte d'une absence ne compte que les jours ouvrés (lundi→vendredi) ; les week-ends sont ignorés. Les arrêts maladie ne sont pas déduits du solde de CP.
Ajouter un salarié
Aujourd'hui réalisé par un administrateur depuis Absences équipe → onglet Employés → Ajouter / Modifier.
Cocher Employé sur la fiche d'un utilisateur l'intègre à la gestion des absences. La fiche RH demande :
| Champ | Rôle | Valeur typique |
|---|---|---|
| Date d'embauche | Début du contrat | date réelle |
| Type de contrat | CDI, CDD, Stage, Alternance, Autre | — |
| Quotité de travail | Temps plein = 1.0, mi-temps = 0.5 |
1.0 |
| CP annuels | Jours de CP acquis par an | 25 |
| Début de période de référence | Format MM-JJ |
06-01 |
| Solde initial de CP | Jours déjà acquis et disponibles à l'activation | voir ci-dessous |
Nouveau salarié qui arrive
Renseigner date d'embauche, contrat, quotité, 25 CP annuels et 06-01 de période. Laisser le solde initial à 0 : le salarié commence à acquérir ses CP au prochain passage mensuel.
Salarié déjà présent avant l'activation du module
C'est le solde initial de CP qui sert à reprendre l'existant. Y saisir le nombre de jours de CP déjà acquis et disponibles par le salarié au moment où on active le module.
Au premier calcul mensuel, cette valeur amorce le bucket « acquis (N-1) » (donc immédiatement disponible), puis l'acquisition normale (~2,08 j/mois) reprend par-dessus. Les salariés déjà présents sont ainsi « comptés » sans repartir de zéro — il suffit de connaître leur solde de départ (depuis l'ancien suivi : tableur, fiches de paie, etc.).
💡 En cas d'erreur de reprise, un administrateur peut ajuster un solde à la main depuis l'onglet Soldes (régularisation).