Rubrique « ABSENCE AUTORISEE HRS SANS SOLDE » (code 6495) (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 (3448 octets) référence 30 variable(s) et 1 fonction(s).
Explication
Cette regle calcule la retenue sur salaire correspondant a une absence pour conge sans solde, exprimee en heures. Elle determine le montant a deduire, le taux horaire applique, le nombre d'heures decomptees ainsi que la periode calendaire concernee par l'absence.
Premier cas : si le salarie a des heures d'absence enregistrees, deux situations sont distinguees. Lorsque les heures d'absence couvrent la totalite des heures de base du mois (absence complete), la retenue est egale a l'integralite des elements fixes du salaire (signe negatif car il s'agit d'une deduction). Lorsque l'absence est partielle, la retenue est calculee proportionnellement : on etablit d'abord un taux horaire (elements fixes divises par les heures de base), puis on multiplie ce taux par le nombre d'heures d'absence.
Deuxieme cas : un traitement identique est prevu pour les heures d'absence partielles enregistrees separement (autre source de saisie). La logique est la meme - retenue totale si l'absence couvre tout le mois, sinon retenue proportionnelle au temps reellement absent. Un commentaire automatique est genere en mentionnant la date de debut et la date de fin de l'absence planifiee.
Enfin, la regle ajoute depuis juillet 2018 une gestion en calendaire : elle identifie le mois de debut et le mois de fin de l'absence, determine le nombre de jours calendaires de chacun de ces mois (31, 30 ou 28 selon le mois - sans gestion des annees bissextiles), puis decoupe l'absence en periodes. Si l'absence commence et se termine dans le meme mois, une seule periode est calculee et la duree en jours est obtenue via la fonction de calcul de periode entre les deux dates. Le commentaire final reprend les dates reelles de debut et fin.
si heures_absence <> 0 alors
si heures_absence = hrs_base
alors
montant = elts_fixes * -1
taux_horaire = elts_fixes / hrs_base
nbre_heures = heures_absence
sinon
taux_horaire = elts_fixes / hrs_base
montant = heures_absence * taux_horaire * -1
nbre_heures = heures_absence
finsi
finsi
si heures_abs_partiel <> 0 alors
si heures_abs_partiel = hrs_base
alors
montant = elts_fixes * -1
taux_horaire = elts_fixes / hrs_base
heures_absences = heures_abs_partiel
nb_heures = heures_abs_partiel
sinon
taux_horaire = elts_fixes / hrs_base
montant = heures_abs_partiel * taux_horaire * -1
heures_absences = heures_abs_partiel
nb_heures = heures_abs_partiel
Commentaire = "Absence du " + Date_Debut_pla + " au " + Date_Fin_pla
finsi
finsi
//*****juillet 2018 Gestion en calendaire
XDate_Debut = Date_Debut
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
duree_jours = Nb_Jrs_Abs_Per_1
// CALCUL DE LA PERIODE 2 :
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 5 branche(s) conditionnelle(s), 4 affectation(s).
Si (`heures_absence` différent de 0)
Alors :
Si (`heures_absence` égal à `hrs_base`)
Alors :
Affecter à `montant` la valeur de (`elts_fixes` multiplié par (opposé de 1))
Affecter à `taux_horaire` la valeur de (`elts_fixes` divisé par `hrs_base`)
Affecter à `nbre_heures` la valeur de `heures_absence`
Sinon :
Affecter à `taux_horaire` la valeur de (`elts_fixes` divisé par `hrs_base`)
Affecter à `montant` la valeur de ((`heures_absence` multiplié par `taux_horaire`) multiplié par (opposé de 1))
Affecter à `nbre_heures` la valeur de `heures_absence`
Si (`heures_abs_partiel` différent de 0)
Alors :
Si (`heures_abs_partiel` égal à `hrs_base`)
Alors :
Affecter à `montant` la valeur de (`elts_fixes` multiplié par (opposé de 1))
Affecter à `taux_horaire` la valeur de (`elts_fixes` divisé par `hrs_base`)
Affecter à `heures_absences` la valeur de `heures_abs_partiel`
Affecter à `nb_heures` la valeur de `heures_abs_partiel`
Sinon :
Affecter à `taux_horaire` la valeur de (`elts_fixes` divisé par `hrs_base`)
Affecter à `montant` la valeur de ((`heures_abs_partiel` multiplié par `taux_horaire`) multiplié par (opposé de 1))
Affecter à `heures_absences` la valeur de `heures_abs_partiel`
Affecter à `nb_heures` la valeur de `heures_abs_partiel`
Affecter à `Commentaire` la valeur de (((« Absence du » plus `Date_Debut_pla`) plus « au ») plus `Date_Fin_pla`)
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(`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 à `duree_jours` la valeur de `Nb_Jrs_Abs_Per_1`