Rubrique « ABSENCE JOURS MATERNITE » (code 6010) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2025-04-01. 5 variantes successives au fil du temps. La formule actuelle (3616 octets) référence 29 variable(s) et 4 fonction(s).
Explication
Cette règle calcule le montant à retenir sur la paie d'un salarié pour une absence liée à une rechute d'accident du travail, en gérant le cas particulier où l'absence chevauche deux mois civils. Le calcul est mené en jours calendaires (et non en jours ouvrés), conformément à la mise à jour de juillet 2018.
La règle commence par décaler la date de début d'absence en y ajoutant les jours de carence éventuels, puis elle identifie le mois de début et le mois de fin de l'absence. Un commentaire descriptif "Absence du ... au ..." est généré pour la fiche de paie.
Ensuite, elle détermine le nombre de jours du mois concerné selon le calendrier civil : 31 jours pour janvier, mars, mai, juillet, août, octobre et décembre ; 30 jours pour avril, juin, septembre et novembre ; 28 jours pour février. À noter : la règle ne semble pas prévoir le cas des années bissextiles (février à 29 jours), ce qui peut être une limite.
Deux situations sont alors distinguées. Premier cas : si l'absence commence et se termine dans le même mois, une seule période est calculée, du premier au dernier jour de l'absence, et la seconde période est mise à zéro. Second cas : si l'absence est à cheval sur deux mois, la règle découpe l'absence en deux tranches, la première allant du début d'absence jusqu'à la fin du mois, la seconde allant du début du mois suivant jusqu'à la date de fin.
Enfin, pour chaque période non nulle, le montant d'absence est obtenu en multipliant le nombre de jours d'absence par le salaire de base de la période divisé par le nombre de jours calendaires de présence de cette période. Le code fourni est tronqué à la fin, donc le traitement du cas "mois unique" dans le calcul du montant n'est pas entièrement visible.
//*****juillet 2018 Gestion en calendaire
XDate_Debut = Date_Debut + jrs_car
mois_deb_abs = MoisDate(XDate_Debut)
mois_fin_abs = MoisDate(Date_Fin)
Commentaire = "Absence du " + XDate_Debut + " au " + Date_Fin
si mois_deb_abs = 1 ou mois_deb_abs = 3 ou mois_deb_abs = 5 ou mois_deb_abs = 7 ou mois_deb_abs = 8 ou mois_deb_abs = 10 ou mois_deb_abs = 12 alors
Nb_jrs_cal_mois_Per_1 = 31
sinonsi mois_deb_abs = 4 ou mois_deb_abs = 6 ou mois_deb_abs = 9 ou mois_deb_abs = 11 alors
Nb_jrs_cal_mois_Per_1 = 30
sinonsi mois_deb_abs = 2 alors
Nb_jrs_cal_mois_Per_1 = 28
finsi
si mois_fin_abs = 1 ou mois_fin_abs = 3 ou mois_fin_abs = 5 ou mois_fin_abs = 7 ou mois_fin_abs = 8 ou mois_fin_abs = 10 ou mois_fin_abs = 12 alors
Nb_jrs_cal_mois_Per_2 = 31
sinonsi mois_fin_abs = 4 ou mois_fin_abs = 6 ou mois_fin_abs = 9 ou mois_fin_abs = 11 alors
Nb_jrs_cal_mois_Per_2 = 30
sinonsi mois_fin_abs = 2 alors
Nb_jrs_cal_mois_Per_2 = 28
finsi
// CALCUL DE LA PERIODE 1
Si mois_deb_abs = mois_fin_abs alors
date_deb_Per_1 = XDate_Debut
date_fin_Per_1 = Date_Fin
Nb_Jrs_Abs_Per_1 = periode(date_deb_Per_1;date_fin_Per_1)
Nb_Jrs_Abs_Per_2 = 0
date_deb_Per_2 = 0
date_fin_Per_2 = 0
// CALCUL DE LA PERIODE 2 : Gestion des absences qui se chevauchent sur 2 mois
sinon
date_deb_Per_1 = XDate_Debut
date_fin_Per_1 = FinMois(XDate_Debut)
date_deb_Per_2 = DebutMois(Date_Fin)
date_fin_Per_2 = Date_Fin
Nb_Jrs_Abs_Per_1 = periode(date_deb_Per_1;date_fin_Per_1)
Nb_Jrs_Abs_Per_2 = periode(date_deb_Per_2;date_fin_Per_2)
Finsi
Si duree_absence <> 0 alors
//Si l'absence est à cheval sur 2 mois on calcule les 2 périodes
si Nb_Jrs_Abs_Per_2 <> 0 alors
montant_absence_Per_1 = Nb_Jrs_Abs_Per_1 * (salaire_base_Per_1 / Nb_jrs_cal_Présence_Per_1)
montant_absence_Per_2 = Nb_Jrs_Abs_Per_2 * (salaire_base_Per_2 / Nb_jrs_cal_Présence_Per_2)
sinon
//Si l'absence est sur un même mois on ne calcule que P
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 4 branche(s) conditionnelle(s), 4 affectation(s).
Affecter à `XDate_Debut` la valeur de (`Date_Debut` plus `jrs_car`)
Affecter à `mois_deb_abs` la valeur de extraire le mois d'une date(`XDate_Debut`)
Affecter à `mois_fin_abs` la valeur de extraire le mois d'une date(`Date_Fin`)
Affecter à `Commentaire` la valeur de (((« Absence du » plus `XDate_Debut`) plus « au ») plus `Date_Fin`)
Si (((((((`mois_deb_abs` égal à 1) ou (`mois_deb_abs` égal à 3)) ou (`mois_deb_abs` égal à 5)) ou (`mois_deb_abs` égal à 7)) ou (`mois_deb_abs` égal à 8)) ou (`mois_deb_abs` égal à 10)) ou (`mois_deb_abs` égal à 12))
Alors :
Affecter à `Nb_jrs_cal_mois_Per_1` la valeur de 31
Sinon, si ((((`mois_deb_abs` égal à 4) ou (`mois_deb_abs` égal à 6)) ou (`mois_deb_abs` égal à 9)) ou (`mois_deb_abs` égal à 11)) :
Affecter à `Nb_jrs_cal_mois_Per_1` la valeur de 30
Sinon, si (`mois_deb_abs` égal à 2) :
Affecter à `Nb_jrs_cal_mois_Per_1` la valeur de 28
Si (((((((`mois_fin_abs` égal à 1) ou (`mois_fin_abs` égal à 3)) ou (`mois_fin_abs` égal à 5)) ou (`mois_fin_abs` égal à 7)) ou (`mois_fin_abs` égal à 8)) ou (`mois_fin_abs` égal à 10)) ou (`mois_fin_abs` égal à 12))
Alors :
Affecter à `Nb_jrs_cal_mois_Per_2` la valeur de 31
Sinon, si ((((`mois_fin_abs` égal à 4) ou (`mois_fin_abs` égal à 6)) ou (`mois_fin_abs` égal à 9)) ou (`mois_fin_abs` égal à 11)) :
Affecter à `Nb_jrs_cal_mois_Per_2` la valeur de 30
Sinon, si (`mois_fin_abs` égal à 2) :
Affecter à `Nb_jrs_cal_mois_Per_2` la valeur de 28
Si (`mois_deb_abs` égal à `mois_fin_abs`)
Alors :
Affecter à `date_deb_Per_1` la valeur de `XDate_Debut`
Affecter à `date_fin_Per_1` la valeur de `Date_Fin`
Affecter à `Nb_Jrs_Abs_Per_1` la valeur de calculer une période(`date_deb_Per_1`, `date_fin_Per_1`)
Affecter à `Nb_Jrs_Abs_Per_2` la valeur de 0
Affecter à `date_deb_Per_2` la valeur de 0
Affecter à `date_fin_Per_2` la valeur de 0
Sinon :
Affecter à `date_deb_Per_1` la valeur de `XDate_Debut`
Affecter à `date_fin_Per_1` la valeur de renvoyer la fin du mois(`XDate_Debut`)
Affecter à `date_deb_Per_2` la valeur de renvoyer le début du mois(`Date_Fin`)
Affecter à `date_fin_Per_2` la valeur de `Date_Fin`
Affecter à `Nb_Jrs_Abs_Per_1` la valeur de calculer une période(`date_deb_Per_1`, `date_fin_Per_1`)
Affecter à `Nb_Jrs_Abs_Per_2` la valeur de calculer une période(`date_deb_Per_2`, `date_fin_Per_2`)
Si (`duree_absence` différent de 0)
Alors :
Si (`Nb_Jrs_Abs_Per_2` différent de 0)
Alors :
Affecter à `montant_absence_Per_1` la valeur de (`Nb_Jrs_Abs_Per_1` multiplié par (`salaire_base_Per_1` divisé par `Nb_jrs_cal_Présence_Per_1`))
Affecter à `montant_absence_Per_2` la valeur de (`Nb_Jrs_Abs_Per_2` multiplié par (`salaire_base_Per_2` divisé par `Nb_jrs_cal_Présence_Per_2`))