diff --git a/site/build/prerender.ts b/site/build/prerender.ts
index c3b5e89d12..077f10cf3c 100644
--- a/site/build/prerender.ts
+++ b/site/build/prerender.ts
@@ -51,6 +51,7 @@ export const pagesToPrerender: {
sitePathFr.simulateurs['profession-libérale'].avocat,
sitePathFr.simulateurs['profession-libérale']['chirurgien-dentiste'],
sitePathFr.simulateurs['profession-libérale'].index,
+ sitePathFr.simulateurs['réduction-générale'],
].map((val) => encodeURI(val)),
infrance: [
sitePathEn.index,
diff --git a/site/cypress/integration/mon-entreprise/reduction-generale.ts b/site/cypress/integration/mon-entreprise/reduction-generale.ts
new file mode 100755
index 0000000000..873e60d533
--- /dev/null
+++ b/site/cypress/integration/mon-entreprise/reduction-generale.ts
@@ -0,0 +1,110 @@
+import { checkA11Y, fr } from '../../support/utils'
+
+describe('Réduction générale', { testIsolation: false }, function () {
+ if (!fr) {
+ return
+ }
+
+ const inputSelector = 'div[id="simulator-legend"] input[inputmode="numeric"]'
+
+ before(function () {
+ return cy.visit('/simulateurs/réduction-générale')
+ })
+
+ it('should not crash', function () {
+ cy.contains('Salaire brut')
+ })
+
+ it('should allow to select a company size', function () {
+ cy.get('button').contains('SMIC').click()
+
+ cy.contains('Plus de 50 salariés').click()
+ cy.contains('Modifier mes réponses').click()
+ cy.get('div[data-cy="modal"]')
+ .eq(0)
+ .contains('Effectif')
+ .next()
+ .contains('100')
+ cy.get('div[data-cy="modal"]').eq(0).contains('Fermer').click()
+
+ cy.contains('Moins de 50 salariés').click()
+ cy.contains('Modifier mes réponses').click()
+ cy.get('div[data-cy="modal"]')
+ .eq(0)
+ .contains('Effectif')
+ .next()
+ .contains('10')
+ cy.get('div[data-cy="modal"]').eq(0).contains('Fermer').click()
+ })
+
+ it('should allow to change time period', function () {
+ cy.contains('Montant mensuel').click()
+ cy.get(inputSelector).first().type('{selectall}2000')
+
+ cy.contains('Montant annuel').click()
+ cy.get(inputSelector).first().should('have.value', '24 000 €')
+ })
+
+ it('should have median salary and SMIC buttons', function () {
+ cy.contains('Montant mensuel').click()
+ cy.get('button').contains('SMIC')
+ cy.get('button').contains('salaire médian').click()
+ cy.get(inputSelector).first().should('have.value', '2 600 €')
+ })
+
+ it('should display values for the réduction générale', function () {
+ cy.contains('Montant mensuel').click()
+ cy.get(inputSelector).first().type('{selectall}1900')
+
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale-value"]'
+ ).should('include.text', '494 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]'
+ ).should('include.text', '93 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]'
+ ).should('include.text', '401 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]'
+ ).should('include.text', '63 €')
+
+ cy.contains('Plus de 50 salariés').click()
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale-value"]'
+ ).should('include.text', '500 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]'
+ ).should('include.text', '93 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]'
+ ).should('include.text', '407 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]'
+ ).should('include.text', '63 €')
+ })
+
+ it('should display a warning for a salary too high', function () {
+ cy.contains('Montant mensuel').click()
+ cy.get(inputSelector).first().type('{selectall}3000')
+
+ cy.get('div[id="simulator-legend"]').should(
+ 'include.text',
+ 'La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC.'
+ )
+
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]'
+ ).should('include.text', '0 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]'
+ ).should('include.text', '0 €')
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]'
+ ).should('include.text', '0 €')
+ })
+
+ it('should be RGAA compliant', function () {
+ checkA11Y()
+ })
+})
diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml
index 30bf7791eb..d86fa96cfe 100644
--- a/site/source/locales/ui-en.yaml
+++ b/site/source/locales/ui-en.yaml
@@ -94,6 +94,7 @@ Décrivez votre projet ou votre problème en donnant quelques éléments de cont
He or she will contact you by telephone within 5 days, and will provide you with assistance tailored to your situation.
Décès: Deaths
Effacer mes réponses: Delete my answers
+Effectif de l'entreprise: Number of employees
"En cas d’<1>accident de travail1>, de <4>maladie professionnelle4> ou d’un <7>accident sur le trajet domicile-travail7>, vous serez indemnisé(e) à hauteur de :":
"In the event of an<1>accident at work1>, <4>occupational illness4> or an
<7>accident on the way to or from work7>, you will receive compensation of:"
@@ -150,6 +151,9 @@ Je donne mon avis, donner mon avis sur jedonnemonavis:
fr, nouvelle fenêtre: I give my opinion, give my opinion on
jedonnemonavis.numerique.gouv.fr, new window
Jours: Days
+La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC. C'est-à-dire, pour 2024, une rémunération totale qui ne dépasse pas <1>2 827,07 €1> bruts par mois.:
+ The RGCP only applies to salaries below 1.6 SMIC. This means, for 2024, a
+ total remuneration not exceeding <1>€2,827.071> gross per month.
La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits2> (personnes qui sont à votre charge) sous certaines conditions.:
Under certain conditions, Social Security guarantees a <2>lump-sum death
benefit for your dependants2>.
@@ -181,6 +185,7 @@ Message à caractère informatif: Informative message
Mode d'affichage: Display mode
Modifier mes options: Modify my options
Modifier mes réponses: Modify my answers
+Moins de 50 salariés: Less than 50 employees
Mois: Month
Mon entreprise: My company
Mon entreprise recrute ! Voir les offres d'emplois de mon-entreprise:
@@ -210,6 +215,7 @@ Personnalisez l'intégration: Customize integration
Plan du site: Site map
Plus d'info sur, {{ title }}: More info on, {{ title }}
Plus d'infos sur, {{ title }}: More info on, {{ title }}
+Plus de 50 salariés: More than 50 employees
Pour en savoir plus, rendez-vous sur le site <2>aquoiserventlescotisations:
urssaf:
fr2>: To find out more, visit <2>aquoiserventlescotisations.urssaf.fr2>
@@ -1458,6 +1464,14 @@ pages:
title: "Liberal professions: the Urssaf simulator"
shortname: Liberal profession
title: Income simulator for self-employed professionals
+ réduction-générale:
+ meta:
+ description: Estimate of the amount of the general reduction in employer
+ contributions (RGCP). This reduction applies to salaries below 1.6
+ times the SMIC.
+ title: General reduction
+ shortname: General reduction
+ title: General contribution reduction simulator
sage-femme:
meta:
description: Calculation of net income after contributions based on total income.
@@ -1736,6 +1750,9 @@ simulateurs:
plus: Read more
profession-libérale: This simulator is intended for self-employed professionals
who earn a BNC. It does not take into account self-employed companies.
+ réduction-générale: The general reduction in employer contributions (RGCP) is
+ applicable up to 1.6 times the SMIC and for all employees contributing to
+ unemployment insurance.
sasu: This simulator does not handle the case of SAS(U) taxable on income (IR).
Only the corporate income tax (IS) option is implemented.
titre: Before we begin...
diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml
index 3df9e29c4a..464ffd9ab4 100644
--- a/site/source/locales/ui-fr.yaml
+++ b/site/source/locales/ui-fr.yaml
@@ -100,6 +100,7 @@ Décrivez votre projet ou votre problème en donnant quelques éléments de cont
Celui-ci vous contactera par téléphone sous 5 jours et vous accompagnera en fonction de votre situation.
Décès: Décès
Effacer mes réponses: Effacer mes réponses
+Effectif de l'entreprise: Effectif de l'entreprise
"En cas d’<1>accident de travail1>, de <4>maladie professionnelle4> ou d’un <7>accident sur le trajet domicile-travail7>, vous serez indemnisé(e) à hauteur de :":
"En cas d’<1>accident de travail1>, de <4>maladie professionnelle4> ou
d’un <7>accident sur le trajet domicile-travail7>, vous serez indemnisé(e) à
@@ -159,6 +160,10 @@ Je donne mon avis, donner mon avis sur jedonnemonavis:
fr, nouvelle fenêtre: Je donne mon avis, donner mon avis sur
jedonnemonavis.numerique.gouv.fr, nouvelle fenêtre
Jours: Jours
+La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC. C'est-à-dire, pour 2024, une rémunération totale qui ne dépasse pas <1>2 827,07 €1> bruts par mois.:
+ La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC. C'est-à-dire,
+ pour 2024, une rémunération totale qui ne dépasse pas <1>2 827,07 €1> bruts
+ par mois.
La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits2> (personnes qui sont à votre charge) sous certaines conditions.:
La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits2>
(personnes qui sont à votre charge) sous certaines conditions.
@@ -192,6 +197,7 @@ Message à caractère informatif: Message à caractère informatif
Mode d'affichage: Mode d'affichage
Modifier mes options: Modifier mes options
Modifier mes réponses: Modifier mes réponses
+Moins de 50 salariés: Moins de 50 salariés
Mois: Mois
Mon entreprise: Mon entreprise
Mon entreprise recrute ! Voir les offres d'emplois de mon-entreprise:
@@ -222,6 +228,7 @@ Personnalisez l'intégration: Personnalisez l'intégration
Plan du site: Plan du site
Plus d'info sur, {{ title }}: Plus d'info sur, {{ title }}
Plus d'infos sur, {{ title }}: Plus d'infos sur, {{ title }}
+Plus de 50 salariés: Plus de 50 salariés
Pour en savoir plus, rendez-vous sur le site <2>aquoiserventlescotisations:
urssaf:
fr2>: Pour en savoir plus, rendez-vous sur le site
@@ -1554,6 +1561,14 @@ pages:
title: "Professions libérale : le simulateur Urssaf"
shortname: Profession libérale
title: Simulateur de revenus pour profession libérale
+ réduction-générale:
+ meta:
+ description: Estimation du montant de la réduction générale des cotisations
+ patronales (RGCP). Cette réduction est applicable pour les salaires
+ inférieurs à 1,6 fois le SMIC.
+ title: Réduction générale
+ shortname: Réduction générale
+ title: Simulateur de réduction générale des cotisations
sage-femme:
meta:
description: Calcul du revenu net après cotisations à partir du total des recettes.
@@ -1851,6 +1866,9 @@ simulateurs:
plus: Lire les précisions
profession-libérale: Ce simulateur est à destination des professions libérales
en BNC. Il ne prend pas en compte les sociétés d'exercice libéral.
+ réduction-générale: La réduction générale des cotisations patronales (RGCP) est
+ applicable jusqu’à 1,6 fois le SMIC et pour tout salarié cotisant à
+ l’assurance chômage.
sasu: Ce simulateur ne gère pas le cas des SAS(U) à l'impôt sur le revenu (IR).
Seule l'option pour l'impôt sur les sociétés est implémentée (IS).
titre: Avant de commencer...
diff --git a/site/source/pages/simulateurs-et-assistants/index.tsx b/site/source/pages/simulateurs-et-assistants/index.tsx
index 16f8516577..9c31872edf 100644
--- a/site/source/pages/simulateurs-et-assistants/index.tsx
+++ b/site/source/pages/simulateurs-et-assistants/index.tsx
@@ -55,6 +55,10 @@ export default function SimulateursEtAssistants() {
>
+
diff --git a/site/source/pages/simulateurs-et-assistants/metadata-src.ts b/site/source/pages/simulateurs-et-assistants/metadata-src.ts
index 2f11ccf739..6be4040f74 100644
--- a/site/source/pages/simulateurs-et-assistants/metadata-src.ts
+++ b/site/source/pages/simulateurs-et-assistants/metadata-src.ts
@@ -26,6 +26,7 @@ import { médecinConfig } from '../simulateurs/médecin/config'
import { pamcConfig } from '../simulateurs/pamc/config'
import { pharmacienConfig } from '../simulateurs/pharmacien/config'
import { professionLibéraleConfig } from '../simulateurs/profession-libérale/config'
+import { réductionGénéraleConfig } from '../simulateurs/reduction-generale/config'
import { sageFemmeConfig } from '../simulateurs/sage-femme/config'
import { salariéConfig } from '../simulateurs/salarié/config'
import { sasuConfig } from '../simulateurs/sasu/config'
@@ -61,6 +62,7 @@ const getMetadataSrc = (params: SimulatorsDataParams) => {
...coûtCréationEntrepriseConfig(params),
...impôtSociétéConfig(params),
...cipavConfig(params),
+ ...réductionGénéraleConfig(params),
// assistants:
...choixStatutJuridiqueConfig(params),
diff --git "a/site/source/pages/simulateurs/reduction-generale/R\303\251ductionG\303\251n\303\251rale.tsx" "b/site/source/pages/simulateurs/reduction-generale/R\303\251ductionG\303\251n\303\251rale.tsx"
new file mode 100644
index 0000000000..61a93d1ceb
--- /dev/null
+++ "b/site/source/pages/simulateurs/reduction-generale/R\303\251ductionG\303\251n\303\251rale.tsx"
@@ -0,0 +1,133 @@
+import { DottedName } from 'modele-social'
+import { useEffect, useState } from 'react'
+import { Trans, useTranslation } from 'react-i18next'
+import { useDispatch } from 'react-redux'
+import { styled } from 'styled-components'
+
+import { Condition } from '@/components/EngineValue/Condition'
+import PeriodSwitch from '@/components/PeriodSwitch'
+import { SelectSimulationYear } from '@/components/SelectSimulationYear'
+import SimulateurWarning from '@/components/SimulateurWarning'
+import Simulation, {
+ SimulationGoal,
+ SimulationGoals,
+} from '@/components/Simulation'
+import { SimulationValue } from '@/components/Simulation/SimulationValue'
+import { useEngine } from '@/components/utils/EngineContext'
+import { Message, Radio, ToggleGroup } from '@/design-system'
+import { Spacing } from '@/design-system/layout'
+import { Li, Ul } from '@/design-system/typography/list'
+import { Body } from '@/design-system/typography/paragraphs'
+import { updateSituation } from '@/store/actions/actions'
+
+export default function RéductionGénéraleSimulation() {
+ return (
+ <>
+ }>
+
+
+
+
+ >
+ }
+ />
+
+ >
+ )
+}
+
+function EffectifSwitch() {
+ const dispatch = useDispatch()
+ const engine = useEngine()
+ const dottedName = 'entreprise . salariés . effectif' as DottedName
+ const engineEffectif = engine.evaluate(dottedName).nodeValue as string
+ const [currentEffectif, setCurrentEffectif] = useState(engineEffectif)
+ const { t } = useTranslation()
+
+ useEffect(() => {
+ const effectif = parseInt(engineEffectif) > 49 ? '100' : '10'
+ setCurrentEffectif(effectif)
+ }, [currentEffectif, engineEffectif])
+
+ return (
+ {
+ setCurrentEffectif(value)
+ dispatch(updateSituation(dottedName, `'${value}'`))
+ }}
+ aria-label={t("Effectif de l'entreprise")}
+ >
+
+ Moins de 50 salariés
+
+
+ Plus de 50 salariés
+
+
+ )
+}
+const StyledUl = styled(Ul)`
+ margin-top: 0;
+`
+const StyledLi = styled(Li)`
+ &::before {
+ margin-top: ${({ theme }) => theme.spacings.sm};
+ }
+`
+function RéductionGénéraleSimulationGoals({
+ toggles = ,
+ legend,
+}: {
+ toggles?: React.ReactNode
+ legend: string
+}) {
+ return (
+
+
+
+
+
+
+
+ La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC.
+ C'est-à-dire, pour 2024, une rémunération totale qui ne dépasse
+ pas 2 827,07 € bruts par mois.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/site/source/pages/simulateurs/reduction-generale/config.ts b/site/source/pages/simulateurs/reduction-generale/config.ts
new file mode 100644
index 0000000000..32273bccc7
--- /dev/null
+++ b/site/source/pages/simulateurs/reduction-generale/config.ts
@@ -0,0 +1,39 @@
+import { config } from '../_configs/config'
+import { SimulatorsDataParams } from '../_configs/types'
+import RéductionGénéraleSimulation from './RéductionGénérale'
+import { configRéductionGénérale } from './simulationConfig'
+
+export function réductionGénéraleConfig({
+ t,
+ sitePaths,
+}: SimulatorsDataParams) {
+ return config({
+ id: 'réduction-générale',
+ beta: true,
+ tracking: 'reduction_generale',
+ icône: '🏷️',
+ iframePath: 'simulateur-reduction-generale',
+ pathId: 'simulateurs.réduction-générale',
+ shortName: t(
+ 'pages.simulateurs.réduction-générale.shortname',
+ 'Réduction générale'
+ ),
+ title: t(
+ 'pages.simulateurs.réduction-générale.title',
+ 'Simulateur de réduction générale des cotisations'
+ ),
+ meta: {
+ title: t(
+ 'pages.simulateurs.réduction-générale.meta.title',
+ 'Réduction générale'
+ ),
+ description: t(
+ 'pages.simulateurs.réduction-générale.meta.description',
+ 'Estimation du montant de la réduction générale des cotisations patronales (RGCP). Cette réduction est applicable pour les salaires inférieurs à 1,6 fois le SMIC.'
+ ),
+ },
+ path: sitePaths.simulateurs['réduction-générale'],
+ simulation: configRéductionGénérale,
+ component: RéductionGénéraleSimulation,
+ } as const)
+}
diff --git a/site/source/pages/simulateurs/reduction-generale/simulationConfig.ts b/site/source/pages/simulateurs/reduction-generale/simulationConfig.ts
new file mode 100644
index 0000000000..ddbad0a417
--- /dev/null
+++ b/site/source/pages/simulateurs/reduction-generale/simulationConfig.ts
@@ -0,0 +1,40 @@
+import { SimulationConfig } from '../_configs/types'
+
+export const configRéductionGénérale: SimulationConfig = {
+ 'objectifs exclusifs': ['salarié . contrat . salaire brut'],
+ objectifs: ['salarié . cotisations . exonérations . réduction générale'],
+ questions: {
+ "à l'affiche": [
+ {
+ label: 'Heures supplémentaires',
+ dottedName: 'salarié . temps de travail . heures supplémentaires',
+ },
+ {
+ label: 'Heures complémentaires',
+ dottedName: 'salarié . temps de travail . heures complémentaires',
+ },
+ {
+ label: 'Primes',
+ dottedName: 'salarié . rémunération . primes . activité . base',
+ },
+ {
+ label: 'DFS',
+ dottedName: 'salarié . régimes spécifiques . DFS',
+ },
+ ],
+ 'liste noire': [
+ 'entreprise . salariés . effectif . seuil',
+ 'salarié . contrat . statut cadre',
+ ],
+ 'non prioritaires': [
+ 'salarié . convention collective',
+ 'salarié . rémunération . frais professionnels',
+ ],
+ },
+ 'unité par défaut': '€/an',
+ situation: {
+ dirigeant: 'non',
+ 'entreprise . catégorie juridique': "''",
+ 'entreprise . imposition': 'non',
+ },
+}
diff --git a/site/source/sitePaths.ts b/site/source/sitePaths.ts
index 6038fa6352..1558067a1e 100644
--- a/site/source/sitePaths.ts
+++ b/site/source/sitePaths.ts
@@ -72,6 +72,7 @@ const rawSitePathsFr = {
'chômage-partiel': 'chômage-partiel',
is: 'impot-societe',
dividendes: 'dividendes',
+ 'réduction-générale': 'réduction-générale',
},
nouveautés: {
index: 'nouveautés',
@@ -170,6 +171,7 @@ const rawSitePathsEn = {
},
is: 'corporate-tax',
dividendes: 'dividends',
+ 'réduction-générale': 'réduction-générale',
},
nouveautés: {
index: 'news',
diff --git "a/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap" "b/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap"
new file mode 100644
index 0000000000..88845dd809
--- /dev/null
+++ "b/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap"
@@ -0,0 +1,199 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`calculate simulations-dividendes > DFS 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 513
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 407
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72
+salarié . cotisations . exonérations . réduction générale . part retraite: 106"
+`;
+
+exports[`calculate simulations-dividendes > DFS 2`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 547
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 444
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 69
+salarié . cotisations . exonérations . réduction générale . part retraite: 103"
+`;
+
+exports[`calculate simulations-dividendes > DFS 3`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 564
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 458
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72
+salarié . cotisations . exonérations . réduction générale . part retraite: 106"
+`;
+
+exports[`calculate simulations-dividendes > DFS 4`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 564
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 458
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72
+salarié . cotisations . exonérations . réduction générale . part retraite: 106"
+`;
+
+exports[`calculate simulations-dividendes > DFS 5`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 440
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 357
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56
+salarié . cotisations . exonérations . réduction générale . part retraite: 83"
+`;
+
+exports[`calculate simulations-dividendes > avantages 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 387
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 314
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49
+salarié . cotisations . exonérations . réduction générale . part retraite: 73"
+`;
+
+exports[`calculate simulations-dividendes > avantages 2`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 387
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 314
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49
+salarié . cotisations . exonérations . réduction générale . part retraite: 73"
+`;
+
+exports[`calculate simulations-dividendes > effectif 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 440
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 357
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56
+salarié . cotisations . exonérations . réduction générale . part retraite: 83"
+`;
+
+exports[`calculate simulations-dividendes > effectif 2`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 446
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 363
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56
+salarié . cotisations . exonérations . réduction générale . part retraite: 83"
+`;
+
+exports[`calculate simulations-dividendes > heures supplémentaires 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 461
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 374
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 58
+salarié . cotisations . exonérations . réduction générale . part retraite: 87"
+`;
+
+exports[`calculate simulations-dividendes > primes 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 387
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 314
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49
+salarié . cotisations . exonérations . réduction générale . part retraite: 73"
+`;
+
+exports[`calculate simulations-dividendes > primes 2`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 352
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 285
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 45
+salarié . cotisations . exonérations . réduction générale . part retraite: 66"
+`;
+
+exports[`calculate simulations-dividendes > salaire 1`] = `
+"salarié . contrat . salaire brut: 100
+salarié . cotisations . exonérations . réduction générale: 32
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 26
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 4
+salarié . cotisations . exonérations . réduction générale . part retraite: 6
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 2`] = `
+"salarié . contrat . salaire brut: 250
+salarié . cotisations . exonérations . réduction générale: 80
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 65
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 10
+salarié . cotisations . exonérations . réduction générale . part retraite: 15
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 3`] = `
+"salarié . contrat . salaire brut: 500
+salarié . cotisations . exonérations . réduction générale: 160
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 130
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 20
+salarié . cotisations . exonérations . réduction générale . part retraite: 30
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 4`] = `
+"salarié . contrat . salaire brut: 750
+salarié . cotisations . exonérations . réduction générale: 240
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 194
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 30
+salarié . cotisations . exonérations . réduction générale . part retraite: 45
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 5`] = `
+"salarié . contrat . salaire brut: 1000
+salarié . cotisations . exonérations . réduction générale: 319
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 259
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 40
+salarié . cotisations . exonérations . réduction générale . part retraite: 60
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 6`] = `
+"salarié . contrat . salaire brut: 1250
+salarié . cotisations . exonérations . réduction générale: 399
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 324
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 51
+salarié . cotisations . exonérations . réduction générale . part retraite: 75
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 7`] = `
+"salarié . contrat . salaire brut: 1500
+salarié . cotisations . exonérations . réduction générale: 479
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 389
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 61
+salarié . cotisations . exonérations . réduction générale . part retraite: 90
+
+Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
+`;
+
+exports[`calculate simulations-dividendes > salaire 8`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 440
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 357
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56
+salarié . cotisations . exonérations . réduction générale . part retraite: 83"
+`;
+
+exports[`calculate simulations-dividendes > salaire 9`] = `
+"salarié . contrat . salaire brut: 2500
+salarié . cotisations . exonérations . réduction générale: 174
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 141
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 22
+salarié . cotisations . exonérations . réduction générale . part retraite: 33"
+`;
+
+exports[`calculate simulations-dividendes > salaire 10`] = `
+"salarié . contrat . salaire brut: 3000
+salarié . cotisations . exonérations . réduction générale: 0
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 0
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 0
+salarié . cotisations . exonérations . réduction générale . part retraite: 0"
+`;
+
+exports[`calculate simulations-dividendes > temps partiel 1`] = `
+"salarié . contrat . salaire brut: 2000
+salarié . cotisations . exonérations . réduction générale: 311
+salarié . cotisations . exonérations . réduction générale . part Urssaf: 253
+salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 39
+salarié . cotisations . exonérations . réduction générale . part retraite: 59"
+`;
diff --git "a/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts" "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts"
new file mode 100644
index 0000000000..4eeac734c5
--- /dev/null
+++ "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts"
@@ -0,0 +1,20 @@
+import { it } from 'vitest'
+
+import { configRéductionGénérale } from '@/pages/simulateurs/reduction-generale/simulationConfig'
+
+import réductionGénéraleSituation from './réduction-générale.yaml'
+import { runSimulations } from './utils'
+
+it('calculate simulations-dividendes', () => {
+ runSimulations(
+ réductionGénéraleSituation,
+ [
+ ...(configRéductionGénérale['objectifs exclusifs'] ?? []),
+ ...(configRéductionGénérale.objectifs ?? []),
+ 'salarié . cotisations . exonérations . réduction générale . part retraite',
+ 'salarié . cotisations . exonérations . réduction générale . part Urssaf',
+ 'salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage',
+ ],
+ configRéductionGénérale.situation
+ )
+})
diff --git "a/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml" "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml"
new file mode 100644
index 0000000000..fd7473e909
--- /dev/null
+++ "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml"
@@ -0,0 +1,56 @@
+salaire:
+ - salarié . contrat . salaire brut: 100 €/mois
+ - salarié . contrat . salaire brut: 250 €/mois
+ - salarié . contrat . salaire brut: 500 €/mois
+ - salarié . contrat . salaire brut: 750 €/mois
+ - salarié . contrat . salaire brut: 1000 €/mois
+ - salarié . contrat . salaire brut: 1250 €/mois
+ - salarié . contrat . salaire brut: 1500 €/mois
+ - salarié . contrat . salaire brut: 2000 €/mois
+ - salarié . contrat . salaire brut: 2500 €/mois
+ - salarié . contrat . salaire brut: 3000 €/mois
+
+effectif:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ entreprise . salariés . effectif: 10 employés
+ - salarié . contrat . salaire brut: 2000 €/mois
+ entreprise . salariés . effectif: 100 employés
+
+temps partiel:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . contrat . temps de travail . temps partiel: oui
+
+primes:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . rémunération . primes . activité: 100 €/mois
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . rémunération . primes . fin d'année: oui
+
+heures supplémentaires:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . temps de travail . heures supplémentaires: 18 heures/mois
+
+avantages:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . rémunération . avantages en nature: oui
+ salarié . rémunération . avantages en nature . montant: 100€/mois
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . rémunération . avantages en nature: oui
+ salarié . rémunération . avantages en nature . montant: 100€/mois
+
+DFS:
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . régimes spécifiques . DFS: oui
+ salarié . régimes spécifiques . DFS . profession: "'journaliste'"
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . régimes spécifiques . DFS: oui
+ salarié . régimes spécifiques . DFS . profession: "'ouvrier du bâtiment'"
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . régimes spécifiques . DFS: oui
+ salarié . régimes spécifiques . DFS . profession: "'artiste musicien'"
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . régimes spécifiques . DFS: oui
+ salarié . régimes spécifiques . DFS . profession: "'pilote de ligne ou personnel navigant'"
+ - salarié . contrat . salaire brut: 2000 €/mois
+ salarié . régimes spécifiques . DFS: non
+ salarié . régimes spécifiques . DFS . profession: "'journaliste'"