From ae5e233f4681f17e2880545f6bdb32cbbbb9670e Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 5 Nov 2024 11:16:18 +0100 Subject: [PATCH 1/7] =?UTF-8?q?style:=20ajout=20d'une=20ic=C3=B4ne=20Carre?= =?UTF-8?q?t=20Up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/design-system/icons/index.stories.tsx | 1 + site/source/design-system/icons/index.tsx | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/site/source/design-system/icons/index.stories.tsx b/site/source/design-system/icons/index.stories.tsx index 0ef8d8a590..059da693a1 100644 --- a/site/source/design-system/icons/index.stories.tsx +++ b/site/source/design-system/icons/index.stories.tsx @@ -12,6 +12,7 @@ export default meta export { ArrowRightIcon, CarretDownIcon, + CarretUpIcon, CheckmarkIcon, ChevronIcon, CircledArrowIcon, diff --git a/site/source/design-system/icons/index.tsx b/site/source/design-system/icons/index.tsx index 32a09159c2..bec9731bc0 100644 --- a/site/source/design-system/icons/index.tsx +++ b/site/source/design-system/icons/index.tsx @@ -92,6 +92,22 @@ export const CarretDownIcon = (props: HTMLAttributes) => ( ) +export const CarretUpIcon = (props: HTMLAttributes) => ( + + + +) + export function SearchIcon({ ...props }) { return ( Date: Tue, 5 Nov 2024 11:16:48 +0100 Subject: [PATCH 2/7] =?UTF-8?q?style:=20ajout=20d'un=20espacement=20xxxs?= =?UTF-8?q?=20au=20th=C3=A8me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/source/design-system/theme.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/site/source/design-system/theme.ts b/site/source/design-system/theme.ts index ad873fa98e..884430c419 100644 --- a/site/source/design-system/theme.ts +++ b/site/source/design-system/theme.ts @@ -140,6 +140,7 @@ export const baseTheme = { }, darkMode: false, spacings: { + xxxs: '.125rem', xxs: '.25rem', xs: '.5rem', sm: '0.75rem', From 9cdd44a5e65336cab2c2719fa5a2e16751792a7a Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 5 Nov 2024 11:17:32 +0100 Subject: [PATCH 3/7] =?UTF-8?q?refactor:=20ajout=20d'un=20prop=20onSubmit?= =?UTF-8?q?=20=C3=A0=20EntrepriseInput?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/source/components/conversation/EntrepriseInput.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/site/source/components/conversation/EntrepriseInput.tsx b/site/source/components/conversation/EntrepriseInput.tsx index bb6e47a74e..a272f4684a 100644 --- a/site/source/components/conversation/EntrepriseInput.tsx +++ b/site/source/components/conversation/EntrepriseInput.tsx @@ -12,13 +12,18 @@ import { resetCompany } from '@/store/actions/companyActions' import SelectedEntrepriseDetails from '../entreprise/SelectedEntrepriseDetails' -export default function EntrepriseInput() { +type Props = { + onSubmit?: (établissement: Entreprise | null) => void +} + +export default function EntrepriseInput({ onSubmit }: Props) { const companySIREN = useEngine().evaluate('entreprise . SIREN').nodeValue useSetEntrepriseFromUrssafConnection() const setEntreprise = useSetEntreprise() const dispatch = useDispatch() const handleCompanySubmit = (établissement: Entreprise | null) => { setEntreprise(établissement) + onSubmit?.(établissement) } const handleCompanyClear = () => { dispatch(resetCompany()) From 87e7c660360600b749b3f02f1f54aeeef91adcea Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 5 Nov 2024 11:18:55 +0100 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20ajout=20d'un=20bloc=20s=C3=A9lectio?= =?UTF-8?q?n=20d'entreprise=20=C3=A0=20tous=20les=20simulateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Simulation/EntrepriseSelection.tsx | 145 ++++++++++++++++++ site/source/components/Simulation/index.tsx | 2 + site/source/locales/ui-en.yaml | 3 + site/source/locales/ui-fr.yaml | 3 + 4 files changed, 153 insertions(+) create mode 100644 site/source/components/Simulation/EntrepriseSelection.tsx diff --git a/site/source/components/Simulation/EntrepriseSelection.tsx b/site/source/components/Simulation/EntrepriseSelection.tsx new file mode 100644 index 0000000000..e57e328e74 --- /dev/null +++ b/site/source/components/Simulation/EntrepriseSelection.tsx @@ -0,0 +1,145 @@ +import { useState } from 'react' +import { useTranslation } from 'react-i18next' +import { css, styled } from 'styled-components' + +import { CarretDownIcon, CarretUpIcon, SearchIcon } from '@/design-system/icons' +import { Grid } from '@/design-system/layout' +import { Body } from '@/design-system/typography/paragraphs' + +import EntrepriseInput from '../conversation/EntrepriseInput' +import Value from '../EngineValue/Value' +import { Appear } from '../ui/animate' +import { useEngine } from '../utils/EngineContext' +import LectureGuide from './LectureGuide' + +export default function EntrepriseSelection() { + const { t } = useTranslation() + const companySIREN = useEngine().evaluate('entreprise . SIREN').nodeValue + const [isSearchVisible, setSearchVisible] = useState(false) + + return ( + + + + + {t('Votre entreprise')} + + + + + setSearchVisible(!isSearchVisible)}> + + {companySIREN ? ( + <> + + {isSearchVisible ? : } + + ) : ( + <> + + {t('Rechercher')} + + + + )} + + + + + {isSearchVisible && ( + + setSearchVisible(false)} /> + + )} + + ) +} + +const ShowLessIcon = () => { + const { t } = useTranslation() + + return ( + <> + + {t("Masquer les détails de l'entreprise.")} + + + + ) +} + +const ShowMoreIcon = () => { + const { t } = useTranslation() + + return ( + <> + + {t( + "Afficher les détails de l'entreprise, la modifier ou la supprimer." + )} + + + + ) +} + +const Container = styled.div` + z-index: 2; + position: relative; + padding: ${({ theme }) => `${theme.spacings.sm} ${theme.spacings.lg}`}; + background-color: ${({ theme }) => + theme.darkMode + ? theme.colors.extended.dark[500] + : theme.colors.bases.primary[100]}; + + @media print { + background: initial; + padding: 0; + } +` + +const EntrepriseRecap = styled.div` + position: relative; + z-index: 1; +` + +const TitleBody = styled(Body)` + color: ${({ theme }) => + theme.darkMode + ? theme.colors.extended.grey[100] + : theme.colors.bases.primary[800]}; + font-weight: bold; +` + +const ValueBody = styled(Body)` + cursor: pointer; + color: ${({ theme }) => + theme.darkMode + ? theme.colors.extended.grey[100] + : theme.colors.bases.primary[800]}; + display: flex; + align-items: center; + gap: ${({ theme }) => theme.spacings.xs}; +` + +const IconStyle = css` + margin-bottom: ${({ theme }) => theme.spacings.xxxs}; +` +const StyledCarretDownIcon = styled(CarretDownIcon)` + ${IconStyle} +` +const StyledCarretUpIcon = styled(CarretUpIcon)` + ${IconStyle} +` diff --git a/site/source/components/Simulation/index.tsx b/site/source/components/Simulation/index.tsx index 0fa9b9b4ab..d2678263d1 100644 --- a/site/source/components/Simulation/index.tsx +++ b/site/source/components/Simulation/index.tsx @@ -21,6 +21,7 @@ import { Feedback, getShouldAskFeedback } from '../Feedback/Feedback' import PrintExportRecover from '../simulationExplanation/PrintExportRecover' import PreviousSimulationBanner from './../PreviousSimulationBanner' import { FromTop } from './../ui/animate' +import EntrepriseSelection from './EntrepriseSelection' import { Questions } from './Questions' export { Questions } from './Questions' @@ -78,6 +79,7 @@ export default function Simulation({ {(firstStepCompleted || showQuestionsFromBeginning) && ( <> +
{results}
diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 19b039c9c4..16a861038f 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -41,6 +41,7 @@ Activités relevant de l’économie collaborative, voir la page: Collaborative Adoption: Adoption Afficher le détail: Show details "Afficher les données par :": "Display data by:" +Afficher les détails de l'entreprise, la modifier ou la supprimer.: View company details, modify or delete. Aller au contenu principal: Go to main content Aller directement au pied de page: Go directly to footer Annuler: Cancel @@ -181,6 +182,7 @@ Les formalités de création d'une entreprise diffèrent selon les statuts et la Lire les précisions, ouvrir le message condensé.: Read the details, open the condensed message. Liste des intégrations: List of integrations Ma situation: My situation +Masquer les détails de l'entreprise.: Hide company details. Maternité: Maternity ward Menu de navigation: Navigation menu Message à caractère informatif: Informative message @@ -254,6 +256,7 @@ Recherche sur le site: Site search Rechercher: Search Rechercher un simulateur ou une règle: Search for a simulator or a rule Rechercher une règle dans la documentation: Search for a rule in the documentation +Rechercher, afficher le champ de recherche d'entreprise.: Search, display the company search field. Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche.: Search, open the dialog box to enter your search terms. Remboursements et déductions diverses: Reimbursements and miscellaneous deductions Renseigner une adresse e-mail (au format nom@domaine: diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index eccf23bd7c..48d4de99f4 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -44,6 +44,7 @@ Activités relevant de l’économie collaborative, voir la page: Activités rel Adoption: Adoption Afficher le détail: Afficher le détail "Afficher les données par :": "Afficher les données par :" +Afficher les détails de l'entreprise, la modifier ou la supprimer.: Afficher les détails de l'entreprise, la modifier ou la supprimer. Aller au contenu principal: Aller au contenu principal Aller directement au pied de page: Aller directement au pied de page Annuler: Annuler @@ -192,6 +193,7 @@ Les formalités de création d'une entreprise diffèrent selon les statuts et la Lire les précisions, ouvrir le message condensé.: Lire les précisions, ouvrir le message condensé. Liste des intégrations: Liste des intégrations Ma situation: Ma situation +Masquer les détails de l'entreprise.: Masquer les détails de l'entreprise. Maternité: Maternité Menu de navigation: Menu de navigation Message à caractère informatif: Message à caractère informatif @@ -268,6 +270,7 @@ Recherche sur le site: Recherche sur le site Rechercher: Rechercher Rechercher un simulateur ou une règle: Rechercher un simulateur ou une règle Rechercher une règle dans la documentation: Rechercher une règle dans la documentation +Rechercher, afficher le champ de recherche d'entreprise.: Rechercher, afficher le champ de recherche d'entreprise. Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche.: Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche. Remboursements et déductions diverses: Remboursements et déductions diverses Renseigner une adresse e-mail (au format nom@domaine: From 18ead504bf6c9986f91b60c6b881f1abc1c82a1c Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Mon, 2 Dec 2024 15:47:44 +0100 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20place=20le=20message=20simulation?= =?UTF-8?q?=20pr=C3=A9-remplie=20en=201er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/source/components/Simulation/index.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/site/source/components/Simulation/index.tsx b/site/source/components/Simulation/index.tsx index d2678263d1..97bfdbe2a6 100644 --- a/site/source/components/Simulation/index.tsx +++ b/site/source/components/Simulation/index.tsx @@ -88,10 +88,6 @@ export default function Simulation({ )} - {!showQuestionsFromBeginning && !firstStepCompleted && ( - - )} - {afterQuestionsSlot} {existingCompany && ( @@ -115,6 +111,13 @@ export default function Simulation({ )} + + {!showQuestionsFromBeginning && !firstStepCompleted && ( + + )} + + {afterQuestionsSlot} + {firstStepCompleted && !hideDetails && ( <> From f7c278ef20607afb3862a4106ad42078a6eaa467 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Thu, 5 Dec 2024 11:14:09 +0100 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20ajoute=20un=20avertissement=20lorsq?= =?UTF-8?q?ue=20le=20simulateur=20ne=20correspond=20pas=20=C3=A0=20la=20ca?= =?UTF-8?q?t=C3=A9gorie=20juridique=20de=20l'entreprise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cat\303\251gorie-juridique.publicodes" | 5 ++ site/source/components/Simulation/index.tsx | 40 +--------- .../SimulationPr\303\251remplieBanner.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 + .../auxiliaire-m\303\251dical/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 + .../simulateurs/m\303\251decin/config.ts" | 1 + .../pages/simulateurs/pharmacien/config.ts | 1 + .../profession-lib\303\251rale/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\303\251remplieBanner.tsx" diff --git "a/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes" "b/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes" index d83a063d45..523248760b 100644 --- "a/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes" +++ "b/modele-social/r\303\250gles/entreprise/cat\303\251gorie-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 97bfdbe2a6..4daa929ec2 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\303\251remplieBanner.tsx" "b/site/source/components/SimulationPr\303\251remplieBanner.tsx" new file mode 100644 index 0000000000..3ed89b5589 --- /dev/null +++ "b/site/source/components/SimulationPr\303\251remplieBanner.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 aaab5e0a96..437ac8ed10 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -5608,6 +5608,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 16a861038f..4eafe17e91 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 @@ -352,8 +351,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 @@ -1833,6 +1830,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 48d4de99f4..5d78f6a4ca 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 @@ -369,8 +368,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 @@ -1952,6 +1949,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 f41896af18..10692ae406 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 0ce2e9dc4f..4bd542d269 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 036fe61003..4e2ec47ce2 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\303\251dical/config.ts" "b/site/source/pages/simulateurs/auxiliaire-m\303\251dical/config.ts" index 442008ba1a..d5bb897c9a 100644 --- "a/site/source/pages/simulateurs/auxiliaire-m\303\251dical/config.ts" +++ "b/site/source/pages/simulateurs/auxiliaire-m\303\251dical/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 49db13e566..380ef041c7 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 40f89297ae..8c05ed2831 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 41248ff8cb..5b587281d6 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 3d9376041e..17ceb4b657 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 3b9ce2dd1b..e80d4c6c38 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 2964243ca1..c3dbc64340 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 e9140fc520..1c52590c46 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\303\251decin/config.ts" "b/site/source/pages/simulateurs/m\303\251decin/config.ts" index e77fff3aa9..7deedf685e 100644 --- "a/site/source/pages/simulateurs/m\303\251decin/config.ts" +++ "b/site/source/pages/simulateurs/m\303\251decin/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 7e0490a927..ad4893bb58 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\303\251rale/config.ts" "b/site/source/pages/simulateurs/profession-lib\303\251rale/config.ts" index 5ee9621d9c..5e6235d234 100644 --- "a/site/source/pages/simulateurs/profession-lib\303\251rale/config.ts" +++ "b/site/source/pages/simulateurs/profession-lib\303\251rale/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 e4764fb7a9..0cf32be293 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 9098b5f540..ea607e7099 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 cee54bb560..d15c113905 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 )}'`, From 46370d75f21dd1e70a0a146456a24bd724bcb3fb Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 3 Dec 2024 16:17:43 +0100 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20ajoute=20un=20avertissement=20lorsq?= =?UTF-8?q?ue=20la=20cat=C3=A9gorie=20juridique=20de=20l'entreprise=20s?= =?UTF-8?q?=C3=A9lectionn=C3=A9e=20ne=20correspond=20pas=20au=20simulateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Simulation/EntrepriseSelection.tsx | 2 + .../SimulationPr\303\251remplieBanner.tsx" | 54 ++++++------------- .../components/WrongSimulateurWarning.tsx | 42 +++++++++++++++ 3 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 site/source/components/WrongSimulateurWarning.tsx diff --git a/site/source/components/Simulation/EntrepriseSelection.tsx b/site/source/components/Simulation/EntrepriseSelection.tsx index e57e328e74..dd1fb210d1 100644 --- a/site/source/components/Simulation/EntrepriseSelection.tsx +++ b/site/source/components/Simulation/EntrepriseSelection.tsx @@ -10,6 +10,7 @@ import EntrepriseInput from '../conversation/EntrepriseInput' import Value from '../EngineValue/Value' import { Appear } from '../ui/animate' import { useEngine } from '../utils/EngineContext' +import WrongSimulateurWarning from '../WrongSimulateurWarning' import LectureGuide from './LectureGuide' export default function EntrepriseSelection() { @@ -57,6 +58,7 @@ export default function EntrepriseSelection() { + {isSearchVisible && ( diff --git "a/site/source/components/SimulationPr\303\251remplieBanner.tsx" "b/site/source/components/SimulationPr\303\251remplieBanner.tsx" index 3ed89b5589..07f4d06bcf 100644 --- "a/site/source/components/SimulationPr\303\251remplieBanner.tsx" +++ "b/site/source/components/SimulationPr\303\251remplieBanner.tsx" @@ -1,31 +1,19 @@ import { Trans, useTranslation } from 'react-i18next' import { useSelector } from 'react-redux' +import { styled } from 'styled-components' -import { Message, PopoverWithTrigger } from '@/design-system' -import { Spacing } from '@/design-system/layout' -import { Strong } from '@/design-system/typography' +import { PopoverWithTrigger } from '@/design-system' 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' +import WrongSimulateurWarning from './WrongSimulateurWarning' 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 existingCompany = !!useSelector(companySituationSelector)[ + 'entreprise . SIREN' + ] const { t } = useTranslation() @@ -48,31 +36,21 @@ export default function SimulationPréremplieBanner() { 'Voir ma situation, accéder à la page de gestion de mon entreprise' )} > - Voir ma situation + + 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}. - - - - )} + + + ) } + +const WrongSimulateurWarningContainer = styled.div` + margin-top: ${({ theme }) => theme.spacings.xs}; +` diff --git a/site/source/components/WrongSimulateurWarning.tsx b/site/source/components/WrongSimulateurWarning.tsx new file mode 100644 index 0000000000..95e857d671 --- /dev/null +++ b/site/source/components/WrongSimulateurWarning.tsx @@ -0,0 +1,42 @@ +import { Trans } from 'react-i18next' +import { useSelector } from 'react-redux' + +import { Message } from '@/design-system' +import { Strong } from '@/design-system/typography' +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' + +export default function WrongSimulateurWarning() { + const company = useSelector(companySituationSelector) + + 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 + + if (!Object.keys(company).length || !isWrongSimulateur) { + return null + } + + return ( + + + + Votre catégorie juridique est + {' '} + {company['entreprise . catégorie juridique'] as string}{' '} + + mais vous êtes sur le simulateur pour{' '} + + {simulatorData.shortName}. + + + ) +}