feat(simulateurs): Nouveau simulateur réduction générale

pull/3146/head
Alice Dahan 2024-09-03 10:51:35 +02:00 committed by liliced
parent 0f8de800ac
commit 1115a8a59b
15 changed files with 619 additions and 2 deletions

View File

@ -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:

View File

@ -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,

View File

@ -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', '24000 €')
})
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()
})
})

View File

@ -67,7 +67,6 @@ export default function SimulateurWarning({
</Trans>
</Body>
)}
{simulateur === 'profession-libérale' && (
<Ul>
<StyledLi>

View File

@ -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</1>, de <4>maladie professionnelle</4> ou dun <7>accident sur le trajet domicile-travail</7>, vous serez indemnisé(e) à hauteur de :":
"In the event of an<1>accident at work</1>, <4>occupational illness</4> or an
<7>accident on the way to or from work</7>, you will receive compensation of:"
@ -152,6 +153,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.07</1> gross per month.
La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits</2> (personnes qui sont à votre charge) sous certaines conditions.:
Under certain conditions, Social Security guarantees a <2>lump-sum death
benefit for your dependants</2>.
@ -183,6 +187,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:
@ -217,6 +222,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</2>: To find out more, visit <2>aquoiserventlescotisations.urssaf.fr</2>
@ -267,6 +273,7 @@ Règles de calculs: Calculation rules
Régime d'imposition: Taxation system
Réinitialiser: Reset
Réinitialiser la situation enregistrée: Reset registered situation
Rémunération brute: Gross remuneration
Répartition du chiffre d'affaires: Sales breakdown
Répondez à quelques questions additionnelles afin de préciser votre résultat.: Answer a few additional questions to clarify your result.
Résultat fiscal: Taxable income
@ -583,6 +590,7 @@ dividendes:
French companies subject to corporation tax (IS), and does not concern
self-employed workers.</0><1>Tax on dividends is calculated in addition to
tax on other taxable income.</1>
dont chômage: of which unemployment
employeur: employer
en cas d'accident pro: in the event of a professional accident
en incluant: including
@ -1460,6 +1468,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.

View File

@ -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</1>, de <4>maladie professionnelle</4> ou dun <7>accident sur le trajet domicile-travail</7>, vous serez indemnisé(e) à hauteur de :":
"En cas d<1>accident de travail</1>, de <4>maladie professionnelle</4> ou
dun <7>accident sur le trajet domicile-travail</7>, vous serez indemnisé(e) à
@ -161,6 +162,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 droits</2> (personnes qui sont à votre charge) sous certaines conditions.:
La Sécurité Sociale garantit un <2>capital décès pour vos ayants droits</2>
(personnes qui sont à votre charge) sous certaines conditions.
@ -194,6 +199,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:
@ -229,6 +235,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</2>: Pour en savoir plus, rendez-vous sur le site
@ -282,6 +289,7 @@ Règles de calculs: Règles de calculs
Régime d'imposition: Régime d'imposition
Réinitialiser: Réinitialiser
Réinitialiser la situation enregistrée: Réinitialiser la situation enregistrée
Rémunération brute: Rémunération brute
Répartition du chiffre d'affaires: Répartition du chiffre d'affaires
Répondez à quelques questions additionnelles afin de préciser votre résultat.: Répondez à quelques questions additionnelles afin de préciser votre résultat.
Résultat fiscal: Résultat fiscal
@ -614,6 +622,7 @@ dividendes:
concerne pas les travailleurs indépendants non salariés.</0><1>Le montant de
l'impôt sur les dividendes est calculé en sus de limpôt sur les autres
revenus imposables.</1>
dont chômage: dont chômage
employeur: employeur
en cas d'accident pro: en cas d'accident pro
en incluant: en incluant
@ -1555,6 +1564,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.

View File

@ -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),

View File

@ -0,0 +1,118 @@
import { Trans, useTranslation } from 'react-i18next'
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 { Message } 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 EffectifSwitch from './components/EffectifSwitch'
export default function RéductionGénéraleSimulation() {
return (
<>
<Simulation afterQuestionsSlot={<SelectSimulationYear />}>
<SimulateurWarning simulateur="réduction-générale" />
<RéductionGénéraleSimulationGoals
legend="Salaire brut du salarié et réduction générale applicable"
toggles={
<>
<EffectifSwitch />
<PeriodSwitch />
</>
}
/>
</Simulation>
</>
)
}
const StyledUl = styled(Ul)`
margin-top: 0;
`
const StyledLi = styled(Li)`
&::before {
margin-top: ${({ theme }) => theme.spacings.sm};
}
`
function RéductionGénéraleSimulationGoals({
toggles = (
<>
<EffectifSwitch />
<PeriodSwitch />
</>
),
legend,
}: {
toggles?: React.ReactNode
legend: string
}) {
const { t } = useTranslation()
return (
<SimulationGoals toggles={toggles} legend={legend}>
{/* TODO: remplacer "salarié . cotisations . assiette" par "salarié . rémunération . brut"
lorsqu'elle n'incluera plus les frais professionnels. */}
<SimulationGoal
dottedName="salarié . cotisations . assiette"
round={false}
label={t('Rémunération brute', 'Rémunération brute')}
/>
<Condition expression="salarié . cotisations . exonérations . réduction générale = 0">
<Message type="info">
<Body>
<Trans>
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 <strong>2 827,07 </strong> bruts par mois.
</Trans>
</Body>
</Message>
</Condition>
<Condition expression="salarié . cotisations . exonérations . réduction générale">
<SimulationValue
dottedName="salarié . cotisations . exonérations . réduction générale"
isInfoMode={true}
round={false}
/>
<Spacing md />
<StyledUl>
<StyledLi>
<SimulationValue
dottedName={
'salarié . cotisations . exonérations . réduction générale . part retraite'
}
round={false}
/>
</StyledLi>
<StyledLi>
<SimulationValue
dottedName={
'salarié . cotisations . exonérations . réduction générale . part Urssaf'
}
round={false}
/>
<SimulationValue
dottedName={
'salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage'
}
round={false}
label={t('dont chômage', 'dont chômage')}
/>
</StyledLi>
</StyledUl>
</Condition>
</SimulationGoals>
)
}

View File

@ -0,0 +1,40 @@
import { DottedName } from 'modele-social'
import { useEffect, useState } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { useEngine } from '@/components/utils/EngineContext'
import { Radio, ToggleGroup } from '@/design-system'
import { enregistreLaRéponse } from '@/store/actions/actions'
export default 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 (
<ToggleGroup
value={currentEffectif}
onChange={(value) => {
setCurrentEffectif(value)
dispatch(enregistreLaRéponse(dottedName, `'${value}'`))
}}
aria-label={t("Effectif de l'entreprise")}
>
<Radio value="10">
<Trans>Moins de 50 salariés</Trans>
</Radio>
<Radio value="100">
<Trans>Plus de 50 salariés</Trans>
</Radio>
</ToggleGroup>
)
}

View File

@ -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)
}

View File

@ -0,0 +1,46 @@
import { SimulationConfig } from '@/domaine/SimulationConfig'
export const configRéductionGénérale: SimulationConfig = {
// TODO: remplacer 'salarié . cotisations . assiette' par 'salarié . rémunération . brut'
// lorsque cette dernière n'incluera plus les frais professionnels.
'objectifs exclusifs': ['salarié . cotisations . assiette'],
objectifs: ['salarié . cotisations . exonérations . réduction générale'],
questions: {
"à l'affiche": [
{
label: 'Temps partiel',
dottedName: 'salarié . contrat . temps de travail . temps partiel',
},
{
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: 'DFS',
dottedName: 'salarié . régimes spécifiques . DFS',
},
{
label: 'JEI',
dottedName: 'salarié . cotisations . exonérations . JEI',
},
],
'liste noire': [
'entreprise . salariés . effectif . seuil',
'établissement . commune',
'salarié . contrat . CDD . motif',
'salarié . rémunération . primes . activité . base',
'salarié . rémunération . avantages en nature',
],
'non prioritaires': ['salarié . convention collective'],
},
'unité par défaut': '€/an',
situation: {
dirigeant: 'non',
'entreprise . catégorie juridique': "''",
'entreprise . imposition': 'non',
},
}

View File

@ -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',

View File

@ -0,0 +1,177 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`calculate simulations-dividendes > DFS 1`] = `
"salarié . cotisations . assiette: 1767
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é . cotisations . assiette: 1767
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 3`] = `
"salarié . cotisations . assiette: 1767
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é . cotisations . assiette: 1767
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é . cotisations . assiette: 1767
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 > JEI 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: null
salarié . cotisations . exonérations . réduction générale . part Urssaf: null
salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: null
salarié . cotisations . exonérations . réduction générale . part retraite: null"
`;
exports[`calculate simulations-dividendes > effectif 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 493
salarié . cotisations . exonérations . réduction générale . part Urssaf: 401
salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 63
salarié . cotisations . exonérations . réduction générale . part retraite: 93"
`;
exports[`calculate simulations-dividendes > effectif 2`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 500
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: 63
salarié . cotisations . exonérations . réduction générale . part retraite: 93"
`;
exports[`calculate simulations-dividendes > heures complémentaires 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 454
salarié . cotisations . exonérations . réduction générale . part Urssaf: 368
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: 85"
`;
exports[`calculate simulations-dividendes > heures supplémentaires 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 607
salarié . cotisations . exonérations . réduction générale . part Urssaf: 493
salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 77
salarié . cotisations . exonérations . réduction générale . part retraite: 114"
`;
exports[`calculate simulations-dividendes > salaire 1`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 2`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 3`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 4`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 5`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 6`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 7`] = `
"salarié . cotisations . assiette: 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"
`;
exports[`calculate simulations-dividendes > salaire 8`] = `
"salarié . cotisations . assiette: 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é . cotisations . assiette: 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é . cotisations . assiette: 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 > stage 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 493
salarié . cotisations . exonérations . réduction générale . part Urssaf: 401
salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 63
salarié . cotisations . exonérations . réduction générale . part retraite: 93"
`;
exports[`calculate simulations-dividendes > temps partiel 1`] = `
"salarié . cotisations . assiette: 1900
salarié . cotisations . exonérations . réduction générale: 364
salarié . cotisations . exonérations . réduction générale . part Urssaf: 296
salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 46
salarié . cotisations . exonérations . réduction générale . part retraite: 69"
`;

View File

@ -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
)
})

View File

@ -0,0 +1,51 @@
salaire:
- salarié . cotisations . assiette: 100 €/mois
- salarié . cotisations . assiette: 250 €/mois
- salarié . cotisations . assiette: 500 €/mois
- salarié . cotisations . assiette: 750 €/mois
- salarié . cotisations . assiette: 1000 €/mois
- salarié . cotisations . assiette: 1250 €/mois
- salarié . cotisations . assiette: 1500 €/mois
- salarié . cotisations . assiette: 2000 €/mois
- salarié . cotisations . assiette: 2500 €/mois
- salarié . cotisations . assiette: 3000 €/mois
effectif:
- salarié . cotisations . assiette: 1900 €/mois
entreprise . salariés . effectif: 10 employés
- salarié . cotisations . assiette: 1900 €/mois
entreprise . salariés . effectif: 100 employés
temps partiel:
- salarié . cotisations . assiette: 1900 €/mois
salarié . contrat . temps de travail . temps partiel: oui
heures supplémentaires:
- salarié . cotisations . assiette: 1900 €/mois
salarié . temps de travail . heures supplémentaires: 18 heures/mois
heures complémentaires:
- salarié . cotisations . assiette: 1900 €/mois
salarié . contrat . temps de travail . temps partiel: oui
salarié . temps de travail . heures complémentaires: 9 heures/mois
stage:
- salarié . cotisations . assiette: 1900 €/mois
salarié . contrat: stage
JEI:
- salarié . cotisations . assiette: 1900 €/mois
salarié . cotisations . exonérations . JEI: oui
DFS:
- &dfs
salarié . cotisations . assiette: 1900 €/mois
salarié . régimes spécifiques . DFS: oui
- <<: *dfs
salarié . régimes spécifiques . DFS . profession: "'journaliste'"
- <<: *dfs
salarié . régimes spécifiques . DFS . profession: "'ouvrier du bâtiment'"
- <<: *dfs
salarié . régimes spécifiques . DFS . profession: "'artiste musicien'"
- <<: *dfs
salarié . régimes spécifiques . DFS . profession: "'pilote de ligne ou personnel navigant'"