From 6a39e1fd2f4d5c609e099215c10231c11f94df31 Mon Sep 17 00:00:00 2001 From: Jalil Arfaoui Date: Wed, 7 Aug 2024 00:59:07 +0200 Subject: [PATCH] =?UTF-8?q?feat(ind=C3=A9pendant):=20ajoute=20le=20simulat?= =?UTF-8?q?eur=20cessation=20d=E2=80=99activit=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../règles/entreprise/entreprise.publicodes | 6 + .../components/Feedback/FeedbackForm.tsx | 3 +- .../ShareSimulationBanner/index.tsx | 45 ++--- site/source/components/SimulateurWarning.tsx | 9 +- site/source/components/Simulation/index.tsx | 43 +++-- .../PrintExportRecover.tsx | 2 +- .../useSearchParamsForCurrentSituation.tsx | 27 +++ site/source/hooks/useSiteUrl.tsx | 9 + site/source/hooks/useUrl.tsx | 11 ++ site/source/locales/rules-en.yaml | 86 +++++----- site/source/locales/ui-en.yaml | 16 +- site/source/locales/ui-fr.yaml | 18 +- .../pages/simulateurs-et-assistants/index.tsx | 7 +- .../simulateurs-et-assistants/metadata-src.ts | 2 + .../pages/simulateurs/_configs/config.ts | 8 +- .../simulateurs/auxiliaire-médical/config.ts | 3 +- .../source/pages/simulateurs/avocat/config.ts | 3 +- .../cessation-activité/CessationActivité.tsx | 47 +++++ .../simulateurs/cessation-activité/Goals.tsx | 60 +++++++ .../cessation-activité/Toggles.tsx | 70 ++++++++ .../simulateurs/cessation-activité/config.ts | 48 ++++++ .../cessation-activité/simulationConfig.ts | 7 + .../simulateurs/chirurgien-dentiste/config.ts | 3 +- .../source/pages/simulateurs/cipav/config.tsx | 3 +- .../entreprise-individuelle/config.ts | 7 +- .../simulateurs/expert-comptable/config.ts | 3 +- .../indépendant/EntrepriseIndividuelle.tsx | 17 ++ .../pages/simulateurs/indépendant/Goals.tsx | 53 ++++++ .../simulateurs/indépendant/Indépendant.tsx | 161 +----------------- .../indépendant/IndépendantPLSimulation.tsx | 17 ++ .../indépendant/SeoExplanationsEI.tsx | 74 ++++++++ .../pages/simulateurs/médecin/config.ts | 3 +- .../pages/simulateurs/pharmacien/config.ts | 3 +- .../simulateurs/profession-libérale/config.ts | 3 +- .../pages/simulateurs/sage-femme/config.ts | 3 +- site/source/sitePaths.ts | 2 + 36 files changed, 615 insertions(+), 267 deletions(-) create mode 100644 site/source/hooks/useSearchParamsForCurrentSituation.tsx create mode 100644 site/source/hooks/useSiteUrl.tsx create mode 100644 site/source/hooks/useUrl.tsx create mode 100644 site/source/pages/simulateurs/cessation-activité/CessationActivité.tsx create mode 100644 site/source/pages/simulateurs/cessation-activité/Goals.tsx create mode 100644 site/source/pages/simulateurs/cessation-activité/Toggles.tsx create mode 100644 site/source/pages/simulateurs/cessation-activité/config.ts create mode 100644 site/source/pages/simulateurs/cessation-activité/simulationConfig.ts create mode 100644 site/source/pages/simulateurs/indépendant/EntrepriseIndividuelle.tsx create mode 100644 site/source/pages/simulateurs/indépendant/Goals.tsx create mode 100644 site/source/pages/simulateurs/indépendant/IndépendantPLSimulation.tsx create mode 100644 site/source/pages/simulateurs/indépendant/SeoExplanationsEI.tsx diff --git a/modele-social/règles/entreprise/entreprise.publicodes b/modele-social/règles/entreprise/entreprise.publicodes index c1abcaabf..4326de64f 100644 --- a/modele-social/règles/entreprise/entreprise.publicodes +++ b/modele-social/règles/entreprise/entreprise.publicodes @@ -68,6 +68,12 @@ entreprise . durée d'activité . années civiles: depuis: date de création unité: année civile +entreprise . date de radiation: + question: À quelle date comptez-vous déclarer la cessation d’activité ? + par défaut: période . fin d'année + description: La date de radiation est la date à laquelle l’entreprise cessera son activité. + type: date + entreprise . chiffre d'affaires: question: Quel est votre chiffre d'affaires envisagé ? identifiant court: CA diff --git a/site/source/components/Feedback/FeedbackForm.tsx b/site/source/components/Feedback/FeedbackForm.tsx index ae5aa89f4..2a720dfbc 100644 --- a/site/source/components/Feedback/FeedbackForm.tsx +++ b/site/source/components/Feedback/FeedbackForm.tsx @@ -12,8 +12,7 @@ import { Strong } from '@/design-system/typography' import { H1, H4 } from '@/design-system/typography/heading' import { Link } from '@/design-system/typography/link' import { Body } from '@/design-system/typography/paragraphs' - -import { useUrl } from '../ShareSimulationBanner' +import { useUrl } from '@/hooks/useUrl' type SubmitError = { message?: string diff --git a/site/source/components/ShareSimulationBanner/index.tsx b/site/source/components/ShareSimulationBanner/index.tsx index aad8a5c3c..d95acad3e 100644 --- a/site/source/components/ShareSimulationBanner/index.tsx +++ b/site/source/components/ShareSimulationBanner/index.tsx @@ -1,57 +1,36 @@ import { useContext } from 'react' import { Trans, useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' import { styled } from 'styled-components' import { PopoverWithTrigger } from '@/design-system' import { Button } from '@/design-system/buttons' import { Emoji } from '@/design-system/emoji' import { Grid, Spacing } from '@/design-system/layout' -import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData' -import { - companySituationSelector, - situationSelector, - targetUnitSelector, -} from '@/store/selectors/simulationSelectors' +import { useUrl } from '@/hooks/useUrl' import { TrackingContext } from '../ATInternetTracking' import { ConseillersEntreprisesButton } from '../ConseillersEntreprisesButton' -import { useParamsFromSituation } from '../utils/useSearchParamsSimulationSharing' import { ShareSimulationPopup } from './ShareSimulationPopup' -export function useUrl() { - const language = useTranslation().i18n.language - const situation = { - ...useSelector(situationSelector), - ...useSelector(companySituationSelector), - } - - const targetUnit = useSelector(targetUnitSelector) - - const searchParams = useParamsFromSituation(situation, targetUnit) - const { currentSimulatorData } = useCurrentSimulatorData() - - const { path = '' } = currentSimulatorData ?? {} - const siteUrl = - language === 'fr' - ? import.meta.env.VITE_FR_BASE_URL - : import.meta.env.VITE_EN_BASE_URL - - return siteUrl + path + '?' + searchParams.toString() -} - const ButtonLabel = styled.span` margin-left: 1rem; ` +export interface CustomSimulationButton { + href: string + title: string +} + export default function ShareOrSaveSimulationBanner({ share, print, conseillersEntreprises, + customSimulationbutton, }: { share?: boolean print?: boolean conseillersEntreprises?: boolean + customSimulationbutton?: CustomSimulationButton }) { const { t } = useTranslation() const tracker = useContext(TrackingContext) @@ -92,6 +71,14 @@ export default function ShareOrSaveSimulationBanner({ justifyContent: 'center', }} > + {customSimulationbutton && ( + + + + )} + {share && ( + informationsComplémentaires?: ReactNode } export default function SimulateurWarning({ simulateur, + informationsComplémentaires, }: SimulateurWarningProps) { const year = useContext(EngineContext) .evaluate('date') @@ -57,6 +59,11 @@ export default function SimulateurWarning({ )} + {informationsComplémentaires && ( +
    + {informationsComplémentaires} +
+ )} {simulateur === 'profession-libérale' && (
    diff --git a/site/source/components/Simulation/index.tsx b/site/source/components/Simulation/index.tsx index 0fa9b9b4a..12f4b798a 100644 --- a/site/source/components/Simulation/index.tsx +++ b/site/source/components/Simulation/index.tsx @@ -5,9 +5,13 @@ import { useLocation } from 'react-router-dom' import { styled } from 'styled-components' import { ConversationProps } from '@/components/conversation/Conversation' -import ShareOrSaveSimulationBanner from '@/components/ShareSimulationBanner' +import ShareOrSaveSimulationBanner, { + CustomSimulationButton, +} from '@/components/ShareSimulationBanner' import { PopoverWithTrigger } from '@/design-system' +import { Button } from '@/design-system/buttons' import { Grid, Spacing } from '@/design-system/layout' +import { H3 } from '@/design-system/typography/heading' import { Link } from '@/design-system/typography/link' import { companySituationSelector, @@ -27,6 +31,16 @@ export { Questions } from './Questions' export { SimulationGoal } from './SimulationGoal' export { SimulationGoals } from './SimulationGoals' +const StyledGrid = styled(Grid)` + width: 100%; + @media print { + max-width: initial; + flex-basis: initial; + flex-grow: 1; + margin: 0 1rem; + } +` + type SimulationProps = { explanations?: React.ReactNode results?: React.ReactNode @@ -37,18 +51,9 @@ type SimulationProps = { customEndMessages?: ConversationProps['customEndMessages'] fullWidth?: boolean id?: string + customSimulationbutton?: CustomSimulationButton } -const StyledGrid = styled(Grid)` - width: 100%; - @media print { - max-width: initial; - flex-basis: initial; - flex-grow: 1; - margin: 0 1rem; - } -` - export default function Simulation({ explanations, results, @@ -59,6 +64,7 @@ export default function Simulation({ hideDetails = false, fullWidth, id, + customSimulationbutton, }: SimulationProps) { const firstStepCompleted = useSelector(firstStepCompletedSelector) const existingCompany = !!useSelector(companySituationSelector)[ @@ -115,6 +121,21 @@ export default function Simulation({ )} {firstStepCompleted && !hideDetails && ( <> + {customSimulationbutton && ( + <> +
    +

    + Avez-vous besoin de calculer les cotisations de l'année + précédente ? +

    + +
    + + + )} + diff --git a/site/source/components/simulationExplanation/PrintExportRecover.tsx b/site/source/components/simulationExplanation/PrintExportRecover.tsx index 1bc9de76e..71e88fbe7 100644 --- a/site/source/components/simulationExplanation/PrintExportRecover.tsx +++ b/site/source/components/simulationExplanation/PrintExportRecover.tsx @@ -1,9 +1,9 @@ import { Trans } from 'react-i18next' -import { useUrl } from '@/components/ShareSimulationBanner' import { Message } from '@/design-system' import { Link } from '@/design-system/typography/link' import { Body } from '@/design-system/typography/paragraphs' +import { useUrl } from '@/hooks/useUrl' export default function PrintExportRecover() { return ( diff --git a/site/source/hooks/useSearchParamsForCurrentSituation.tsx b/site/source/hooks/useSearchParamsForCurrentSituation.tsx new file mode 100644 index 000000000..ddc62db32 --- /dev/null +++ b/site/source/hooks/useSearchParamsForCurrentSituation.tsx @@ -0,0 +1,27 @@ +import { useSelector } from 'react-redux' + +import { useParamsFromSituation } from '@/components/utils/useSearchParamsSimulationSharing' +import { + companySituationSelector, + situationSelector, + targetUnitSelector, +} from '@/store/selectors/simulationSelectors' + +export const useSearchParamsForCurrentSituation = < + T extends boolean | undefined, +>( + asString: T +): T extends true ? string : object => { + const situation = { + ...useSelector(situationSelector), + ...useSelector(companySituationSelector), + } + + const targetUnit = useSelector(targetUnitSelector) + + const searchParams = useParamsFromSituation(situation, targetUnit) + + return (asString ? searchParams.toString() : searchParams) as T extends true + ? string + : object +} diff --git a/site/source/hooks/useSiteUrl.tsx b/site/source/hooks/useSiteUrl.tsx new file mode 100644 index 000000000..60ae08bc2 --- /dev/null +++ b/site/source/hooks/useSiteUrl.tsx @@ -0,0 +1,9 @@ +import { useTranslation } from 'react-i18next' + +export const useSiteUrl = () => { + const language = useTranslation().i18n.language + + return language === 'fr' + ? import.meta.env.VITE_FR_BASE_URL + : import.meta.env.VITE_EN_BASE_URL +} diff --git a/site/source/hooks/useUrl.tsx b/site/source/hooks/useUrl.tsx new file mode 100644 index 000000000..359751a24 --- /dev/null +++ b/site/source/hooks/useUrl.tsx @@ -0,0 +1,11 @@ +import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData' +import { useSearchParamsForCurrentSituation } from '@/hooks/useSearchParamsForCurrentSituation' +import { useSiteUrl } from '@/hooks/useSiteUrl' + +export function useUrl() { + const { currentSimulatorData } = useCurrentSimulatorData() + + const { path = '' } = currentSimulatorData ?? {} + + return useSiteUrl() + path + '?' + useSearchParamsForCurrentSituation(true) +} diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml index 0d298fc54..a9ba17bc1 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -4033,14 +4033,14 @@ dirigeant . indépendant . cotisations facultatives . plafond retraite compléme dirigeant . indépendant . revenu professionnel: description.en: >- [automatic] Professional income is the manager's remuneration under the - self-employment scheme. + self-employed workers' scheme. For companies that have opted for the **income tax**, this is the **taxable income**. For companies that have opted for the **taxe sur les sociétés**, this is the manager's remuneration, plus non-deductible contributions. description.fr: >- Le revenu professionnel est la rémunération du dirigeant au régime des - indépendant. + indépendants. Pour les entreprises qui ont opté pour l'**impôt sur le revenu**, il s'agit du **résultat fiscal**. @@ -4082,7 +4082,7 @@ dirigeant . indépendant . revenu professionnel: Dans la réalité, comme les cotisations sont régularisées d'une année sur l'autre, ce calcul n'est jamais à faire (sauf exceptions). Mais nous avons choisi de l'implémenter pour fournir le résultat le plus proche sans avoir à demander le montant des cotisations provisionnelles payées l'année N-1. résumé.en: "[automatic] executive compensation under the self-employed workers' scheme" - résumé.fr: rémunération du dirigeant au régime des indépendant + résumé.fr: rémunération du dirigeant au régime des indépendants titre.en: '[automatic] professional income' titre.fr: revenu professionnel dirigeant . indépendant . revenus étrangers: @@ -4526,47 +4526,6 @@ entreprise . TVA: entreprise . TVA . franchise de TVA: titre.en: '[automatic] VAT exemption' titre.fr: franchise de TVA -entreprise . TVA . franchise de TVA . notification: - description.en: > - [automatic] The VAT exemption is a device that exempts companies from the - declaration and payment of - - declaration and payment of VAT. It applies below a threshold of - - annual turnover depending on the activity. - - - The professional who falls under this system invoices his services or sales without tax, and cannot - - and cannot deduct VAT from their purchases. - description.fr: | - La franchise de TVA est un dispositif qui exonère les entreprises de la - déclaration et du paiement de la TVA. Il s'applique en dessous d'un seuil de - chiffre d'affaire annuel dépendant de l'activité. - - Le professionnel qui relève de ce dispositif facture ses prestations ou ses - ventes en hors taxe, et ne peut pas déduire la TVA de ses achats. - note.en: > - [automatic] We take into account here the increased thresholds (which apply - if the "reduced" threshold has not been exceeded in year `n - 2`) - note.fr: > - On prend compte ici des seuils majorés (qui s'appliquent si le seuil - "minoré" n'a pas été dépassé en année `n - 2`) - résumé.en: | - [automatic] You are below the VAT declaration threshold. - résumé.fr: | - Vous êtes en dessous du seuil de déclaration de TVA. - titre.en: '[automatic] notification' - titre.fr: notification -entreprise . TVA . franchise de TVA . seuil service: - titre.en: '[automatic] threshold service' - titre.fr: seuil service -entreprise . TVA . franchise de TVA . seuil vente: - titre.en: '[automatic] sales threshold' - titre.fr: seuil vente -entreprise . TVA . franchise de TVA . seuils dépassés: - titre.en: '[automatic] thresholds exceeded' - titre.fr: seuils dépassés entreprise . activité: titre.en: '[automatic] activity' titre.fr: activité @@ -5775,6 +5734,22 @@ entreprise . coût formalités . création: résumé.fr: Tous les frais liés à l'enregistrement (greffe, annonces, chambres) titre.en: '[automatic] Total creation costs' titre.fr: Total des coûts de création +entreprise . créée cette année: + description.en: '[automatic] Was the company created in the year of the simulation?' + description.fr: L'entreprise a-t-elle été créée l'année de la simulation ? + titre.en: '[automatic] Company created this year' + titre.fr: Entreprise créée cette année +entreprise . date de cessation: + description.en: + '[automatic] The cessation date is the date on which the company + will cease trading.' + description.fr: + La date de cessation est la date à laquelle l’entreprise cessera + son activité. + question.en: '[automatic] When do you plan to declare your cessation of activity?' + question.fr: À quelle date comptez-vous déclarer la cessation d’activité ? + titre.en: '[automatic] termination date' + titre.fr: date de cessation entreprise . date de création: description.en: > [automatic] The date of commencement of activity (or date of creation) is @@ -5841,6 +5816,9 @@ entreprise . durée d'activité . en fin d'année: entreprise . durée d'activité . trimestres civils: titre.en: '[automatic] Number of calendar quarters covered' titre.fr: Nombre de trimestres civils couverts +entreprise . durée d'activité cette année: + titre.en: '[automatic] duration of activity this year' + titre.fr: durée d'activité cette année entreprise . exercice: avec: date trop ancienne: @@ -6120,6 +6098,23 @@ entreprise . imposition . régime . réel simplifié: entreprise . nom: titre.en: '[automatic] name' titre.fr: nom +entreprise . prorata temporis: + description.en: | + [automatic] Percentage of the company's fiscal year in progress + description.fr: | + Pourcentage d'exercice de l'entreprise sur l'année en cours + titre.en: '[automatic] prorata temporis' + titre.fr: prorata temporis +entreprise . radiée: + description.en: '[automatic] Will the company be deregistered in the year of the simulation?' + description.fr: L'entreprise sera-t-elle radiée l'année de la simulation ? + titre.en: '[automatic] Delisted company' + titre.fr: Entreprise radiée +entreprise . radiée cette année: + description.en: '[automatic] Will the company be deregistered in the year of the simulation?' + description.fr: L'entreprise sera-t-elle radiée l'année de la simulation ? + titre.en: '[automatic] Company written off this year' + titre.fr: Entreprise radiée cette année entreprise . résultat fiscal: titre.en: '[automatic] tax result' titre.fr: résultat fiscal @@ -7554,6 +7549,9 @@ protection sociale . transport: période: titre.en: period titre.fr: période +période . durée depuis le début d'année: + titre.en: '[automatic] year-to-date' + titre.fr: durée depuis le début d'année période . début d'année: titre.en: start of year titre.fr: début d'année diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 3f3429bc9..994cf610d 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -69,6 +69,7 @@ Charger plus de résultats: Load more results Charges: Charges Chiffre d'affaires: Sales figures Chiffre d'affaires estimé: Estimated sales +Chiffre d'affaires pour l'année de cessation: Sales for the year of cessation Comment ça marche ? Voir la page explicative sur la page du dépôt github, nouvelle fenêtre: How does it work? See the explanatory page on the github repository page, new window @@ -263,7 +264,7 @@ Retour à la création: Back to creation Retour à mon activité: Back to my activity Retraite complémentaire: Supplementary pension Retraite de base: Basic pension -Retrouver ma simulation, charger les données de ma précédente simulation.: Retrieve my simulation, load data from my previous simulation. +Retrouver ma précédente simulation, charger les données de ma précédente simulation.: Find my previous simulation, load data from my previous simulation. Revenu (incluant les dépenses liées à l'activité): Income (including activity-related expenses) Revenu après impôt: After-tax income Revenu avant impôt: Income before tax @@ -275,6 +276,7 @@ Régime d'imposition: Taxation system Réinitialiser: Reset Réinitialiser la situation enregistrée: Reset registered situation Rémunération brute: Gross remuneration +Rémunération totale pour l'année de cessation: Total compensation for the year of termination Répartition du chiffre d'affaires: Sales breakdown Répondez à quelques questions additionnelles afin de préciser votre résultat.: Answer a few additional questions to clarify your result. Résultat fiscal: Taxable income @@ -311,6 +313,7 @@ Tableau indiquant le nombre de visites par {{period}}.: Table showing the number Tableau présentant le nombre de visites par simulateur et par mois.: Table showing the number of visits per simulator per month. Titres-restaurant: Meal vouchers Total des cotisations et contributions: Total contributions +Total des cotisations à devoir pour l'année de cessation d'activité: Total contributions due for the year of cessation of activity "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, vos points sont transformés en <5>un montant qui s’ajoute chaque mois à votre retraite de base. Cette valeur se calcule sur le long terme. Par exemple, au bout de 10 ans, vous auriez droit à :": "Every year, depending on how much you earn, <2>you earn points that make up your supplementary pension. At the end of your career, your points are @@ -353,6 +356,7 @@ 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 cotisations pour l’année précédente: Your contributions for the previous year Vos droits pour la retraite: Your pension rights Vos prestations santé: Your health benefits Vos revenus: Your income @@ -1235,6 +1239,16 @@ pages: title: "Lawyer: income simulator" shortname: Lawyer title: Income simulator for self-employed lawyers + cessation-activité: + meta: + description: Estimate your contributions for the year in which you cease + self-employed activity. + ogDescription: Estimate your contributions for the year in which you cease + self-employed activity. + ogTitle: "Self-employed : Estimated contributions for the year of cessation" + titre: "Self-employed : Estimated contributions for the year of cessation" + shortname: Cessation of activity + title: "Self-employed : Estimated contributions for the year of cessation" chirurgien-dentiste: meta: description: Calculation of net income after contributions based on total income. diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index e1fa92b7b..62cc920d0 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -74,6 +74,7 @@ Charger plus de résultats: Charger plus de résultats Charges: Charges Chiffre d'affaires: Chiffre d'affaires Chiffre d'affaires estimé: Chiffre d'affaires estimé +Chiffre d'affaires pour l'année de cessation: Chiffre d'affaires pour l'année de cessation Comment ça marche ? Voir la page explicative sur la page du dépôt github, nouvelle fenêtre: Comment ça marche ? Voir la page explicative sur la page du dépôt github, nouvelle fenêtre @@ -278,7 +279,9 @@ Retour à la création: Retour à la création Retour à mon activité: Retour à mon activité Retraite complémentaire: Retraite complémentaire Retraite de base: Retraite de base -Retrouver ma simulation, charger les données de ma précédente simulation.: Retrouver ma simulation, charger les données de ma précédente simulation. +Retrouver ma précédente simulation, charger les données de ma précédente simulation.: + Retrouver ma précédente simulation, charger les données de ma précédente + simulation. Revenu (incluant les dépenses liées à l'activité): Revenu (incluant les dépenses liées à l'activité) Revenu après impôt: Revenu après impôt Revenu avant impôt: Revenu avant impôt @@ -290,6 +293,7 @@ Régime d'imposition: Régime d'imposition Réinitialiser: Réinitialiser Réinitialiser la situation enregistrée: Réinitialiser la situation enregistrée Rémunération brute: Rémunération brute +Rémunération totale pour l'année de cessation: Rémunération totale pour l'année de cessation Répartition du chiffre d'affaires: Répartition du chiffre d'affaires Répondez à quelques questions additionnelles afin de préciser votre résultat.: Répondez à quelques questions additionnelles afin de préciser votre résultat. Résultat fiscal: Résultat fiscal @@ -327,6 +331,7 @@ Tableau indiquant le nombre de visites par {{period}}.: Tableau indiquant le nom Tableau présentant le nombre de visites par simulateur et par mois.: Tableau présentant le nombre de visites par simulateur et par mois. Titres-restaurant: Titres-restaurant Total des cotisations et contributions: Total des cotisations et contributions +Total des cotisations à devoir pour l'année de cessation d'activité: Total des cotisations à devoir pour l'année de cessation d'activité "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, vos points sont transformés en <5>un montant qui s’ajoute chaque mois à votre retraite de base. Cette valeur se calcule sur le long terme. Par exemple, au bout de 10 ans, vous auriez droit à :": "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, @@ -370,6 +375,7 @@ 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 cotisations pour l’année précédente: Vos cotisations pour l’année précédente Vos droits pour la retraite: Vos droits pour la retraite Vos prestations santé: Vos prestations santé Vos revenus: Vos revenus @@ -1311,6 +1317,16 @@ pages: title: "Avocat : simulateur de revenus" shortname: Avocat title: Simulateur de revenus pour avocat en libéral + cessation-activité: + meta: + description: Estimez vos cotisations de l'année de cessation de votre activité + en tant qu’indépendant. + ogDescription: Estimez vos cotisations de l'année de cessation de votre activité + en tant qu’indépendant. + ogTitle: "Indépendants : Estimation des cotisations pour l'année de cessation" + titre: "Indépendants : Estimation des cotisations pour l'année de cessation" + shortname: Cessation d’activité + title: "Indépendants : Estimation des cotisations pour l'année de cessation" chirurgien-dentiste: meta: description: Calcul du revenu net après cotisations à partir du total des recettes. diff --git a/site/source/pages/simulateurs-et-assistants/index.tsx b/site/source/pages/simulateurs-et-assistants/index.tsx index 16f851657..0bc7088ae 100644 --- a/site/source/pages/simulateurs-et-assistants/index.tsx +++ b/site/source/pages/simulateurs-et-assistants/index.tsx @@ -160,7 +160,6 @@ export default function SimulateursEtAssistants() { - + + +
    diff --git a/site/source/pages/simulateurs-et-assistants/metadata-src.ts b/site/source/pages/simulateurs-et-assistants/metadata-src.ts index 6be4040f7..5c756845d 100644 --- a/site/source/pages/simulateurs-et-assistants/metadata-src.ts +++ b/site/source/pages/simulateurs-et-assistants/metadata-src.ts @@ -10,6 +10,7 @@ import { artisteAuteurConfig } from '../simulateurs/artiste-auteur/config' import { autoEntrepreneurConfig } from '../simulateurs/auto-entrepreneur/config' import { auxiliaireMédicalConfig } from '../simulateurs/auxiliaire-médical/config' import { avocatConfig } from '../simulateurs/avocat/config' +import { cessationActivitéConfig } from '../simulateurs/cessation-activité/config' import { chirurgienDentisteConfig } from '../simulateurs/chirurgien-dentiste/config' import { chômagePartielConfig } from '../simulateurs/chômage-partiel/config' import { cipavConfig } from '../simulateurs/cipav/config' @@ -63,6 +64,7 @@ const getMetadataSrc = (params: SimulatorsDataParams) => { ...impôtSociétéConfig(params), ...cipavConfig(params), ...réductionGénéraleConfig(params), + ...cessationActivitéConfig(params), // assistants: ...choixStatutJuridiqueConfig(params), diff --git a/site/source/pages/simulateurs/_configs/config.ts b/site/source/pages/simulateurs/_configs/config.ts index e2597cb9a..312de66d1 100644 --- a/site/source/pages/simulateurs/_configs/config.ts +++ b/site/source/pages/simulateurs/_configs/config.ts @@ -2,11 +2,9 @@ import { ImmutableType } from '@/types/utils' import { PageConfig } from './types' -// Replace type by commented line when we upgrade to typescript v5: -export function config< - // const Base extends ImmutableType - Base extends ImmutableType, ->(base: ImmutableType & Base) { +export function config>( + base: ImmutableType & Base +) { return { [base.id]: base, } as ImmutableType<{ [k in Base['id']]: Base }> diff --git a/site/source/pages/simulateurs/auxiliaire-médical/config.ts b/site/source/pages/simulateurs/auxiliaire-médical/config.ts index 442008ba1..28fa47c0d 100644 --- a/site/source/pages/simulateurs/auxiliaire-médical/config.ts +++ b/site/source/pages/simulateurs/auxiliaire-médical/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configAuxiliaire } from '../profession-libérale/simulationConfig' export function auxiliaireMédicalConfig({ diff --git a/site/source/pages/simulateurs/avocat/config.ts b/site/source/pages/simulateurs/avocat/config.ts index 49db13e56..11d3b82bb 100644 --- a/site/source/pages/simulateurs/avocat/config.ts +++ b/site/source/pages/simulateurs/avocat/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configAvocat } from '../profession-libérale/simulationConfig' export function avocatConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/pages/simulateurs/cessation-activité/CessationActivité.tsx b/site/source/pages/simulateurs/cessation-activité/CessationActivité.tsx new file mode 100644 index 000000000..9c82a0717 --- /dev/null +++ b/site/source/pages/simulateurs/cessation-activité/CessationActivité.tsx @@ -0,0 +1,47 @@ +import { useTranslation } from 'react-i18next' +import { useSelector } from 'react-redux' + +import SimulateurWarning from '@/components/SimulateurWarning' +import Simulation from '@/components/Simulation' +import { useParamsFromSituation } from '@/components/utils/useSearchParamsSimulationSharing' +import useSimulatorsData from '@/hooks/useSimulatorsData' +import { useSiteUrl } from '@/hooks/useSiteUrl' +import { CessationActivitéGoals } from '@/pages/simulateurs/cessation-activité/Goals' +import { + companySituationSelector, + situationSelector, + targetUnitSelector, +} from '@/store/selectors/simulationSelectors' +import { omit } from '@/utils' + +export const CessationActivitéSimulation = () => { + const situation = { + ...useSelector(situationSelector), + ...useSelector(companySituationSelector), + } + const targetUnit = useSelector(targetUnitSelector) + const filteredSituation = omit(situation, 'entreprise . date de radiation') + + const searchParams = useParamsFromSituation(filteredSituation, targetUnit) + + const path = useSimulatorsData().indépendant.path + + const lien = useSiteUrl() + path + '?' + searchParams.toString() + + const { t } = useTranslation() + + return ( + + Warning} + /> + + + ) +} diff --git a/site/source/pages/simulateurs/cessation-activité/Goals.tsx b/site/source/pages/simulateurs/cessation-activité/Goals.tsx new file mode 100644 index 000000000..85865fee0 --- /dev/null +++ b/site/source/pages/simulateurs/cessation-activité/Goals.tsx @@ -0,0 +1,60 @@ +import { useTranslation } from 'react-i18next' + +import ChiffreAffairesActivitéMixte from '@/components/ChiffreAffairesActivitéMixte' +import { Condition } from '@/components/EngineValue/Condition' +import { SimulationGoal, SimulationGoals } from '@/components/Simulation' +import { CessationActivitéToggles } from '@/pages/simulateurs/cessation-activité/Toggles' + +export const CessationActivitéGoals = () => { + const { t } = useTranslation() + + return ( + } + > + + + + + + + + + + + + + + + + + + + + + ) +} diff --git a/site/source/pages/simulateurs/cessation-activité/Toggles.tsx b/site/source/pages/simulateurs/cessation-activité/Toggles.tsx new file mode 100644 index 000000000..f00e10f6e --- /dev/null +++ b/site/source/pages/simulateurs/cessation-activité/Toggles.tsx @@ -0,0 +1,70 @@ +import { DottedName } from 'modele-social' +import { useDispatch } from 'react-redux' + +import { DefaultValue } from '@/components/conversation/DefaultValue' +import { ExplicableRule } from '@/components/conversation/Explicable' +import RuleInput from '@/components/conversation/RuleInput' +import { useEngine } from '@/components/utils/EngineContext' +import { H3 } from '@/design-system/typography/heading' +import { SimpleRuleEvaluation } from '@/domaine/engine/SimpleRuleEvaluation' +import { ajusteLaSituation } from '@/store/actions/actions' +import { evaluateQuestion } from '@/utils/publicodes' + +export const CessationActivitéToggles = () => { + const dispatch = useDispatch() + const engine = useEngine() + + return ( +
    +
    +

    + {evaluateQuestion( + engine, + engine.getRule('entreprise . date de radiation') + )} + +

    + { + dispatch( + ajusteLaSituation({ + 'entreprise . date de radiation': date, + } as Record) + ) + }} + /> + +
    + + { + dispatch( + ajusteLaSituation({ + 'entreprise . imposition': imposition, + } as Record) + ) + }} + /> +
    + ) +} diff --git a/site/source/pages/simulateurs/cessation-activité/config.ts b/site/source/pages/simulateurs/cessation-activité/config.ts new file mode 100644 index 000000000..048ac209c --- /dev/null +++ b/site/source/pages/simulateurs/cessation-activité/config.ts @@ -0,0 +1,48 @@ +import { SimulatorsDataParams } from '@/pages/simulateurs/_configs/types' +import { CessationActivitéSimulation } from '@/pages/simulateurs/cessation-activité/CessationActivité' +import { configCessationActivité } from '@/pages/simulateurs/cessation-activité/simulationConfig' + +import { config } from '../_configs/config' + +export function cessationActivitéConfig({ + t, + sitePaths, +}: SimulatorsDataParams) { + return config({ + id: 'cessation-activité', + tracking: 'cessation_activité', + icône: '📦', + iframePath: 'simulateur-cessation-activité', + pathId: 'simulateurs.cessation-activité', + shortName: t( + 'pages.simulateurs.cessation-activité.shortname', + 'Cessation d’activité' + ), + title: t( + 'pages.simulateurs.cessation-activité.title', + "Indépendants : Cotisations pour l'année de cessation" + ), + meta: { + description: t( + 'pages.simulateurs.cessation-activité.meta.description', + "Estimez vos cotisations de l'année de cessation de votre activité en tant qu’indépendant." + ), + ogDescription: t( + 'pages.simulateurs.cessation-activité.meta.ogDescription', + "Estimez vos cotisations de l'année de cessation de votre activité en tant qu’indépendant." + ), + ogTitle: t( + 'pages.simulateurs.cessation-activité.meta.ogTitle', + "Indépendants : Cotisations pour l'année de cessation" + ), + title: t( + 'pages.simulateurs.cessation-activité.meta.titre', + "Indépendants : Cotisations pour l'année de cessation" + ), + }, + nextSteps: ['indépendant'], + path: sitePaths.simulateurs['cessation-activité'], + simulation: configCessationActivité, + component: CessationActivitéSimulation, + } as const) +} diff --git a/site/source/pages/simulateurs/cessation-activité/simulationConfig.ts b/site/source/pages/simulateurs/cessation-activité/simulationConfig.ts new file mode 100644 index 000000000..db2f3c867 --- /dev/null +++ b/site/source/pages/simulateurs/cessation-activité/simulationConfig.ts @@ -0,0 +1,7 @@ +import { SimulationConfig } from '@/pages/simulateurs/_configs/types' +import { configIndépendant } from '@/pages/simulateurs/indépendant/simulationConfig' + +export const configCessationActivité: SimulationConfig = { + ...configIndépendant, + 'unité par défaut': '€/an', +} diff --git a/site/source/pages/simulateurs/chirurgien-dentiste/config.ts b/site/source/pages/simulateurs/chirurgien-dentiste/config.ts index 40f89297a..1c5511b87 100644 --- a/site/source/pages/simulateurs/chirurgien-dentiste/config.ts +++ b/site/source/pages/simulateurs/chirurgien-dentiste/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configDentiste } from '../profession-libérale/simulationConfig' export function chirurgienDentisteConfig({ diff --git a/site/source/pages/simulateurs/cipav/config.tsx b/site/source/pages/simulateurs/cipav/config.tsx index 41248ff8c..a47ea33a4 100644 --- a/site/source/pages/simulateurs/cipav/config.tsx +++ b/site/source/pages/simulateurs/cipav/config.tsx @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import cipavSimulationConfig from './simulationConfig' export function cipavConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/pages/simulateurs/entreprise-individuelle/config.ts b/site/source/pages/simulateurs/entreprise-individuelle/config.ts index 3b9ce2dd1..6a5a5227d 100644 --- a/site/source/pages/simulateurs/entreprise-individuelle/config.ts +++ b/site/source/pages/simulateurs/entreprise-individuelle/config.ts @@ -1,10 +1,9 @@ +import { EntrepriseIndividuelle } from '@/pages/simulateurs/indépendant/EntrepriseIndividuelle' +import { SeoExplanationsEI } from '@/pages/simulateurs/indépendant/SeoExplanationsEI' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' import AutoEntrepreneurPreview from '../_images/AutoEntrepreneurPreview.png' -import { - EntrepriseIndividuelle, - SeoExplanationsEI, -} from '../indépendant/Indépendant' import { configEntrepriseIndividuelle } from '../indépendant/simulationConfig' export function entrepriseIndividuelleConfig({ diff --git a/site/source/pages/simulateurs/expert-comptable/config.ts b/site/source/pages/simulateurs/expert-comptable/config.ts index e9140fc52..f2237dc4d 100644 --- a/site/source/pages/simulateurs/expert-comptable/config.ts +++ b/site/source/pages/simulateurs/expert-comptable/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configExpertComptable } from '../profession-libérale/simulationConfig' export function expertComptableConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/pages/simulateurs/indépendant/EntrepriseIndividuelle.tsx b/site/source/pages/simulateurs/indépendant/EntrepriseIndividuelle.tsx new file mode 100644 index 000000000..1f7a8590d --- /dev/null +++ b/site/source/pages/simulateurs/indépendant/EntrepriseIndividuelle.tsx @@ -0,0 +1,17 @@ +import { SelectSimulationYear } from '@/components/SelectSimulationYear' +import SimulateurWarning from '@/components/SimulateurWarning' +import Simulation from '@/components/Simulation' +import IndépendantExplanation from '@/components/simulationExplanation/IndépendantExplanation' +import { IndépendantSimulationGoals } from '@/pages/simulateurs/indépendant/Goals' + +export const EntrepriseIndividuelle = () => ( + <> + } + afterQuestionsSlot={} + > + + + + +) diff --git a/site/source/pages/simulateurs/indépendant/Goals.tsx b/site/source/pages/simulateurs/indépendant/Goals.tsx new file mode 100644 index 000000000..1ad1d6efb --- /dev/null +++ b/site/source/pages/simulateurs/indépendant/Goals.tsx @@ -0,0 +1,53 @@ +import ChiffreAffairesActivitéMixte from '@/components/ChiffreAffairesActivitéMixte' +import { Condition } from '@/components/EngineValue/Condition' +import PeriodSwitch from '@/components/PeriodSwitch' +import { SimulationGoal, SimulationGoals } from '@/components/Simulation' + +export const IndépendantSimulationGoals = ({ + toggles = , + legend, +}: { + toggles?: React.ReactNode + legend: string +}) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + +) diff --git a/site/source/pages/simulateurs/indépendant/Indépendant.tsx b/site/source/pages/simulateurs/indépendant/Indépendant.tsx index e2452fb9b..b84d0ecf6 100644 --- a/site/source/pages/simulateurs/indépendant/Indépendant.tsx +++ b/site/source/pages/simulateurs/indépendant/Indépendant.tsx @@ -1,19 +1,14 @@ +import { useDispatch } from 'react-redux' import { DottedName } from 'modele-social' import { Trans } from 'react-i18next' -import { useDispatch } from 'react-redux' -import ChiffreAffairesActivitéMixte from '@/components/ChiffreAffairesActivitéMixte' import RuleInput from '@/components/conversation/RuleInput' -import { Condition } from '@/components/EngineValue/Condition' import PeriodSwitch from '@/components/PeriodSwitch' -import RuleLink from '@/components/RuleLink' import { SelectSimulationYear } from '@/components/SelectSimulationYear' import SimulateurWarning from '@/components/SimulateurWarning' -import Simulation, { - SimulationGoal, - SimulationGoals, -} from '@/components/Simulation' +import Simulation from '@/components/Simulation' import IndépendantExplanation from '@/components/simulationExplanation/IndépendantExplanation' +import { IndépendantSimulationGoals } from '@/pages/simulateurs/indépendant/Goals' import { Message } from '@/design-system' import { Emoji } from '@/design-system/emoji' import { H2 } from '@/design-system/typography/heading' @@ -21,101 +16,6 @@ import { Body } from '@/design-system/typography/paragraphs' import { SimpleRuleEvaluation } from '@/domaine/engine/SimpleRuleEvaluation' import { ajusteLaSituation } from '@/store/actions/actions' -export function IndépendantPLSimulation() { - return ( - <> - } - afterQuestionsSlot={} - > - - - - - ) -} - -export function EntrepriseIndividuelle() { - return ( - <> - } - afterQuestionsSlot={} - > - - - - - ) -} - -export const SeoExplanationsEI = () => ( - -

    - Comment calculer le revenu net d'un dirigeant d'entreprise individuelle - (EI) ? -

    - - Un dirigeant d'entreprise individuelle doit payer des cotisations et - contributions sociales à l'administration. Ces cotisations servent au - financement de la sécurité sociale, et ouvrent des droits notamment pour - la retraite et pour l'assurance maladie. Elles permettent également de - financer la formation professionnelle. - - - {' '} - - Voir le détail du calcul des cotisations - - - - Il ne faut pas oublier de retrancher toutes les dépenses effectuées dans - le cadre de l'activité professionnelle (équipements, matières premières, - local, transport). Ces dernières sont déductibles du résultat de - l'entreprise, cela veut dire que vous ne payerez pas d'impôt ou de - cotisations sur leur montant (sauf si vous avez opté pour l'option - micro-fiscal). - - La formule de calcul complète est donc : - - Revenu net = Chiffres d'affaires − Dépenses professionnelles - Cotisations - sociales - -

    - Comment calculer les cotisations sociales d'une entreprise individuelle ? -

    - - Le dirigeant d'une entreprise individuelle paye des cotisations sociales, - proportionnelle au{' '} - - résultat fiscal - {' '} - de l'entreprise. Leur montant varie également en fonction du type - d'activité (profession libérale, artisan, commerçants, etc), où des - éventuelles exonérations accordées (ACRE, ZFU, RSA, etc.). - - - {' '} - Comme le résultat d'une entreprise n'est connu qu'à la fin de l'exercice - comptable, le dirigeant paye des cotisations provisionnelles qui seront - ensuite régularisée une fois le revenu réel déclaré, l'année suivante. - - - Ce simulateur permet de calculer le montant exact des cotisations sociale - en partant d'un chiffre d'affaires ou d'un revenu net souhaité. Vous - pourrez préciser votre situation en répondant aux questions s'affichant en - dessous de la simulation. - -
    -) - export default function IndépendantSimulation() { const dispatch = useDispatch() @@ -151,58 +51,3 @@ export default function IndépendantSimulation() { ) } - -function IndépendantSimulationGoals({ - toggles = , - legend, -}: { - toggles?: React.ReactNode - legend: string -}) { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - ) -} diff --git a/site/source/pages/simulateurs/indépendant/IndépendantPLSimulation.tsx b/site/source/pages/simulateurs/indépendant/IndépendantPLSimulation.tsx new file mode 100644 index 000000000..fe23fed12 --- /dev/null +++ b/site/source/pages/simulateurs/indépendant/IndépendantPLSimulation.tsx @@ -0,0 +1,17 @@ +import { SelectSimulationYear } from '@/components/SelectSimulationYear' +import SimulateurWarning from '@/components/SimulateurWarning' +import Simulation from '@/components/Simulation' +import IndépendantExplanation from '@/components/simulationExplanation/IndépendantExplanation' +import { IndépendantSimulationGoals } from '@/pages/simulateurs/indépendant/Goals' + +export const IndépendantPLSimulation = () => ( + <> + } + afterQuestionsSlot={} + > + + + + +) diff --git a/site/source/pages/simulateurs/indépendant/SeoExplanationsEI.tsx b/site/source/pages/simulateurs/indépendant/SeoExplanationsEI.tsx new file mode 100644 index 000000000..37f9a2f6c --- /dev/null +++ b/site/source/pages/simulateurs/indépendant/SeoExplanationsEI.tsx @@ -0,0 +1,74 @@ +import { Trans } from 'react-i18next' + +import RuleLink from '@/components/RuleLink' +import { Message } from '@/design-system' +import { Emoji } from '@/design-system/emoji' +import { H2 } from '@/design-system/typography/heading' +import { Body } from '@/design-system/typography/paragraphs' + +export const SeoExplanationsEI = () => ( + +

    + Comment calculer le revenu net d'un dirigeant d'entreprise individuelle + (EI) ? +

    + + Un dirigeant d'entreprise individuelle doit payer des cotisations et + contributions sociales à l'administration. Ces cotisations servent au + financement de la sécurité sociale, et ouvrent des droits notamment pour + la retraite et pour l'assurance maladie. Elles permettent également de + financer la formation professionnelle. + + + {' '} + + Voir le détail du calcul des cotisations + + + + Il ne faut pas oublier de retrancher toutes les dépenses effectuées dans + le cadre de l'activité professionnelle (équipements, matières premières, + local, transport). Ces dernières sont déductibles du résultat de + l'entreprise, cela veut dire que vous ne payerez pas d'impôt ou de + cotisations sur leur montant (sauf si vous avez opté pour l'option + micro-fiscal). + + La formule de calcul complète est donc : + + Revenu net = Chiffres d'affaires − Dépenses professionnelles - Cotisations + sociales + +

    + Comment calculer les cotisations sociales d'une entreprise individuelle ? +

    + + Le dirigeant d'une entreprise individuelle paye des cotisations sociales, + proportionnelle au{' '} + + résultat fiscal + {' '} + de l'entreprise. Leur montant varie également en fonction du type + d'activité (profession libérale, artisan, commerçants, etc), où des + éventuelles exonérations accordées (ACRE, ZFU, RSA, etc.). + + + {' '} + Comme le résultat d'une entreprise n'est connu qu'à la fin de l'exercice + comptable, le dirigeant paye des cotisations provisionnelles qui seront + ensuite régularisée une fois le revenu réel déclaré, l'année suivante. + + + Ce simulateur permet de calculer le montant exact des cotisations sociale + en partant d'un chiffre d'affaires ou d'un revenu net souhaité. Vous + pourrez préciser votre situation en répondant aux questions s'affichant en + dessous de la simulation. + +
    +) diff --git a/site/source/pages/simulateurs/médecin/config.ts b/site/source/pages/simulateurs/médecin/config.ts index e77fff3aa..b816b37f5 100644 --- a/site/source/pages/simulateurs/médecin/config.ts +++ b/site/source/pages/simulateurs/médecin/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configMédecin } from '../profession-libérale/simulationConfig' export function médecinConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/pages/simulateurs/pharmacien/config.ts b/site/source/pages/simulateurs/pharmacien/config.ts index 7e0490a92..5912298fc 100644 --- a/site/source/pages/simulateurs/pharmacien/config.ts +++ b/site/source/pages/simulateurs/pharmacien/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configPharmacien } from '../profession-libérale/simulationConfig' export function pharmacienConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/pages/simulateurs/profession-libérale/config.ts b/site/source/pages/simulateurs/profession-libérale/config.ts index 5ee9621d9..5f3759853 100644 --- a/site/source/pages/simulateurs/profession-libérale/config.ts +++ b/site/source/pages/simulateurs/profession-libérale/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configProfessionLibérale } from './simulationConfig' export function professionLibéraleConfig({ diff --git a/site/source/pages/simulateurs/sage-femme/config.ts b/site/source/pages/simulateurs/sage-femme/config.ts index e4764fb7a..d5e785cd4 100644 --- a/site/source/pages/simulateurs/sage-femme/config.ts +++ b/site/source/pages/simulateurs/sage-femme/config.ts @@ -1,6 +1,7 @@ +import { IndépendantPLSimulation } from '@/pages/simulateurs/indépendant/IndépendantPLSimulation' + import { config } from '../_configs/config' import { SimulatorsDataParams } from '../_configs/types' -import { IndépendantPLSimulation } from '../indépendant/Indépendant' import { configSageFemme } from '../profession-libérale/simulationConfig' export function sageFemmeConfig({ t, sitePaths }: SimulatorsDataParams) { diff --git a/site/source/sitePaths.ts b/site/source/sitePaths.ts index 1558067a1..b430f0e56 100644 --- a/site/source/sitePaths.ts +++ b/site/source/sitePaths.ts @@ -73,6 +73,7 @@ const rawSitePathsFr = { is: 'impot-societe', dividendes: 'dividendes', 'réduction-générale': 'réduction-générale', + 'cessation-activité': 'cessation-activité', }, nouveautés: { index: 'nouveautés', @@ -172,6 +173,7 @@ const rawSitePathsEn = { is: 'corporate-tax', dividendes: 'dividends', 'réduction-générale': 'réduction-générale', + 'cessation-activité': 'cessation-of-activity', }, nouveautés: { index: 'news',