Rubrique « ABSENCE JOURS ANCIENNETE » (code 6140) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2025-04-01. 3 variantes successives au fil du temps. La formule actuelle (3496 octets) référence 28 variable(s) et 4 fonction(s).
Explication
Cette regle calcule une absence exprimee en jours d'anciennete et determine son impact sur le bulletin de paie, en tenant compte du fait que l'absence peut s'etaler sur deux mois civils.
Premier cas : si la rubrique a deja une base enregistree (c'est-a-dire qu'il s'agit d'une regularisation d'une absence saisie precedemment), la regle inverse les valeurs existantes en les passant en negatif : la duree, le montant salarial, le taux patronal, le montant patronal et les stockages annexes sont remis en sens contraire. Un commentaire "Regul" est ajoute pour tracer l'operation, puis le traitement s'arrete.
Sinon, la regle traite une nouvelle absence en mode calendaire (et non en jours ouvres). Elle decale la date de debut en y ajoutant un eventuel delai de carence, puis identifie le mois de debut et le mois de fin de l'absence. Un commentaire descriptif "Absence du ... au ..." est genere automatiquement.
Pour chacun des deux mois concernes, elle determine le nombre de jours calendaires (31, 30 ou 28 selon le mois ; fevrier est fixe a 28, donc les annees bissextiles ne semblent pas gerees ici, ce qui peut etre une approximation).
Ensuite, deux situations sont distinguees. Si l'absence commence et se termine dans le meme mois, la duree est calculee en une seule periode, du debut a la fin. Si elle chevauche deux mois, elle est decoupee en deux periodes : la premiere va du debut de l'absence jusqu'a la fin du mois, la seconde du premier jour du mois suivant jusqu'a la date de fin. Le nombre de jours de chaque periode est calcule separement.
Le code fourni se termine de maniere incomplete (commentaire coupe), donc l'etape finale de valorisation monetaire n'est pas visible.
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
X1= R_Stockage_Autre * -1
X1= 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 duree_absence <> 0 alors
//Si l'absence est à cheval sur 2 mois on calcule les 2 pé
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 à `X1` la valeur de (`R_Stockage_Autre` multiplié par (opposé de 1))
Affecter à `X1` 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`)