Rubrique « ABSENCE JOURS ENFANT MALADE (<3jrs) » (code 6110) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2025-04-01. 6 variantes successives au fil du temps. La formule actuelle (3736 octets) référence 30 variable(s) et 4 fonction(s).
Explication
Cette règle calcule le montant à retenir sur le salaire lorsqu'un salarié s'absente, en tenant compte du fait que l'absence peut être à cheval sur deux mois. Elle s'applique en mode calendaire (tous les jours du calendrier comptent, pas seulement les jours ouvrés), conformément à la mise à jour de juillet 2018.
Le point de départ est la date de début de l'absence et sa durée, qui permettent de déterminer la date de fin. La règle identifie ensuite le mois de début et le mois de fin de l'absence, puis détermine combien de jours calendaires comporte chacun de ces mois : 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.
Deux cas de figure sont alors distingués. Premier cas : l'absence se déroule entièrement dans un même mois. La règle compte simplement le nombre de jours d'absence sur cette période unique. Deuxième cas : l'absence chevauche deux mois. La règle découpe alors l'absence en deux périodes distinctes, l'une allant du début de l'absence jusqu'à la fin du premier mois, l'autre allant du début du second mois jusqu'à la fin de l'absence. Le nombre de jours d'absence est calculé séparément pour chacune.
Enfin, si la durée d'absence n'est pas nulle, le montant à déduire est obtenu en multipliant, pour chaque période concernée, le nombre de jours d'absence par le salaire de base de la période divisé par le nombre de jours de présence calendaire de ce mois. Cela garantit une retenue proportionnelle et correcte même quand l'absence couvre deux mois aux durées différentes.
////*****juillet 2018 Gestion en calendaire
XDate_Fin = Date_Debut + duree_absence -1
XDate_Debut = Date_Debut
mois_deb_abs = MoisDate(XDate_Debut)
mois_fin_abs = MoisDate(XDate_Fin)
Commentaire = "Absence du " + XDate_Debut + " au " + XDate_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 = XDate_Fin
Nb_Jrs_Abs_Per_1 = periode(date_deb_Per_1;date_fin_Per_1)
Nb_Jrs_Abs_Per_2 = 0
Prorata_plfd = Prorata_plfd_Per_1
// 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(XDate_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
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 4 branche(s) conditionnelle(s), 5 affectation(s).
Affecter à `XDate_Fin` la valeur de ((`Date_Debut` plus `duree_absence`) moins 1)
Affecter à `XDate_Debut` la valeur de `Date_Debut`
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(`XDate_Fin`)
Affecter à `Commentaire` la valeur de (((« Absence du » plus `XDate_Debut`) plus « au ») plus `XDate_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 `XDate_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 à `Prorata_plfd` la valeur de `Prorata_plfd_Per_1`
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(`XDate_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`))