ajoute le calcul de la régularisation progressive pour un mois donné

feat/3221-rgcp-hs-par-mois
Alice Dahan 2024-10-29 17:21:57 +01:00
parent e9919ed3ad
commit b3709778bc
2 changed files with 46 additions and 5 deletions

View File

@ -331,10 +331,10 @@ salarié . cotisations . exonérations . réduction générale:
produit:
- 1.6 * temps de travail . SMIC / cotisations . assiette - 1
- T / 0.6
plancher: 0%
plancher: 0
plafond: T
unité: '%'
arrondi: 2 décimales
unité: ''
arrondi: 4 décimales
références:
Code de la sécurité sociale: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000048852497
Urssaf.fr: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/reduction-generale-cotisation.html#ancre-les-trois-etapes-de-calcul
@ -366,9 +366,9 @@ salarié . cotisations . exonérations . réduction générale:
- 130%
salarié . cotisations . exonérations . T:
privé: oui
titre: Coefficient T
unité: '%'
unité: ''
arrondi: 4 décimales
somme:
- sécurité sociale et chômage
- valeur: retraite complémentaire . employeur . taux T1

View File

@ -84,3 +84,44 @@ const getRégularisationAnnuelle = (
return realRéductionGénéraleAnnuelle - currentRéductionGénéraleAnnuelle
}
export const getRégularisationProgressive = (
monthIndex: number,
data: MonthState[],
engine: Engine<DottedName>
): number => {
if (monthIndex > data.length - 1) {
return 0
}
const nbOfMonths = monthIndex + 1
const partialData = data.slice(0, nbOfMonths)
const currentRéductionGénéraleTotale = sumAll(
partialData.map((monthData) => monthData.réductionGénérale)
)
const rémunérationBruteTotale = sumAll(
partialData.map((monthData) => monthData.rémunérationBrute)
)
const SMICMensuel = engine.evaluate({
valeur: 'salarié . temps de travail . SMIC',
unité: 'heures/mois',
}).nodeValue as number
// Si on laisse l'engine calculer T dans le calcul de la réduction générale,
// le résultat ne sera pas bon à cause de l'assiette de cotisations du contexte
const coefT = engine.evaluate({
valeur: 'salarié . cotisations . exonérations . T' ,
}).nodeValue as number
const realRéductionGénéraleTotale = engine.evaluate({
valeur: réductionGénéraleDottedName,
arrondi: 'non',
contexte: {
[rémunérationBruteDottedName]: rémunérationBruteTotale,
'salarié . temps de travail . SMIC': nbOfMonths * SMICMensuel,
'salarié . cotisations . exonérations . T': coefT,
}
}).nodeValue as number
return realRéductionGénéraleTotale - currentRéductionGénéraleTotale
}