feat: ajoute un avertissement lorsque le simulateur ne correspond pas à la catégorie juridique de l'entreprise
parent
33b51ba4e9
commit
9675dfebf5
|
@ -21,6 +21,11 @@ entreprise . associés:
|
|||
### () La nomenclature des catégories juridiques retenue est celle du niveau III du répertoire Sirene géré par l'Insee ###
|
||||
### https://www.insee.fr/fr/information/2028129
|
||||
|
||||
entreprise . code catégorie juridique:
|
||||
description: Code représentant la catégorie juridique de l'entreprise, tel que défini par l'INSEE.
|
||||
références:
|
||||
Liste des catégories juridique de l'INSEE: https://www.insee.fr/fr/information/2028129
|
||||
|
||||
entreprise . catégorie juridique:
|
||||
question: Quelle est la catégorie juridique de l'entreprise ?
|
||||
note: On se base ici sur les catégories juridiques définies par l'INSEE
|
||||
|
|
|
@ -1,24 +1,17 @@
|
|||
import React from 'react'
|
||||
import { Trans, useTranslation } from 'react-i18next'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { useLocation } from 'react-router-dom'
|
||||
import { styled } from 'styled-components'
|
||||
|
||||
import { ConversationProps } from '@/components/conversation/Conversation'
|
||||
import ShareOrSaveSimulationBanner from '@/components/ShareSimulationBanner'
|
||||
import { PopoverWithTrigger } from '@/design-system'
|
||||
import { Grid, Spacing } from '@/design-system/layout'
|
||||
import { Link } from '@/design-system/typography/link'
|
||||
import {
|
||||
companySituationSelector,
|
||||
firstStepCompletedSelector,
|
||||
} from '@/store/selectors/simulationSelectors'
|
||||
import { firstStepCompletedSelector } from '@/store/selectors/simulationSelectors'
|
||||
|
||||
import { TrackPage } from '../ATInternetTracking'
|
||||
import Banner from '../Banner'
|
||||
import AnswerList from '../conversation/AnswerList'
|
||||
import { Feedback, getShouldAskFeedback } from '../Feedback/Feedback'
|
||||
import PrintExportRecover from '../simulationExplanation/PrintExportRecover'
|
||||
import SimulationPréremplieBanner from '../SimulationPréremplieBanner'
|
||||
import PreviousSimulationBanner from './../PreviousSimulationBanner'
|
||||
import { FromTop } from './../ui/animate'
|
||||
import EntrepriseSelection from './EntrepriseSelection'
|
||||
|
@ -62,13 +55,8 @@ export default function Simulation({
|
|||
id,
|
||||
}: SimulationProps) {
|
||||
const firstStepCompleted = useSelector(firstStepCompletedSelector)
|
||||
const existingCompany = !!useSelector(companySituationSelector)[
|
||||
'entreprise . SIREN'
|
||||
]
|
||||
const shouldShowFeedback = getShouldAskFeedback(useLocation().pathname)
|
||||
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
<>
|
||||
{!firstStepCompleted && <TrackPage name="accueil" />}
|
||||
|
@ -88,29 +76,7 @@ export default function Simulation({
|
|||
)}
|
||||
<Spacing md />
|
||||
|
||||
{existingCompany && (
|
||||
<Banner icon="✏">
|
||||
<Trans>
|
||||
Ce simulateur a été prérempli avec la situation de votre
|
||||
entreprise.
|
||||
</Trans>{' '}
|
||||
<PopoverWithTrigger
|
||||
trigger={(buttonProps) => (
|
||||
<Link
|
||||
{...buttonProps}
|
||||
aria-haspopup="dialog"
|
||||
aria-label={t(
|
||||
'Voir ma situation, accéder à la page de gestion de mon entreprise'
|
||||
)}
|
||||
>
|
||||
<Trans>Voir ma situation</Trans>
|
||||
</Link>
|
||||
)}
|
||||
>
|
||||
{(close) => <AnswerList onClose={close} />}
|
||||
</PopoverWithTrigger>
|
||||
</Banner>
|
||||
)}
|
||||
<SimulationPréremplieBanner />
|
||||
|
||||
{!showQuestionsFromBeginning && !firstStepCompleted && (
|
||||
<PreviousSimulationBanner />
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
import { Trans, useTranslation } from 'react-i18next'
|
||||
import { useSelector } from 'react-redux'
|
||||
|
||||
import { Message, PopoverWithTrigger } from '@/design-system'
|
||||
import { Spacing } from '@/design-system/layout'
|
||||
import { Strong } from '@/design-system/typography'
|
||||
import { Link } from '@/design-system/typography/link'
|
||||
import { SmallBody } from '@/design-system/typography/paragraphs'
|
||||
import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData'
|
||||
import { PageConfig } from '@/pages/simulateurs/_configs/types'
|
||||
import { companySituationSelector } from '@/store/selectors/simulationSelectors'
|
||||
|
||||
import Banner from './Banner'
|
||||
import AnswerList from './conversation/AnswerList'
|
||||
|
||||
export default function SimulationPréremplieBanner() {
|
||||
const company = useSelector(companySituationSelector)
|
||||
const existingCompany = !!company['entreprise . SIREN']
|
||||
|
||||
const simulatorData = useCurrentSimulatorData().currentSimulatorData as
|
||||
| PageConfig
|
||||
| undefined
|
||||
const isWrongSimulateur =
|
||||
simulatorData &&
|
||||
simulatorData.codesCatégorieJuridique?.length &&
|
||||
simulatorData.codesCatégorieJuridique.indexOf(
|
||||
company['entreprise . code catégorie juridique'] as string
|
||||
) < 0
|
||||
|
||||
const { t } = useTranslation()
|
||||
|
||||
if (!existingCompany) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<Banner icon="✏">
|
||||
<Trans i18nKey="simulationPréremplieBanner.info">
|
||||
Ce simulateur a été prérempli avec la situation de votre entreprise.
|
||||
</Trans>{' '}
|
||||
<PopoverWithTrigger
|
||||
trigger={(buttonProps) => (
|
||||
<Link
|
||||
{...buttonProps}
|
||||
aria-haspopup="dialog"
|
||||
aria-label={t(
|
||||
'simulationPréremplieBanner.aria-label',
|
||||
'Voir ma situation, accéder à la page de gestion de mon entreprise'
|
||||
)}
|
||||
>
|
||||
<Trans i18nKey="simulationPréremplieBanner.button">Voir ma situation</Trans>
|
||||
</Link>
|
||||
)}
|
||||
>
|
||||
{(close) => <AnswerList onClose={close} />}
|
||||
</PopoverWithTrigger>
|
||||
{isWrongSimulateur && (
|
||||
<>
|
||||
<Spacing xxs />
|
||||
<Message type="error">
|
||||
<SmallBody>
|
||||
<Trans i18nKey="simulationPréremplieBanner.warning.1">
|
||||
Votre catégorie juridique est
|
||||
</Trans>{' '}
|
||||
<Strong>
|
||||
{company['entreprise . catégorie juridique'] as string}
|
||||
</Strong>{' '}
|
||||
<Trans i18nKey="simulationPréremplieBanner.warning.2">
|
||||
mais vous êtes sur le simulateur pour{' '}
|
||||
</Trans>
|
||||
<Strong>{simulatorData.shortName}</Strong>.
|
||||
</SmallBody>
|
||||
</Message>
|
||||
</>
|
||||
)}
|
||||
</Banner>
|
||||
)
|
||||
}
|
|
@ -5652,6 +5652,14 @@ entreprise . chiffre d'affaires . vente restauration hébergement:
|
|||
résumé.fr: Chiffre d'affaires hors taxe
|
||||
titre.en: '[automatic] Sale of goods, catering, accommodation (BIC)'
|
||||
titre.fr: Vente de biens, restauration, hébergement (BIC)
|
||||
entreprise . code catégorie juridique:
|
||||
description.en:
|
||||
"[automatic] Code representing the company's legal category, as
|
||||
defined by INSEE."
|
||||
description.fr: Code représentant la catégorie juridique de l'entreprise, tel
|
||||
que défini par l'INSEE.
|
||||
titre.en: '[automatic] legal category code'
|
||||
titre.fr: code catégorie juridique
|
||||
entreprise . coût formalités:
|
||||
titre.en: '[automatic] cost formalities'
|
||||
titre.fr: coût formalités
|
||||
|
|
|
@ -63,7 +63,6 @@ Bonjour, je suis boulanger et je n'ai pas trouvé en cherchant "pain" ou "vienno
|
|||
searched.
|
||||
Budget: Budget
|
||||
Calculer vos revenus: Calculate your income
|
||||
Ce simulateur a été prérempli avec la situation de votre entreprise.: This simulator has been pre-filled with your company's situation.
|
||||
Cette commune n'existe pas: This commune does not exist
|
||||
Cette opération n'est pas réversible.: This operation is not reversible.
|
||||
Charger plus de résultats: Load more results
|
||||
|
@ -353,8 +352,6 @@ Voir les autres simulateurs: See other simulators
|
|||
Voir les nouveautés apportées par la version {{release}}: See what's new in this version {{release}}
|
||||
Voir les simulateurs personnalisés: See customized simulators
|
||||
Voir les simulateurs personnalisés, accéder à la page de gestion de mon entreprise: See customized simulators, access my company management page
|
||||
Voir ma situation: See my situation
|
||||
Voir ma situation, accéder à la page de gestion de mon entreprise: View my situation, access my company management page
|
||||
Vos attentes ne sont pas remplies: Your expectations are not met
|
||||
Vos charges estimées: Your estimated expenses
|
||||
Vos droits pour la retraite: Your pension rights
|
||||
|
@ -1852,6 +1849,13 @@ simulation-end:
|
|||
text: Now you can make your hiring plans a reality.
|
||||
text: You now have access to the most accurate estimate possible.
|
||||
title: You have completed this simulation
|
||||
simulationPréremplieBanner:
|
||||
aria-label: View my situation, access my company management page
|
||||
button: See my situation
|
||||
info: This simulator has been pre-filled with your company's situation.
|
||||
warning:
|
||||
"1": Your legal category is
|
||||
"2": "but you are on the simulator for "
|
||||
site:
|
||||
defaultTitle: My company
|
||||
meta:
|
||||
|
|
|
@ -68,7 +68,6 @@ Bonjour, je suis boulanger et je n'ai pas trouvé en cherchant "pain" ou "vienno
|
|||
"viennoiserie".
|
||||
Budget: Budget
|
||||
Calculer vos revenus: Calculer vos revenus
|
||||
Ce simulateur a été prérempli avec la situation de votre entreprise.: Ce simulateur a été prérempli avec la situation de votre entreprise.
|
||||
Cette commune n'existe pas: Cette commune n'existe pas
|
||||
Cette opération n'est pas réversible.: Cette opération n'est pas réversible.
|
||||
Charger plus de résultats: Charger plus de résultats
|
||||
|
@ -370,8 +369,6 @@ Voir les simulateurs personnalisés: Voir les simulateurs personnalisés
|
|||
Voir les simulateurs personnalisés, accéder à la page de gestion de mon entreprise:
|
||||
Voir les simulateurs personnalisés, accéder à la page de gestion de mon
|
||||
entreprise
|
||||
Voir ma situation: Voir ma situation
|
||||
Voir ma situation, accéder à la page de gestion de mon entreprise: Voir ma situation, accéder à la page de gestion de mon entreprise
|
||||
Vos attentes ne sont pas remplies: Vos attentes ne sont pas remplies
|
||||
Vos charges estimées: Vos charges estimées
|
||||
Vos droits pour la retraite: Vos droits pour la retraite
|
||||
|
@ -1969,6 +1966,13 @@ simulation-end:
|
|||
text: Vous pouvez maintenant concrétiser votre projet d'embauche.
|
||||
text: Vous avez maintenant accès à l'estimation la plus précise possible.
|
||||
title: Vous avez complété cette simulation
|
||||
simulationPréremplieBanner:
|
||||
aria-label: Voir ma situation, accéder à la page de gestion de mon entreprise
|
||||
button: Voir ma situation
|
||||
info: Ce simulateur a été prérempli avec la situation de votre entreprise.
|
||||
warning:
|
||||
"1": Votre catégorie juridique est
|
||||
"2": "mais vous êtes sur le simulateur pour "
|
||||
site:
|
||||
defaultTitle: Mon-entreprise
|
||||
meta:
|
||||
|
|
|
@ -78,6 +78,11 @@ export interface PageConfig {
|
|||
*/
|
||||
autoloadLastSimulation?: boolean
|
||||
|
||||
/** Indique les catégories d'entreprise concernées par le simulateur.
|
||||
* Un tableau vide indique que le simulateur concerne toutes les catégories d'entreprise.
|
||||
*/
|
||||
codesCatégorieJuridique?: string[]
|
||||
|
||||
/** Composant React de la page
|
||||
*
|
||||
* Note : Le nom du composant doit être en un seul mot pour que le script `yarn build:simulator-data` marche
|
||||
|
|
|
@ -31,6 +31,7 @@ export function artisteAuteurConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
'pages.simulateurs.artiste-auteur.shortname',
|
||||
'Artiste-auteur'
|
||||
),
|
||||
codesCatégorieJuridique: ['1000'],
|
||||
component: ArtisteAuteur,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -43,6 +43,7 @@ export function autoEntrepreneurConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
nextSteps: ['indépendant', 'comparaison-statuts'],
|
||||
path: sitePaths.simulateurs['auto-entrepreneur'],
|
||||
simulation: configAutoEntrepreneur,
|
||||
codesCatégorieJuridique: ['1000'],
|
||||
component: AutoEntrepreneur,
|
||||
seoExplanations: SeoExplanations,
|
||||
} as const)
|
||||
|
|
|
@ -40,6 +40,7 @@ export function auxiliaireMédicalConfig({
|
|||
},
|
||||
path: sitePaths.simulateurs['profession-libérale'].auxiliaire,
|
||||
simulation: configAuxiliaire,
|
||||
codesCatégorieJuridique: ['1000', '5410'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ export function avocatConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
},
|
||||
path: sitePaths.simulateurs['profession-libérale'].avocat,
|
||||
simulation: configAvocat,
|
||||
codesCatégorieJuridique: ['1000', '5410', '5499'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ export function chirurgienDentisteConfig({
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale']['chirurgien-dentiste'],
|
||||
simulation: configDentiste,
|
||||
codesCatégorieJuridique: ['1000', '5410'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ export function cipavConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale'].cipav,
|
||||
simulation: cipavSimulationConfig,
|
||||
codesCatégorieJuridique: ['1000', '5410', '5499'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ export function eirlConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
nextSteps: ['comparaison-statuts'],
|
||||
path: sitePaths.simulateurs.eirl,
|
||||
simulation: configEirl,
|
||||
codesCatégorieJuridique: ['1000'],
|
||||
component: IndépendantSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ export function entrepriseIndividuelleConfig({
|
|||
nextSteps: ['comparaison-statuts'],
|
||||
path: sitePaths.simulateurs['entreprise-individuelle'],
|
||||
simulation: configEntrepriseIndividuelle,
|
||||
codesCatégorieJuridique: ['1000'],
|
||||
component: EntrepriseIndividuelle,
|
||||
seoExplanations: SeoExplanationsEI,
|
||||
} as const)
|
||||
|
|
|
@ -45,6 +45,25 @@ export function eurlConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
],
|
||||
path: sitePaths.simulateurs.eurl,
|
||||
simulation: configEurl,
|
||||
codesCatégorieJuridique: [
|
||||
'5410',
|
||||
'5415',
|
||||
'5422',
|
||||
'5426',
|
||||
'5430',
|
||||
'5431',
|
||||
'5432',
|
||||
'5442',
|
||||
'5443',
|
||||
'5451',
|
||||
'5453',
|
||||
'5454',
|
||||
'5455',
|
||||
'5458',
|
||||
'5459',
|
||||
'5460',
|
||||
'5499',
|
||||
],
|
||||
component: IndépendantSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ export function expertComptableConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
},
|
||||
path: sitePaths.simulateurs['profession-libérale']['expert-comptable'],
|
||||
simulation: configExpertComptable,
|
||||
codesCatégorieJuridique: ['1000', '5410', '5499'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ export function médecinConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale'].médecin,
|
||||
simulation: configMédecin,
|
||||
codesCatégorieJuridique: ['1000', '5410'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ export function pharmacienConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale'].pharmacien,
|
||||
simulation: configPharmacien,
|
||||
codesCatégorieJuridique: ['1000', '5410', '5499'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -35,6 +35,16 @@ export function professionLibéraleConfig({
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale'].index,
|
||||
simulation: configProfessionLibérale,
|
||||
codesCatégorieJuridique: [
|
||||
'1000',
|
||||
'5410',
|
||||
'5415',
|
||||
'5422',
|
||||
'5458',
|
||||
'5459',
|
||||
'5460',
|
||||
'5499',
|
||||
],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ export function sageFemmeConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
),
|
||||
path: sitePaths.simulateurs['profession-libérale']['sage-femme'],
|
||||
simulation: configSageFemme,
|
||||
codesCatégorieJuridique: ['1000', '5410'],
|
||||
component: IndépendantPLSimulation,
|
||||
} as const)
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ export function sasuConfig({ t, sitePaths }: SimulatorsDataParams) {
|
|||
nextSteps: ['is', 'comparaison-statuts'],
|
||||
path: sitePaths.simulateurs.sasu,
|
||||
simulation: configSASU,
|
||||
codesCatégorieJuridique: ['5710'],
|
||||
component: SASUSimulation,
|
||||
seoExplanations: SeoExplanations,
|
||||
} as const)
|
||||
|
|
|
@ -87,6 +87,7 @@ export function companySituation(state: Situation = {}, action: Action) {
|
|||
export function getCompanySituation(entreprise: Entreprise): Situation {
|
||||
return {
|
||||
'entreprise . date de création': toPublicodeDate(entreprise.dateDeCréation),
|
||||
'entreprise . code catégorie juridique': entreprise.codeCatégorieJuridique,
|
||||
'entreprise . catégorie juridique': `'${getCatégorieFromCode(
|
||||
entreprise.codeCatégorieJuridique
|
||||
)}'`,
|
||||
|
|
Loading…
Reference in New Issue