Rubrique « ABSENCE JOURS PATERNITE » (code 6020) (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 (3558 octets) référence 29 variable(s) et 4 fonction(s).
Explication
Cette rubrique calcule l'absence pour congé de paternité et son impact sur la paie du salarié, en gérant aussi le cas où l'absence chevauche deux mois civils.
Premier cas : s'il s'agit d'une régularisation d'une absence déjà saisie auparavant (présence d'une base de régularisation), la règle reprend simplement les valeurs d'origine en les inversant : durée d'absence, taux journalier, montant à déduire du salaire, part patronale, heures d'absence et autres compteurs sont repris en négatif, avec un commentaire commençant par "Régul". Le traitement s'arrête là.
Sinon, la règle traite une nouvelle absence. Elle décale la date de début en ajoutant un éventuel délai de carence (jours non indemnisés en début de congé), puis identifie le mois de début et le mois de fin de l'absence. Elle prépare un commentaire indiquant la période "Absence du ... au ...".
Elle détermine ensuite le nombre de jours calendaires du mois de début et du mois de fin selon le calendrier (31 jours pour janvier, mars, mai, juillet, août, octobre, décembre ; 30 jours pour avril, juin, septembre, novembre ; 28 jours pour février). Remarque : février est figé à 28 jours, les années bissextiles ne semblent pas prises en compte ici.
Puis elle découpe l'absence en une ou deux périodes. Si début et fin sont dans le même mois, il n'y a qu'une seule période couvrant toute l'absence. Sinon, elle crée une première période allant du début jusqu'à la fin du mois de départ, et une seconde période allant du premier jour du mois suivant jusqu'à la date de fin, et compte les jours d'absence dans chaque période.
Le code fourni est tronqué : la suite, qui applique réellement la déduction au salaire selon les deux périodes, 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
heures_abs = 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 Xduree_absence <> 0 alors
//Si l'absence est à cheval sur 2 mois on cal
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 à `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`)