Ajoute un avertissement pour les cas exclus de l'assistant statut

- Gestion de bien
- PLR
- Entreprises agricoles
...
pull/2782/head
Johan Girod 2023-07-26 17:40:32 +02:00
parent 1d2652b2d5
commit 03cb5d43fd
7 changed files with 99 additions and 17 deletions

View File

@ -87,6 +87,9 @@ entreprise . activité . nature:
## | New activité modèle |
## =======================
# Ce nouveau modèle gère la pluri activité (contrairement à l'ancien). Il est utilisé dans le simulateur de coût de création.
# Dans le futur, il faudrait migrer les autres simulateurs pour ne plus utiliser que ce nouveau modèle
entreprise . activités:
experimental: oui
titre: nature de l'activité

View File

@ -0,0 +1,51 @@
import { Message } from '@/design-system'
import { H3 } from '@/design-system/typography/heading'
import { Intro } from '@/design-system/typography/paragraphs'
import { GuichetEntry } from '../../recherche-code-ape/GuichetInfo'
export function estNonDisponible(guichet: GuichetEntry): boolean {
return (
!!guichet.caisseDeRetraiteSpéciale ||
guichet.artisteAuteurPossible ||
guichet.affiliationPrincipale === 'MSA' ||
guichet.catégorieActivité === 'AGENT_COMMERCIAL' ||
guichet.catégorieActivité === 'GESTION_DE_BIENS'
)
}
export function AvertissementActivitéNonDisponible({
guichet,
}: {
guichet: GuichetEntry | undefined
}) {
if (!guichet || !estNonDisponible(guichet)) {
return null
}
return (
<>
<Message type="info">
<H3>
Cet assistant ne propose pas encore d'aide pour les{' '}
{guichet.artisteAuteurPossible ? (
<>artistes-auteurs</>
) : guichet.caisseDeRetraiteSpéciale ? (
<>professions libérales réglementées</>
) : guichet.affiliationPrincipale === 'MSA' ? (
<>entreprises agricoles</>
) : guichet.catégorieActivité === 'AGENT_COMMERCIAL' ? (
<>agents commerciaux</>
) : (
<>locations de biens</>
)}
</H3>
<Intro>
Pour plus d'informations relatives à votre situation, vous pouvez
consulter les sites entreprendre.service-public.fr, urssaf.fr et
bpifrance-création.fr
</Intro>
</Message>
</>
)
}

View File

@ -1,7 +1,7 @@
import { Grid } from '@/design-system/layout'
import { H3 } from '@/design-system/typography/heading'
import StatutsDisponibles from './StatutsDisponibles'
import StatutsPossibles from './StatutsPossibles'
export default function Layout({
title,
@ -18,7 +18,7 @@ export default function Layout({
{children}
</Grid>
<Grid item sm={12} md={5} lg={4}>
<StatutsDisponibles />
<StatutsPossibles />
</Grid>
</Grid>
</>

View File

@ -19,12 +19,14 @@ export default function Navigation({
onNextStep,
onPreviousStep, // TODO : prefer resetOnLeave
assistantIsCompleted = false,
children,
}: {
currentStepIsComplete: boolean
nextStepLabel?: false | string
onNextStep?: () => void
onPreviousStep?: () => void
assistantIsCompleted?: false | Statuts
children?: React.ReactNode
}) {
const { t } = useTranslation()
const nextStep = useNextStep()
@ -39,6 +41,11 @@ export default function Navigation({
<Spacing xs />
<StyledNavigation>
<Grid container spacing={2}>
{children && (
<Grid item xs={12}>
{children}
</Grid>
)}
<Grid item>
<Button
light

View File

@ -10,7 +10,7 @@ import { H5 } from '@/design-system/typography/heading'
import { Li, Ul } from '@/design-system/typography/list'
import { SmallBody } from '@/design-system/typography/paragraphs'
export default function StatutsDisponibles() {
export default function StatutsPossibles() {
const engine = useEngine()
const statuts = [
'entreprise . catégorie juridique . EI . EI',

View File

@ -3,7 +3,6 @@ import { Trans, useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { FromTop } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { usePersistingState } from '@/components/utils/persistState'
import {
Message,
@ -115,7 +114,7 @@ export default function Associés() {
</Message>
</FromTop>
)}
{question2 === 'non' && (
{question2 === 'non' && question1 === 'seul' && (
<FromTop>
<Spacing md />
<Message type="secondary" border={false}>
@ -163,6 +162,21 @@ export default function Associés() {
</Message>
</FromTop>
)}
{question1 === 'plusieurs' && (
<FromTop>
<Spacing lg />
<Message type="info" icon>
<Body>
<Trans i18nKey="choix-statut.associés.plusieurs.avertissement">
Cet assistant ne gère pas encore le cas des gérant associés
égalitaire ou minoritaire. Il s'adresse uniquement aux
personnes possédant <Strong>au minimum 51 % des parts</Strong>{' '}
de leur entreprise.
</Trans>
</Body>
</Message>
</FromTop>
)}
<Navigation currentStepIsComplete={isComplete} onPreviousStep={reset} />
</Layout>
@ -220,13 +234,9 @@ function useAssociésSelection(): [
}
const isComplete =
useEngine().evaluate({
'toutes ces conditions': [
{ 'est défini': 'entreprise . associés' },
{ 'est défini': 'entreprise . catégorie juridique . EI' },
{ 'est défini': 'entreprise . catégorie juridique . SARL . EURL' },
],
}).nodeValue === true
state.question1 === 'plusieurs' ||
state.question2 === 'oui' ||
!!state.question3
return [state, handleChange, reset, isComplete]
}

View File

@ -22,6 +22,10 @@ import {
GuichetEntry,
useGuichetInfo,
} from '../recherche-code-ape/GuichetInfo'
import {
AvertissementActivitéNonDisponible,
estNonDisponible,
} from './_components/ActivitéNonDisponible'
import Layout from './_components/Layout'
import Navigation from './_components/Navigation'
@ -53,7 +57,9 @@ export default function DétailsActivité() {
setCodeGuichet(defaultCodeGuichet)
}
}, [guichetEntries])
const guichet = guichetEntries?.find(
(guichet) => guichet.code === codeGuichet
)
// Wait for the update to be done before rendering the component
const isIdle = useEngineIsIdle()
@ -91,12 +97,14 @@ export default function DétailsActivité() {
/>
)}
<Navigation
currentStepIsComplete={!!codeGuichet}
currentStepIsComplete={!!codeGuichet && !estNonDisponible(guichet)}
nextStepLabel={
guichetEntries?.length === 1 &&
t('créer.activité-détails.next1', 'Continuer avec cette activité')
}
/>
>
<AvertissementActivitéNonDisponible guichet={guichet} />
</Navigation>
</Layout>
</>
)
@ -139,7 +147,9 @@ function GuichetSelection({
return (
<>
<Body>Sectionnez la description d'activité qui correspond le mieux.</Body>
<Body>
Selectionnez la description d'activité qui correspond le mieux.
</Body>
{showCCIOrCMAHelp && (
<Message>
<Body>
@ -203,7 +213,7 @@ function useUpdateSituationWithGuichet(guichetEntries: GuichetEntry[] | null) {
'entreprise . activités . agricole': undefined,
'entreprise . activités . commerciale': undefined,
'entreprise . activité . nature': undefined,
'artiste-auteur': undefined,
'entreprise . activité . nature . libérale . réglementée':
undefined,
'dirigeant . indépendant . PL . métier': undefined,
@ -228,6 +238,7 @@ function useUpdateSituationWithGuichet(guichetEntries: GuichetEntry[] | null) {
? 'oui'
: 'non',
'dirigeant . indépendant . PL . métier': PLRMétier,
'artiste-auteur': guichet.artisteAuteurPossible ? 'oui' : 'non',
})
)
},