Rubrique « Proratisation nbre heures /jours » (code 25) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2018-07-02. 4 variantes successives au fil du temps. La formule actuelle (1303 octets) référence 17 variable(s) et 6 fonction(s).
Explication
Cette règle calcule le nombre d'heures de travail d'un salarié lorsqu'il n'a pas été présent tout le mois (par exemple en cas d'embauche, de départ ou d'absence en cours de mois). Elle adapte le temps de travail au prorata de la période réellement effectuée, et le fait selon trois méthodes de calcul différentes en parallèle, pour couvrir les différents usages possibles en paie.
La règle ne s'applique que si l'établissement a bien un nombre d'heures de référence défini. Dans ce cas, elle commence par compter le nombre de jours entre les deux dates de la période concernée.
Pour la première méthode, dite « en trentièmes », le mois est toujours ramené à 30 jours. Une attention particulière est portée au mois de février : s'il compte 28 ou 29 jours complets, il est considéré comme un mois plein de 30 jours, pour ne pas pénaliser le salarié. Pour les autres mois, on retient le plus petit nombre entre les jours réels et 30. Le nombre d'heures du salarié est alors obtenu en proratisant ses heures contractuelles sur cette base.
La deuxième méthode proratise selon les jours ouvrables réellement compris dans la période (généralement du lundi au samedi). La troisième méthode proratise selon les jours ouvrés (jours réellement travaillés, hors week-ends et fériés), en s'appuyant sur le nombre moyen de jours ouvrés du mois.
Au final, les trois résultats sont arrondis au centième d'heure près. Le service paie dispose ainsi de trois valeurs d'heures proratisées (trentièmes, ouvrables, ouvrés) utilisables selon la convention ou la rubrique de paie concernée.
si heures_établissement <> 0 alors
// proratisation en trentièmes
nombre_de_jours_t = Periode(Date2 ; Date1)
SI Numéro_mois = 2 alors
si nombre_de_jours_t = 28 ou nombre_de_jours_t = 29 alors
nombre_jours_trente = trente_jours
sinon
nombre_jours_trente = nombre_de_jours_t
finsi
SINON
nombre_jours_trente = Min(trente_jours ; nombre_de_jours_t)
FINSI
nombre_heures_salarie = heures_contrats * nombre_jours_trente / trente_jours
// proratisation en jours ouvrables
jours_ouvrables = PeriodeOuvrable(Date1;Date2)
nombre_heures_salarie_ouvrables = heures_jour_ouvrables * jours_ouvrables * heures_contrats / heures_établissement
// proratisation en jours ouvrés
jours_ouvres = PeriodeOuvre(Date1;Date2)
nombre_heures_salarie_ouvre = heures_établissement / nbre_jours_ouvre_mois_moyen * heures_contrats / heures_établissement * jours_ouvres
nombre_heures_salarie_ouvre = Arrondi (nombre_heures_salarie_ouvre; 0,01)
nombre_heures_salarie_ouvrables = Arrondi (nombre_heures_salarie_ouvrables; 0,01)
nombre_heures_salarie = Arrondi (nombre_heures_salarie; 0,01)
finsi
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 1 branche(s) conditionnelle(s).
Si (`heures_établissement` différent de 0)
Alors :
Affecter à `nombre_de_jours_t` la valeur de calculer une période(`Date2`, `Date1`)
Si (`Numéro_mois` égal à 2)
Alors :
Si ((`nombre_de_jours_t` égal à 28) ou (`nombre_de_jours_t` égal à 29))
Alors :
Affecter à `nombre_jours_trente` la valeur de `trente_jours`
Sinon :
Affecter à `nombre_jours_trente` la valeur de `nombre_de_jours_t`
Sinon :
Affecter à `nombre_jours_trente` la valeur de prendre le minimum(`trente_jours`, `nombre_de_jours_t`)
Affecter à `nombre_heures_salarie` la valeur de ((`heures_contrats` multiplié par `nombre_jours_trente`) divisé par `trente_jours`)
Affecter à `jours_ouvrables` la valeur de calculer une période ouvrable(`Date1`, `Date2`)
Affecter à `nombre_heures_salarie_ouvrables` la valeur de (((`heures_jour_ouvrables` multiplié par `jours_ouvrables`) multiplié par `heures_contrats`) divisé par `heures_établissement`)
Affecter à `jours_ouvres` la valeur de calculer une période ouvrée(`Date1`, `Date2`)
Affecter à `nombre_heures_salarie_ouvre` la valeur de ((((`heures_établissement` divisé par `nbre_jours_ouvre_mois_moyen`) multiplié par `heures_contrats`) divisé par `heures_établissement`) multiplié par `jours_ouvres`)
Affecter à `nombre_heures_salarie_ouvre` la valeur de arrondir(`nombre_heures_salarie_ouvre`, 0,01)
Affecter à `nombre_heures_salarie_ouvrables` la valeur de arrondir(`nombre_heures_salarie_ouvrables`, 0,01)
Affecter à `nombre_heures_salarie` la valeur de arrondir(`nombre_heures_salarie`, 0,01)