Rubrique « Assiettes TA TB TC Complt Vieill. Tps Pa » (code 11010) (RUB_GAIN=0 : retenue, info ou technique selon usage). Actuellement active, variante en vigueur depuis le 2022-02-01. 6 variantes successives au fil du temps. La formule actuelle (1759 octets) référence 29 variable(s) et 2 fonction(s).
Explication
Cette règle reconstitue un salaire « équivalent temps plein » pour le mois, puis répartit ce salaire dans les tranches de cotisation (TA/TB/TC pour les cadres, ou Tranche 1/Tranche 2 pour les non-cadres). Elle sert à calculer correctement les assiettes des cotisations vieillesse plafonnées et déplafonnées quand le salarié n'a pas travaillé un mois complet.
Premier cas : si le salarié a déjà fait au moins l'horaire mensuel d'un temps plein, la règle s'arrête, il n'y a rien à recalculer.
Sinon, on cherche à savoir quel aurait été le salaire pour un mois complet. S'il n'y a pas eu d'absences (seulement des heures complémentaires éventuelles), on proratise le brut du mois par rapport à l'horaire temps plein. S'il y a eu des absences, on reprend directement le salaire reconstitué déjà connu (cumul « salaire complet »).
Cas particulier des forfaits jours : on estime un nombre d'heures théorique à partir du brut divisé par 1,7 fois le SMIC horaire (plafonné à 151,67 h), puis on applique le même prorata pour obtenir le salaire temps plein.
Une fois ce salaire reconstitué obtenu, la règle calcule les tranches du mois en cumulé depuis le début de l'année, puis soustrait ce qui a déjà été déclaré les mois précédents, pour ne garder que la part du mois courant. Pour un cadre, on obtient trois tranches (plafond, 4 plafonds, 8 plafonds). Pour un non-cadre, deux tranches (plafond, 3 plafonds). Les résultats sont arrondis au centime et stockés dans PTAC, PTBC et, le cas échéant, PTCC.
Point ambigu : le test « cadre » repose sur une variable technique dont le sens exact (statut contractuel ou affiliation AGIRC historique) n'est pas précisé ici.
si heures_payées >= hor_mens_tps_complet alors
quitter
finsi
//recalcul du salaire temps complet
// Pas d'absences, uniquement des Heures complémentaires
Si Cons_cnt_sal_complet = 0 alors
si heures_payées <> 0 alors
Rem_tps_complet_du_mois = arrondi(Brut_Mensuel_du_mois * (hor_mens_tps_complet / heures_payées);0.01)
finsi
Sinon
Rem_tps_complet_du_mois = Cons_cnt_sal_complet
Finsi
// Gestion des forfait Jours
Si Test_Forfait = 1 alors
heures_payées_Forfait = arrondi(Brut_Mensuel_du_mois / (Smic_horaire *1.7);0.01)
heures_payées_Forfait = min(151.67;heures_payées_Forfait)
si heures_payées_Forfait <> 0 alors
Rem_tps_complet_du_mois = arrondi(Brut_Mensuel_du_mois * (hor_mens_tps_complet / heures_payées_Forfait);0.01)
finsi
FinSI
si test_cadre <> 0 alors
PTA = CumulPlafond
PTB = PTA * 4
PTC = PTA * 8
TrancheA = min (CumulPlafond ; (CumulBrut_mois_dernier + Rem_tps_complet_du_mois) )
TrancheB = min ((CumulBrut_mois_dernier + Rem_tps_complet_du_mois) ; PTB)
TrancheB = TrancheB - TrancheA
TrancheC = min ((CumulBrut_mois_dernier + Rem_tps_complet_du_mois) ; PTC)
TrancheC = TrancheC - TrancheB - TrancheA
TrancheA = Arrondi (TrancheA - CumulTrA; 0,01)
TrancheB = Arrondi (TrancheB - CumulTrB; 0,01)
TrancheC = Arrondi (TrancheC - CumulTrC; 0,01)
PTAC = TrancheA
PTBC = TrancheB
PTCC = TrancheC
sinon
PT1 = CumulPlafond
PT2 = PT1 * 3
Tranche1 = min (CumulPlafond ; (CumulBrut_mois_dernier + Rem_tps_complet_du_mois) )
Tranche2 = min ((CumulBrut_mois_dernier + Rem_tps_complet_du_mois) ; PT2)
Tranche2 = Tranche2 - Tranche1
Tranche1 = Arrondi (Tranche1 - CumulTr1; 0,01)
Tranche2 = Arrondi (Tranche2 - CumulTr2; 0,01)
PTAC = Tranche1
PTBC = Tranche2
finsi
Narration structurée
Arbre des cas et actions extrait du code par le parseur CEGI.
Résumé : Formule contenant 4 branche(s) conditionnelle(s).
Si (`heures_payées` supérieur ou égal à `hor_mens_tps_complet`)
Alors :
Sortir de la formule sans calcul
Si (`Cons_cnt_sal_complet` égal à 0)
Alors :
Si (`heures_payées` différent de 0)
Alors :
Affecter à `Rem_tps_complet_du_mois` la valeur de arrondir((`Brut_Mensuel_du_mois` multiplié par (`hor_mens_tps_complet` divisé par `heures_payées`)), 0.01)
Sinon :
Affecter à `Rem_tps_complet_du_mois` la valeur de `Cons_cnt_sal_complet`
Si (`Test_Forfait` égal à 1)
Alors :
Affecter à `heures_payées_Forfait` la valeur de arrondir((`Brut_Mensuel_du_mois` divisé par (`Smic_horaire` multiplié par 1.7)), 0.01)
Affecter à `heures_payées_Forfait` la valeur de prendre le minimum(151.67, `heures_payées_Forfait`)
Si (`heures_payées_Forfait` différent de 0)
Alors :
Affecter à `Rem_tps_complet_du_mois` la valeur de arrondir((`Brut_Mensuel_du_mois` multiplié par (`hor_mens_tps_complet` divisé par `heures_payées_Forfait`)), 0.01)
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_mois_dernier` plus `Rem_tps_complet_du_mois`))
Affecter à `TrancheB` la valeur de prendre le minimum((`CumulBrut_mois_dernier` plus `Rem_tps_complet_du_mois`), `PTB`)
Affecter à `TrancheB` la valeur de (`TrancheB` moins `TrancheA`)
Affecter à `TrancheC` la valeur de prendre le minimum((`CumulBrut_mois_dernier` plus `Rem_tps_complet_du_mois`), `PTC`)
Affecter à `TrancheC` la valeur de ((`TrancheC` moins `TrancheB`) moins `TrancheA`)
Affecter à `TrancheA` la valeur de arrondir((`TrancheA` moins `CumulTrA`), 0,01)
Affecter à `TrancheB` la valeur de arrondir((`TrancheB` moins `CumulTrB`), 0,01)
Affecter à `TrancheC` la valeur de arrondir((`TrancheC` moins `CumulTrC`), 0,01)
Affecter à `PTAC` la valeur de `TrancheA`
Affecter à `PTBC` la valeur de `TrancheB`
Affecter à `PTCC` la valeur de `TrancheC`
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_mois_dernier` plus `Rem_tps_complet_du_mois`))
Affecter à `Tranche2` la valeur de prendre le minimum((`CumulBrut_mois_dernier` plus `Rem_tps_complet_du_mois`), `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)