Aller au contenu

Gestion des absences — Hybride PRD+FSD

Code du module : ABSMGT Produit : Papillon HR Suite + ALTARYS ENTERPRISE HR Suite Périmètre pays : CI (Côte d'Ivoire) — MVP Version : 1.0 Date : 02/03/2026 Auteur : ANALYST (Claude Code)


PARTIE A Exigences du produit (PRD)


A.1 Résumé

Le problème

En Côte d'Ivoire, les entreprises gèrent les absences de leurs employés à l'aide de messages WhatsApp, de formulaires papier et de feuilles de calcul Excel. Cela entraîne :

  • Risque de non-conformité : le Code du travail 2015 de la Côte d'Ivoire et la Convention collective interprofessionnelle (CCI 1977) imposent des règles spécifiques en matière d'accumulation des congés annuels (2,2 jours ouvrables/mois), de primes d'ancienneté, de protection de la maternité, de barèmes d'indemnisation des congés maladie et d'autorisations exceptionnelles. Le suivi manuel entraîne des erreurs dans les soldes de congés, le refus illégal des droits liés à la maternité et des retenues salariales incorrectes.
  • Erreurs de paie : sans système reliant les absences à la paie, les retenues pour congés non payés, les transitions vers les congés maladie à demi-salaire et les demandes de remboursement CNPS pour maternité sont calculées manuellement, ce qui entraîne des paiements excédentaires ou insuffisants.
  • Frustration des employés : les employés ne connaissent pas leur solde de congés, ne peuvent pas facilement vérifier l'état de leurs demandes et perdent souvent des jours de congé car les reports ne sont pas suivis.
  • Cécité des responsables : pas de calendrier d'équipe, pas de visibilité sur qui est en congé et quand, aucun moyen de planifier la couverture.

La solution

Le module de gestion des absences (ABSMGT) offre : - L'accumulation automatisée des congés basée sur les règles légales CI (2,2 jours ouvrables/mois + ancienneté + primes pour enfants), avec prise en charge de trois unités (jours ouvrables, jours calendaires, jours ouvrés) - Des demandes de congés en libre-service avec fonctionnalité hors ligne (soumission automatique lors de la synchronisation) - Workflow d'approbation basé sur l'unité organisationnelle (chaîne N+1 par Platform Vision) - Tableaux d'indemnisation CCI complets pour les congés maladie (basés sur la catégorie + l'ancienneté) - Création automatique des congés maternité (droit légal, aucune approbation nécessaire) - Calendrier de l'équipe (respectant la vie privée : affiche uniquement les présences/absences) - Suivi du solde basé sur le grand livre pour une auditabilité complète - Intégration de la paie via LeaveApproved / LeaveCancelled Événements de l'application Spring

Contexte d'échelle

  • Papillon HR Suite : Objectif principal. PME (2 à 350 employés) dans le secteur de la CI. Priorité au mobile, priorité au hors ligne, interface utilisateur en français.
  • ALTARYS ENTERPRISE [ENTERPRISE UNIQUEMENT V2] : données denses, opérations par lots, délégation, planification avancée des congés à grande échelle. API conçue pour prendre en charge les deux dès le premier jour.

A.2 Personnages utilisateurs

P4a : Employé / Employee

  • Utilisations : soumettre des demandes de congé, vérifier le solde, consulter le calendrier de l'équipe, télécharger des pièces justificatives
  • Compétences numériques : faibles à moyennes
  • Appareil : téléphone Android (entrée de gamme, connectivité intermittente)
  • Préoccupation principale : « Combien de jours me reste-t-il ? Quand puis-je prendre mon congé ? »
  • Contexte Papillon : peut être hors ligne lors de la soumission. Nécessite une simplicité absolue 3 clics pour demander un congé.
  • Point faible : Envoie actuellement un SMS à son supérieur sur WhatsApp et attend plusieurs jours une réponse sans pouvoir suivre l'état d'avancement.

P2a : Responsable RH / HR Manager

  • Utilisations : configurer les types de congés, gérer les soldes des employés, remplacer les accumulations, consulter les tableaux de bord, exporter des données
  • Compétences numériques : moyennes
  • Appareil : Principalement un ordinateur de bureau, un téléphone pour les approbations urgentes
  • Préoccupation principale : « Les soldes de congés de tous les employés sont-ils corrects ? L'entreprise respecte-t-elle la législation en matière de CI ? »
  • Contexte Papillon : souvent le conjoint du directeur général ou un employé de confiance. En transition depuis Excel. A besoin d'être accompagné.
  • Contexte de l'entreprise [V2] : directeur des ressources humaines professionnel gérant une équipe. Ajustements groupés des soldes, délégation.

P1a : Manager / Approver

  • Utilisations : Approuver/refuser les demandes de congés, consulter le calendrier de l'équipe, vérifier la couverture de l'équipe
  • Compétences numériques : moyennes à élevées
  • Appareil : ordinateur portable + téléphone (approbations en déplacement)
  • Préoccupation principale : « Qui est en congé cette semaine ? Puis-je approuver cette demande sans que l'équipe se retrouve en sous-effectif ? »

P1b : Directeur général (DG) / Propriétaire de l'entreprise

  • Utilisations : approbateur de secours, approbation de ses propres congés, aperçu des tableaux de bord
  • Compétences numériques : Moyenne à élevée
  • Appareil : ordinateur portable + téléphone
  • Préoccupation principale : « Mes employés prennent-ils leurs congés légaux ? Sommes-nous en conformité ? »
  • Contexte Papillon : dans les entreprises S1-S2 (2 à 12 employés), le DG EST à la fois le responsable des ressources humaines ET l'approbateur.

A.3 User stories

US-ABS-001 : Demande de congé annuel

En tant qu' employé, je souhaite soumettre une demande de congé annuel depuis mon téléphone (même hors ligne), afin de pouvoir planifier mes congés sans me rendre au service des ressources humaines.

Critères d'acceptation : - Étant donné que je suis un employé avec un compte actif, lorsque j'ouvre le module Absence, je vois mon solde de congés actuel (par type, en jours calendaires). - Étant donné que je remplis un formulaire de demande de congé hors ligne, lorsque la connexion est rétablie, la demande est automatiquement soumise à mon responsable pour approbation. - Étant donné que je soumets une demande, lorsque la date de début est inférieure à 15 jours à compter d'aujourd'hui, alors je vois un avertissement modéré concernant le délai de préavis de 15 jours, mais je peux tout de même soumettre ma demande. - Étant donné que je soumets une demande de congé annuel et que je n'ai PAS encore pris 14 jours consécutifs cette année, alors je vois un avertissement modéré concernant l'exigence légale minimale de 14 jours.

US-ABS-002 : Approuver/rejeter les congés

En tant que responsable, je souhaite approuver ou rejeter les demandes de congé d'un simple clic, afin que mon équipe puisse planifier rapidement ses congés.

Critères d'acceptation : - Lorsqu'une demande de congé est en attente, lorsque je la consulte, je vois alors : le nom de l'employé, le type de congé, les dates, le nombre de jours, le solde actuel de l'employé, le calendrier de l'équipe indiquant qui d'autre est en congé pendant cette période. - Si je rejette une demande, lorsque je soumets le rejet, je dois alors fournir une raison (champ de texte obligatoire). L'employé est informé de la raison. - Si le type de congé nécessite un document justificatif (congé maladie, maternité), lorsque le document n'est pas téléchargé, je ne peux pas approuver la demande: le bouton d'approbation est désactivé et une explication s'affiche.

US-ABS-003 : Afficher le calendrier de l'équipe

En tant que responsable, je souhaite voir un calendrier de l'équipe indiquant qui est en congé et quand, afin de pouvoir assurer une couverture adéquate.

Critères d'acceptation : - Étant donné que je suis manager, lorsque je consulte le calendrier de l'équipe, je vois toutes les absences de mes subordonnés directs pour le mois en cours. - Étant donné qu'un membre de l'équipe est en congé, lorsque je consulte le calendrier, je vois « Absent » (et non le type de congé) afin de protéger la vie privée. - Étant donné que je suis HR_MANAGER ou DG, lorsque je consulte le calendrier, alors je peux filtrer par service et voir tous les employés.

US-ABS-004 : Création automatique d'un congé maternité

En tant que responsable RH, je souhaite enregistrer une déclaration de maternité et que le système crée automatiquement le congé, afin que je n'aie pas à traiter la maternité comme une « demande » (il s'agit d'un droit légal).

Critères d'acceptation : - Étant donné que je saisis une date prévue d'accouchement, lorsque j'enregistre la déclaration de maternité, le système crée alors un bloc de congé de 14 semaines (6 semaines avant la date prévue d'accouchement + 8 semaines après). - Étant donné que le congé de maternité est créé, lorsque je le consulte, il affiche alors le statut AUTO_APPROVED : aucune étape d'approbation par le responsable n'est nécessaire. - Étant donné que l'employée a d'autres congés approuvés qui chevauchent la période de maternité, lorsque le congé de maternité est créé, les jours de congé annuel qui se chevauchent sont alors recrédités sur le solde de l'employée.

US-ABS-005 : Congé maladie avec certificat

En tant qu' employé, je souhaite déclarer un congé maladie et télécharger mon certificat médical, afin que mon absence soit correctement enregistrée et que ma rémunération soit calculée selon le barème CCI.

Critères d'acceptation : - Étant donné que je soumets une demande de congé maladie, lorsque je ne télécharge pas de certificat médical, la demande reste dans le statut PENDING_DOCUMENT : elle n'est pas envoyée pour approbation. - Étant donné que je télécharge le certificat, lorsque je confirme, la demande passe au statut PENDING_APPROVAL et est envoyée à mon responsable. - Étant donné que mon congé maladie est approuvé, lorsque la paie est traitée pour le mois, mon salaire est alors calculé selon le barème d'indemnisation CCI (salaire complet → demi-salaire → zéro salaire, en fonction de la catégorie et de l'ancienneté).

US-ABS-006 : Afficher le solde des congés

En tant qu' employé, je souhaite voir mon solde de congés actuel ventilé par type, afin de savoir combien de jours je peux prendre.

Critères d'acceptation : - Étant donné que j'ouvre le module Absence, lorsque je consulte mon solde, je vois alors les soldes pour chaque type de congé en jours calendaires (unité de déduction configurée par mon tenant). - Étant donné que je suis un nouvel employé avec moins de 12 mois d'ancienneté, lorsque je consulte mon solde, alors je vois mon solde accumulé avec une note : « Disponible après 12 mois de service » (sauf si le congé anticipé est configuré). - Étant donné que mon solde comprend des jours de prime d'ancienneté, lorsque je consulte la ventilation, je vois alors : accumulation de base + prime d'ancienneté + prime pour enfants = total.

US-ABS-007 : Permission exceptionnelle

En tant qu' employé, je souhaite demander une permission exceptionnelle pour un événement familial (mariage, naissance, décès), afin de pouvoir prendre mes jours de congé légaux avec rémunération.

Critères d'acceptation : - Étant donné que je sélectionne « Permission exceptionnelle » comme type de congé, lorsque je choisis le type d'événement (mariage, naissance, décès, etc.), le système préremplit alors le nombre de jours en fonction du minimum CCI pour CI. - Étant donné que le tenant a configuré des durées plus généreuses (supérieures au minimum CCI), lorsque je sélectionne le type d'événement, le système préremplit alors la durée du tenant. - Étant donné que le tenant tente de configurer une durée inférieure au minimum CCI, lorsqu'il enregistre, le système bloque alors avec : « La durée minimale légale (CCI) pour cet événement est de X jours. »

US-ABS-008 : Tableau de bord RH

En tant que responsable RH, je souhaite disposer d'un tableau de bord affichant les principaux indicateurs d'absence en un coup d'œil, afin de pouvoir surveiller la situation de l'entreprise en matière d'absences.

Critères d'acceptation : - Étant donné que je suis HR_MANAGER, lorsque j'ouvre le tableau de bord Absence, je vois alors : le calendrier des congés de l'équipe, le nombre d'approbations en attente (badge), le récapitulatif du solde de congés par employé, le taux d'absentéisme (%), les congés à venir cette semaine/ce mois-ci. - Étant donné que je clique sur le solde d'un employé, lorsque la vue détaillée s'ouvre, je vois alors le registre complet des accumulations, des déductions, des ajustements et des reports.

US-ABS-009 : Annuler un congé

En tant qu'employé, je souhaite d'annuler une demande de congé que j'ai soumise, afin de pouvoir modifier mes projets.

Critères d'acceptation : - Étant donné que ma demande de congé est EN ATTENTE D'APPROBATION, lorsque je l'annule, elle passe alors à ANNULÉE et disparaît de la file d'attente de l'approbateur. - Étant donné que mon congé est APPROUVÉ mais n'a pas encore commencé, lorsque je l'annule, les jours sont alors recrédités à mon solde. Le responsable et les RH en sont informés. - Étant donné que mon congé est APPROVED et a déjà commencé (je suis actuellement en congé), lorsque j'essaie de l'annuler, je ne peux pas le faire : je dois demander un retour anticipé auprès des RH.

US-ABS

-010 : Gestion des licenciements d'employés En tant que système, lorsqu' un événement EmployeeTerminated ou EmployeeOffboarded est reçu, je souhaite annuler automatiquement les demandes de congé en attente et calculer le solde restant, afin que le service de paie puisse calculer l'indemnité compensatrice de congés payés.

Critères d'acceptation : - Étant donné qu'un employé est licencié, lorsque l'événement est reçu, toutes les demandes EN ATTENTE sont automatiquement annulées. - Étant donné qu'un employé est licencié, lorsque l'événement est reçu, les congés futurs APPROUVÉS pendant la période de préavis sont conservés ; ceux postérieurs à la date effective du licenciement sont annulés. - Étant donné qu'un employé est licencié, lorsque le solde est calculé, un événement LeaveBalanceSettlement est publié au service de la paie avec le solde restant en jours calendaires.


A.4 Exigences non fonctionnelles

Exigence Cible Remarques
Temps de réponse < 2 secondes pour la soumission d'une demande de congé sur 3G Mobile-first, offline-first
Calcul du solde < 500 ms pour le solde actuel de tout employé Total mis en cache à partir du grand livre
Calendrier de l'équipe < 1 seconde pour afficher la vue sur 30 jours d'une équipe de 50 personnes Doit être rapide pour les responsables
Capacité hors ligne Demandes de congés créées hors ligne, soumises automatiquement lors de la synchronisation Les formulaires ne perdent jamais de données
Soumissions simultanées Traitement des demandes simultanées du même employé (pour éviter les doubles réservations) Verrouillage optimiste du solde de congés
Piste d'audit Chaque modification du solde génère une entrée d'audit immuable Basé sur le grand livre. intrinsèquement vérifiable
Isolation des données Aucune fuite de données de congés entre les tenants tenant_id sur chaque requête
Échelle Prise en charge de plus de 100 000 tenants × 20 employés en moyenne × 12 mois de données de congés Requêtes indexées, stratégie de partitionnement

A.5 Portée du MVP

Dans le MVP (V1)

  • Pays : CI uniquement
  • Types de congés : 7 (annuel, maladie, maternité, paternité, permissions exceptionnelles, non rémunéré [suivi uniquement], absence injustifiée)
  • Moteur de calcul : 2,2 j. ouvrables/mois + prime d'ancienneté + prime pour enfants
  • Système à trois unités : Jours ouvrables (accumulation) → Jours calendaires (× 1,25, valeur par défaut CI) → Jours ouvrés (semaine de 5 jours, configurable)
  • Approbation : Standard N+1 basé sur l'unité organisationnelle (selon la vision de la plateforme FR-PV-020 à FR-PV-024)
  • Maternité : Création automatique (14 semaines, aucune approbation nécessaire). L'employeur paie 100 % et demande le remboursement à la CNPS.
  • Congés maladie : Barèmes d'indemnisation CCI complets (par catégorie + ancienneté)
  • Permissions exceptionnelles : CCI minimum comme seuil, le tenant peut configurer au-dessus
  • Assistance demi-journée : demandes de demi-journée le matin/l'après-midi
  • Pièces justificatives : requises avant l'approbation des congés maladie et maternité (blocage strict)
  • Hors ligne :

Création complète de la demande hors ligne, soumission automatique lors de la synchronisation - Tableau de bord : calendrier de l'équipe + approbations en attente + résumé du solde + taux d'absentéisme + congés à venir - Notifications : 4 principales (soumission → approbateur, approbation → employé, rejet → employé, annulation → approbateur + RH) - Modèle de solde : grand livre (basé sur les transactions) - Report : configurable par tenant (expiration stricte à 12 mois | report partiel | illimité). Par défaut : strict. - Période de référence : configurable (année civile | anniversaire de l'employé). Par défaut : année civile. - Jours fériés : l'administrateur de la plateforme définit les valeurs par défaut CI (fixes + variables). Le tenant peut remplacer les dates variables. - Calendrier de l'équipe : respect de la vie privée (affiche « Absent » et non le type de congé) - Libre-service : affichage du solde, historique des demandes, soumission/annulation des demandes - Intégration de la paie : Événements LeaveApproved, LeaveCancelled, LeaveBalanceSettlement

Hors MVP (V2+)

  • [V2] Règles nationales BJ et CM - Types de congés, taux d'accumulation et jours fériés au Bénin et au Cameroun (mois 9)
  • [V2] Calendrier de planification des congés à l'échelle de l'entreprise (règles de couverture des équipes, planification des congés)
  • [V2] Registre des absences exportable (registre des absences pour l'inspection du travail)
  • [V2] Avertissement de solde faible
  • [V2] Rappel de retour de maternité notification (2 semaines avant la fin)
  • [V2] Chaînes d'approbation à plusieurs niveaux (escalade basée sur le montant, basée sur le type)
  • [V2] Délégation RH de l'autorité d'approbation
  • [V2] Ajustements de solde par lots pour Enterprise
  • [V2] Congé de formation
  • [V2] Congé syndical
  • [V2] Rapports et analyses avancés sur les absences
  • [V2] Flux d'approbation spécifiques au type de congé (approbation automatique des congés maladie avec certificat, approbation automatique des congés maternité)
  • [V2] Configuration des conventions collectives (conventions spécifiques à un secteur qui prévalent sur les CCI)
  • [V2] Paternité 21 jours (lorsque les décrets d'application CI sont publiés)
  • [ENTREPRISE UNIQUEMENT] Opérations groupées : création massive de congés, ajustements groupés du solde
  • [ENTREPRISE UNIQUEMENT] Planification avancée des congés : règles de couverture, niveaux minimaux de personnel
  • [ENTREPRISE UNIQUEMENT] Workflows de délégation : responsables RH gérant des sous-ensembles d'employés
  • Les politiques de congés spécifiques à chaque pays au-delà de la CI sont en V2
  • Calcul de l'allocation monétaire des congés (responsabilité de la paie)
  • Applications mobiles natives (iOS/Android): PWA uniquement pour MVP

A.6 Questions en suspens

# Question Priorité Statut
OQ-ABS-01 Exonération ITS des indemnités de maternité CNPS : la recherche juridique signale cela comme SOURCE INCONNUE. Confirmer si les indemnités de maternité versées par la CNPS sont réellement exonérées de l'ITS en CI, et identifier l'article spécifique du CGI. 🟡 ÉLEVÉE Non résolue : reportée à la paie PRD
OQ-ABS-02 Format de numérotation de l'article 25.X du CCI : vérifier que le Code du travail 2015 de la CI (loi n° 2015-532) utilise bien une sous-numérotation décimale (art. 25.1, 25.2, etc.). Si le format réel est différent, toutes les références aux articles dans ce PRD doivent être remappées. 🟢 MOYEN Nécessite une vérification ponctuelle
OQ-ABS-03 Loi n° 96-5 (jours fériés CI) : confirmer que cette loi de 1996 est toujours en vigueur. En particulier, le « 15 novembre : Journée Nationale de la Paix » a-t-il été ajouté par amendement ? 🟢 MOYEN Nécessite une vérification
OQ-ABS-04 Statut actuel de la CCI 1977 : confirmer si la CCI 1977 est toujours la convention collective interprofessionnelle applicable en CI, ou si elle a été révisée/renégociée. Les indemnités de licenciement, les délais de préavis et les règles en matière de congés en dépendent. 🟡 ÉLEVÉ Nécessite une vérification
OQ-ABS-05 Seuil pour la désignation d'un délégué du personnel : à partir de quel effectif en CI la désignation d'un délégué du personnel est-elle obligatoire ? Quel est l'impact sur la gestion des absences (par exemple, consultation sur la planification des congés) ? 🟢 MOYEN Pertinence V2
OQ-ABS-06 Accumulation des congés pendant la période d'essai : Il est confirmé que l'accumulation commence le premier jour et que 12 mois de service sont nécessaires pour prendre un congé. Mais le seuil de 12 mois s'applique-t-il par TYPE de congé ou globalement ? Un nouvel employé peut-il prendre un congé exceptionnel (par exemple, naissance d'un enfant) avant 12 mois ? 🟡 ÉLEVÉ Supposé oui (droit légal) : à vérifier
OQ-ABS-07 Validation de la formule de conversion : le facteur 1,25 (ouvrables → calendaires) est confirmé par le client. Vérifier auprès des sources juridiques/pratiques CI : s'agit-il de 30/24 (jours calendaires / ouvrables par mois) ? 🟢 MOYEN Temporairement validé

A.7 Temporairement validé

# Élément Valeur actuelle Risque Action requise
TV-ABS-01 Mécanisme de rémunération de maternité L'employeur verse 100 % du salaire et demande le remboursement intégral à la CNPS. Coût net pour l'employeur = 0. Confirmé par le client, mais la citation juridique est ambiguë (l'article 31 du CCI stipule que « l'employeur verse la moitié, la CNPS rembourse »). Vérifier auprès de la CNPS CI ou d'un avocat spécialisé en droit du travail avant la mise en service.
TV-ABS-02 Base de cotisation à la CNPS pendant le congé de maladie Les cotisations CNPS sont calculées sur le montant effectivement versé (et non sur le salaire théorique complet). Confirmé par le client. Les recherches juridiques indiquent que le congé maladie est « considéré comme une période d'emploi » pour la CNPS, mais restent ambiguës sur la base de cotisation. Vérifier auprès de la CNPS CI.
TV-ABS-03 Durée du congé paternité 2 jours ouvrables (loi actuellement en vigueur). Système conçu avec un paramètre configurable pour passer à 21 jours lorsque les décrets d'application seront publiés. Loi de 2023 adoptée, mais décrets non encore publiés en mars 2026. Surveiller la publication des décrets d'application. Mettre à jour la configuration lorsqu'ils seront publiés.
TV-ABS-04 Facteur de conversion ouvrables → calendaires 1,25 (c'est-à-dire jours calendaires = jours ouvrables × 1,25) Confirmé par le client. Mathématiquement cohérent avec le ratio 30/24. Vérifier par rapport aux sources juridiques CI.
TV-ABS-05 L'accumulation des congés se poursuit pendant le congé maladie/ maternité Les congés annuels s'accumulent à raison de 2,2 jours ouvrables/mois pendant les congés maladie et maternité. Confirmé par le client. Cohérent avec le principe « assimilé à un travail effectif » du droit du travail CI. Vérifier l'article juridique CI spécifique.
TV-ABS-06 Formule de retenue sur salaire salaire mensuel / nombre de jours ouvrables du mois × nombre de jours d'absence. Basé sur la pratique. la recherche juridique indique « Pas de formule légale imposée ». Mis en œuvre tel quel. Signalé comme non vérifié.

PARTIE B :Spécifications fonctionnelles (FSD)


B.1 Catalogue des types d'absence [TOUTES PORTÉES : CI]

Tableau de référence des types de congés

Code Nom (FR) Rémunéré ? Doit être déduit des jours accumulés ? Document requis ? Approbation ? Impact sur le solde Impact sur la paie
ANNUAL Congé annuel ✅ Oui (100 %) ✅ Oui ❌ Non ✅ Approbation N+1 Déduit du solde annuel Congé payé (allocation de congé)
MALADIE Congé maladie ✅ Oui (tableau CCI) ❌ Non ✅ Certificat médical ✅ Approbation N+1 Compteur de congés maladie séparé Salaire complet → demi-salaire → zéro (selon CCI)
MATERNITÉ Congé maternité ✅ Oui (100 %) ❌ Non ✅ Attestation médicale ❌ Créé automatiquement Aucun impact sur le solde L'employeur paie 100 %, la CNPS rembourse
PATERNITÉ Congé paternité ✅ Oui (100 %) ❌ Non ✅ Acte de naissance ✅ Approbation N+1 Déduit des autorisations Payé par l'employeur
EXCEPTIONNEL Permission exceptionnelle ✅ Oui (100 %) ❌ Non ✅ Justificatif ✅ Approbation N+1 Déduit du plafond de 10 jours/an Payé par l'employeur
NON RÉMUNÉRÉ Congé sans solde ❌ Non ❌ Non ❌ Non ✅ Approbation N+1 Suivi uniquement (MVP) Déduction : taux journalier complet × jours
INJUSTIFIÉ Absence injustifiée ❌ Non ❌ Non ❌ Non ❌ Dossiers RH Pas de solde (mesure disciplinaire) Déduction + sanctions possibles

Tableau détaillé des autorisations exceptionnelles [CI]

Code événement Nom de l'événement (FR) Minimum CCI (CI) Configurable ? Total max/an
MARRIAGE_SELF Mariage du salarié 4 jours ✅ Le titulaire peut augmenter 10 j./an (tous événements confondus)
MARRIAGE_CHILD Mariage d'un enfant 2 jours ✅ Le titulaire peut augmenter 10 j./an
BIRTH_CHILD Naissance d'un enfant 2 jours ✅ Le tenant peut augmenter 10 j./an
DEATH_SPOUSE Décès du conjoint 5 jours ✅ Le tenant peut augmenter 10 j./an
DEATH_CHILD Décès d'un enfant 5 jours ✅ Le tenant peut augmenter 10 j./an
DEATH_PARENT Décès père/mère 5 jours ✅ Le tenant peut augmenter 10 j./an
DEATH_SIBLING Décès frère/sœur 2 jours ✅ Le tenant peut augmenter 10 j./an
DEATH_IN_LAW Décès beau-père/belle-mère 2 jours ✅ Le tenant peut augmenter 10 j./an
MOVE Déménagement 2 jours ✅ Le tenant peut augmenter 10 j./an

FR-ABS-PERM-01 : SI un tenant tente de configurer une durée d'exceptionnelle inférieure au minimum CCI, ALORS le système DOIT bloquer l'enregistrement avec le message : « La durée minimale légale (CCI) pour cet événement est de {min_days} jours. »

FR-ABS-PERM-02 : SI le total des autorisations exceptionnelles prises au cours de la période de référence actuelle dépasse 10 jours, ALORS le système DOIT avertir le responsable des ressources humaines et bloquer la demande. Les jours supplémentaires au-delà de 10 doivent être traités comme des congés sans solde ou des congés annuels.


B.2 Règles fonctionnelles :Moteur d'accumulation des congés

Accumulation de base

FR-ABS-001 : Chaque salarié dont le statut est STATUT = ACTIF accumule des congés annuels à raison de 2,2 jours ouvrables par mois de service effectif. Il s'agit du taux CCI (plus favorable que le taux de 2 jours/mois prévu par le Code du travail).

FR-ABS-002 : L'unité d'accumulation est le jour ouvrable (semaine de 6 jours : du lundi au samedi). Il s'agit de l'unité de référence légale pour la CI.

FR-ABS-003 : À des fins d'affichage et de déduction, le système prend en charge TROIS unités : - Jours ouvrables (JO) : base légale d'accumulation. 1 mois = 2,2 JO. - Jours calendaires (JC) : JO × 1,25. Unité de déduction standard de la CI. 1 mois = 2,75 JC. - Jours ouvrés

(JOV) : équivalent à une semaine de 5 jours. JO × 5/6. 1 mois ≈ 1,83 JOV.

FR-ABS-004 : chaque tenant configure sa préférence en matière d'unité de déduction : - SI tenant.leave_deduction_unit = JOURS_CALENDAIRES (par défaut pour CI) ALORS les soldes sont affichés et déduits en JC. - IF tenant.leave_deduction_unit = JOURS_OUVRES ALORS les soldes sont affichés et déduits en JOV. - IF tenant.leave_deduction_unit = JOURS_OUVRABLES ALORS les soldes sont affichés et déduits en JO. - Le stockage interne est TOUJOURS en jours ouvrables (source de vérité). La conversion s'effectue au moment de l'affichage et de la déduction.

FR-ABS-005 : L'accumulation commence à partir de la date d'embauche de l'employé. Les congés s'accumulent à partir du premier jour, quelle que soit la période d'essai.

FR-ABS-006 : Un employé NE PEUT PAS prendre de congés annuels avant d'avoir accompli 12 mois de service continu auprès de son employeur actuel. - SI employee.hire_date + 12 months > today ALORS l'action « Soumettre une demande de congés annuels » DOIT afficher : « Vos congés seront disponibles à partir du {hire_date + 12 months} ». - Le solde accumulé est visible mais marqué comme « non disponible ». - EXCEPTION : les permissions exceptionnelles (événements familiaux) sont disponibles dès le premier jour — elles constituent un droit distinct des congés annuels.

Jours de prime d'ancienneté [CI — CCI Art. 46]

FR-ABS-010 : En plus des 2,2 jours/mois de base, les employés bénéficient de jours de congés annuels supplémentaires en fonction de leur ancienneté auprès de leur employeur actuel :

Ancienneté Bonus (jours ouvrables/an)
5 ans +1
10 ans +2
15 ans +3
20 ans +5
25 ans +7

FR-ABS-011 : La prime d'ancienneté est calculée une fois par période de référence, sur la base de l'ancienneté de l'employé au DÉBUT de la période de référence. La prime est ajoutée sous la forme d'une transaction comptable unique au début de la période.

FR-ABS-012 : SI la tranche d'ancienneté de l'employé change au MILIEU de la période (par exemple, s'il atteint 10 ans en juin), ALORS la nouvelle prime est appliquée au DÉBUT de la période de référence SUIVANTE. Aucun ajustement n'est effectué au milieu de la période.

Jours de prime pour enfants [CI — CCI]

FR-ABS-013 : Les employés reçoivent +1 jour ouvrable par enfant de moins de 21 ans comme congé annuel supplémentaire.

FR-ABS-014 : Les données relatives aux enfants proviennent du profil de l'employé : - SI le module HR Core est actif, les enfants sont lus à partir du profil de l'employé dans HR Core (date de naissance requise). - SI HR Core n'est PAS actif, les enfants sont gérés directement dans le module Absence sous la forme d'un simple champ de comptage (number_of_children_under_21), défini manuellement par les RH.

FR-ABS-015 : La prime pour enfants est recalculée au DÉBUT de chaque période de référence. Un enfant qui atteint l'âge de 21 ans au cours de la période conserve sa prime pour cette période.

Accumulation pendant les absences

FR-ABS-016 : Accumulation des congés annuels (2,2 jours ouvrables/mois) SE POURSUIT pendant : - Congé maladie - Congé maternité - Congé paternité - Permissions exceptionnelles - Accident du travail

Ces périodes sont assimilées à du travail effectif pour le calcul de l'accumulation.

FR-ABS-017 : Accumulation des congés annuels EST SUSPENDUE pendant : - Congé sans solde - Absence injustifiée - Suspension disciplinaire (le cas échéant)


B.3 Règles fonctionnelles — Période de référence et report

Période de référence

FR-ABS-020 : Chaque tenant configure une période de référence pour l'accumulation et le report des congés : - CALENDAR_YEAR (par défaut) : 1er janvier - 31 décembre - ANNIVERSARY : en fonction de la date d'embauche de chaque employé (par exemple, embauché le 15 mars → période de référence du 15 mars au 14 mars de l'année suivante)

FR-ABS-021 : à la fin de chaque période de référence, le système : 1. Calcule le total des congés accumulés par l'employé pour la période (base + ancienneté + enfants) 2. Détermine les jours non pris de la période PRÉCÉDENTE 3. Applique la politique de report du tenant (FR-ABS-022) 4. Génère des transactions comptables pour : les nouveaux droits acquis, les jours expirés (le cas échéant), les jours reportés

Politique de report

FR-ABS-022 : Chaque tenant configure sa politique de report : - STRICT_EXPIRY (par défaut — conformément à la législation CI) : Les congés non pris de la période de référence précédente expirent. Les jours perdus sont enregistrés comme EXPIRED dans le grand livre. Une notification d'avertissement est envoyée à l'employé 30 jours avant l'expiration. - PARTIAL_CARRY_OVER : un maximum de N jours peut être reporté (N est configuré par le tenant). Le surplus expire. - UNLIMITED : tous les jours non pris sont reportés indéfiniment.

FR-ABS-023 : Le paiement compensatoire en lieu et place des congés non pris est interdit pendant la durée du contrat de travail (art. 25.12 CT 2015). Le système NE DOIT PAS proposer de fonctionnalité de « paiement du solde de congés » pendant la durée du contrat de travail.

FR-ABS-024 : À la fin du contrat de travail (départ), le solde de congés restant DOIT être payé sous forme d'indemnité compensatrice de congés payés. Ceci est obligatoire selon la loi CI. Le module Absence calcule le solde et publie un événement LeaveBalanceSettlement à la Paie.


B.4 Règles fonctionnelles — Workflow de demande de congé

Création de la demande

FR-ABS-030 : Une demande de congé contient : - employee_id, tenant_id (à partir du contexte de session) - leave_type (à partir du catalogue : ANNUAL, SICK, MATERNITY, etc.) - start_date, end_date (inclus) - half_day_start (booléen : si vrai, l'employé travaille le matin et est absent l'après-midi de la date de début) - half_day_end (booléen : si vrai, l'employé est absent le matin et travaille l'après-midi de la date de fin) - event_type (uniquement pour les cas EXCEPTIONNELS — par exemple, MARRIAGE_SELF, DEATH_SPOUSE) - reason (texte libre facultatif) - supporting_document_id (obligatoire pour certains types de congés — voir B.1)

*FR-ABS-031 * : lors du calcul du nombre de jours de congé : - SI aucune demi-journée ALORS number_of_days = jours ouvrables entre start_date et end_date (inclus), convertis en unité de déduction du tenant . - SI demi_journée_début = vrai ALORS la date_début compte pour 0,5 jour. - SI demi_journée_fin = vrai ALORS la date_fin compte pour 0,5 jour. - Les jours fériés tombant pendant la période de congé sont EXCLUS du décompte (ils ne consomment pas de jours de congé et prolongent l'absence effective d'un jour chacun).

*FR-ABS-032 * : Le système calcule automatiquement number_of_days à partir de la plage de dates et du calendrier de travail du tenant. L'employé voit le total calculé avant de soumettre sa demande et peut l'ajuster.

Règles de validation

FR -ABS-040 : SI leave_type = ANNUAL ET employee.hire_date + 12 months > today ALORS bloquer la demande. Message : « Vous devez compléter 12 mois de service avant de prendre un congé annuel. »

FR-ABS-041 : SI leave_type = ANNUAL ET number_of_days > employee.annual_leave_balance ALORS bloquer la demande. Message : « Solde insuffisant. Votre solde disponible est de {balance} jours. »

FR-ABS-042 : IF leave_type = EXCEPTIONAL AND total_exceptional_taken_this_period + number_of_days > 10 THEN bloquer la demande. Message : « Vous avez atteint le plafond annuel de 10 jours de permissions exceptionnelles. »

FR-ABS-043 : SI start_date < today (demande rétroactive) ALORS autoriser la demande MAIS la marquer avec le drapeau is_retroactive = true à des fins d'audit.

FR-ABS-044 : SI date_début < aujourd'hui + 15 jours ALORS afficher un avertissement modéré : « Attention : le préavis légal est de 15 jours avant le début du congé. » La demande n'est PAS bloquée.

FR-ABS-045 : SI le salarié n'a PAS pris un bloc de ≥ 14 jours ouvrables consécutifs au cours de cette période de référence ET leave_type = ANNUAL ALORS afficher un avertissement : « Rappel : la loi impose un congé principal d'au moins 14 jours ouvrables consécutifs par an. » La demande n'est PAS bloquée.

FR-ABS-04 6 : SI la demande de congé chevauche un congé déjà approuvé, ALORS appliquer la règle de résolution des chevauchements : - SI la nouvelle demande concerne un congé MALADIE ou MATERNITÉ (priorité plus élevée), ALORS diviser automatiquement le congé existant : les jours qui se chevauchent sont convertis en nouveau type de congé, et les jours de congé annuel libérés sont recrédités sur le solde de l'employé. - SI la nouvelle demande concerne un congé ANNUEL ou EXCEPTIONNEL chevauchant un congé ANNUEL, bloquer : « Vous avez déjà un congé approuvé sur cette période. Veuillez l'annuler d'abord. »

Exigences en matière de documents

FR-ABS-050 : Pour les types de congés pour lesquels un document justificatif est REQUIS (voir tableau B.1) : - SI supporting_document_id IS NULL ALORS la demande passe au statut PENDING_DOCUMENT au lieu de PENDING_APPROVAL. - L'employé voit s'afficher : « Veuillez joindre le justificatif requis pour que votre demande soit transmise à votre responsable. » - Une fois le document téléchargé, le statut passe à PENDING_APPROVAL.

FR-ABS-051 : Les pièces justificatives sont stockées via la fonctionnalité de pièce jointe de base de la plateforme (MinIO). SI la gestion avancée des documents (ADVDOC) est active, les documents bénéficient d'un système de gestion des versions et de conservation. SI ADVDOC n'est pas active, le téléchargement/chargement de base s'applique.

*FR-ABS-052

  • : Le responsable (manager) peut voir : le type de congé, les dates, le nombre de jours, le solde de l'employé, le calendrier de l'équipe. Le responsable peut voir qu'un document a été téléchargé et son nom de fichier. Le responsable NE PEUT PAS voir le certificat médical ou le contenu du document — seuls HR_MANAGER et DG ont accès aux documents relatifs aux congés médicaux.

Workflow d'approbation

FR-ABS-060 : L'approbation des congés suit la chaîne basée sur les unités organisationnelles de Platform Vision (FR-PV-020 à FR-PV-024) : 1. L'employé soumet → la demande est transmise au manager_id de l'unité organisationnelle 2. S'il n'y a pas de responsable dans l'unité → la demande est transmise au propriétaire de l'entreprise (DG) 3. Si l'employé EST le responsable de l'unité → la demande est transmise au responsable de l'unité parent 4. Le DG approuve lui-même (statut = SELF_APPROVED, enregistré dans la piste d'audit)

FR-ABS-061* * : L'approbateur peut : - APPROUVER : la demande passe à APPROVED. Le solde est déduit (transaction comptable). L'employé est informé. L'événement LeaveApproved est publié. - REJETER** : la demande passe à REJECTED. L'approbateur DOIT fournir un motif de rejet (champ obligatoire). L'employé est informé du motif. Aucun impact sur le solde.

FR-ABS-062 : Le congé maternité n'est PAS soumis à un workflow d'approbation : - Les RH créent une déclaration de maternité → le système crée un congé avec le statut AUTO_APPROVED - Aucune étape d'approbation par le responsable - L'employé et le responsable sont informés des dates du congé maternité

Annulation

FR-ABS-070 : SI le statut de la demande est PENDING_APPROVAL ou PENDING_DOCUMENT, ALORS l'employé peut annuler librement. Statut → CANCELLED_BY_EMPLOYEE. Aucun impact sur le solde (aucune déduction n'a été effectuée).

FR-ABS-071 : SI le statut de la demande est APPROVED ET start_date > today (le congé n'a pas encore commencé), ALORS l'employé peut annuler. Statut → CANCELLED_BY_EMPLOYEE. Le solde est recrédité (transaction comptable : CANCEL_CREDIT). Le responsable et les RH sont informés. Événement LeaveCancelled publié.

FR-ABS-072 : SI le statut de la demande est APPROVED ET start_date <= today (le congé est en cours), ALORS l'employé NE PEUT PAS l'annuler lui-même. Il doit demander un retour anticipé auprès des RH. Les RH peuvent modifier la date de fin et recréditer les jours non utilisés.

FR-ABS-073 : HR_MANAGER et DG peuvent annuler TOUT congé (y compris ceux en cours) au nom d'un employé. Une raison doit être fournie. L'employé en est informé.


B.5 Règles fonctionnelles — Indemnisation des congés maladie

[CI — CCI]

Tableaux d'indemnisation

FR-ABS-080 : La rémunération des congés maladie dans CI suit les tableaux d'indemnisation CCI, différenciés par catégorie d'employé et ancienneté :

Ouvriers & Employés

Ancienneté Période de rémunération intégrale Période de demi-rémunération Zéro rémunération après
< 1 an 1 mois 3 mois 4 mois
1 à 5 ans 1 mois 3 mois 4 mois
6 à 10 ans 2 mois 3 mois 5 mois
11 –15 ans 3 mois 3 mois 6 mois
> 15 ans 4 mois 4 mois 8 mois

Cadres & Agents de Maîtrise

Ancienneté Période de salaire complet Période de demi-salaire Zéro salaire après
< 1 an 1 mois 3 mois 4 mois
1 à 5 ans 2 mois 3 mois 5 mois
6 à 10 ans 3 mois 4 mois 7 mois
11 à 15 ans 4 mois 4 mois 8 mois
> 15 ans 5 mois 5 mois 10 mois

** FR-ABS-081** : le module Absence suit la phase dans laquelle se trouve actuellement l'employé (salaire complet / demi-salaire / sans salaire), en fonction du nombre cumulé de jours de congé maladie au cours de la période glissante de 12 mois. Ces informations sur la phase sont incluses dans la charge utile de l'événement LeaveApproved pour que la paie puisse calculer le salaire correct.

FR-ABS-082 : SI un employé épuise son indemnités de congé maladie (atteint la phase de salaire nul), ALORS le système alerte les RH. Le reste de l'absence n'est pas rémunéré. Cela peut déclencher des procédures de licenciement pour inaptitude (gérées par le module Gestion des employés, V2).

FR-ABS-083 : les cotisations CNPS pendant le congé maladie sont calculées sur le montant effectivement versé (par exemple, pendant le demi-salaire, les cotisations CNPS sont basées sur le montant du demi-salaire, et non sur le salaire complet).


B.6 Règles fonctionnelles — Congé maternité [CI]

** FR-ABS-090 : Le congé maternité est de 14 semaines** au total : 6 semaines avant la date prévue de l'accouchement + 8 semaines après.

FR-ABS-091 : Les RH créent une déclaration de maternité en saisissant : - L'identifiant de l'employée - La date prévue de l'accouchement (date présumée d'accouchement) - (Facultatif) La date réelle de l'accouchement (mise à jour après la naissance)

FR-ABS-092 : Une fois la déclaration de maternité enregistrée, le système : 1. Calcule la période de 14 semaines : start_date = expected_delivery_date - 42 days, end_date = expected_delivery_date + 56 days 2. Crée un enregistrement de congé avec le statut AUTO_APPROVED et le type MATERNITY 3. Vérifie s'il y a des chevauchements entre les congés approuvés → recrédite les jours de congé annuel qui se chevauchent 4. Informe l'employé et son responsable 5. Publie l'événement LeaveApproved avec leaveType = MATERNITY, isPaid = true, payRate = 100

FR-ABS-093 : SI la date d'accouchement réelle diffère de la date prévue, ALORS les RH peuvent mettre à jour la déclaration de maternité. Le système recalcule la période de 8 semaines après l'accouchement en fonction de la date réelle. La période avant l'accouchement reste inchangée.

FR-ABS-094 : Mécanisme de rémunération du congé de maternité [CI — validé temporairement TV-ABS-01] : - L'employeur verse 100 % du salaire de l'employée pendant son congé de maternité. - L'employeur demande ensuite le remboursement intégral à la CNPS. - Coût net pour l'employeur = 0 (après remboursement). - La demande de remboursement à la CNPS est suivie mais NON traitée par le module Absence — il s'agit d'un processus comptable/RH externe au système MVP.

FR-ABS-095 : La salariée est protégée contre le licenciement pendant TOUTE la période de maternité (6 semaines avant et 8 semaines après l'accouchement). Le système n'applique PAS cette règle directement — elle est appliquée par le module Gestion des employés. Cependant, le module Absence publie le statut MaternityLeaveActive que le module Gestion des employés peut vérifier.


B.7 Règles fonctionnelles — Jours fériés [CI]

Jours fériés fixes (CI)

FR-ABS-100 : Le système précharge les jours fériés fixes CI suivants :

Date Nom du jour férié (FR)
1er janvier Jour de l'An
1er mai Fête du Travail
7 août Fête de l'Indépendance
15 août Assomption
1er novembre Toussaint
15 novembre Journée Nationale de la Paix
25 décembre Noël
Lundi de Pâques Lundi de Pâques (variable — fixé par le calendrier)
Jeudi de l'Ascension Ascension (variable — fixé par le calendrier)
Lundi de Pentecôte Pentecôte (variable — fixé par le calendrier)

Jours fériés islamiques variables (CI)

FR-ABS-101 : Les 4 jours fériés islamiques suivants ont des dates variables fixées par observation :

Code du jour férié Nom du jour férié (FR)
EID_FITR Fête de la fin du Ramadan (Aïd el-Fitr)
EID_ADHA Fête du sacrifice (Aïd el-Adha / Tabaski)
MAWLID Anniversaire du Prophète (Mawlid)
LAYLAT_QADR Nuit du Destin (Laylat al-Qadr)

FR-ABS-102 : Les dates variables des jours fériés sont gérées à deux niveaux : 1. L'administrateur de la plateforme définit chaque année les dates par défaut pour tous les tenants CI (saisies une seule fois, elles sont reprises par tous les tenants CI) 2. *L'administrateur du tenant

  • peut remplacer certaines dates de jours fériés variables pour son entreprise (par exemple, si celle-ci observe une date différente)

FR-ABS-103 : SI un jour férié tombe un dimanche, ALORS le lundi suivant est considéré comme jour férié (règle de substitution selon la pratique CI).

Impact des jours fériés sur les congés

FR-ABS-104 : SI un jour férié tombe pendant la période de congé annuel d'un employé, ALORS ce jour férié n'est PAS compté comme un jour de congé. Le solde de congés n'est pas déduit pour ce jour. En pratique, le congé est prolongé d'un jour par jour férié qui le chevauche.


B.8 Règles fonctionnelles — Intégration de la paie

Événements publiés

FR-ABS-110 : le module Absence publie les événements d'application Spring suivants (utilisés par la paie) :

LeaveApproved

Publié lorsque : une demande de congé est approuvée (ou automatiquement approuvée pour un congé maternité).

{
  employeeId: UUID,
  tenantId: UUID,
  leaveRequestId: UUID,
  leaveType: « ANNUAL » | « SICK » | « MATERNITY » | « PATERNITY » | « EXCEPTIONAL » | “UNPAID” | « UNJUSTIFIED »,
  startDate: LocalDate,
  endDate: LocalDate, numberOfDays: BigDecimal, // en jours calendaires
  isPaid: boolean,
  payRate: BigDecimal, // 100, 50 ou 0 (pourcentage)
  sickLeavePhase: « FULL_PAY » | « HALF_PAY » | « ZERO_PAY » | null, // uniquement pour SICK
  halfDayStart : booléen,
  halfDayEnd : booléen
}

LeaveCancelled

Publié lorsque : un congé approuvé est annulé.

{ employeeId : UUID,
  tenantId : UUID,
  leaveRequestId : UUID,
  leaveType : chaîne,
  startDate : LocalDate,
  endDate : LocalDate,
  numberOfDaysCredited : BigDecimal // jours à annuler dans la paie
}

LeaveBalanceSettlement

Publié lorsque : un employé est licencié et dispose d'un solde de congés restant.

{
  employeeId: UUID,
  tenantId: UUID,
  remainingBalance: BigDecimal, // en jours calendaires
  lastAccrualDate: LocalDate,
  terminationDate: LocalDate
}

Événements consommés

FR-ABS-111 : le module Absence consomme les événements suivants :

Événement Publié par Action
EmployeeCreated Plan de contrôle Initialiser le solde de congés (tous les types = 0). Commencer l'accumulation à partir de la date d'embauche.
EmployeeTerminated Gestion des employés / CP Annuler automatiquement les demandes en attente. Conserver les congés approuvés pendant la période de préavis. Calculer le solde restant. Publier LeaveBalanceSettlement.
EmployeeOffboarded Gestion des employés Identique à EmployeeTerminated— déclenche le règlement.
EmployeeReassigned Gestion des employés Mettre à jour la chaîne d'approbation pour toutes les demandes en attente (nouvelle unité organisationnelle = nouveau responsable).
ManagerChanged Données organisationnelles et données de base Mettre à jour le circuit d'approbation pour toutes les demandes en attente des employés concernés.

Dépendances API (synchrones)

FR-ABS-112 : le module Absence appelle les API du plan de contrôle suivantes :

Point de terminaison Objectif
GET /api/v1/cp/org-units/{id}/manager Déterminer l'approbateur d'une demande de congé
GET /api/v1/cp/employees/{id} Récupérer les données de l'employé (catégorie, date d'embauche, ancienneté) pour le calcul des droits acquis
GET /api/v1/cp/employees/{id}/children Récupérer le nombre d'enfants pour le calcul des primes (ou à partir du noyau RH si actif)
GET /api/v1/cp/auth/permissions Vérifier les autorisations des utilisateurs pour l'application du RBAC

B.9 Machine à états — Demande de congé

stateDiagram-v2
    [*] --> DRAFT : L'employé crée hors ligne / enregistre un brouillon
    DRAFT --> PENDING_DOCUMENT : Soumettre (document requis mais manquant)
    DRAFT --> PENDING_APPROVAL : Soumettre (aucun document requis OU document joint)
    PENDING_DOCUMENT --> PENDING_APPROVAL : Document téléchargé
    PENDING_DOCUMENT --> CANCELLED_BY_EMPLOYEE : L'employé annule
    PENDING_APPROVAL --> APPROVED : Le responsable approuve
    PENDING_APPROVAL --> REJETÉ : Le responsable rejette (motif requis)
    EN ATTENTE D'APPROBATION --> ANNULÉ PAR L'EMPLOYÉ : L'employé annule
    APPROUVÉ --> ANNULÉ PAR L'EMPLOYÉ : L'employé annule (avant la date de début)
APPROVED --> CANCELLED_BY_HR : Les RH annulent (à tout moment, motif requis)
APPROVED --> IN_PROGRESS : Date de début atteinte (transition automatique)
IN_PROGRESS --> COMPLETED : Date de fin atteinte (transition automatique) EN COURS --> RETOUR ANTICIPÉ : Les RH enregistrent un retour anticipé
    EN COURS --> ANNULÉ PAR LES RH : Les RH annulent le congé en cours
    REJETÉ --> [*]
    ANNULÉ PAR L'EMPLOYÉ --> [*] ANNULÉ_PAR_RH --> [*]
TERMINÉ --> [*]
RETOUR PRÉCOCE --> [*]

[*] --> APPROUVÉ_AUTOMATIQUEMENT : Déclaration de maternité par RH / Auto-approbation DG
APPROUVÉ_AUTOMATIQUEMENT --> EN_COURS : Date de début atteinte

AUTO_APPROVED --> CANCELLED_BY_HR : Annulation par les RH

Descriptions des statuts

Statut Description Impact sur le solde
DRAFT Enregistré hors ligne ou comme brouillon. Pas encore soumis. Aucun
PENDING_DOCUMENT Soumis mais document justificatif requis manquant. Aucun
EN ATTENTE D'APPROBATION Soumis et en attente de l'approbation du responsable. Aucun (solde réservé mais non déduit)
APPROUVÉ Approuvé par le responsable. Le congé est confirmé. Solde déduit (transaction DEBIT dans le grand livre)
AUTO_APPROVED Congé maternité ou auto-approbation DG. Aucune étape d'approbation manuelle. Solde déduit (ou N/A pour le congé maternité)
REJETÉ Rejeté par le responsable avec justification. Aucun
ANNULÉ_PAR_L'EMPLOYÉ L'employé a annulé la demande. Si APPROUVÉ : solde recrédité (transaction CRÉDIT dans le grand livre)
ANNULÉ_PAR_RH RH/DG a annulé la demande. Si APPROUVÉE/EN_COURS : solde recrédité proportionnellement
EN_COURS Le congé a commencé (date actuelle ≥ date_début). Déjà déduit à APPROUVÉ
TERMINÉ La période de congé est terminée. Aucun impact supplémentaire
EARLY_RETURN L'employé est revenu avant la date_de_fin. Les RH ont ajusté la date de fin. Jours non utilisés recrédités

B.10 Règles fonctionnelles — Grand livre des soldes

Types de transactions du grand livre

FR-ABS-120 : chaque modification du solde de congés est enregistrée comme une transaction immuable du grand livre :

Type de transaction Description Signe du montant
MONTHLY_ACCRUAL Accumulation mensuelle régulière (2,2 jours ouvrables) + (crédit)
SENIORITY_BONUS Prime d'ancienneté annuelle au début de la période + (crédit)
CHILDREN_BONUS Prime annuelle pour enfants au début de la période + (crédit)
LEAVE_DEBIT Jours déduits lorsque le congé est approuvé – (débit)
CANCEL_CREDIT Jours recrédités lorsque le congé est annulé + (crédit)
EARLY_RETURN_CREDIT Jours recrédités en cas de retour anticipé + (crédit)
OVERLAP_CREDIT Jours recrédités lorsqu'un congé prioritaire remplace un congé existant +(crédit)
CARRY_OVER Jours reportés de la période précédente + (crédit)
EXPIRY Jours expirés à la fin de la période de référence (politique de report) – (débit)
MANUAL_ADJUSTMENT Le service RH ajuste manuellement le solde (avec justification) +/–
SETTLEMENT Solde remis à zéro à la fin du contrat (solde restant envoyé à la paie) – (débit)

FR-ABS-121 : Chaque transaction comptable enregistre : - id (UUID) - tenant_id - employee_id - leave_type (ANNUAL, compteur SICK, compteur EXCEPTIONAL, etc.) - transaction_type (à partir du tableau ci-dessus) - amount (BigDecimal, en jours ouvrables — source de vérité) - amount_calendaires (BigDecimal, calculé : montant × 1,25) - amount_ouvres (BigDecimal, calculé : montant × 5/6) - reference_id (FK vers leave_request ou adjustment — nullable) - reason (texte — requis pour MANUAL_ADJUSTMENT, EXPIRY, SETTLEMENT) - created_at (horodatage) - created_by ( user_id)

FR-ABS-122 : Le solde actuel pour un employé/type_de_congé est calculé comme suit :

balance = SUM(amount) WHERE employee_id = ? AND leave_type = ? AND tenant_id = ?

Pour des raisons de performance, un champ current_balance mis en cache est conservé dans le profil de congé de l'employé et mis à jour à chaque transaction. Le grand livre est la source de vérité — le solde mis en cache peut être recalculé à tout moment.

** FR-ABS-123 : Toutes les transactions du grand livre sont immuables** — aucune mise à jour, aucune suppression. Les corrections sont effectuées en ajoutant une nouvelle transaction d'annulation (par exemple, CANCEL_CREDIT pour annuler un LEAVE_DEBIT).


B.11 Tableau de décision — Exigences en matière de documents

Type de congé Document requis ? Type de document Blocage définitif ? Date limite de téléchargement
ANNUEL ❌ Non
MALADIE ✅ Oui Certificat médical ✅ Oui — ne peut être approuvé sans Avant approbation
MATERNITÉ ✅ Oui Attestation médicale (grossesse) ✅ Oui — ne peut être créé sans À la déclaration de maternité
PATERNITÉ ✅ Oui Acte de naissance
✅ Oui — ne peut être approuvé sans Avant approbation
EXCEPTIONNEL ✅ Oui Justificatif (certificat de mariage, certificat de décès, etc.) ✅ Oui — ne peut être approuvé sans Avant approbation
NON PAYÉ ❌ Non
NON JUSTIFIÉ ❌ Non

B.12 Tableau décisionnel — Résolution des chevauchements

Congé existant Nouvelle demande Résolution
ANNUEL (approuvé) MALADIE Répartition automatique : les jours qui se chevauchent deviennent des jours de MALADIE. Les jours annuels sont recrédités.
ANNUEL (approuvé) MATERNITÉ Répartition automatique : les jours qui se chevauchent deviennent des jours de MATERNITÉ. Les jours annuels sont recrédités.
ANNUEL (approuvé) ANNUEL Bloqué : « Vous avez déjà un congé approuvé sur cette période. »
ANNUEL (approuvé) EXCEPTIONNEL Bloqué : « Vous avez déjà un congé approuvé sur cette période. »
MALADIE (approuvé) MATERNITÉ Répartition automatique : les jours qui se chevauchent deviennent des jours de MATERNITÉ. Congés maladie ajustés.
MALADIE (approuvé) ANNUEL Bloqué.
MATERNITÉ (approuvé automatiquement) Tout type Bloqué : « Vous êtes en congé maternité sur cette période. »
Tout (EN ATTENTE) Tout Avertissement : « Vous avez une demande en attente sur cette période. » Autoriser la soumission.

B.13 Exigences en matière de données

Entités clés

leave_type_config (Types de congés configurables par le tenant)

Champ Type Nullable ? Description
id UUID Clé primaire
tenant_id UUID Isolation du tenant
code VARCHAR(20) ANNUAL, SICK, MATERNITY, etc.
name_fr VARCHAR(100) Nom affiché en français
is_paid BOOLEAN Indique si ce type de congé est rémunéré
requires_document BOOLEAN Indique si un justificatif est requis
requires_approval BOOLEAN Si l'approbation du responsable est nécessaire (faux pour le congé maternité)
accrual_based BOOLEAN Si le solde est suivi (vrai pour les congés annuels, faux pour les congés maladie)
max_days_per_year DECIMAL Plafond annuel(par exemple, 10 pour les permissions exceptionnelles)
is_system BOOLEAN Vrai pour les types définis par le système (ne peuvent pas être supprimés)
is_active BOOLEAN Suppression temporaire
country_code VARCHAR(2) CI, BJ, CM — pour la prise en charge de plusieurs pays

leave_request (Demandes de congés individuelles)

Champ Type Nullable ? Description
id UUID Clé primaire
tenant_id UUID Isolation des tenants
employee_id UUID FK vers employee
leave_type_code VARCHAR(20) FK vers leave_type_config.code
event_type_code VARCHAR(30) Pour les CAS EXCEPTIONNELS : MARRIAGE_SELF, DEATH_SPOUSE, etc.
start_date DATE Premier jour d'absence
end_date DATE Dernier jour d'absence (inclus)
half_day_start BOOLEAN Vrai = après-midi uniquement à la date de début
half_day_end BOOLEAN Vrai = matin uniquement à la date de fin
number_of_days DECIMAL Calculé : dans l'unité de déduction du tenant
number_of_days_ouvrables DECIMAL Toujours stocké en jours ouvrables (source de vérité)
status VARCHAR(30) Voir machine à états (B.9)
reason TEXT Motif de la demande de congé de l'employé
rejection_reason TEXT Motif du refus du responsable
cancellation_reason TEXT Motif de l'annulation (obligatoire pour les annulations RH)
approver_id UUID FK vers l'utilisateur — qui a approuvé/refusé
is_retroactive BOOL EAN Vrai si start_date < date de soumission
supporting_document_id UUID FK vers le document (MinIO)
submitted_offline BOOLEAN Vrai si créé hors ligne et soumis automatiquement
created_at TIMESTAMP
updated_at TIMESTAMP
created_by UUID FK vers l'utilisateur

leave_balance_ledger (Registre des transactions)

Voir FR-ABS-121 pour la liste complète des champs.

leave_employee_profile (Configuration des congés par employé)

Champ Type Nullable ? Description
id UUID Clé primaire
tenant_id UUID Isolation des tenants
employee_id UUID FK vers l'employé (unique par tenant)
annual_balance_ouvrables DECIMAL Solde annuel actuel des congés annuels mis en cache (jours ouvrables)
exceptional_days_used_this_period DECIMAL Compteur pour le plafond de 10 jours
sick_days_current_rolling_12m DECIMAL Compteur des jours de congé maladie sur 12 mois glissants (pour la phase du tableau CCI)
sick_leave_phase VARCHAR(20) FULL_PAY, HALF_PAY, ZERO_PAY — phase actuelle de congé maladie
number_of_children_under_21 INTEGER Pour la prime pour enfants (si HR Core n'est pas actif)
reference_period_start DATE Début de la période de référence actuelle
last_accrual_date DATE Dernier mois pour lequel l'accumulation a été traitée

public_holiday (Jours fériés par pays et par an)

Champ Type Nullable ? Description
id UUID Clé primaire
country_code VARCHAR(2) CI, BJ, CM
year INTEGER Année civile
date DATE Date du jour férié
name_fr VARCHAR(100) Nom du jour férié
holiday_code VARCHAR(30) EID_FITR, CHRISTMAS, etc.
is_fixed BOOLEAN Vrai pour les jours fériés à date fixe

| source | VARCHAR(20) | ❌ | PLATFORM (admin) ou TENANT (remplacement) | | tenant_id | UUID | ✅ | NULL pour le niveau plateforme ; tenant_id pour la remplacement tenant |

exceptional_leave_config (Durées exceptionnelles des autorisations spécifiques au tenant)

Champ Type Nullable ? Description
id UUID Clé primaire
tenant_id UUID Isolation du tenant
event_type_code VARCHAR(30) MARRIAGE_SELF, DEATH_SPOUSE, etc.
duration_days DECIMAL Durée configurée par le tenant (doit être ≥ au minimum CCI)
cci_minimum_days DECIMAL Minimum légal CCI (seuil imposé par le système)
country_code VARCHAR(2) CI

maternity_declaration (Suivi de maternité)

Champ Type Nullable ? Description
id UUID Clé primaire
tenant_id UUID Isolation des tenants
employee_id UUID FK vers l'employé
expected_delivery_date DATE Date présumée d'accouchement
actual_delivery_date DATE Mise à jour après la naissance
leave_request_id UUID FK vers la demande de congé créée automatiquement
created_at TIMESTAMP
created_by UUID RH qui a enregistré la déclaration

B.14 Implications multi-tenants

FR-ABS-130 : TOUTES les requêtes de base de données dans le module Absence DOIVENT inclure tenant_id dans la clause WHERE. Aucune exception.

FR-ABS-131 : Les configurations de type de congé, les durées d'exception d'autorisation, les politiques de report et les remplacements de jours fériés sont à l'échelle du tenant. Chaque tenant dispose de sa propre copie issue des valeurs par défaut CI lors de la création du tenant.

FR-ABS-132 : Comportement multi-tenants par profil de base de données :

Profil Comportement
Base de données partagée Tous les tenants dans une seule base de données. Colonne tenant_id dans chaque table. Isolation au niveau des lignes.
Schéma par tenant Chaque tenant dispose de son propre schéma. tenant_id est toujours présent pour des raisons de cohérence, mais le schéma offre une isolation supplémentaire.
DB-per-tenant Chaque tenant dispose de sa propre base de données. Connexion acheminée par tenant.
BYO-DB Le tenant fournit sa propre base de données. Le schéma du module d'absence est migré vers sa base de données.

FR-ABS-133 : Les configurations spécifiques au tenant (types de congés, durées de congés exceptionnels, politiques de report) sont initialisées avec les valeurs par défaut légales de CI lorsqu'un nouveau tenant CI est créé. Le tenant peut ensuite les personnaliser.

FR-ABS-134 : Les jours fériés au niveau de la plateforme (fixes + dates variables définies par l'administrateur de la plateforme ) sont stockés séparément des remplacements au niveau du tenant. La liste des jours fériés effectifs pour un tenant est la suivante : jours fériés de la plateforme + remplacements du tenant (les remplacements du tenant remplacent les valeurs par défaut de la plateforme pour le même holiday_code).


B.15 Dépendances entre modules

Dépendances sur d'autres modules (Absence CONSUME)

Module Type de dépendance Ce dont Absence a besoin
Plan de contrôle Rigide (doit exister) Entité employé, hiérarchie des unités organisationnelles, résolution du responsable, autorisations RBAC, configuration du tenant
HR Core Souple (amélioration facultative) Si actif : données plus riches sur les employés (enfants avec date de naissance pour le calcul des primes). Si inactif : le module Absence gère directement le champ number_of_children_under_21.
Gestion des employés Souple (événements uniquement) Consomme les événements EmployeeTerminated, EmployeeOffboarded, EmployeeReassigned
Données organisationnelles et données de référence Soft (événements uniquement) Consomme l'événement ManagerChanged pour mettre à jour le circuit d'approbation
Gestion avancée des documents Soft (amélioration facultative) Si actif : les documents justificatifs bénéficient d'un contrôle de version et d'une conservation. Si non : téléchargement MinIO de base.

Dépendances À PARTIR d'autres modules (Absence FOURNIT)

Module Type de dépendance Ce que fournit Absence
Paie Événements Événements LeaveApproved, LeaveCancelled, LeaveBalanceSettlement avec charge utile complète (voir B.8)
Présence QR Information Les données d'absence peuvent être utilisées par Présence pour marquer automatiquement les absences prévues (intégration V2)

PARTIE C — Contraintes et limites


C.1 Conformité réglementaire [CI]

Code du travail 2015 (loi n° 2015-532)

Règle Article Mise en œuvre
Congés annuels : 2 jours/mois minimum Art. 25.1 Le système utilise le taux CCI (2,2 jours/mois, plus favorable)
Congés après 12 mois de service Art.25.5 FR-ABS-006 : blocage des congés annuels avant 12 mois
Minimum 14 jours consécutifs Art. 25.6 FR-ABS-045 : avertissement souple
L'employeur donne un préavis de 15 jours Art. 25.7 FR-ABS-044 : avertissement souple
Pas de paiement compensatoire pendant le contrat Art. 25.12 FR-ABS-023 : pas de fonctionnalité de paiement
Paiement obligatoire au départ Art. 25.9 FR-ABS-024 : événement de règlement à la Paie
Maternité : 14 semaines Art. 23.X FR-ABS-090
Protection contre le licenciement pendant la maternité Art. 23.X FR-ABS-095 : statut publié dans la gestion des employés

Convention Collective Interprofessionnelle (CCI 1977)

Règle Article Mise en œuvre
Congés annuels : 2,2 j./mois (plus favorable) CCI Art. 25 FR-ABS -001 : taux d'accumulation de base
Primes d'ancienneté CCI Art. 46 FR-ABS-010 : tableau des primes d'ancienneté
Permissions exceptionnelles CCI Art. 25 B.1 : tableau complet des événements avec un plafond de 10 jours
Tableaux d'indemnisation des congés maladie CCI Art. 28-29 B.5 : tableaux CCI complets par catégorie et d'ancienneté

CNPS (Caisse Nationale de Prévoyance Sociale)

Règle Mise en œuvre
Maternité : la CNPS rembourse l'employeur FR-ABS-094 : suivi, mais processus de demande de remboursement CNPS hors du système pour MVP
Congés maladie Cotisations CNPS sur le salaire réel FR-ABS-083 : base CNPS = montant réellement versé
Absences considérées comme des périodes d'emploi pour la CNPS FR-ABS-016 : l'accumulation se poursuit pendant les absences autorisées

C.2 Exigences de localisation

Dimension Valeur Remarques
Langue principale Français Toutes les étiquettes de l'interface utilisateur, les messages d'erreur et les notifications en français
Format de la date JJ/MM/AAAA « 15/03/2026 » et non « 2026-03-15 »
Devise XOF 0 décimale. « 15 000 FCFA » et non « 15 000,00 FCFA »
Comptage des jours Jours ouvrables comme base légale, avec conversion en jours calendaires/ouvrés Voir FR-ABS-003
Séparateur de milliers Espace « 1 000 » et non « 1,000 »
Clés i18n Toutes les chaînes destinées aux utilisateurs sont externalisées Prêt pour une future version en anglais (CM bilingue)
Conventions de nommage Format « NOM Prénom » Le nom de famille en majuscules est courant dans CI

C.3 Exigences de sécurité

Autorisations RBAC (module Absence)

Autorisation EMPLOYÉ RESPONSABLE RESPONSABLE RH DG
Afficher son propre solde
Soumettre une demande de congé ✅ (propre) ✅ (propre) ✅ (propre + tout employé) ✅ (propre, auto-approuvé)
Annuler sa propre demande
Afficher le calendrier de l'équipe ✅ (subordonnés directs) ✅ (tous les employés) ✅ (tous les employés)
Approuver/refuser les demandes ✅ (subordonnés directs) ✅ (tout employé) ✅ (tout employé)
Annuler les congés des autres ✅ (avec justification) ✅ (avec justification)
Remplacer le solde (ajustement manuel)
Configurer les types de congés
Configurer les jours fériés
Configurer la politique de report
Consulter les documents médicaux
Créer une déclaration de maternité
Consulter le tableau de bord des absences ✅ (équipe) ✅ (tous) ✅ (tous)

Règles d'accès aux données

FR-ABS-140 : Le MANAGER peut voir le type de congé et les dates de ses subordonnés directs, mais NE PEUT PAS consulter les pièces justificatives (certificats médicaux, etc.). Seuls HR_MANAGER et DG peuvent consulter les documents téléchargés.

FR-ABS-141 : L'EMPLOYÉ ne peut voir que ses propres données de congé. Il peut consulter le calendrier de l'équipe, mais uniquement le statut de présence/absence (et non les types de congé des autres).

FR-ABS-142 : Tous les ajustements du solde de congés (MANUAL_ADJUSTMENT) nécessitent une justification et génèrent une entrée dans la piste d'audit visible par l'administrateur du tenant.

FR-ABS-143 : La piste d'audit du module Absence enregistre : - Chaque création, modification de statut ou annulation de demande de congé - Chaque ajustement de solde (manuel ou automatique) - Chaque modification de configuration (types de congés, jours fériés, politique de report) - Qui a fait quoi, quand, avec les valeurs avant/après


C.4 Hors champ d'application

Ce module ne gère PAS :

  1. Les calculs de paie — Le module Absence détermine les types de congés, les jours et les phases (salaire complet/demi-salaire/sans salaire). La paie calcule les retenues et indemnités financières réelles.
  2. Demandes de remboursement CNPS — Le remboursement CNPS pour maternité est un processus comptable/RH externe au système MVP.
  3. Licenciement pour inaptitude — Si un employé épuise ses congés maladie, le module Absence alerte les RH. Le processus de licenciement proprement dit relève de la responsabilité de la gestion des employés (V2).
  4. Configuration de la convention collective — MVP utilise la CCI 1977 comme base de référence. Les conventions sectorielles qui prévalent sur les règles de congé de la CCI sont en V2.
  5. Suivi du temps / présence — Absence enregistre les absences d'un employé. Il ne suit PAS les heures d'arrivée/de départ (module QR Attendance).
  6. Planification des congés à l'échelle de l'entreprise — Les règles de couverture, les niveaux minimaux de personnel et la planification basée sur le calendrier sont UNIQUEMENT DISPONIBLES POUR LES ENTREPRISES V2.
  7. Registre des absences exportable — Le registre officiel des absences pour l'exportation vers l'inspection du travail est V2.
  8. Règles nationales BJ et CM — Les types de congés, les taux d'accumulation et les jours fériés pour le Bénin et le Cameroun sont V2 (mois 9).
  9. Notifications par SMS — MVP utilise uniquement l'application et les e-mails. Les SMS sont disponibles sur toute la plateforme V2.
  10. Congé de formation / Congé syndical — Les types de congés de formation et syndicaux sont disponibles dans la version V2.
  11. Workflows d'approbation avancés — L'approbation automatique basée sur le type, l'escalade basée sur le montant et la délégation sont disponibles dans la version V2.
  12. Opérations par lots — La création massive de congés et les ajustements massifs de soldes sont disponibles UNIQUEMENT POUR ENTERPRISE V2.
  13. Accumulation de congés pour les stagiaires / journaliers — Certains types de contrats peuvent avoir des règles d'accumulation différentes. MVP suppose que tous les employés actifs accumulent des congés au taux CCI. Les règles spécifiques au type de contrat sont disponibles dans la version V2.

Fin de PRD+FSD Hybrid — Gestion des absences (ABSMGT) v1.0