Rubrique « ABSENCE JOURS INVALIDITE » (code 6235) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2025-04-01. 4 variantes successives au fil du temps. La formule actuelle (3520 octets) référence 30 variable(s) et 4 fonction(s).
Explication
Cette regle calcule l'impact sur la paye d'une absence pour jours d'invalidite : elle determine la duree de l'absence, le montant a retenir sur le salaire, et repartit cette absence sur le ou les mois concernes lorsqu'elle s'etend sur deux mois calendaires.
Premier cas traite : la regularisation. Si une base de regularisation est fournie (par exemple, pour corriger une absence d'un mois precedent), la regle reprend les valeurs d'origine en les inversant (signe negatif) pour annuler ou ajuster ce qui avait deja ete compte : duree, taux journalier, montant salarial, parts patronales, heures d'absence et prorata du plafond. Un commentaire "Regul" est ajoute, puis le traitement s'arrete la.
En dehors de ce cas, la regle traite une absence courante. Elle decale d'abord la date de debut en tenant compte d'un eventuel delai de carence (jours non indemnises au debut de l'arret). Elle identifie ensuite le mois de debut et le mois de fin de l'absence, et determine combien de jours calendaires comporte chacun de ces mois (31, 30 ou 28 selon le mois ; attention, fevrier est fige a 28 jours, donc les annees bissextiles ne semblent pas prises en compte - point a confirmer).
Un commentaire descriptif du type "Absence du [date debut] au [date fin]" est genere pour la fiche de paye.
Enfin, la regle distingue deux situations : si l'absence commence et se termine dans le meme mois, elle compte simplement le nombre de jours entre les deux dates ; si l'absence chevauche deux mois, elle la decoupe en deux periodes (du debut jusqu'a la fin du premier mois, puis du debut du second mois jusqu'a la date de fin) et compte les jours de chaque periode separement, afin de repartir correctement la retenue sur les deux bulletins concernes.
Le code fourni semble tronque a la fin (le bloc final n'est pas referme), donc le calcul final de la retenue elle-meme n'est pas visible ici.
Si R_Base <> 0 alors
Xduree_absence= R_Base* -1
taux_journ= R_TxSal
montant_absence = R_MontantSal * -1
Commentaire = "Régul " + R_Commentaire
X1 = R_TxPat * -1
X1 = R_MontantPat * -1
heures_abs= R_Stockage_Autre * -1
Prorata_plfd= R_Stockage_Autre2 * -1
Quitter
Finsi
Xduree_absence =duree_absence
//*****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 Xduree_absence <> 0 alors
//Si l'absence est à cheval sur 2 mois
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 5 branche(s) conditionnelle(s), 5 affectation(s).
Si (`R_Base` différent de 0)
Alors :
Affecter à `Xduree_absence` la valeur de (`R_Base` multiplié par (opposé de 1))
Affecter à `taux_journ` la valeur de `R_TxSal`
Affecter à `montant_absence` la valeur de (`R_MontantSal` multiplié par (opposé de 1))
Affecter à `Commentaire` la valeur de (« Régul » plus `R_Commentaire`)
Affecter à `X1` la valeur de (`R_TxPat` multiplié par (opposé de 1))
Affecter à `X1` la valeur de (`R_MontantPat` multiplié par (opposé de 1))
Affecter à `heures_abs` la valeur de (`R_Stockage_Autre` multiplié par (opposé de 1))
Affecter à `Prorata_plfd` la valeur de (`R_Stockage_Autre2` multiplié par (opposé de 1))
Sortir de la formule sans calcul
Affecter à `Xduree_absence` la valeur de `duree_absence`
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`)