From 9675dfebf5e383f45f1ee52b1567fc2a992efba3 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Thu, 5 Dec 2024 11:14:09 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20ajoute=20un=20avertissement=20lorsque?= =?UTF-8?q?=20le=20simulateur=20ne=20correspond=20pas=20=C3=A0=20la=20cat?= =?UTF-8?q?=C3=A9gorie=20juridique=20de=20l'entreprise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entreprise/catégorie-juridique.publicodes | 5 ++ site/source/components/Simulation/index.tsx | 40 +--------- .../components/SimulationPréremplieBanner.tsx | 78 +++++++++++++++++++ site/source/locales/rules-en.yaml | 8 ++ site/source/locales/ui-en.yaml | 10 ++- site/source/locales/ui-fr.yaml | 10 ++- .../pages/simulateurs/_configs/types.ts | 5 ++ .../simulateurs/artiste-auteur/config.ts | 1 + .../simulateurs/auto-entrepreneur/config.ts | 1 + .../simulateurs/auxiliaire-médical/config.ts | 1 + .../source/pages/simulateurs/avocat/config.ts | 1 + .../simulateurs/chirurgien-dentiste/config.ts | 1 + .../source/pages/simulateurs/cipav/config.tsx | 1 + site/source/pages/simulateurs/eirl/config.ts | 1 + .../entreprise-individuelle/config.ts | 1 + site/source/pages/simulateurs/eurl/config.tsx | 19 +++++ .../simulateurs/expert-comptable/config.ts | 1 + .../pages/simulateurs/médecin/config.ts | 1 + .../pages/simulateurs/pharmacien/config.ts | 1 + .../simulateurs/profession-libérale/config.ts | 10 +++ .../pages/simulateurs/sage-femme/config.ts | 1 + site/source/pages/simulateurs/sasu/config.ts | 1 + .../store/reducers/companySituationReducer.ts | 1 + 23 files changed, 156 insertions(+), 43 deletions(-) create mode 100644 site/source/components/SimulationPréremplieBanner.tsx diff --git a/modele-social/règles/entreprise/catégorie-juridique.publicodes b/modele-social/règles/entreprise/catégorie-juridique.publicodes index 454a8063a..a101607ff 100644 --- a/modele-social/règles/entreprise/catégorie-juridique.publicodes +++ b/modele-social/règles/entreprise/catégorie-juridique.publicodes @@ -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 diff --git a/site/source/components/Simulation/index.tsx b/site/source/components/Simulation/index.tsx index 97bfdbe2a..4daa929ec 100644 --- a/site/source/components/Simulation/index.tsx +++ b/site/source/components/Simulation/index.tsx @@ -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 && } @@ -88,29 +76,7 @@ export default function Simulation({ )} - {existingCompany && ( - - - Ce simulateur a été prérempli avec la situation de votre - entreprise. - {' '} - ( - - Voir ma situation - - )} - > - {(close) => } - - - )} + {!showQuestionsFromBeginning && !firstStepCompleted && ( diff --git a/site/source/components/SimulationPréremplieBanner.tsx b/site/source/components/SimulationPréremplieBanner.tsx new file mode 100644 index 000000000..3ed89b558 --- /dev/null +++ b/site/source/components/SimulationPréremplieBanner.tsx @@ -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 ( + + + Ce simulateur a été prérempli avec la situation de votre entreprise. + {' '} + ( + + Voir ma situation + + )} + > + {(close) => } + + {isWrongSimulateur && ( + <> + + + + + Votre catégorie juridique est + {' '} + + {company['entreprise . catégorie juridique'] as string} + {' '} + + mais vous êtes sur le simulateur pour{' '} + + {simulatorData.shortName}. + + + + )} + + ) +} diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml index f58054349..e0017a681 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -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 diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 4976711fe..557898826 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -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: diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index 1a16dd630..df1a1021e 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -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: diff --git a/site/source/pages/simulateurs/_configs/types.ts b/site/source/pages/simulateurs/_configs/types.ts index f41896af1..10692ae40 100644 --- a/site/source/pages/simulateurs/_configs/types.ts +++ b/site/source/pages/simulateurs/_configs/types.ts @@ -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 diff --git a/site/source/pages/simulateurs/artiste-auteur/config.ts b/site/source/pages/simulateurs/artiste-auteur/config.ts index 0ce2e9dc4..4bd542d26 100644 --- a/site/source/pages/simulateurs/artiste-auteur/config.ts +++ b/site/source/pages/simulateurs/artiste-auteur/config.ts @@ -31,6 +31,7 @@ export function artisteAuteurConfig({ t, sitePaths }: SimulatorsDataParams) { 'pages.simulateurs.artiste-auteur.shortname', 'Artiste-auteur' ), + codesCatégorieJuridique: ['1000'], component: ArtisteAuteur, } as const) } diff --git a/site/source/pages/simulateurs/auto-entrepreneur/config.ts b/site/source/pages/simulateurs/auto-entrepreneur/config.ts index 036fe6100..4e2ec47ce 100644 --- a/site/source/pages/simulateurs/auto-entrepreneur/config.ts +++ b/site/source/pages/simulateurs/auto-entrepreneur/config.ts @@ -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) diff --git a/site/source/pages/simulateurs/auxiliaire-médical/config.ts b/site/source/pages/simulateurs/auxiliaire-médical/config.ts index 442008ba1..d5bb897c9 100644 --- a/site/source/pages/simulateurs/auxiliaire-médical/config.ts +++ b/site/source/pages/simulateurs/auxiliaire-médical/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/avocat/config.ts b/site/source/pages/simulateurs/avocat/config.ts index 49db13e56..380ef041c 100644 --- a/site/source/pages/simulateurs/avocat/config.ts +++ b/site/source/pages/simulateurs/avocat/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/chirurgien-dentiste/config.ts b/site/source/pages/simulateurs/chirurgien-dentiste/config.ts index 40f89297a..8c05ed283 100644 --- a/site/source/pages/simulateurs/chirurgien-dentiste/config.ts +++ b/site/source/pages/simulateurs/chirurgien-dentiste/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/cipav/config.tsx b/site/source/pages/simulateurs/cipav/config.tsx index 41248ff8c..5b587281d 100644 --- a/site/source/pages/simulateurs/cipav/config.tsx +++ b/site/source/pages/simulateurs/cipav/config.tsx @@ -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) } diff --git a/site/source/pages/simulateurs/eirl/config.ts b/site/source/pages/simulateurs/eirl/config.ts index 3d9376041..17ceb4b65 100644 --- a/site/source/pages/simulateurs/eirl/config.ts +++ b/site/source/pages/simulateurs/eirl/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/entreprise-individuelle/config.ts b/site/source/pages/simulateurs/entreprise-individuelle/config.ts index 3b9ce2dd1..e80d4c6c3 100644 --- a/site/source/pages/simulateurs/entreprise-individuelle/config.ts +++ b/site/source/pages/simulateurs/entreprise-individuelle/config.ts @@ -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) diff --git a/site/source/pages/simulateurs/eurl/config.tsx b/site/source/pages/simulateurs/eurl/config.tsx index 2964243ca..c3dbc6434 100644 --- a/site/source/pages/simulateurs/eurl/config.tsx +++ b/site/source/pages/simulateurs/eurl/config.tsx @@ -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) } diff --git a/site/source/pages/simulateurs/expert-comptable/config.ts b/site/source/pages/simulateurs/expert-comptable/config.ts index e9140fc52..1c52590c4 100644 --- a/site/source/pages/simulateurs/expert-comptable/config.ts +++ b/site/source/pages/simulateurs/expert-comptable/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/médecin/config.ts b/site/source/pages/simulateurs/médecin/config.ts index e77fff3aa..7deedf685 100644 --- a/site/source/pages/simulateurs/médecin/config.ts +++ b/site/source/pages/simulateurs/médecin/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/pharmacien/config.ts b/site/source/pages/simulateurs/pharmacien/config.ts index 7e0490a92..ad4893bb5 100644 --- a/site/source/pages/simulateurs/pharmacien/config.ts +++ b/site/source/pages/simulateurs/pharmacien/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/profession-libérale/config.ts b/site/source/pages/simulateurs/profession-libérale/config.ts index 5ee9621d9..5e6235d23 100644 --- a/site/source/pages/simulateurs/profession-libérale/config.ts +++ b/site/source/pages/simulateurs/profession-libérale/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/sage-femme/config.ts b/site/source/pages/simulateurs/sage-femme/config.ts index e4764fb7a..0cf32be29 100644 --- a/site/source/pages/simulateurs/sage-femme/config.ts +++ b/site/source/pages/simulateurs/sage-femme/config.ts @@ -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) } diff --git a/site/source/pages/simulateurs/sasu/config.ts b/site/source/pages/simulateurs/sasu/config.ts index 9098b5f54..ea607e709 100644 --- a/site/source/pages/simulateurs/sasu/config.ts +++ b/site/source/pages/simulateurs/sasu/config.ts @@ -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) diff --git a/site/source/store/reducers/companySituationReducer.ts b/site/source/store/reducers/companySituationReducer.ts index cee54bb56..d15c11390 100644 --- a/site/source/store/reducers/companySituationReducer.ts +++ b/site/source/store/reducers/companySituationReducer.ts @@ -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 )}'`,