feat(simulateurs): Nouveau simulateur réduction générale
parent
0f8de800ac
commit
1115a8a59b
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
})
|
||||
})
|
|
@ -67,7 +67,6 @@ export default function SimulateurWarning({
|
|||
</Trans>
|
||||
</Body>
|
||||
)}
|
||||
|
||||
{simulateur === 'profession-libérale' && (
|
||||
<Ul>
|
||||
<StyledLi>
|
||||
|
|
|
@ -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 d’un <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.
|
||||
|
|
|
@ -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 d’un <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
|
||||
d’un <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 l’impô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.
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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>
|
||||
)
|
||||
}
|
|
@ -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>
|
||||
)
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -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',
|
||||
},
|
||||
}
|
|
@ -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',
|
||||
|
|
|
@ -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"
|
||||
`;
|
|
@ -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
|
||||
)
|
||||
})
|
|
@ -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'"
|
Loading…
Reference in New Issue