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/components/SimulateurWarning.tsx b/site/source/components/SimulateurWarning.tsx index 592a9c82d3..8f5a567311 100644 --- a/site/source/components/SimulateurWarning.tsx +++ b/site/source/components/SimulateurWarning.tsx @@ -151,6 +151,15 @@ export default function SimulateurWarning({ )} + {simulateur === '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. + + + )} ) } 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 travail, de <4>maladie professionnelle ou d’un <7>accident sur le trajet domicile-travail, vous serez indemnisé(e) à hauteur de :": "In the event of an<1>accident at work, <4>occupational illness or an <7>accident on the way to or from work, 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 € 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.07 gross per month. La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits (personnes qui sont à votre charge) sous certaines conditions.: Under certain conditions, Social Security guarantees a <2>lump-sum death benefit for your dependants. @@ -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: fr: To find out more, visit <2>aquoiserventlescotisations.urssaf.fr @@ -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 travail, de <4>maladie professionnelle ou d’un <7>accident sur le trajet domicile-travail, vous serez indemnisé(e) à hauteur de :": "En cas d’<1>accident de travail, de <4>maladie professionnelle ou d’un <7>accident sur le trajet domicile-travail, 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 € 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 € bruts + par mois. La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits (personnes qui sont à votre charge) sous certaines conditions.: La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits (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: fr: 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..89e4840314 --- /dev/null +++ "b/site/source/pages/simulateurs/reduction-generale/R\303\251ductionG\303\251n\303\251rale.tsx" @@ -0,0 +1,136 @@ +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'"