Modifie le parcours pour les entreprises à associés multiples
parent
f14584753b
commit
b0cb1ef96a
|
@ -349,6 +349,7 @@ Votre chiffre d'affaires estimé: Your estimated sales
|
|||
Votre couverture invalidité et décès: Your disability and death coverage
|
||||
Votre domaine d'activité: Your field of activity
|
||||
Votre message (requis): Your message (required)
|
||||
Votre rémunération totale estimée: Your estimated total remuneration
|
||||
Vous allez dépasser le plafond de la micro-entreprise: You will exceed the micro-business limit
|
||||
"Vous n’avez pas été satisfait(e) de votre expérience, nous en sommes désolé(e)s.": We're sorry you weren't satisfied with your experience.
|
||||
Vous pouvez bénéficier d’une pension invalidité <2>en cas de maladie ou d’accident conduisant à une incapacité à poursuivre votre activité professionnelle</2>.:
|
||||
|
@ -528,6 +529,16 @@ choix-statut:
|
|||
expenses necessary for the smooth running of your business</2>:
|
||||
accountancy, telephone subscription, internet subscription, health
|
||||
insurance, provident fund, work tools, etc.</0></1></0>"
|
||||
rémunérationTotale:
|
||||
label: Total compensation
|
||||
totale:
|
||||
help:
|
||||
title: Total executive compensation
|
||||
title: As a manager, I want the company to pay me a total of...<1><0>This is the
|
||||
total amount the company spends on the executive's remuneration. This
|
||||
"super-gross" remuneration includes all social security contributions
|
||||
payable. It can also be considered as the monetary value of the
|
||||
executive's work.</0></1>
|
||||
chomagePartiel:
|
||||
tableCaption: Table showing net salary and cost to the employer with or without
|
||||
short-time working.
|
||||
|
|
|
@ -364,6 +364,7 @@ Votre chiffre d'affaires estimé: Votre chiffre d'affaires estimé
|
|||
Votre couverture invalidité et décès: Votre couverture invalidité et décès
|
||||
Votre domaine d'activité: Votre domaine d'activité
|
||||
Votre message (requis): Votre message (requis)
|
||||
Votre rémunération totale estimée: Votre rémunération totale estimée
|
||||
Vous allez dépasser le plafond de la micro-entreprise: Vous allez dépasser le plafond de la micro-entreprise
|
||||
"Vous n’avez pas été satisfait(e) de votre expérience, nous en sommes désolé(e)s.":
|
||||
Vous n’avez pas été satisfait(e) de votre expérience, nous en sommes
|
||||
|
@ -556,6 +557,16 @@ choix-statut:
|
|||
dépenses nécessaires au bon fonctionnement de votre entreprise</2> :
|
||||
expertise-comptable, abonnement téléphonique, abonnement internet,
|
||||
mutuelle, prévoyance, outils de travail, etc.</0></1></0>"
|
||||
rémunérationTotale:
|
||||
label: Montant de la rémunération totale
|
||||
totale:
|
||||
help:
|
||||
title: Rémunération totale du dirigeant
|
||||
title: En tant que dirigeant, je souhaite que l'entreprise me rémunère en
|
||||
dépensant au total...<1><0>C'est ce que l'entreprise dépense en tout
|
||||
pour la rémunération du dirigeant. Cette rémunération "super-brute"
|
||||
inclut toutes les cotisations sociales à payer. On peut aussi considérer
|
||||
que c'est la valeur monétaire du travail du dirigeant.</0></1>
|
||||
chomagePartiel:
|
||||
tableCaption: Tableau indiquant le salaire net et le coût pour l'employeur avec
|
||||
ou sans chômage partiel.
|
||||
|
|
|
@ -15,11 +15,22 @@ import { debounce } from '@/utils'
|
|||
import Layout from './_components/Layout'
|
||||
import Navigation from './_components/Navigation'
|
||||
|
||||
type State = { CA: number | undefined; charges: number | undefined }
|
||||
|
||||
export default function Rémunération() {
|
||||
const multipleAssociés = useEngine().evaluate(
|
||||
'entreprise . associés . multiples'
|
||||
).nodeValue
|
||||
|
||||
return multipleAssociés ? (
|
||||
<RémunérationSociétéAssociésMultiples />
|
||||
) : (
|
||||
<RémunérationEntrepriseUnipersonnelle />
|
||||
)
|
||||
}
|
||||
|
||||
function RémunérationEntrepriseUnipersonnelle() {
|
||||
const { t } = useTranslation()
|
||||
const [{ CA, charges }, setState, reset, isComplete] = useRémunérationState()
|
||||
const [{ CA, charges }, setState, reset, isComplete] =
|
||||
useChiffreAffairesState()
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -93,21 +104,68 @@ export default function Rémunération() {
|
|||
)
|
||||
}
|
||||
|
||||
function useRémunérationState(): [
|
||||
state: State,
|
||||
setState: (value: Partial<State>) => void,
|
||||
function RémunérationSociétéAssociésMultiples() {
|
||||
const { t } = useTranslation()
|
||||
const [{ rémunérationTotale }, setState, reset, isComplete] =
|
||||
useRémunérationTotaleState()
|
||||
|
||||
return (
|
||||
<>
|
||||
<Layout
|
||||
title={
|
||||
<Trans i18nKey="choix-statut.rémunération.totale.title">
|
||||
En tant que dirigeant, je souhaite que l'entreprise me rémunère en
|
||||
dépensant au total...
|
||||
<HelpButtonWithPopover
|
||||
title={t(
|
||||
'choix-statut.rémunération.totale.help.title',
|
||||
'Rémunération totale du dirigeant'
|
||||
)}
|
||||
type="info"
|
||||
>
|
||||
<Body>
|
||||
C'est ce que l'entreprise dépense en tout pour la rémunération
|
||||
du dirigeant. Cette rémunération "super-brute" inclut toutes les
|
||||
cotisations sociales à payer. On peut aussi considérer que c'est
|
||||
la valeur monétaire du travail du dirigeant.
|
||||
</Body>
|
||||
</HelpButtonWithPopover>
|
||||
</Trans>
|
||||
}
|
||||
>
|
||||
<NumberField
|
||||
value={rémunérationTotale}
|
||||
onChange={(value) => setState({ rémunérationTotale: value })}
|
||||
label={t(
|
||||
'choix-statut.rémunération.rémunérationTotale.label',
|
||||
'Montant de la rémunération totale'
|
||||
)}
|
||||
displayedUnit="€/an"
|
||||
id="rémunérationTotale"
|
||||
/>
|
||||
|
||||
<Navigation currentStepIsComplete={isComplete} onPreviousStep={reset} />
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
type CAState = { CA: number | undefined; charges: number | undefined }
|
||||
function useChiffreAffairesState(): [
|
||||
state: CAState,
|
||||
setState: (value: Partial<CAState>) => void,
|
||||
reset: () => void,
|
||||
isComplete: boolean
|
||||
] {
|
||||
const defaultState = { CA: undefined, charges: undefined }
|
||||
const [state, setState] = usePersistingState<State>(
|
||||
const [state, setState] = usePersistingState<CAState>(
|
||||
'choix-statut:associés',
|
||||
defaultState
|
||||
)
|
||||
|
||||
const dispatch = useDispatch()
|
||||
const debouncedUpdateSituation = useCallback(
|
||||
debounce(1000, (newState: State) => {
|
||||
debounce(1000, (newState: CAState) => {
|
||||
dispatch(
|
||||
batchUpdateSituation({
|
||||
"entreprise . chiffre d'affaires": newState.CA
|
||||
|
@ -119,13 +177,14 @@ function useRémunérationState(): [
|
|||
'entreprise . charges': newState.charges
|
||||
? { valeur: newState.charges, unité: '€/an' }
|
||||
: undefined,
|
||||
'dirigeant . rémunération . totale': undefined,
|
||||
})
|
||||
)
|
||||
}),
|
||||
[]
|
||||
)
|
||||
|
||||
const handleChange = (value: Partial<State>) => {
|
||||
const handleChange = (value: Partial<CAState>) => {
|
||||
const newState = { ...state, ...value }
|
||||
setState(newState)
|
||||
debouncedUpdateSituation(newState)
|
||||
|
@ -146,3 +205,55 @@ function useRémunérationState(): [
|
|||
|
||||
return [state, handleChange, reset, isComplete]
|
||||
}
|
||||
|
||||
type RémunérationState = { rémunérationTotale: number | undefined }
|
||||
function useRémunérationTotaleState(): [
|
||||
state: RémunérationState,
|
||||
setState: (value: Partial<RémunérationState>) => void,
|
||||
reset: () => void,
|
||||
isComplete: boolean
|
||||
] {
|
||||
const defaultState = { rémunérationTotale: undefined }
|
||||
const [state, setState] = usePersistingState<RémunérationState>(
|
||||
'choix-statut:associés',
|
||||
defaultState
|
||||
)
|
||||
|
||||
const dispatch = useDispatch()
|
||||
const debouncedUpdateSituation = useCallback(
|
||||
debounce(1000, (newState: RémunérationState) => {
|
||||
dispatch(
|
||||
batchUpdateSituation({
|
||||
"entreprise . chiffre d'affaires": undefined,
|
||||
'entreprise . charges': undefined,
|
||||
'dirigeant . rémunération . totale': newState.rémunérationTotale
|
||||
? {
|
||||
valeur: newState.rémunérationTotale,
|
||||
unité: '€/an',
|
||||
}
|
||||
: undefined,
|
||||
})
|
||||
)
|
||||
}),
|
||||
[]
|
||||
)
|
||||
|
||||
const handleChange = (value: Partial<RémunérationState>) => {
|
||||
const newState = { ...state, ...value }
|
||||
setState(newState)
|
||||
debouncedUpdateSituation(newState)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
handleChange(state)
|
||||
}, [])
|
||||
const reset = () => {
|
||||
handleChange(defaultState)
|
||||
}
|
||||
|
||||
const engine = useEngine()
|
||||
const isComplete =
|
||||
engine.evaluate('dirigeant . rémunération . totale').nodeValue !== undefined
|
||||
|
||||
return [state, handleChange, reset, isComplete]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
import { Trans } from 'react-i18next'
|
||||
import styled from 'styled-components'
|
||||
|
||||
import Value from '@/components/EngineValue'
|
||||
import Value, {
|
||||
WhenAlreadyDefined,
|
||||
WhenNotAlreadyDefined,
|
||||
} from '@/components/EngineValue'
|
||||
import { CardContainer } from '@/design-system/card/Card'
|
||||
import { EditIcon } from '@/design-system/icons'
|
||||
import { Grid } from '@/design-system/layout'
|
||||
|
@ -20,35 +23,48 @@ const RevenuEstimé = () => {
|
|||
$inert
|
||||
>
|
||||
<Grid container>
|
||||
<Grid
|
||||
css={`
|
||||
padding-right: 1.5rem;
|
||||
`}
|
||||
item
|
||||
xs={12}
|
||||
sm={6}
|
||||
lg={3}
|
||||
>
|
||||
<Label>
|
||||
<Trans>Votre chiffre d'affaires estimé</Trans>
|
||||
</Label>
|
||||
<StyledValue
|
||||
linkToRule={false}
|
||||
expression="entreprise . chiffre d'affaires"
|
||||
/>
|
||||
</Grid>
|
||||
<WhenAlreadyDefined dottedName="entreprise . chiffre d'affaires">
|
||||
<Grid
|
||||
css={`
|
||||
padding-right: 1.5rem;
|
||||
`}
|
||||
item
|
||||
xs={12}
|
||||
sm={6}
|
||||
lg={3}
|
||||
>
|
||||
<Label>
|
||||
<Trans>Votre chiffre d'affaires estimé</Trans>
|
||||
</Label>
|
||||
<StyledValue
|
||||
linkToRule={false}
|
||||
expression="entreprise . chiffre d'affaires"
|
||||
/>
|
||||
</Grid>
|
||||
<StyledGrid item xs={12} sm={6} lg={5}>
|
||||
<Label>
|
||||
<Trans>Vos charges estimées</Trans>
|
||||
</Label>
|
||||
<StyledValue
|
||||
linkToRule={false}
|
||||
unit="€/an"
|
||||
expression="entreprise . charges"
|
||||
/>
|
||||
</StyledGrid>
|
||||
</WhenAlreadyDefined>
|
||||
<WhenNotAlreadyDefined dottedName="entreprise . chiffre d'affaires">
|
||||
<Grid item xs>
|
||||
<Label>
|
||||
<Trans>Votre rémunération totale estimée</Trans>
|
||||
</Label>
|
||||
<StyledValue
|
||||
linkToRule={false}
|
||||
expression="dirigeant . rémunération . totale"
|
||||
/>
|
||||
</Grid>
|
||||
</WhenNotAlreadyDefined>
|
||||
|
||||
<StyledGrid item xs={12} sm={6} lg={5}>
|
||||
<Label>
|
||||
<Trans>Vos charges estimées</Trans>
|
||||
</Label>
|
||||
<StyledValue
|
||||
linkToRule={false}
|
||||
unit="€/an"
|
||||
expression="entreprise . charges"
|
||||
/>
|
||||
</StyledGrid>
|
||||
<GridEditLink item xs={12} lg={3}>
|
||||
<GridEditLink item xs={12} sm="auto">
|
||||
<Link
|
||||
to={absoluteSitePaths.assistants['choix-du-statut'].rémunération}
|
||||
// $noUnderline
|
||||
|
|
Loading…
Reference in New Issue