diff --git a/site/source/components/SchemeComparaison.tsx b/site/source/components/SchemeComparaison.tsx index edff3ce47..de985b3c9 100644 --- a/site/source/components/SchemeComparaison.tsx +++ b/site/source/components/SchemeComparaison.tsx @@ -11,11 +11,6 @@ import { Grid, Spacing } from '@/design-system/layout' import { H2, H3 } from '@/design-system/typography/heading' import { Intro } from '@/design-system/typography/paragraphs' import { useSitePaths } from '@/sitePaths' -import { - defineDirectorStatus, - isAutoentrepreneur, - useDispatchAndGoToNextQuestion, -} from '@/store/actions/companyStatusActions' type SchemeComparaisonProps = { hideAutoEntrepreneur?: boolean @@ -28,7 +23,6 @@ export default function SchemeComparaison({ }: SchemeComparaisonProps) { const { absoluteSitePaths } = useSitePaths() - const dispatch = useDispatchAndGoToNextQuestion() const { t } = useTranslation() const [showMore, setShowMore] = useState(false) @@ -40,8 +34,7 @@ export default function SchemeComparaison({ - - } - /> - -

- - Recommandé avant le début de l'activité - {' '} - -

- - - {!isAutoentrepreneur && ( - - - La gestion d'une entreprise impose un certain nombre d' - - obligations comptables - - . Il est conseillé de faire appel aux services d'un - expert-comptable ou d'un logiciel de comptabilité en ligne. - - - } - /> - )} - - - Une PME ou un travailleur indépendant doit se protéger contre - les principaux risques auxquels il est exposé et souscrire des - contrats de garantie. Qu'elle soit locataire ou propriétaire de - ses murs, l'entreprise doit assurer ses immeubles, son matériel - professionnel, ses biens, ses matières premières, ses véhicules, - ainsi qu'en matière de responsabilité civile de l'entreprise et - de ses dirigeants ou en matière de perte d'exploitation. - - - Plus d'infos - - - } - /> - -

- Ressources utiles{' '} - -

- - - {isAutoentrepreneur && ( - -
- {t( - 'entreprise.ressources.simu.autoEntrepreneur.title', - 'Simulateur de revenus auto-entrepreneur' - )} - - } - to={{ - pathname: absoluteSitePaths.simulateurs['auto-entrepreneur'], - }} - state={{ fromCréer: true }} - ctaLabel={t( - 'entreprise.ressources.simu.autoEntrepreneur.cta', - 'Simuler les revenus' - )} - aria-label={t( - 'entreprise.ressources.simu.autoEntrepreneur.aria-label', - 'Auto-entrepreneur, simuler mes revenus' - )} - > - - Simuler le montant de vos cotisations sociales et de votre impôt - et estimez votre futur revenu net. - -
-
- )} - {['EI', 'EIRL', 'EURL'].includes(statut) && ( - -
- {t( - 'entreprise.ressources.simu.indépendant.title', - 'Simulateur de cotisations indépendant' - )} - - } - to={{ pathname: absoluteSitePaths.simulateurs.indépendant }} - state={{ fromCréer: true }} - ctaLabel={t( - 'entreprise.ressources.simu.indépendant.cta', - 'Simuler les cotisations' - )} - aria-label={t( - 'entreprise.ressources.simu.indépendant.aria-label', - 'Indépendant, simuler mes revenus' - )} - > - - Simuler le montant de vos cotisations sociales pour bien - préparer votre business plan. - -
-
- )} - {['SAS', 'SASU'].includes(statut) && ( - -
- {t( - 'entreprise.ressources.simu.assimilé.title', - 'Simulateur de rémunération pour dirigeant de SASU' - )} - - } - to={{ pathname: absoluteSitePaths.simulateurs.sasu }} - state={{ fromCréer: true }} - ctaLabel={t( - 'entreprise.ressources.simu.assimilé.cta', - 'Simuler la rémunération' - )} - aria-label={t( - 'entreprise.ressources.simu.assimilé.aria-label', - 'SASU, simuler la rémunération' - )} - > - - Simuler le montant de vos cotisations sociales pour bien - préparer votre business plan. - -
-
- )} - -
- - Après la création - - - } - to={absoluteSitePaths.assistants['choix-du-statut'].après} - ctaLabel={t('entreprise.ressources.après.cta', 'Voir le glossaire')} - aria-label={t( - 'entreprise.ressources.après.aria-label', - 'Après la création, voir le glossaire' - )} - > - - SIREN, SIRET, code APE, KBis. Un petit glossaire des termes que - vous pourrez (éventuellement) rencontrer après la création. - -
-
- - {i18n.language === 'fr' && isAutoentrepreneur && ( - -
Guide pratique Urssaf} - href="https://www.autoentrepreneur.urssaf.fr/portail/files/Guides/Metropole/UrssafAutoEntrepreneurMetro.pdf" - ctaLabel="Consulter le guide Urssaf" - > - Des conseils pour les auto-entrepreneurs : comment préparer son - projet pour se lancer dans la création et une présentation - détaillée de votre protection sociale. -
-
- )} - - {isAutoentrepreneur && ( - - - - )} - {i18n.language === 'fr' && ['EI', 'EIRL', 'EURL'].includes(statut) && ( - -
Guide Urssaf pour les travailleur indépendant} - href="https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_TI_statuts_hors_AE.pdf" - ctaLabel="Consulter le guide Urssaf" - aria-label="Travailleurs indépendants, consulter le guide Urssaf" - > - Des conseils sur comment préparer son projet pour se lancer dans - la création et une présentation détaillée de votre protection - sociale. -
-
- )} -
- - ) -} - -type StatutsExampleProps = { - statut: string -} - -const StatutsExample = ({ statut }: StatutsExampleProps) => { - const { t } = useTranslation() - const links = { - SARL: 'https://bpifrance-creation.fr/file/109068/download?token=rmc93Ve3', - EURL: 'https://bpifrance-creation.fr/file/109070/download?token=Ul-rT6Z0', - } - - if (!(statut in links)) { - return null - } - - return ( - - - Exemple de statuts pour votre - {' '} - {statut} - - ) -} - -export const FAQAutoEntrepreneurArticle = () => { - const { t } = useTranslation() - - return ( -
- {t( - 'pages.common.ressources-auto-entrepreneur.FAQ.title', - 'Questions fréquentes' - )}{' '} - - - } - href="https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html" - ctaLabel={t( - 'pages.common.ressources-auto-entrepreneur.FAQ.cta', - 'Voir les réponses' - )} - > - - Une liste exhaustive et maintenue à jour de toutes les questions - fréquentes (et moins fréquentes) que l'on est amené à poser en tant - qu'auto-entrepreneur - -
- ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/AutoEntrepreneur.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/AutoEntrepreneur.tsx deleted file mode 100644 index f8eccfbcb..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/AutoEntrepreneur.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' - -import { TrackPage } from '@/components/ATInternetTracking' -import SchemeComparaison from '@/components/SchemeComparaison' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import { H2 } from '@/design-system/typography/heading' -import { Link } from '@/design-system/typography/link' -import { Body } from '@/design-system/typography/paragraphs' - -export default function Autoentrepreneur() { - const { t } = useTranslation() - - return ( - <> - - - - {t( - 'autoentrepreneur.page.titre', - 'Choisir entre auto-entrepreneur et entreprise individuelle - Mon entreprise' - )} - - - -

- - Entreprise individuelle ou auto-entrepreneur - -

- - - À la différence de l'entreprise individuelle, l'auto-entrepreneur - bénéficie d'un régime simplifié de déclaration et de paiement : les - cotisations sociales et l'impôt sur le revenu sont calculés sur le - chiffre d'affaires encaissé. - - - Note : Certaines activités sont exclues de ce statut - ( - - {' '} - voir la liste - - ). Certaines activités sont réglementées avec une qualification ou une - expérience professionnelle ( - - voir la liste - - ). - - -
- -
- - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/DirectorStatus.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/DirectorStatus.tsx deleted file mode 100644 index 2d530cec2..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/DirectorStatus.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' - -import { TrackPage } from '@/components/ATInternetTracking' -import SchemeComparaison from '@/components/SchemeComparaison' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import { H2 } from '@/design-system/typography/heading' -import { Body } from '@/design-system/typography/paragraphs' - -export default function DefineDirectorStatus() { - const { t } = useTranslation() - - return ( - <> - - - - {t('statut du dirigeant.titre', 'Définir le statut du dirigeant')} - - - -

- - Définir le statut du dirigeant - -

- - - Ce choix est important car il détermine le régime de sécurité sociale - et la couverture sociale du dirigeant. Le montant et les modalités de - paiement des cotisations sociales sont également impactés. - -
- -
-
- - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/MinorityDirector.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/MinorityDirector.tsx deleted file mode 100644 index 9680ef5a0..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/MinorityDirector.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' - -import { TrackPage } from '@/components/ATInternetTracking' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import AnswerGroup from '@/design-system/answer-group' -import { Button } from '@/design-system/buttons' -import { H2 } from '@/design-system/typography/heading' -import { Li, Ul } from '@/design-system/typography/list' -import { Body } from '@/design-system/typography/paragraphs' -import { - directorIsInAMinority, - useDispatchAndGoToNextQuestion, -} from '@/store/actions/companyStatusActions' - -export default function MinorityDirector() { - const { t } = useTranslation() - const dispatch = useDispatchAndGoToNextQuestion() - - return ( - <> - - - - {t( - 'gérant minoritaire.page.titre', - 'Gérant majoritaire ou minoritaire' - )}{' '} - - - -

- - Gérant majoritaire ou minoritaire - {' '} -

- - - Certaines règles spéciales s'appliquent selon le nombre d'actions - détenues. - -
    -
  • - Gérant majoritaire : Vous êtes l'administrateur - majoritaire (ou faite partie d'un conseil d'administration - majoritaire). -
  • -
  • - Gérant minoritaire : Vous êtes administrateur - minoritaire ou égalitaire (ou faites partie d'un conseil - d'administration minoritaire ou égalitaire). -
  • -
-
- - - - - - - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/NumberOfAssociate.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/NumberOfAssociate.tsx deleted file mode 100644 index 8c805b38e..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/NumberOfAssociate.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' - -import { TrackPage } from '@/components/ATInternetTracking' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import AnswerGroup from '@/design-system/answer-group' -import { Button } from '@/design-system/buttons' -import { H2 } from '@/design-system/typography/heading' -import { Body, SmallBody } from '@/design-system/typography/paragraphs' -import { - companyHasMultipleAssociates, - useDispatchAndGoToNextQuestion, -} from '@/store/actions/companyStatusActions' - -export default function NumberOfAssociates() { - const dispatch = useDispatchAndGoToNextQuestion() - const { t } = useTranslation() - - return ( - <> - - - - {t( - 'associés.page.titre', - "Nombre d'associés pour créer une entreprise" - )} - - - -

- Seul ou à plusieurs -

- - - Une entreprise avec un seul associé est plus simple à créer et gérer. - Un associé peut-être une personne physique (un individu) ou une - personne morale (par exemple une société). - - - Note : ce choix n'est pas définitif. Vous pouvez tout à fait commencer - votre société seul, et accueillir de nouveaux associés au cours de - votre développement. - - - - - - - - - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/PickLegalStatus.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/PickLegalStatus.tsx deleted file mode 100644 index 8a9fda421..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/PickLegalStatus.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { Fragment } from 'react' -import { Trans, useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' - -import { TrackPage } from '@/components/ATInternetTracking' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import { Button } from '@/design-system/buttons' -import { H2, H3 } from '@/design-system/typography/heading' -import { Body } from '@/design-system/typography/paragraphs' -import { useSitePaths } from '@/sitePaths' -import { - LegalStatus, - possibleStatusSelector, -} from '@/store/selectors/companyStatusSelectors' - -import StatutDescription from '../StatutDescription' - -type StatutButtonProps = { - statut: LegalStatus -} - -const StatutButton = ({ statut }: StatutButtonProps) => { - const { absoluteSitePaths } = useSitePaths() - - return ( - - ) -} - -type StatutTitleProps = { - statut: LegalStatus - language: string -} - -const StatutTitle = ({ statut, language }: StatutTitleProps) => - statut === 'EI' ? ( - <> - Entreprise individuelle {language !== 'fr' && '(Individual business)'}:{' '} - - ) : statut === 'EIRL' ? ( - <> - Entrepreneur individuel à responsabilité limitée{' '} - {language !== 'fr' && '(Individual entrepreneur with limited liability)'}:{' '} - - ) : statut === 'EURL' ? ( - <> - EURL - Entreprise unipersonnelle à responsabilité limitée{' '} - {language !== 'fr' && '(Limited personal company)'}:{' '} - - ) : statut === 'SARL' ? ( - <> - SARL - Société à responsabilité limitée{' '} - {language !== 'fr' && '(Limited corporation)'}:{' '} - - ) : statut === 'SAS' ? ( - <> - SAS - Société par actions simplifiées{' '} - {language !== 'fr' && '(Simplified joint stock company)'}:{' '} - - ) : statut === 'SASU' ? ( - <> - SASU - Société par action simplifiée unipersonnelle{' '} - {language !== 'fr' && '(Simplified personal joint stock company)'}:{' '} - - ) : statut === 'SA' ? ( - <>SA - Société anonyme {language !== 'fr' && '(Anonymous company)'}: - ) : (statut as string) === 'SNC' ? ( - <>SNC - Société en nom collectif {language !== 'fr' && '(Partnership)'}: - ) : statut === 'auto-entrepreneur' ? ( - <> - Auto-entrepreneur - {language === 'fr' && ' '}:{' '} - - ) : statut === 'auto-entrepreneur-EIRL' ? ( - <> - Auto-entrepreneur en EIRL - {language === 'fr' && ' '} - {':'} - - ) : null - -export default function SetMainStatus() { - const { t, i18n } = useTranslation() - const possibleStatus = useSelector(possibleStatusSelector) - - return ( - <> - - - - {t( - 'listeformejuridique.page.titre', - 'Liste des statuts juridiques pour la création de votre entreprise' - )} - - -

- {Object.keys(possibleStatus).every(Boolean) ? ( - Liste des statuts juridiques - ) : ( - Votre forme juridique - )} -

- - {(Object.entries(possibleStatus) as [LegalStatus, boolean][]) - .filter(([, v]) => Boolean(v)) - .map(([statut]) => ( - -

- -

- - - - -
- ))} - - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/PreviousAnswers.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/PreviousAnswers.tsx deleted file mode 100644 index ec7eff146..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/PreviousAnswers.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' -import { useLocation } from 'react-router-dom' -import styled from 'styled-components' - -import { Link } from '@/design-system/typography/link' -import { useSitePaths } from '@/sitePaths' -import { RootState } from '@/store/reducers/rootReducer' -import { LegalStatusRequirements } from '@/types/companyTypes' - -interface RequirementToTextType { - props: { - children: string - } -} - -const requirementToText = ( - key: keyof LegalStatusRequirements, - value: string -) => { - switch (key) { - case 'multipleAssociates': - return value ? ( - Plusieurs associés - ) : ( - Un seul associé - ) - case 'soleProprietorship': - return value ? ( - Entreprise individuelle - ) : ( - Société - ) - case 'directorStatus': - return value === 'SELF_EMPLOYED' ? ( - Indépendant - ) : ( - Assimilé salarié - ) - case 'autoEntrepreneur': - return value ? ( - Auto-entrepreneur - ) : ( - Pas en auto-entrepreneur - ) - case 'minorityDirector': - return value ? ( - Gérant minoritaire - ) : ( - Gérant majoritaire - ) - } -} - -const PreviousAnswersList = styled.nav` - font-family: ${({ theme }) => theme.fonts.main}; - display: flex; - list-style-type: none; - z-index: 2; - position: relative; - padding: 0; - margin-bottom: -1rem; -` - -const PreviousAnswersItem = styled.li` - padding-right: 0.5rem; - &:after { - content: '>'; - padding-left: 0.5rem; - } -` - -export default function PreviousAnswers() { - const location = useLocation() - const { absoluteSitePaths } = useSitePaths() - const legalStatus = useSelector( - (state: RootState) => state.choixStatutJuridique.companyLegalStatus - ) - - const { t } = useTranslation() - - if (Object.values(legalStatus).length < 1) { - return null - } - - return ( - - {Object.entries(legalStatus).map(([key, value]) => { - const textObject = requirementToText( - key as keyof LegalStatusRequirements, - value as string - ) - const isCurrent = - decodeURI(location.pathname) === - absoluteSitePaths.assistants['choix-du-statut'].guideStatut[ - key as keyof typeof legalStatus - ] - - return ( - value !== undefined && ( - - - {textObject} - - - ) - ) - })} - - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/SoleProprietorship.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/SoleProprietorship.tsx deleted file mode 100644 index d15d3a5c8..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/SoleProprietorship.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { Trans, useTranslation } from 'react-i18next' - -import { TrackPage } from '@/components/ATInternetTracking' -import DefaultHelmet from '@/components/utils/DefaultHelmet' -import AnswerGroup from '@/design-system/answer-group' -import { Button } from '@/design-system/buttons' -import { H2 } from '@/design-system/typography/heading' -import { Li, Ul } from '@/design-system/typography/list' -import { Body } from '@/design-system/typography/paragraphs' -import { - isSoleProprietorship, - useDispatchAndGoToNextQuestion, -} from '@/store/actions/companyStatusActions' - -export default function SoleProprietorship() { - const dispatch = useDispatchAndGoToNextQuestion() - const { t } = useTranslation() - - return ( - <> - - - - {t( - 'responsabilité.page.titre', - 'Choisir entre société ou entreprise individuelle' - )} - - - -

- - Entreprise individuelle ou société ? - -

- - - Ce choix determine votre degré de responsabilité et votre capacité à - accueillir de nouveaux associés dans le futur{' '} - - : - -
    -
  • - - Entreprise individuelle : - Une activité économique exercée par une seule personne physique, en - son nom propre. Moins de formalités, mais plus de risques en cas de - faillite, car votre patrimoine personnel peut être mis à - contribution.{' '} - - Vous ne pouvez pas accueillir de nouveaux associés en entreprise - individuelle. - - -
  • - -
  • - - Société : - Vous ne pouvez pas être tenu personnellement responsable des dettes - ou obligations de la société. En revanche, les démarches de création - sont un peu plus lourdes, puisqu'elles incluent notamment la - rédaction de statuts et le dépôt d'un capital. - -
  • -
- - - - - {/* this is an economic activity conducted by a single natural person, in his own name ; */} - {/* Company : This is an economic activity conducted by a single partner - single member company with limited liability (EURL) - or several partners (limited liability company (SARL), public limited company (SA), simplified joint-stock company (SAS)...). */} - - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/GuideStatut/index.tsx b/site/source/pages/assistants/choix-du-statut/GuideStatut/index.tsx deleted file mode 100644 index 58b45c7b4..000000000 --- a/site/source/pages/assistants/choix-du-statut/GuideStatut/index.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { useEffect } from 'react' -import { Trans } from 'react-i18next' -import { useDispatch, useSelector } from 'react-redux' -import { Navigate, Route, Routes, useLocation } from 'react-router-dom' - -import { TrackChapter } from '@/components/ATInternetTracking' -import { FromBottom } from '@/components/ui/animate' -import { H1 } from '@/design-system/typography/heading' -import { Link } from '@/design-system/typography/link' -import { useSitePaths } from '@/sitePaths' -import { resetCompanyStatusChoice } from '@/store/actions/companyStatusActions' -import { RootState } from '@/store/reducers/rootReducer' - -import AutoEntrepreneur from './AutoEntrepreneur' -import DirectorStatus from './DirectorStatus' -import MinorityDirector from './MinorityDirector' -import NumberOfAssociate from './NumberOfAssociate' -import PickLegalStatus from './PickLegalStatus' -import PreviousAnswers from './PreviousAnswers' -import SoleProprietorship from './SoleProprietorship' - -const useResetFollowingAnswers = () => { - const dispatch = useDispatch() - const { absoluteSitePaths } = useSitePaths() - const location = useLocation() - const answeredQuestion = useSelector( - (state: RootState) => - Object.keys( - state.choixStatutJuridique.companyLegalStatus - ) as (keyof typeof state.choixStatutJuridique.companyLegalStatus)[] - ) - useEffect(() => { - const companyStatusCurrentQuestionName = (Object.entries( - absoluteSitePaths.assistants['choix-du-statut'].guideStatut - ).find(([, pathname]) => location.pathname === pathname) || [])[0] - if (!companyStatusCurrentQuestionName) { - return - } - - const firstAnswerToResetIndex = answeredQuestion.findIndex( - (a) => a === companyStatusCurrentQuestionName - ) - - if (firstAnswerToResetIndex !== -1) { - dispatch( - resetCompanyStatusChoice( - answeredQuestion.slice(firstAnswerToResetIndex) - ) - ) - } - }, [location.pathname, dispatch, absoluteSitePaths.assistants]) -} - -export default function Créer() { - const { relativeSitePaths, absoluteSitePaths } = useSitePaths() - const location = useLocation() - useResetFollowingAnswers() - - return ( - <> - - Retour - - -

- - Choix du statut juridique - -

- - - - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - } - /> - - -
- - ) -} diff --git a/site/source/pages/assistants/choix-du-statut/StatutDescription.tsx b/site/source/pages/assistants/choix-du-statut/StatutDescription.tsx deleted file mode 100644 index 566ed29e0..000000000 --- a/site/source/pages/assistants/choix-du-statut/StatutDescription.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { Trans } from 'react-i18next' - -import { LegalStatus } from '@/store/selectors/companyStatusSelectors' - -type Props = { - statut: LegalStatus -} - -const StatutDescription = ({ statut }: Props) => - statut === 'EI' ? ( - - Aucun apport en capital n'est nécessaire. Le capital privé et le capital - de l'entreprise ne font qu'un. - - ) : statut === 'EIRL' ? ( - - Permet d'attribuer un capital spécifique à son activité professionnelle, - et de choisir le régime d'imposition sur les société (IS) plutôt que - revenu (IR) La société et l'individu constituent la même personne. Ne - convient pas si l'associé unique est une personne morale (entreprise) ou - si vous pensez accueillir d'autres associés au cours de votre - développement (choisissez EURL dans ce cas). - - ) : statut === 'EURL' ? ( - - L'entreprise n'a qu'un associé. La responsabilité est limitée au montant - de l'apport de capital. Evolue en SARL lors de l'arrivée de nouveaux - associés dans la société. - - ) : statut.includes('SARL') ? ( - - Société ayant au moins deux associés dont la responsabilité financière est - limitée au montant de leur apport au capital. Le capital minimum est fixé - librement dans les statuts. Les associés se répartissent des parts - sociales toutes identiques, et la société est dirigée par un ou plusieurs - gérants qui sont forcément des personnes physiques. Le fonctionnement - d'une SARL est encadré par le code du commerce. - - ) : statut === 'SAS' ? ( - - Société ayant au moins deux associés. La responsabilité financière des - associés est limitée au montant de leur apport au capital de la société. - Le capital minimum est fixé librement dans les statuts. Les associés se - répartissent des actions qui peuvent être de plusieurs catégories, et la - société est dirigée par un président qui peut être une personne morale - (une autre société). La SAS se caractérise par une grande souplesse de - fonctionnement (statuts sur mesure). - - ) : statut === 'SASU' ? ( - - L'entreprise n'a qu'un associé. La responsabilité est limitée au montant - de l'apport de capital de l'unique associé (qui peut être une personne - morale). - - ) : statut === 'SA' ? ( - - Société ayant au moins deux actionnaires. C'est le seul statut qui permet - d'être coté en bourse (à partir de 7 actionnaires). Le capital social - minimum est de 37.000 €. - - ) : (statut as string) === 'SNC' ? ( - - La responsabilité des associés pour les dettes de la société est solidaire - (un seul associé peut être poursuivi pour la totalité de la dette) et - indéfinie (responsable sur la totalité de son patrimoine personnel). - - ) : statut === 'auto-entrepreneur' ? ( - - Un auto-entrepreneur exerce son activité en entreprise individuelle, avec - un régime forfaitaire pour ses cotisations sociales et un calcul - spécifique de l'impôt. - - ) : statut === 'auto-entrepreneur-EIRL' ? ( - - Un auto-entrepreneur option EIRL exerce son activité en entreprise - individuelle en choisissant l'option "Entrepreneur individuel à - responsabilité limitée", avec à un régime forfaitaire pour le calcul des - impôts et le paiement des cotisations de sécurité sociale. - - ) : /* Otherwise */ null - -export default StatutDescription diff --git a/site/source/pages/assistants/choix-du-statut/_components/Navigation.tsx b/site/source/pages/assistants/choix-du-statut/_components/Navigation.tsx new file mode 100644 index 000000000..75a4290a7 --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/_components/Navigation.tsx @@ -0,0 +1,85 @@ +import { Trans, useTranslation } from 'react-i18next' +import { useMatch } from 'react-router-dom' + +import { Button } from '@/design-system/buttons' +import { useSitePaths } from '@/sitePaths' + +export const stepOrder = [ + 'activité', + 'département', + 'lucratif', + 'associé', + 'rémunération', + 'statuts', + 'résultat', +] as const + +type Step = (typeof stepOrder)[number] + +function useCurrentStep() { + const { relativeSitePaths, absoluteSitePaths } = useSitePaths() + const localizedStep = useMatch( + `${absoluteSitePaths.assistants['choix-du-statut'].index}/:step` + )?.params.step + if (!localizedStep) { + return null + } + + const currentStep = Object.entries( + relativeSitePaths.assistants['choix-du-statut'] + ).find( + ([, value]) => value === localizedStep + )?.[0] as keyof (typeof relativeSitePaths.assistants)['choix-du-statut'] + + if (!stepOrder.includes(currentStep as Step)) { + return null + } + + return currentStep as Step +} + +export default function Navigation({ + currentStepIsComplete, +}: { + currentStepIsComplete: boolean +}) { + const { t } = useTranslation() + const { absoluteSitePaths } = useSitePaths() + + const currentStep = useCurrentStep() + if (!currentStep) { + return null + } + const nextStep = stepOrder[stepOrder.indexOf(currentStep) + 1] + const previousStep = stepOrder[stepOrder.indexOf(currentStep) - 1] + + return ( + <> + + + {nextStep && ( + + )} + + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/choix-statut-juridique/créer.svg b/site/source/pages/assistants/choix-du-statut/_illustrations/créer.svg similarity index 100% rename from site/source/pages/assistants/choix-du-statut/choix-statut-juridique/créer.svg rename to site/source/pages/assistants/choix-du-statut/_illustrations/créer.svg diff --git a/site/source/pages/assistants/choix-du-statut/activité.tsx b/site/source/pages/assistants/choix-du-statut/activité.tsx new file mode 100644 index 000000000..085c34b9b --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/activité.tsx @@ -0,0 +1,12 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Activité() { + return ( + <> +

Activité

+ + + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/AfterRegistration.tsx b/site/source/pages/assistants/choix-du-statut/après.tsx similarity index 100% rename from site/source/pages/assistants/choix-du-statut/AfterRegistration.tsx rename to site/source/pages/assistants/choix-du-statut/après.tsx diff --git a/site/source/pages/assistants/choix-du-statut/associé.tsx b/site/source/pages/assistants/choix-du-statut/associé.tsx new file mode 100644 index 000000000..51497e6f7 --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/associé.tsx @@ -0,0 +1,12 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Associé() { + return ( + <> +

Associé

+ + + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/choix-statut-juridique/config.ts b/site/source/pages/assistants/choix-du-statut/config.ts similarity index 83% rename from site/source/pages/assistants/choix-du-statut/choix-statut-juridique/config.ts rename to site/source/pages/assistants/choix-du-statut/config.ts index 6011a7cf3..e78db6e4e 100644 --- a/site/source/pages/assistants/choix-du-statut/choix-statut-juridique/config.ts +++ b/site/source/pages/assistants/choix-du-statut/config.ts @@ -1,6 +1,6 @@ -import ChoixDuStatut from '..' -import { config } from '../../../simulateurs/_configs/config' -import { SimulatorsDataParams } from '../../../simulateurs/_configs/types' +import ChoixDuStatut from '.' +import { config } from '../../simulateurs/_configs/config' +import { SimulatorsDataParams } from '../../simulateurs/_configs/types' export function choixStatutJuridiqueConfig({ t, diff --git a/site/source/pages/assistants/choix-du-statut/département.tsx b/site/source/pages/assistants/choix-du-statut/département.tsx new file mode 100644 index 000000000..31ed984c6 --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/département.tsx @@ -0,0 +1,11 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Département() { + return ( + <> +

Département

+ + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/choix-statut-juridique/index.tsx b/site/source/pages/assistants/choix-du-statut/home.tsx similarity index 62% rename from site/source/pages/assistants/choix-du-statut/choix-statut-juridique/index.tsx rename to site/source/pages/assistants/choix-du-statut/home.tsx index 819045f2f..784771872 100644 --- a/site/source/pages/assistants/choix-du-statut/choix-statut-juridique/index.tsx +++ b/site/source/pages/assistants/choix-du-statut/home.tsx @@ -1,5 +1,4 @@ import { Trans, useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' import styled from 'styled-components' import { TrackPage } from '@/components/ATInternetTracking' @@ -8,27 +7,20 @@ import { FromBottom } from '@/components/ui/animate' import Meta from '@/components/utils/Meta' import { Message } from '@/design-system' import { Button } from '@/design-system/buttons' -import { Card } from '@/design-system/card' import { ClockIcon } from '@/design-system/icons' import { Container, Grid, Spacing } from '@/design-system/layout' -import { H2, H3, H4 } from '@/design-system/typography/heading' +import { H3 } from '@/design-system/typography/heading' import { Body, Intro, SmallBody } from '@/design-system/typography/paragraphs' import useSimulatorsData from '@/hooks/useSimulatorsData' import { SimulateurCard } from '@/pages/simulateurs-et-assistants' import { useSitePaths } from '@/sitePaths' -import { RootState } from '@/store/reducers/rootReducer' -import { useNextQuestionUrl } from '@/store/selectors/companyStatusSelectors' -import créerSvg from './créer.svg' +import { stepOrder } from './_components/Navigation' +import créerSvg from './_illustrations/créer.svg' export default function AccueilChoixStatut() { const { t } = useTranslation() const { absoluteSitePaths, relativeSitePaths } = useSitePaths() - const nextQuestionUrl = useNextQuestionUrl() - const guideAlreadyStarted = useSelector( - (state: RootState) => - !!Object.keys(state.choixStatutJuridique.companyLegalStatus).length - ) const simulateurData = useSimulatorsData() return ( @@ -69,13 +61,7 @@ export default function AccueilChoixStatut() { - - - - ) -} +import Activité from './activité' +import AfterRegistration from './après' +import Associé from './associé' +import Département from './département' +import AccueilChoixStatut from './home' +import Lucratif from './lucratif' +import Rémunération from './rémunération' +import Résultat from './résultat' +import Statuts from './statuts' export default function ChoixDuStatut() { const { relativeSitePaths } = useSitePaths() const location = useLocation() + const childrenPaths = relativeSitePaths.assistants['choix-du-statut'] return ( <> } /> - {/* {LANDING_LEGAL_STATUS_LIST.map((statut) => ( */} - } - /> - {/* ))} */} - } - /> - } - /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> ) diff --git a/site/source/pages/assistants/choix-du-statut/lucratif.tsx b/site/source/pages/assistants/choix-du-statut/lucratif.tsx new file mode 100644 index 000000000..7e936149f --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/lucratif.tsx @@ -0,0 +1,11 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Lucratif() { + return ( + <> +

Lucratif

+ + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/rémunération.tsx b/site/source/pages/assistants/choix-du-statut/rémunération.tsx new file mode 100644 index 000000000..6dbdba1da --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/rémunération.tsx @@ -0,0 +1,11 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Rémunération() { + return ( + <> +

Rémunération

+ + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/résultat.tsx b/site/source/pages/assistants/choix-du-statut/résultat.tsx new file mode 100644 index 000000000..fe85001b1 --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/résultat.tsx @@ -0,0 +1,11 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Résultat() { + return ( + <> +

Résultat

+ + ) +} diff --git a/site/source/pages/assistants/choix-du-statut/statuts.tsx b/site/source/pages/assistants/choix-du-statut/statuts.tsx new file mode 100644 index 000000000..21595db45 --- /dev/null +++ b/site/source/pages/assistants/choix-du-statut/statuts.tsx @@ -0,0 +1,12 @@ +import { H1 } from '@/design-system/typography/heading' + +import Navigation from './_components/Navigation' + +export default function Statuts() { + return ( + <> +

Statuts

+ + + ) +} diff --git a/site/source/pages/simulateurs/NextSteps.tsx b/site/source/pages/simulateurs/NextSteps.tsx index cd7dae8ca..8dbcd7416 100644 --- a/site/source/pages/simulateurs/NextSteps.tsx +++ b/site/source/pages/simulateurs/NextSteps.tsx @@ -6,6 +6,8 @@ import { WhenNotApplicable, } from '@/components/EngineValue' import { useEngine } from '@/components/utils/EngineContext' +// import { Article } from '@/design-system/card' +// import { Emoji } from '@/design-system/emoji' import { Grid } from '@/design-system/layout' import { H2 } from '@/design-system/typography/heading' import { MergedSimulatorDataValues } from '@/hooks/useCurrentSimulatorData' @@ -125,3 +127,32 @@ const guidesUrssaf = [ ctaLabel: 'En savoir plus', }, ] + +// const FAQAutoEntrepreneurArticle = () => { +// const { t } = useTranslation() + +// return ( +//
+// {t( +// 'pages.common.ressources-auto-entrepreneur.FAQ.title', +// 'Questions fréquentes' +// )}{' '} +// +// +// } +// href="https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html" +// ctaLabel={t( +// 'pages.common.ressources-auto-entrepreneur.FAQ.cta', +// 'Voir les réponses' +// )} +// > +// +// Une liste exhaustive et maintenue à jour de toutes les questions +// fréquentes (et moins fréquentes) que l'on est amené à poser en tant +// qu'auto-entrepreneur +// +//
+// ) +// } diff --git a/site/source/pages/simulateurs/metadata-src.ts b/site/source/pages/simulateurs/metadata-src.ts index bcf4903d0..f3f0a9a7a 100644 --- a/site/source/pages/simulateurs/metadata-src.ts +++ b/site/source/pages/simulateurs/metadata-src.ts @@ -1,6 +1,6 @@ import { ImmutableType } from '@/types/utils' -import { choixStatutJuridiqueConfig } from '../assistants/choix-du-statut/choix-statut-juridique/config' +import { choixStatutJuridiqueConfig } from '../assistants/choix-du-statut/config' import { déclarationChargesSocialesIndépendantConfig } from '../assistants/declaration-charges-sociales-independant/config' import { déclarationRevenuIndépendantBetaConfig } from '../assistants/declaration-revenu-independants/config' import { demandeMobilitéConfig } from '../assistants/demande-mobilité/config' diff --git a/site/source/sitePaths.ts b/site/source/sitePaths.ts index f55aaeb5f..af36f5329 100644 --- a/site/source/sitePaths.ts +++ b/site/source/sitePaths.ts @@ -1,7 +1,6 @@ import { useTranslation } from 'react-i18next' import { MetadataSrc } from '@/pages/simulateurs/metadata-src' -import { LegalStatus } from '@/store/selectors/companyStatusSelectors' // export const LANDING_LEGAL_STATUS_LIST: Array = [ // 'EI', @@ -46,18 +45,15 @@ const rawSitePathsFr = { }, 'choix-du-statut': { index: 'choix-du-statut', - assistant: 'assistant', + activité: 'activité', + département: 'département', + lucratif: 'lucratif', + associé: 'associé', + rémunération: 'rémunération', + statuts: 'statuts', + résultat: 'résultat', // ...status, après: 'après-la-création', - guideStatut: { - index: 'statut-juridique', - liste: 'liste', - soleProprietorship: 'responsabilité', - directorStatus: 'dirigeant', - autoEntrepreneur: 'auto-entrepreneur-ou-entreprise-individuelle', - multipleAssociates: 'nombre-associés', - minorityDirector: 'gérant-majoritaire-ou-minoritaire', - }, }, }, simulateurs: { @@ -139,15 +135,14 @@ const rawSitePathsEn = { index: 'choice-of-status', assistant: 'assistant', après: 'after-registration', - guideStatut: { - index: 'legal-status', - liste: 'list', - soleProprietorship: 'liability', - directorStatus: 'director', - autoEntrepreneur: 'auto-entrepreneur', - multipleAssociates: 'multiple-associates', - minorityDirector: 'chairman-or-managing-director', - }, + + activité: 'activity', + département: 'state', + lucratif: 'lucrative', + associé: 'partnership', + rémunération: 'remuneration', + statuts: 'statuts', + résultat: 'result', }, }, simulateurs: { diff --git a/site/source/store/actions/actions.ts b/site/source/store/actions/actions.ts index adbeaded7..8f51598cd 100644 --- a/site/source/store/actions/actions.ts +++ b/site/source/store/actions/actions.ts @@ -7,7 +7,6 @@ import { buildSituationFromObject } from '@/utils' import { CompanyActions } from './companyActions' import { CompanyCreationAction } from './companyCreationChecklistActions' -import { CompanyStatusAction } from './companyStatusActions' import { HiringChecklistAction } from './hiringChecklistAction' export type Action = @@ -27,7 +26,6 @@ export type Action = | typeof updateShouldFocusField > | CompanyCreationAction - | CompanyStatusAction | CompanyActions | HiringChecklistAction diff --git a/site/source/store/actions/companyStatusActions.ts b/site/source/store/actions/companyStatusActions.ts deleted file mode 100644 index 9af191a6d..000000000 --- a/site/source/store/actions/companyStatusActions.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { useEffect, useState } from 'react' -import { useDispatch } from 'react-redux' -import { useNavigate } from 'react-router-dom' - -import { useNextQuestionUrl } from '@/store/selectors/companyStatusSelectors' -import { LegalStatusRequirements } from '@/types/companyTypes' - -import { Action } from './actions' - -export type CompanyStatusAction = ReturnType< - | typeof isSoleProprietorship - | typeof defineDirectorStatus - | typeof companyHasMultipleAssociates - | typeof isAutoentrepreneur - | typeof directorIsInAMinority - | typeof resetCompanyStatusChoice -> - -// This feels hacky, we should express this "dispatch and navigate" in another way -export const useDispatchAndGoToNextQuestion = () => { - const dispatch = useDispatch() - const navigate = useNavigate() - const nextQuestion = useNextQuestionUrl() - const [dispatched, setDispatched] = useState(false) - useEffect(() => { - if (dispatched) { - navigate(nextQuestion) - } - }, [dispatched]) - - return (action: Action) => { - dispatch(action) - setDispatched(true) - } -} - -export const isSoleProprietorship = (isSoleProprietorship?: boolean) => - ({ - type: 'COMPANY_IS_SOLE_PROPRIETORSHIP', - isSoleProprietorship, - } as const) - -type DirectorStatus = 'SALARIED' | 'SELF_EMPLOYED' - -export const defineDirectorStatus = (status: DirectorStatus) => - ({ - type: 'DEFINE_DIRECTOR_STATUS', - status, - } as const) - -export const companyHasMultipleAssociates = (multipleAssociates?: boolean) => - ({ - type: 'COMPANY_HAS_MULTIPLE_ASSOCIATES', - multipleAssociates, - } as const) - -export const isAutoentrepreneur = (autoEntrepreneur?: boolean) => - ({ - type: 'COMPANY_IS_MICROENTERPRISE', - autoEntrepreneur, - } as const) - -export const directorIsInAMinority = (minorityDirector?: boolean) => - ({ - type: 'SPECIFY_DIRECTORS_SHARE', - minorityDirector, - } as const) - -export const resetCompanyStatusChoice = ( - answersToReset?: (keyof LegalStatusRequirements)[] -) => - ({ - type: 'RESET_COMPANY_STATUS_CHOICE', - answersToReset, - } as const) diff --git a/site/source/store/selectors/companyStatusSelectors.ts b/site/source/store/selectors/companyStatusSelectors.ts deleted file mode 100644 index 3aee5ea16..000000000 --- a/site/source/store/selectors/companyStatusSelectors.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { useSelector } from 'react-redux' - -import { useSitePaths } from '@/sitePaths' -import { RootState } from '@/store/reducers/rootReducer' -import { LegalStatusRequirements, State } from '@/types/companyTypes' - -const LEGAL_STATUS_DETAILS = { - 'auto-entrepreneur': { - soleProprietorship: true, - directorStatus: 'SELF_EMPLOYED', - minorityDirector: false, - multipleAssociates: false, - autoEntrepreneur: true, - }, - EIRL: { - soleProprietorship: true, - directorStatus: 'SELF_EMPLOYED', - multipleAssociates: false, - autoEntrepreneur: false, - minorityDirector: false, - }, - 'auto-entrepreneur-EIRL': { - soleProprietorship: true, - directorStatus: 'SELF_EMPLOYED', - multipleAssociates: false, - minorityDirector: false, - autoEntrepreneur: true, - }, - EI: { - soleProprietorship: true, - directorStatus: 'SELF_EMPLOYED', - minorityDirector: false, - multipleAssociates: false, - autoEntrepreneur: false, - }, - SASU: { - soleProprietorship: false, - directorStatus: 'SALARIED', - minorityDirector: false, - multipleAssociates: false, - autoEntrepreneur: false, - }, - SAS: { - soleProprietorship: false, - directorStatus: 'SALARIED', - multipleAssociates: true, - autoEntrepreneur: false, - }, - SARL: [ - { - soleProprietorship: false, - directorStatus: 'SELF_EMPLOYED', - multipleAssociates: true, - minorityDirector: false, - autoEntrepreneur: false, - }, - { - soleProprietorship: false, - directorStatus: 'SALARIED', - multipleAssociates: true, - minorityDirector: true, - autoEntrepreneur: false, - }, - ] as Array, - EURL: { - soleProprietorship: false, - directorStatus: 'SELF_EMPLOYED', - minorityDirector: false, - multipleAssociates: false, - autoEntrepreneur: false, - }, - SA: { - soleProprietorship: false, - directorStatus: 'SALARIED', - multipleAssociates: true, - autoEntrepreneur: false, - }, -} - -export type LegalStatus = keyof typeof LEGAL_STATUS_DETAILS -type Question = keyof LegalStatusRequirements -type Answers = LegalStatusRequirements - -const QUESTION_LIST: Array = [ - 'soleProprietorship', - 'directorStatus', - 'minorityDirector', - 'multipleAssociates', - 'autoEntrepreneur', -] - -function isCompatibleStatusWith( - answers: Answers, - statusRequirements: LegalStatusRequirements -): boolean { - return Object.entries(statusRequirements).reduce( - (isCompatible, [question, statusValue]) => { - const answer = answers[question as Question] - - return ( - isCompatible && - (answer == null || - statusValue == null || - JSON.stringify(answer) === JSON.stringify(statusValue)) - ) - }, - true - ) -} - -const possibleStatus = (answers: Answers): Record => - Object.fromEntries( - Object.entries(LEGAL_STATUS_DETAILS).map(([key, statusRequirements]) => [ - key, - Array.isArray(statusRequirements) - ? !!statusRequirements.some((requirement) => - isCompatibleStatusWith(answers, requirement) - ) - : isCompatibleStatusWith( - answers, - statusRequirements as LegalStatusRequirements - ), - ]) - ) as Record - -export const possibleStatusSelector = (state: { - choixStatutJuridique: State -}): Record => - possibleStatus(state.choixStatutJuridique.companyLegalStatus) - -export const nextQuestionSelector = (state: RootState): Question | null => { - const legalStatusRequirements = state.choixStatutJuridique.companyLegalStatus - const questionAnswered = Object.keys( - legalStatusRequirements - ) as Array - const possibleStatusList = Object.values(LEGAL_STATUS_DETAILS) - .flat() - .filter((requirement) => - isCompatibleStatusWith(legalStatusRequirements, requirement as any) - ) - - const difference = (l1: Array, l2: Array): Array => - l1.filter((x) => !l2.includes(x)) - - const unansweredQuestions = difference(QUESTION_LIST, questionAnswered) - const shannonEntropyByQuestion = unansweredQuestions.map( - (question): [typeof question, number] => { - const answerPopulation = Object.values(possibleStatusList).map( - (status: any) => status[question] - ) - - const frequencyOfAnswers = Object.values( - answerPopulation - .filter((x) => x !== undefined) - .reduce( - (counters: Record, i) => ({ - ...counters, - [i]: (counters?.[i] ?? 0) + 1, - }), - {} - ) - ).map((numOccurrence) => numOccurrence / answerPopulation.length) - const shannonEntropy = -frequencyOfAnswers - .map((p) => p * Math.log2(p)) - .reduce((a, b) => a + b, 0) - - return [question, shannonEntropy] - } - ) - - const sortedPossibleNextQuestions = shannonEntropyByQuestion - .filter(([, entropy]) => entropy !== 0) - .sort(([, entropy1], [, entropy2]) => entropy2 - entropy1) - .map(([question]) => question) - - if (sortedPossibleNextQuestions.length === 0) { - return null - } - - return sortedPossibleNextQuestions[0] -} - -export const useNextQuestionUrl = () => { - const nextQuestion = useSelector(nextQuestionSelector) - const { absoluteSitePaths } = useSitePaths() - if (!nextQuestion) { - return absoluteSitePaths.assistants['choix-du-statut'].guideStatut.liste - } - - return absoluteSitePaths.assistants['choix-du-statut'].guideStatut[ - nextQuestion - ] -} diff --git a/site/source/types/companyTypes.ts b/site/source/types/companyTypes.ts deleted file mode 100644 index 25bb11876..000000000 --- a/site/source/types/companyTypes.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { LegalStatus } from '@/store/selectors/companyStatusSelectors' - -export type IsSoleProprietorshipAction = { - type: 'COMPANY_IS_SOLE_PROPRIETORSHIP' - isSoleProprietorship?: boolean -} - -export type DirectorStatus = 'SALARIED' | 'SELF_EMPLOYED' - -export type DefineDirectorStatusAction = { - type: 'DEFINE_DIRECTOR_STATUS' - status?: DirectorStatus -} - -export type CompanyHasMultipleAssociatesAction = { - type: 'COMPANY_HAS_MULTIPLE_ASSOCIATES' - multipleAssociates?: boolean -} - -export type IsAutoentrepreneurAction = { - type: 'COMPANY_IS_MICROENTERPRISE' - autoEntrepreneur?: boolean -} - -export type ChangeChecklistItemAction = { - type: 'CHANGE_CHECKLIST_ITEM' - checklist: string - value: boolean - name: string -} - -export type DirectorIsInAMinorityAction = { - type: 'SPECIFY_DIRECTORS_SHARE' - minorityDirector?: boolean -} -export type ResetCompanyStatusAction = { - type: 'RESET_COMPANY_STATUS_CHOICE' - answersToReset?: Array -} - -export type State = { - companyLegalStatus: { - /* - Note on the meanings of null / undefined value: - If the key exists and the value is null, the question have been asked, but skipped by the user. - If the key does not exists, the question still hasn't been asked. - */ - soleProprietorship?: boolean - directorStatus?: DirectorStatus - multipleAssociates?: boolean - autoEntrepreneur?: boolean - minorityDirector?: boolean - } - companyStatusChoice?: LegalStatus -} -export type LegalStatusRequirements = State['companyLegalStatus'] -export type Action = - | IsSoleProprietorshipAction - | DefineDirectorStatusAction - | IsAutoentrepreneurAction - | CompanyHasMultipleAssociatesAction - | ChangeChecklistItemAction - | DirectorIsInAMinorityAction - | ResetCompanyStatusAction