From 1dd4a65b904a530f7004d3d2d0b4b1cbbdb2da52 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Wed, 22 Jan 2025 18:49:59 +0100 Subject: [PATCH] =?UTF-8?q?fix(lodeom):=20correction=20du=20bug=20Lodeom?= =?UTF-8?q?=20zone=202=20(r=C3=A9partition)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RéductionBasique.tsx | 5 +- .../source/pages/simulateurs/lodeom/Goals.tsx | 26 +++-- site/source/utils/réductionDeCotisations.ts | 108 +++++++++++------- 3 files changed, 88 insertions(+), 51 deletions(-) diff --git a/site/source/components/RéductionDeCotisations/RéductionBasique.tsx b/site/source/components/RéductionDeCotisations/RéductionBasique.tsx index 2a661c77e..63f3d94d0 100644 --- a/site/source/components/RéductionDeCotisations/RéductionBasique.tsx +++ b/site/source/components/RéductionDeCotisations/RéductionBasique.tsx @@ -39,7 +39,8 @@ export default function RéductionBasique({ const currentUnit = useSelector(targetUnitSelector) const { t } = useTranslation() - const répartition = getRépartitionBasique(dottedName, currentUnit, engine) + const répartition = + withRépartition && getRépartitionBasique(dottedName, currentUnit, engine) return ( <> @@ -65,7 +66,7 @@ export default function RéductionBasique({ round={false} /> - {withRépartition && ( + {répartition && ( )} diff --git a/site/source/pages/simulateurs/lodeom/Goals.tsx b/site/source/pages/simulateurs/lodeom/Goals.tsx index f86b63acd..22449f019 100644 --- a/site/source/pages/simulateurs/lodeom/Goals.tsx +++ b/site/source/pages/simulateurs/lodeom/Goals.tsx @@ -56,10 +56,17 @@ export default function LodeomSimulationGoals({ 'salarié . cotisations . exonérations . lodeom . code régularisation' ).nodeValue as string + const withRépartition = currentZone === 'zone un' + const initializeLodeomMoisParMoisData = useCallback(() => { - const data = getInitialRéductionMoisParMois(lodeomDottedName, year, engine) + const data = getInitialRéductionMoisParMois( + lodeomDottedName, + year, + engine, + withRépartition + ) setData(data) - }, [engine, year]) + }, [engine, withRépartition, year]) useEffect(() => { if (lodeomMoisParMoisData.length === 0) { @@ -76,10 +83,11 @@ export default function LodeomSimulationGoals({ previousData, year, engine, - régularisationMethod + régularisationMethod, + withRépartition ) }) - }, [engine, situation, régularisationMethod, year]) + }, [engine, situation, régularisationMethod, year, withRépartition]) const onRémunérationChange = ( monthIndex: number, @@ -94,7 +102,8 @@ export default function LodeomSimulationGoals({ year, engine, dispatch, - régularisationMethod + régularisationMethod, + withRépartition ) }) } @@ -108,7 +117,8 @@ export default function LodeomSimulationGoals({ previousData, year, engine, - régularisationMethod + régularisationMethod, + withRépartition ) }) } @@ -153,7 +163,7 @@ export default function LodeomSimulationGoals({ code: codeRégularisation, }) } - withRépartitionAndRégularisation={currentZone === 'zone un'} + withRépartitionAndRégularisation={withRépartition} /> ) : ( } - withRépartition={currentZone === 'zone un'} + withRépartition={withRépartition} /> ))} diff --git a/site/source/utils/réductionDeCotisations.ts b/site/source/utils/réductionDeCotisations.ts index 249cb8d68..afaab5662 100644 --- a/site/source/utils/réductionDeCotisations.ts +++ b/site/source/utils/réductionDeCotisations.ts @@ -74,6 +74,12 @@ export type Répartition = { chômage: number } +const defaultRépartition = { + IRC: 0, + Urssaf: 0, + chômage: 0, +} + export const getDataAfterSituationChange = ( dottedName: RéductionDottedName, situation: SituationType, @@ -81,10 +87,16 @@ export const getDataAfterSituationChange = ( previousData: MonthState[], year: number, engine: Engine, - régularisationMethod?: RégularisationMethod + régularisationMethod?: RégularisationMethod, + withRépartition: boolean = true ): MonthState[] => { if (!Object.keys(situation).length) { - return getInitialRéductionMoisParMois(dottedName, year, engine) + return getInitialRéductionMoisParMois( + dottedName, + year, + engine, + withRépartition + ) } const newOptions = getOptionsFromSituations(previousSituation, situation) @@ -104,6 +116,7 @@ export const getDataAfterSituationChange = ( updatedData, year, engine, + withRépartition, régularisationMethod ) } @@ -116,7 +129,8 @@ export const getDataAfterRémunérationChange = ( year: number, engine: Engine, dispatch: Dispatch, - régularisationMethod?: RégularisationMethod + régularisationMethod?: RégularisationMethod, + withRépartition: boolean = true ): MonthState[] => { const updatedData = [...previousData] updatedData[monthIndex] = { @@ -131,6 +145,7 @@ export const getDataAfterRémunérationChange = ( updatedData, year, engine, + withRépartition, régularisationMethod ) } @@ -142,7 +157,8 @@ export const getDataAfterOptionsChange = ( previousData: MonthState[], year: number, engine: Engine, - régularisationMethod?: RégularisationMethod + régularisationMethod?: RégularisationMethod, + withRépartition: boolean = true ): MonthState[] => { const updatedData = [...previousData] updatedData[monthIndex] = { @@ -155,6 +171,7 @@ export const getDataAfterOptionsChange = ( updatedData, year, engine, + withRépartition, régularisationMethod ) } @@ -162,7 +179,8 @@ export const getDataAfterOptionsChange = ( export const getInitialRéductionMoisParMois = ( dottedName: RéductionDottedName, year: number, - engine: Engine + engine: Engine, + withRépartition: boolean = true ): MonthState[] => { const rémunérationBrute = (engine.evaluate({ @@ -221,12 +239,9 @@ export const getInitialRéductionMoisParMois = ( }, engine ) - const répartition = getRépartition( - dottedName, - rémunérationBrute, - réduction, - engine - ) + const répartition = withRépartition + ? getRépartition(dottedName, rémunérationBrute, réduction, engine) + : defaultRépartition return { rémunérationBrute, @@ -254,6 +269,7 @@ export const reevaluateRéductionMoisParMois = ( data: MonthState[], year: number, engine: Engine, + withRépartition: boolean, régularisationMethod?: RégularisationMethod ): MonthState[] => { const totalRémunérationBrute = sumAll( @@ -330,20 +346,24 @@ export const reevaluateRéductionMoisParMois = ( if (régularisation.value > 0) { réduction.value = régularisation.value - réduction.répartition = getRépartition( - dottedName, - rémunérationBrute, - réduction.value, - engine - ) + réduction.répartition = withRépartition + ? getRépartition( + dottedName, + rémunérationBrute, + réduction.value, + engine + ) + : defaultRépartition régularisation.value = 0 } else if (régularisation.value < 0) { - régularisation.répartition = getRépartition( - dottedName, - rémunérationBrute, - régularisation.value, - engine - ) + régularisation.répartition = withRépartition + ? getRépartition( + dottedName, + rémunérationBrute, + régularisation.value, + engine + ) + : defaultRépartition } } else { const date = getDateForContexte(monthIndex, year) @@ -380,29 +400,35 @@ export const reevaluateRéductionMoisParMois = ( if (régularisation.value > 0) { réduction.value = régularisation.value - réduction.répartition = getRépartition( - dottedName, - rémunérationBrute, - réduction.value, - engine - ) + réduction.répartition = withRépartition + ? getRépartition( + dottedName, + rémunérationBrute, + réduction.value, + engine + ) + : defaultRépartition régularisation.value = 0 } else if (régularisation.value < 0) { - régularisation.répartition = getRépartition( - dottedName, - rémunérationBrute, - régularisation.value, - engine - ) + régularisation.répartition = withRépartition + ? getRépartition( + dottedName, + rémunérationBrute, + régularisation.value, + engine + ) + : defaultRépartition réduction.value = 0 } } else { - réduction.répartition = getRépartition( - dottedName, - rémunérationBrute, - réduction.value, - engine - ) + réduction.répartition = withRépartition + ? getRépartition( + dottedName, + rémunérationBrute, + réduction.value, + engine + ) + : defaultRépartition } }