diff --git a/site/cypress/integration/mon-entreprise/lodeom.ts b/site/cypress/integration/mon-entreprise/lodeom.ts
index 38b5ea061..3969d3b25 100755
--- a/site/cypress/integration/mon-entreprise/lodeom.ts
+++ b/site/cypress/integration/mon-entreprise/lodeom.ts
@@ -80,6 +80,32 @@ describe('Simulateur lodeom', { testIsolation: false }, function () {
).should('have.text', '0 €')
})
+ it('should allow to select a scale', function () {
+ cy.get('div[aria-label="Barème à appliquer"]')
+ .contains('Barème de compétitivité renforcée')
+ .click()
+
+ cy.get(
+ 'p[id="salarié___cotisations___exonérations___lodeom___montant-value"]'
+ ).should('include.text', '958,20 €')
+
+ cy.get('div[aria-label="Barème à appliquer"]')
+ .contains("Barème d'innovation et croissance")
+ .click()
+
+ cy.contains('Modifier mes réponses').click()
+ cy.get('div[data-cy="modal"]')
+ .eq(0)
+ .contains("Barème d'innovation et croissance")
+ .next()
+ .contains('oui')
+
+ cy.get('div[data-cy="modal"]').eq(0).contains('Fermer').click()
+ cy.get('div[aria-label="Barème à appliquer"]')
+ .contains('Barème de compétitivité')
+ .click()
+ })
+
it('should display remuneration and Lodeom month by month', function () {
cy.contains('Exonération annuelle').click()
cy.get(inputSelector).first().type('{selectall}36000')
diff --git a/site/source/hooks/useBaremeLodeom.ts b/site/source/hooks/useBaremeLodeom.ts
new file mode 100644
index 000000000..57dfc1e8f
--- /dev/null
+++ b/site/source/hooks/useBaremeLodeom.ts
@@ -0,0 +1,44 @@
+import { useDispatch } from 'react-redux'
+
+import { useEngine } from '@/components/utils/EngineContext'
+import { toOuiNon } from '@/domaine/engine/toOuiNon'
+import { batchUpdateSituation } from '@/store/actions/actions'
+
+const barèmesPossibles = [
+ 'barème compétitivité',
+ 'barème compétitivité renforcée',
+ 'barème innovation et croissance',
+]
+type Barème = (typeof barèmesPossibles)[number]
+
+export const useBaremeLodeom = () => {
+ const dottedName = 'salarié . cotisations . exonérations . lodeom . zone un'
+ const engine = useEngine()
+ const dispatch = useDispatch()
+
+ let currentBarème
+ for (let i = 0; i < barèmesPossibles.length; i++) {
+ const barème = barèmesPossibles[i]
+ const barèmeValue = engine.evaluate(`${dottedName} . ${barème}`).nodeValue
+ if (barèmeValue) {
+ currentBarème = barème
+ break
+ }
+ }
+
+ const updateBarème = (newBarème: Barème): void => {
+ const newSituation = barèmesPossibles.reduce((situation, barème) => {
+ return {
+ ...situation,
+ [`${dottedName} . ${barème}`]: toOuiNon(barème === newBarème),
+ }
+ }, {})
+ dispatch(batchUpdateSituation(newSituation))
+ }
+
+ return {
+ barèmesPossibles,
+ currentBarème,
+ updateBarème,
+ }
+}
diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml
index cc1d2b577..ea7a68de2 100644
--- a/site/source/locales/ui-en.yaml
+++ b/site/source/locales/ui-en.yaml
@@ -1447,6 +1447,7 @@ pages:
included in the simulator.5>
title: Corporate tax simulator
lodeom:
+ bareme-label: Scale to be applied
legend: Employee's gross salary and applicable Lodeom exemption
meta:
description: Estimated amount of Lodeom exemption. This exemption applies, under
diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml
index b4c939eda..ec6c4d893 100644
--- a/site/source/locales/ui-fr.yaml
+++ b/site/source/locales/ui-fr.yaml
@@ -1540,6 +1540,7 @@ pages:
pas intégrés dans le simulateur.5>
title: Simulateur d'impôt sur les sociétés
lodeom:
+ bareme-label: Barème à appliquer
legend: Rémunération brute du salarié et exonération Lodeom applicable
meta:
description: Estimation du montant de l'exonération Lodeom. Cette exonération
diff --git a/site/source/pages/simulateurs/lodeom/Lodeom.tsx b/site/source/pages/simulateurs/lodeom/Lodeom.tsx
index 48cba3376..17e8d7124 100644
--- a/site/source/pages/simulateurs/lodeom/Lodeom.tsx
+++ b/site/source/pages/simulateurs/lodeom/Lodeom.tsx
@@ -9,6 +9,7 @@ import SimulateurWarning from '@/components/SimulateurWarning'
import Simulation from '@/components/Simulation'
import { RégularisationMethod } from '@/utils/réductionDeCotisations'
+import BarèmeSwitch from './components/BarèmeSwitch'
import LodeomSimulationGoals from './Goals'
export default function LodeomSimulation() {
@@ -50,6 +51,7 @@ export default function LodeomSimulation() {
)}
toggles={
<>
+
+
+ {barèmesPossibles.map((barème, index) => {
+ const dottedName =
+ `salarié . cotisations . exonérations . lodeom . zone un . ${barème}` as DottedName
+ const rule = engine.getRule(dottedName)
+
+ return (
+
+ {rule.title}
+
+
+ )
+ })}
+
+
+ )
+}
+
+const Container = styled.div`
+ ${FlexCenter}
+ flex-wrap: wrap;
+ justify-content: center;
+ column-gap: ${({ theme }) => theme.spacings.sm};
+`
+const StyledToggleGroup = styled(ToggleGroup)`
+ > * {
+ display: flex;
+ flex-direction: column;
+ text-align: left;
+ }
+`
+const StyledRadio = styled(Radio)`
+ white-space: nowrap;
+ > span {
+ width: 100%;
+ }
+`
diff --git a/site/source/pages/simulateurs/lodeom/simulationConfig.ts b/site/source/pages/simulateurs/lodeom/simulationConfig.ts
index 312a17771..d5352827d 100644
--- a/site/source/pages/simulateurs/lodeom/simulationConfig.ts
+++ b/site/source/pages/simulateurs/lodeom/simulationConfig.ts
@@ -42,7 +42,5 @@ export const configRéductionGénérale: SimulationConfig = {
'entreprise . catégorie juridique': "''",
'entreprise . imposition': 'non',
'salarié . cotisations . exonérations . lodeom . zone un': "'oui'",
- 'salarié . cotisations . exonérations . lodeom . zone un . barème compétitivité':
- "'oui'",
},
}