From 1115a8a59b2ccf3cf39804e291cdf9e68f53aa11 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 3 Sep 2024 10:51:35 +0200 Subject: [PATCH] =?UTF-8?q?feat(simulateurs):=20Nouveau=20simulateur=20r?= =?UTF-8?q?=C3=A9duction=20g=C3=A9n=C3=A9rale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../règles/salarié/cotisations.publicodes | 2 +- site/build/prerender.ts | 1 + .../mon-entreprise/reduction-generale.ts | 89 +++++++++ site/source/components/SimulateurWarning.tsx | 1 - site/source/locales/ui-en.yaml | 16 ++ site/source/locales/ui-fr.yaml | 17 ++ .../simulateurs-et-assistants/metadata-src.ts | 2 + .../reduction-generale/RéductionGénérale.tsx | 118 ++++++++++++ .../components/EffectifSwitch.tsx | 40 ++++ .../simulateurs/reduction-generale/config.ts | 39 ++++ .../reduction-generale/simulationConfig.ts | 46 +++++ site/source/sitePaths.ts | 2 + .../réduction-générale.test.ts.snap | 177 ++++++++++++++++++ .../regressions/réduction-générale.test.ts | 20 ++ site/test/regressions/réduction-générale.yaml | 51 +++++ 15 files changed, 619 insertions(+), 2 deletions(-) create mode 100755 site/cypress/integration/mon-entreprise/reduction-generale.ts create mode 100644 site/source/pages/simulateurs/reduction-generale/RéductionGénérale.tsx create mode 100644 site/source/pages/simulateurs/reduction-generale/components/EffectifSwitch.tsx create mode 100644 site/source/pages/simulateurs/reduction-generale/config.ts create mode 100644 site/source/pages/simulateurs/reduction-generale/simulationConfig.ts create mode 100644 site/test/regressions/__snapshots__/réduction-générale.test.ts.snap create mode 100644 site/test/regressions/réduction-générale.test.ts create mode 100644 site/test/regressions/réduction-générale.yaml diff --git a/modele-social/règles/salarié/cotisations.publicodes b/modele-social/règles/salarié/cotisations.publicodes index 1544abfcd..90d35ebec 100644 --- a/modele-social/règles/salarié/cotisations.publicodes +++ b/modele-social/règles/salarié/cotisations.publicodes @@ -315,9 +315,9 @@ salarié . cotisations . exonérations . réduction générale: description: | Dans le cadre du pacte de responsabilité et de solidarité, le dispositif zéro cotisation Urssaf permet à l'employeur d'un salarié au Smic de ne plus payer aucune cotisation. Le montant de l'allègement est égal au produit de la rémunération annuelle brute par un coefficient. Il n'y a pas de formalité particulière à effectuer. références: + Simulateur actuel: https://www.declaration.urssaf.fr/calcul/ Fiche service-public.fr: https://entreprendre.service-public.fr/vosdroits/F24542 Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/reduction-generale-cotisation.html - Simulateur: https://www.declaration.urssaf.fr/calcul/ Cumuls: https://www.legisocial.fr/actualites-sociales/2068-comment-declarer-les-cotisations-dallocations-familiales-si-lentreprise-beneficie-du-regime-jei.html Bulletin Officiel de la Sécurité Sociale: https://boss.gouv.fr/portail/accueil/exonerations/allegements-generaux.html#titre-chapitre-1--la-reduction-general produit: diff --git a/site/build/prerender.ts b/site/build/prerender.ts index c3b5e89d1..077f10cf3 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 000000000..801207394 --- /dev/null +++ b/site/cypress/integration/mon-entreprise/reduction-generale.ts @@ -0,0 +1,89 @@ +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(inputSelector).first().type('{selectall}2000') + + 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 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', '493,43 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]' + ).should('include.text', '92,85 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]' + ).should('include.text', '400,58 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]' + ).should('include.text', '62,57 €') + }) + + 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 be707a65f..e46d329b8 100644 --- a/site/source/components/SimulateurWarning.tsx +++ b/site/source/components/SimulateurWarning.tsx @@ -67,7 +67,6 @@ export default function SimulateurWarning({ )} - {simulateur === 'profession-libérale' && (