{label} |
-
+
|
diff --git a/site/source/pages/simulateurs/lodeom/Basique.tsx b/site/source/components/RéductionDeCotisations/RéductionBasique.tsx
similarity index 53%
rename from site/source/pages/simulateurs/lodeom/Basique.tsx
rename to site/source/components/RéductionDeCotisations/RéductionBasique.tsx
index 4f01522f5..98678417b 100644
--- a/site/source/pages/simulateurs/lodeom/Basique.tsx
+++ b/site/source/components/RéductionDeCotisations/RéductionBasique.tsx
@@ -1,7 +1,10 @@
+import { PublicodesExpression } from 'publicodes'
+import { ReactNode } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { Condition } from '@/components/EngineValue/Condition'
+import Répartition from '@/components/RéductionDeCotisations/Répartition'
import { SimulationGoal } from '@/components/Simulation'
import { SimulationValue } from '@/components/Simulation/SimulationValue'
import { useEngine } from '@/components/utils/EngineContext'
@@ -9,33 +12,32 @@ import { Message } from '@/design-system'
import { Spacing } from '@/design-system/layout'
import { Body } from '@/design-system/typography/paragraphs'
import { targetUnitSelector } from '@/store/selectors/simulationSelectors'
-
-import Répartition from './components/Répartition'
-import Warnings from './components/Warnings'
-import WarningSalaireTrans from './components/WarningSalaireTrans'
-import { lodeomDottedName, rémunérationBruteDottedName } from './utils'
+import {
+ getRépartitionBasique,
+ RéductionDottedName,
+ rémunérationBruteDottedName,
+} from '@/utils/réductionDeCotisations'
type Props = {
+ dottedName: RéductionDottedName
onUpdate: () => void
+ warnings: ReactNode
+ warningCondition: PublicodesExpression
+ warningMessage: ReactNode
}
-export default function LodeomBasique({ onUpdate }: Props) {
+export default function RéductionBasique({
+ dottedName,
+ onUpdate,
+ warnings,
+ warningCondition,
+ warningMessage,
+}: Props) {
const engine = useEngine()
const currentUnit = useSelector(targetUnitSelector)
const { t } = useTranslation()
- const répartition = {
- IRC:
- (engine.evaluate({
- valeur: `${lodeomDottedName} . imputation retraite complémentaire`,
- unité: currentUnit,
- })?.nodeValue as number) ?? 0,
- Urssaf:
- (engine.evaluate({
- valeur: `${lodeomDottedName} . imputation sécurité sociale`,
- unité: currentUnit,
- })?.nodeValue as number) ?? 0,
- }
+ const répartition = getRépartitionBasique(dottedName, currentUnit, engine)
return (
<>
@@ -46,23 +48,22 @@ export default function LodeomBasique({ onUpdate }: Props) {
onUpdateSituation={onUpdate}
/>
-
-
+ {warnings}
+
+
-
-
-
+ {warningMessage}
- = 0`}>
+ = 0`}>
-
+
>
)
diff --git a/site/source/pages/simulateurs/reduction-generale/components/RéductionGénéraleMois.tsx b/site/source/components/RéductionDeCotisations/RéductionMois.tsx
similarity index 81%
rename from site/source/pages/simulateurs/reduction-generale/components/RéductionGénéraleMois.tsx
rename to site/source/components/RéductionDeCotisations/RéductionMois.tsx
index 233662ea7..5180841fa 100644
--- a/site/source/pages/simulateurs/reduction-generale/components/RéductionGénéraleMois.tsx
+++ b/site/source/components/RéductionDeCotisations/RéductionMois.tsx
@@ -1,10 +1,11 @@
import { PublicodesExpression } from 'publicodes'
-import { useState } from 'react'
+import { ReactNode, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
import NumberInput from '@/components/conversation/NumberInput'
-import MonthOptions from '@/components/MonthOptions'
+import MontantAvecRépartition from '@/components/RéductionDeCotisations/MontantAvecRépartition'
+import MonthOptions from '@/components/RéductionDeCotisations/MonthOptions'
import RuleLink from '@/components/RuleLink'
import { useEngine } from '@/components/utils/EngineContext'
import { Button } from '@/design-system/buttons'
@@ -12,35 +13,36 @@ import { FlexCenter } from '@/design-system/global-style'
import { RotatingChevronIcon } from '@/design-system/icons'
import { Grid, Spacing } from '@/design-system/layout'
import { Body } from '@/design-system/typography/paragraphs'
-
import {
MonthState,
Options,
+ RéductionDottedName,
réductionGénéraleDottedName,
rémunérationBruteDottedName,
-} from '../utils'
-import MontantRéduction from './MontantRéduction'
+ RémunérationBruteInput,
+} from '@/utils/réductionDeCotisations'
type Props = {
+ dottedName: RéductionDottedName
monthName: string
data: MonthState
index: number
onRémunérationChange: (monthIndex: number, rémunérationBrute: number) => void
onOptionsChange: (monthIndex: number, options: Options) => void
+ warningCondition: PublicodesExpression
+ warningTooltip: ReactNode
mobileVersion?: boolean
}
-export type RémunérationBruteInput = {
- unité: string
- valeur: number
-}
-
-export default function RéductionGénéraleMois({
+export default function RéductionMois({
+ dottedName,
monthName,
data,
index,
onRémunérationChange,
onOptionsChange,
+ warningCondition,
+ warningTooltip,
mobileVersion = false,
}: Props) {
const { t, i18n } = useTranslation()
@@ -52,7 +54,7 @@ export default function RéductionGénéraleMois({
const RémunérationInput = () => {
// TODO: enlever les 4 premières props après résolution de #3123
const ruleInputProps = {
- dottedName: rémunérationBruteDottedName,
+ dottedName,
suggestions: {},
description: undefined,
question: undefined,
@@ -109,35 +111,32 @@ export default function RéductionGénéraleMois({
)
}
- const MontantRéductionGénérale = () => {
+ const MontantRéduction = () => {
return (
-
)
}
const MontantRégularisation = () => {
return (
-
)
}
@@ -172,18 +171,20 @@ export default function RéductionGénéraleMois({
-
+
-
+
-
+
@@ -203,7 +204,7 @@ export default function RéductionGénéraleMois({
|
-
+
|
diff --git a/site/source/pages/simulateurs/reduction-generale/MoisParMois.tsx b/site/source/components/RéductionDeCotisations/RéductionMoisParMois.tsx
similarity index 72%
rename from site/source/pages/simulateurs/reduction-generale/MoisParMois.tsx
rename to site/source/components/RéductionDeCotisations/RéductionMoisParMois.tsx
index 30e67471f..2e267c683 100644
--- a/site/source/pages/simulateurs/reduction-generale/MoisParMois.tsx
+++ b/site/source/components/RéductionDeCotisations/RéductionMoisParMois.tsx
@@ -1,3 +1,5 @@
+import { PublicodesExpression } from 'publicodes'
+import { ReactNode } from 'react'
import { useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
@@ -6,22 +8,40 @@ import { Spacing } from '@/design-system/layout'
import { baseTheme } from '@/design-system/theme'
import { H3 } from '@/design-system/typography/heading'
import { useMediaQuery } from '@/hooks/useMediaQuery'
+import {
+ MonthState,
+ Options,
+ RéductionDottedName,
+ réductionGénéraleDottedName,
+} from '@/utils/réductionDeCotisations'
-import RécapitulatifTrimestre from './components/RécapitulatifTrimestre'
-import RéductionGénéraleMois from './components/RéductionGénéraleMois'
-import Warnings from './components/Warnings'
-import { MonthState, Options, réductionGénéraleDottedName } from './utils'
+import RécapitulatifTrimestre from './RécapitulatifTrimestre'
+import RéductionMois from './RéductionMois'
type Props = {
+ dottedName: RéductionDottedName
data: MonthState[]
onRémunérationChange: (monthIndex: number, rémunérationBrute: number) => void
onOptionsChange: (monthIndex: number, options: Options) => void
+ caption: string
+ warnings: ReactNode
+ warningCondition: PublicodesExpression
+ warningTooltip: ReactNode
+ codeRéduction?: string
+ codeRégularisation?: string
}
-export default function RéductionGénéraleMoisParMois({
+export default function RéductionMoisParMois({
+ dottedName,
data,
onRémunérationChange,
onOptionsChange,
+ caption,
+ warnings,
+ warningCondition,
+ warningTooltip,
+ codeRéduction,
+ codeRégularisation,
}: Props) {
const { t } = useTranslation()
const isDesktop = useMediaQuery(
@@ -58,19 +78,9 @@ export default function RéductionGénéraleMoisParMois({
<>
{isDesktop ? (
<>
-
- {t(
- 'pages.simulateurs.réduction-générale.month-by-month.caption',
- 'Réduction générale mois par mois :'
- )}
-
+ {caption}
-
- {t(
- 'pages.simulateurs.réduction-générale.month-by-month.caption',
- 'Réduction générale mois par mois :'
- )}
-
+ {caption}
{t('Mois')} |
@@ -79,18 +89,21 @@ export default function RéductionGénéraleMoisParMois({
-
+
|
-
+
|
{data.length > 0 &&
months.map((monthName, monthIndex) => (
- {
onOptionsChange(monthIndex, options)
}}
+ warningCondition={warningCondition}
+ warningTooltip={warningTooltip}
/>
))}
@@ -128,24 +143,26 @@ export default function RéductionGénéraleMoisParMois({
{t('Trimestre')} |
{t(
- 'pages.simulateurs.réduction-générale.recap.header',
+ 'pages.simulateurs.réduction-générale.recap.header-réduction',
'Réduction calculée'
)}
-
- {t(
- 'pages.simulateurs.réduction-générale.recap.code671',
- 'code 671(€)'
+ {codeRéduction && (
+ <>
+
+ {codeRéduction}
+ >
)}
|
{t(
- 'pages.simulateurs.réduction-générale.recap.header',
- 'Réduction calculée'
+ 'pages.simulateurs.réduction-générale.recap.header-régularisation',
+ 'Régularisation calculée'
)}
-
- {t(
- 'pages.simulateurs.réduction-générale.recap.code801',
- 'code 801(€)'
+ {codeRégularisation && (
+ <>
+
+ {codeRégularisation}
+ >
)}
|
|
@@ -154,8 +171,11 @@ export default function RéductionGénéraleMoisParMois({
{Object.keys(quarters).map((label, index) => (