Rubrique « Assiettes Tr. A, Tr. B, Tr. C Retraite » (code 11200) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2022-02-01. 4 variantes successives au fil du temps. La formule actuelle (2546 octets) référence 26 variable(s) et 2 fonction(s).
Explication
Cette règle calcule la répartition du salaire brut cumulé du salarié sur les différentes tranches qui servent de base au calcul des cotisations de retraite. Autrement dit, elle détermine quelle part de la rémunération relève de chaque tranche, en tenant compte de ce qui a déjà été pris en compte sur les périodes précédentes.
Le mode de calcul dépend du statut du salarié. S'il est cadre, la règle utilise trois tranches : la tranche A est plafonnée au plafond de la Sécurité sociale, la tranche B s'étend jusqu'à quatre fois ce plafond, et la tranche C jusqu'à huit fois ce plafond. Le brut cumulé est réparti dans l'ordre : on remplit d'abord la tranche A, puis ce qui dépasse alimente la tranche B, et le reste va en tranche C. S'il est non cadre, la règle utilise seulement deux tranches : la tranche 1 jusqu'au plafond, et la tranche 2 jusqu'à trois fois le plafond.
Dans tous les cas, la règle déduit de chaque tranche ce qui a déjà été cumulé lors des paies précédentes, afin de ne calculer que la part nouvelle du mois en cours. Les montants sont arrondis au centime.
La règle gère également deux situations particulières évoquées dans l'en-tête : le cas d'une paie exceptionnelle calculée après une paie normale (pour éviter un double comptage du brut), et le cas des salariés multi-employeurs, où les sommes isolées sont neutralisées pour ne pas fausser la répartition entre contrats.
Note : l'extrait de code se termine de façon tronquée sur la logique de répartition multi-contrats (variable « Divi » incomplète), donc le détail final de cette répartition entre plusieurs contrats n'est pas entièrement visible ici.
{**********************************************************
* HISTORIQUE DES MODIFICATIONS
* Mars 2008 : Avant cette version, le calcul d'une paye
* exceptionnelle après le calcul des payes
* normales pour les multiemplois faussait le
* calcul des tranches car le cumul BRUT mensuel
* prenait en compte les payes normales.
* Afin de corriger ce problème on ajoute un test
* pour savoir si le compteur BRUT et le compteur
* BRUT Global sont différents. Si c'est le cas,
* on gère le fait que le calcul correspond à une
* paye normale (tous contrats). Sinon, on
* considère qu'il s'agit d'une paye exceptionnelle
* et donc pas de prorata.
*
* février 2009 : Prise en compte des sommes isolées pour
* que ces dernières ne modifient pas la répartition
* des tranches de cotisation pour les multipostes
*
**************************************************************}
si test_cadre <> 0 alors
PTA = CumulPlafond
PTB = PTA * 4
PTC = PTA * 8
TrancheA = min (CumulPlafond ; CumulBrut)
TrancheB = min (CumulBrut ; PTB)
TrancheB = TrancheB - TrancheA
TrancheC = min (CumulBrut ; PTC)
TrancheC = TrancheC - TrancheB - TrancheA
TrancheA = Arrondi (TrancheA - CumulTrA - CumulTr1; 0,01)
TrancheB = Arrondi (TrancheB - CumulTrB - CumulTr2; 0,01)
TrancheC = Arrondi (TrancheC - CumulTrC; 0,01)
sinon
PT1 = CumulPlafond
PT2 = PT1 * 3
Tranche1 = min (CumulPlafond ; CumulBrut)
Tranche2 = min (CumulBrut ; PT2)
Tranche2 = Tranche2 - Tranche1
Tranche1 = Arrondi (Tranche1 - CumulTr1; 0,01)
Tranche2 = Arrondi (Tranche2 - CumulTr2; 0,01)
finsi
// Si salarié non déclaré multi emploi, ou un seul bulletin calculé
// simultanément pas de répartition sur les contrats
{
si Multi_emploi = oui et compteur_brut_cnt <> compteur_brut_global alors
diviseur = brut_grp - sommes_isolées_grp
sinon
Divi
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 (`test_cadre` différent de 0)
Alors :
Affecter à `PTA` la valeur de `CumulPlafond`
Affecter à `PTB` la valeur de (`PTA` multiplié par 4)
Affecter à `PTC` la valeur de (`PTA` multiplié par 8)
Affecter à `TrancheA` la valeur de prendre le minimum(`CumulPlafond`, `CumulBrut`)
Affecter à `TrancheB` la valeur de prendre le minimum(`CumulBrut`, `PTB`)
Affecter à `TrancheB` la valeur de (`TrancheB` moins `TrancheA`)
Affecter à `TrancheC` la valeur de prendre le minimum(`CumulBrut`, `PTC`)
Affecter à `TrancheC` la valeur de ((`TrancheC` moins `TrancheB`) moins `TrancheA`)
Affecter à `TrancheA` la valeur de arrondir(((`TrancheA` moins `CumulTrA`) moins `CumulTr1`), 0,01)
Affecter à `TrancheB` la valeur de arrondir(((`TrancheB` moins `CumulTrB`) moins `CumulTr2`), 0,01)
Affecter à `TrancheC` la valeur de arrondir((`TrancheC` moins `CumulTrC`), 0,01)
Sinon :
Affecter à `PT1` la valeur de `CumulPlafond`
Affecter à `PT2` la valeur de (`PT1` multiplié par 3)
Affecter à `Tranche1` la valeur de prendre le minimum(`CumulPlafond`, `CumulBrut`)
Affecter à `Tranche2` la valeur de prendre le minimum(`CumulBrut`, `PT2`)
Affecter à `Tranche2` la valeur de (`Tranche2` moins `Tranche1`)
Affecter à `Tranche1` la valeur de arrondir((`Tranche1` moins `CumulTr1`), 0,01)
Affecter à `Tranche2` la valeur de arrondir((`Tranche2` moins `CumulTr2`), 0,01)