From eda803b8df3296d49433c68a37802836305265a2 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 23 Sep 2020 18:41:55 +0200 Subject: [PATCH 1/2] =?UTF-8?q?:sparkles:=20Ajoute=20les=20simulateurs=20p?= =?UTF-8?q?rofessionnels=20de=20sant=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Refacto la page de présentation des simulateurs - Ajoute un objet de description des simulateurs existant (qui permet de boostraper un nouveau simulateur très rapidement) --- .../mon-entreprise/demande-mobilité.js | 8 +- .../integration/mon-entreprise/gérer.js | 2 +- mon-entreprise/scripts/fetch-stats.js | 22 +- .../source/components/Notifications.tsx | 1 + .../source/components/SchemeComparaison.tsx | 2 +- .../source/components/Simulation.tsx | 22 +- .../source/components/StackedBarChart.tsx | 1 - .../AutoEntrepreneurExplanation.tsx | 47 ++ .../IndépendantExplanation.tsx | 34 + .../SalaryExplanation.tsx | 0 mon-entreprise/source/components/ui/Card.css | 18 +- mon-entreprise/source/locales/rules-en.yaml | 20 +- mon-entreprise/source/locales/ui-en.yaml | 274 +++++-- mon-entreprise/source/rules/dirigeant.yaml | 8 + .../source/rules/profession-libérale.yaml | 55 +- .../iframe-integration-script.js | 2 +- .../pages/Dev/IntegrationTest.tsx | 25 +- .../AideDéclarationIndépendant/index.tsx | 2 +- .../pages/Gérer/DemandeMobilite/index.tsx | 2 +- .../pages/Iframes/SimulateurEmbauche.tsx | 16 - .../mon-entreprise.fr/pages/Iframes/index.tsx | 61 +- .../pages/Simulateurs/ArtisteAuteur.tsx | 24 +- .../pages/Simulateurs/AutoEntrepreneur.tsx | 172 ----- .../pages/Simulateurs/ChômagePartiel.tsx | 93 +-- .../pages/Simulateurs/Home.tsx | 261 ++++--- .../pages/Simulateurs/Indépendant.tsx | 76 -- .../Simulateurs/IndépendantSimulation.tsx | 12 + .../pages/Simulateurs/Page.tsx | 34 + .../pages/Simulateurs/ProfessionLibérale.tsx | 135 ---- .../pages/Simulateurs/RémunérationSASU.tsx | 98 --- .../pages/Simulateurs/Salarié.tsx | 168 ----- .../pages/Simulateurs/SalariéSimulation.tsx | 46 ++ .../pages/Simulateurs/SchemeComparaison.tsx | 23 - .../Simulateurs/configs}/artiste-auteur.yaml | 0 .../configs}/auto-entrepreneur.yaml | 0 .../Simulateurs/configs}/chômage-partiel.yaml | 0 .../Simulateurs/configs/dirigeant-sasu.yaml} | 0 .../Simulateurs/configs}/indépendant.yaml | 0 .../configs}/profession-libérale.yaml | 0 .../configs}/rémunération-dirigeant.yaml | 0 .../pages/Simulateurs/configs}/salarié.yaml | 0 .../images/illustration-simulateur.svg | 1 + .../pages/Simulateurs/index.tsx | 59 +- .../pages/Simulateurs/metadata.tsx | 667 ++++++++++++++++++ .../ActivitésSelection.tsx | 3 - .../mon-entreprise.fr/pages/Stats/Stats.tsx | 12 +- .../pages/integration/Iframe.tsx | 12 +- .../sites/mon-entreprise.fr/sitePaths.ts | 15 +- .../__snapshots__/simulations.jest.js.snap | 40 +- .../test/regressions/simulations.jest.js | 10 +- 50 files changed, 1409 insertions(+), 1174 deletions(-) create mode 100644 mon-entreprise/source/components/simulationExplanation/AutoEntrepreneurExplanation.tsx create mode 100644 mon-entreprise/source/components/simulationExplanation/IndépendantExplanation.tsx rename mon-entreprise/source/components/{ => simulationExplanation}/SalaryExplanation.tsx (100%) delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/SimulateurEmbauche.tsx delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx create mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/IndépendantSimulation.tsx create mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Page.tsx delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ProfessionLibérale.tsx delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/RémunérationSASU.tsx delete mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx create mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SalariéSimulation.tsx rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/artiste-auteur.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/auto-entrepreneur.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/chômage-partiel.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs/assimilé.yaml => sites/mon-entreprise.fr/pages/Simulateurs/configs/dirigeant-sasu.yaml} (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/indépendant.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/profession-libérale.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/rémunération-dirigeant.yaml (100%) rename mon-entreprise/source/{components/simulationConfigs => sites/mon-entreprise.fr/pages/Simulateurs/configs}/salarié.yaml (100%) create mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/images/illustration-simulateur.svg create mode 100644 mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/metadata.tsx diff --git a/mon-entreprise/cypress/integration/mon-entreprise/demande-mobilité.js b/mon-entreprise/cypress/integration/mon-entreprise/demande-mobilité.js index dacd78f54..54d4b3919 100644 --- a/mon-entreprise/cypress/integration/mon-entreprise/demande-mobilité.js +++ b/mon-entreprise/cypress/integration/mon-entreprise/demande-mobilité.js @@ -25,13 +25,13 @@ describe('Formulaire demande mobilité', function() { .type('1991-07-25') .tab() .type('Pouts') - .wait(1000) + .wait(1500) .type('{enter}') .tab() .type('3 rue de la Rhumerie') .tab() .type('Brest') - .wait(1000) + .wait(1500) .type('{enter}') .tab() .type('jean.deaux@gmail.com') @@ -46,7 +46,7 @@ describe('Formulaire demande mobilité', function() { .type('14 chemin des Docks') .tab() .type('Bre') - .wait(1000) + .wait(1500) cy.contains('29240').click() cy.contains('Organisme Urssaf').click() cy.focused() @@ -67,7 +67,7 @@ describe('Formulaire demande mobilité', function() { .next() .click() cy.get('label[for="détachement . pays"]') - .wait(1000) + .wait(1500) .click() cy.focused() .select('Irlande') diff --git a/mon-entreprise/cypress/integration/mon-entreprise/gérer.js b/mon-entreprise/cypress/integration/mon-entreprise/gérer.js index 1dd99fb36..f117c35d2 100644 --- a/mon-entreprise/cypress/integration/mon-entreprise/gérer.js +++ b/mon-entreprise/cypress/integration/mon-entreprise/gérer.js @@ -37,6 +37,6 @@ describe('Manage page test', function() { }) it('should be able to navigate to the hiring simulator', function() { cy.contains(fr ? 'une embauche' : 'hiring').click() - cy.contains(fr ? 'salarié' : 'employees') + cy.contains(fr ? 'salarié' : 'employee') }) }) diff --git a/mon-entreprise/scripts/fetch-stats.js b/mon-entreprise/scripts/fetch-stats.js index 79fc305ce..ce45c6f65 100644 --- a/mon-entreprise/scripts/fetch-stats.js +++ b/mon-entreprise/scripts/fetch-stats.js @@ -125,7 +125,8 @@ async function fetchSimulators(dt) { '/comparaison-régimes-sociaux', '/dirigeant-sasu', '/aide-declaration-independants', - '/demande-mobilité' + '/demande-mobilité', + '/économie-collaborative' ].includes(label) ) @@ -155,9 +156,13 @@ async function fetchSimulators(dt) { const dataIframes = await responseIframes.json() const resultIframes = dataIframes.filter(x => [ - '/simulateur-embauche?couleur=', - '/simulateur-autoentrepreneur?couleur=' - ].includes(x.label) + '/simulateur-embauche', + '/simulateur-autoentrepreneur', + '/simulateur-assimilesalarie', + '/simulateur-artiste-auteur', + '/simulateur-independant', + '/demande-mobilite' + ].some(path => x.label.startsWith(path)) ) const groupSimulateursIframesVisits = ({ label }) => @@ -168,8 +173,15 @@ async function fetchSimulators(dt) { ? '/salaire-brut-net' : label.startsWith('/simulateur-autoentrepreneur') ? '/auto-entrepreneur' - : label.startsWith('/assimilé-salarié') + : label.startsWith('/assimilé-salarié') || + label.startsWith('/simulateur-assimilesalarie') ? '/dirigeant-sasu' + : label.startsWith('/simulateur-independant') + ? '/indépendant' + : label.startsWith('/simulateur-artiste-auteur') + ? '/artiste-auteur' + : label.startsWith('/demande-mobilite') + ? '/demande-mobilité' : label const sumVisits = (acc, { nb_visits }) => acc + nb_visits diff --git a/mon-entreprise/source/components/Notifications.tsx b/mon-entreprise/source/components/Notifications.tsx index f184cedfe..a627304ae 100644 --- a/mon-entreprise/source/components/Notifications.tsx +++ b/mon-entreprise/source/components/Notifications.tsx @@ -31,6 +31,7 @@ export default function Notifications() { engine.evaluate(notification.dottedName).isApplicable ) ) + console.log(notifications.map(n => engine.evaluate(n.dottedName))) const inversionFail = useInversionFail() const hiddenNotifications = useSelector( diff --git a/mon-entreprise/source/components/SchemeComparaison.tsx b/mon-entreprise/source/components/SchemeComparaison.tsx index a03a35c8f..e8de1335b 100644 --- a/mon-entreprise/source/components/SchemeComparaison.tsx +++ b/mon-entreprise/source/components/SchemeComparaison.tsx @@ -7,7 +7,7 @@ import classnames from 'classnames' import Conversation from 'Components/conversation/Conversation' import SeeAnswersButton from 'Components/conversation/SeeAnswersButton' import Value from 'Components/EngineValue' -import dirigeantComparaison from 'Components/simulationConfigs/rémunération-dirigeant.yaml' +import dirigeantComparaison from '../sites/mon-entreprise.fr/pages/Simulateurs/configs/rémunération-dirigeant.yaml' import Engine from 'publicodes' import revenusSVG from 'Images/revenus.svg' import { diff --git a/mon-entreprise/source/components/Simulation.tsx b/mon-entreprise/source/components/Simulation.tsx index 3e6676669..f5a0c7b9e 100644 --- a/mon-entreprise/source/components/Simulation.tsx +++ b/mon-entreprise/source/components/Simulation.tsx @@ -1,24 +1,20 @@ -import { setSimulationConfig } from 'Actions/actions' -import Notifications from 'Components/Notifications' import Conversation, { ConversationProps } from 'Components/conversation/Conversation' import SeeAnswersButton from 'Components/conversation/SeeAnswersButton' import PageFeedback from 'Components/Feedback/PageFeedback' +import Notifications from 'Components/Notifications' import SearchButton from 'Components/SearchButton' import TargetSelection from 'Components/TargetSelection' -import { useSimulationProgress } from 'Components/utils/useNextQuestion' -import React, { useEffect } from 'react' -import { Trans } from 'react-i18next' -import { useDispatch, useSelector } from 'react-redux' -import { useLocation } from 'react-router' -import { SimulationConfig } from 'Reducers/rootReducer' -import { firstStepCompletedSelector } from 'Selectors/simulationSelectors' import * as Animate from 'Components/ui/animate' import Progress from 'Components/ui/Progress' +import { useSimulationProgress } from 'Components/utils/useNextQuestion' +import React from 'react' +import { Trans } from 'react-i18next' +import { useSelector } from 'react-redux' +import { firstStepCompletedSelector } from 'Selectors/simulationSelectors' type SimulationProps = { - config: SimulationConfig explanations?: React.ReactNode results?: React.ReactNode customEndMessages?: ConversationProps['customEndMessages'] @@ -26,17 +22,11 @@ type SimulationProps = { } export default function Simulation({ - config, explanations, results, customEndMessages, showPeriodSwitch }: SimulationProps) { - const dispatch = useDispatch() - const location = useLocation<{ fromGérer?: boolean }>() - useEffect(() => { - dispatch(setSimulationConfig(config, location.state?.fromGérer)) - }, [config]) const firstStepCompleted = useSelector(firstStepCompletedSelector) return ( <> diff --git a/mon-entreprise/source/components/StackedBarChart.tsx b/mon-entreprise/source/components/StackedBarChart.tsx index 967289eca..10cf9947e 100644 --- a/mon-entreprise/source/components/StackedBarChart.tsx +++ b/mon-entreprise/source/components/StackedBarChart.tsx @@ -5,7 +5,6 @@ import React from 'react' import { animated, useSpring } from 'react-spring' import { DottedName } from 'Rules' import styled from 'styled-components' -import { capitalise0 } from '../utils' const BarStack = styled.div` display: flex; diff --git a/mon-entreprise/source/components/simulationExplanation/AutoEntrepreneurExplanation.tsx b/mon-entreprise/source/components/simulationExplanation/AutoEntrepreneurExplanation.tsx new file mode 100644 index 000000000..539f60331 --- /dev/null +++ b/mon-entreprise/source/components/simulationExplanation/AutoEntrepreneurExplanation.tsx @@ -0,0 +1,47 @@ +import StackedBarChart from 'Components/StackedBarChart' +import { ThemeColorsContext } from 'Components/utils/colors' +import { EngineContext } from 'Components/utils/EngineContext' +import { default as React, useContext } from 'react' +import { Trans, useTranslation } from 'react-i18next' +import { useSelector } from 'react-redux' +import { targetUnitSelector } from 'Selectors/simulationSelectors' + +export default function AutoEntrepreneurExplanation() { + const engine = useContext(EngineContext) + const { t } = useTranslation() + const { palettes } = useContext(ThemeColorsContext) + const targetUnit = useSelector(targetUnitSelector) + const impôt = engine.evaluate('impôt', { unit: targetUnit }) + + return ( +
+

+ Répartition du chiffre d'affaires +

+ +
+ ) +} diff --git a/mon-entreprise/source/components/simulationExplanation/IndépendantExplanation.tsx b/mon-entreprise/source/components/simulationExplanation/IndépendantExplanation.tsx new file mode 100644 index 000000000..ca838e994 --- /dev/null +++ b/mon-entreprise/source/components/simulationExplanation/IndépendantExplanation.tsx @@ -0,0 +1,34 @@ +import StackedBarChart from 'Components/StackedBarChart' +import { ThemeColorsContext } from 'Components/utils/colors' +import { EngineContext } from 'Components/utils/EngineContext' +import { default as React, useContext } from 'react' +import { useTranslation } from 'react-i18next' + +export default function IndépendantExplanation() { + const engine = useContext(EngineContext) + const { t } = useTranslation() + const { palettes } = useContext(ThemeColorsContext) + + return ( +
+

Répartition de la rémunération totale

+ +
+ ) +} diff --git a/mon-entreprise/source/components/SalaryExplanation.tsx b/mon-entreprise/source/components/simulationExplanation/SalaryExplanation.tsx similarity index 100% rename from mon-entreprise/source/components/SalaryExplanation.tsx rename to mon-entreprise/source/components/simulationExplanation/SalaryExplanation.tsx diff --git a/mon-entreprise/source/components/ui/Card.css b/mon-entreprise/source/components/ui/Card.css index 8bdd3737c..65ae56f0b 100644 --- a/mon-entreprise/source/components/ui/Card.css +++ b/mon-entreprise/source/components/ui/Card.css @@ -9,6 +9,10 @@ border-radius: 0.3rem; transition: box-shadow 0.2s; } +.ui__.card.small { + padding-left: 0.5rem; + padding-right: 0.5rem; +} .ui__.card.disabled .ui__.button.simple, .ui__.card.disabled a { @@ -108,15 +112,21 @@ color: inherit; font-size: inherit !important; } + +.ui__.card.box.small { + padding-top: 0.5rem; + margin: 0.5rem; + min-width: 10rem; + padding-bottom: 0.5rem; +} .ui__.card.box .ui__.box-icon > img { - margin: 0.8rem !important; - transform: scale(1.5) translateY(0.1rem); -} -.ui__.card.box:active .ui__.box-icon > img { + margin: 0.4rem !important; transform: scale(1.5) translateY(0.1rem); } + .ui__.card.box .ui__.big.box-icon > img { transform: scale(2.3) translateY(0.2rem); + margin: 0.8rem !important; } .ui__.card.box.inverted-colors { diff --git a/mon-entreprise/source/locales/rules-en.yaml b/mon-entreprise/source/locales/rules-en.yaml index e63ec15bd..4899cd41e 100644 --- a/mon-entreprise/source/locales/rules-en.yaml +++ b/mon-entreprise/source/locales/rules-en.yaml @@ -3787,6 +3787,18 @@ dirigeant . auto-entrepreneur . net de cotisations: résumé.fr: Avant impôt titre.en: Net contribution income titre.fr: Revenu net de cotisations +dirigeant . auto-entrepreneur . notification valeur annuelle: + description.en: > + [automatic] The ACRE rate used is the one corresponding to the current + month. The + + simulator does not yet take into account the overlap of 2 periods + + of an acre in a single year. + description.fr: | + Le taux ACRE utilisé est celui correspondant au mois courant. Le + simulateur ne prends pas encore en compte le chevauchement de 2 période + d'acre sur une meme année. dirigeant . auto-entrepreneur . plafond: description.en: > The status of microentrepreneur applies as long as the annual turnover @@ -3942,12 +3954,18 @@ dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . exonération PCV de cotisation pour la prestation complémentaire de vieillesse (PCV) si vous en faites la demande. [En savoir plus](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations) -? dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . exonération PCV . prix d'une consultation +? dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . prix d'une consultation : titre.en: '[automatic] consulting fee' titre.fr: prix d'une consultation dirigeant . indépendant . PL . CARCDSF . retraite complémentaire: titre.en: '[automatic] supplementary pension (CARCDSF)' titre.fr: retraite complémentaire (CARCDSF) +? dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire +: titre.en: '[automatic] flat-rate contribution' + titre.fr: cotisation forfaitaire +? dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation proportionnelle +: titre.en: '[automatic] proportional contribution' + titre.fr: cotisation proportionnelle ? dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . réduction de la cotisation forfaitaire : description.en: > [automatic] You have the possibility of benefiting from a contribution diff --git a/mon-entreprise/source/locales/ui-en.yaml b/mon-entreprise/source/locales/ui-en.yaml index 7a2dc1c12..3fc923062 100644 --- a/mon-entreprise/source/locales/ui-en.yaml +++ b/mon-entreprise/source/locales/ui-en.yaml @@ -1,7 +1,7 @@ -'404': +"404": action: Return to safe place message: This page does not exist or no longer exists -'<0>Covid-19 et chômage partiel : <3>Calculez votre indemnité': '<0>Covid-19 and Short-Time Work: <3>Calculate Your Benefit' +"<0>Covid-19 et chômage partiel : <3>Calculez votre indemnité": "<0>Covid-19 and Short-Time Work: <3>Calculate Your Benefit" <0>Oui: <0>Yes A quoi servent mes cotisations ?: What's included in my contributions? Accueil: Home @@ -28,16 +28,16 @@ Choisir plus tard: Choose later Chômage partiel: Partial unemployment Code d'intégration: Integration Code Commencer: Get started -'Commerçant, artisan, ou libéral ?': Trader, craftsman, or liberal? +"Commerçant, artisan, ou libéral ?": Trader, craftsman, or liberal? Comparaison statuts: Status comparison Continuer: Continue Coronavirus: Coronavirus Cotisations: Contributions Cotisations sociales: Social contributions Covid 19: Covid 19 -"Covid-19 : Calculer l'impact du chômage partiel": 'Covid-19: Calculating the impact of short-time work' -'Covid-19 : Découvrez les mesures de soutien aux entreprises': 'Covid-19: Find out about business support measures' -'Covid-19 : Découvrir les mesures de soutien aux entreprises': 'Covid-19: Discovering Business Support Measures' +"Covid-19 : Calculer l'impact du chômage partiel": "Covid-19: Calculating the impact of short-time work" +"Covid-19 : Découvrez les mesures de soutien aux entreprises": "Covid-19: Find out about business support measures" +"Covid-19 : Découvrir les mesures de soutien aux entreprises": "Covid-19: Discovering Business Support Measures" Coût pour l'entreprise: Cost to the company Crée le: Created on Créer une: Create a @@ -71,12 +71,13 @@ Gérant minoritaire: Managing director Habituellement: Usually Imprimer: Print Impôts: Taxes -"Indemnité chômage partiel prise en charge par l'état :": 'State-paid short-time working allowance :' +"Indemnité chômage partiel prise en charge par l'état :": "State-paid short-time working allowance :" Indépendant: Indépendant International: International Intégrer l'interface de simulation: Integrate the simulation interface Intégrer la bibliothèque de calcul: Integrate the calculation library Intégrer nos simulateurs: Integrate our simulators +Intégrer un simulateur: Integrating a simulator J'ai compris: understood Janvier 2019: January 2019 La somme de: This rule is the sum of @@ -102,7 +103,7 @@ Pas en auto-entrepreneur: Not in auto-entrepreneur Pas implémenté: Not implemented Passer: Skip Personnalisez l'integration: Customize the integration -'Perte de revenu net :': 'Loss of net income :' +"Perte de revenu net :": "Loss of net income :" Plafonds des tranches: Wafer ceilings Plein écran: Fullscreen Plus d'informations: More information (fr) @@ -130,7 +131,7 @@ Retour à mon activité: Back to my business Revenir à la documentation: Go back to documentation Revenu (incluant les dépenses liées à l'activité): Revenue (including expenses related to the activity) Revenu disponible: Disposable income -'Revenu net avec chômage partiel :': 'Net income with short-time work :' +"Revenu net avec chômage partiel :": "Net income with short-time work :" Revenu net mensuel: Monthly net income Réductions: Discounts Rémunération du dirigeant: Director's remuneration @@ -154,7 +155,7 @@ Taux: Rate Taux calculé: Calculated rate Taux moyen: Average rate Total des retenues: Total withheld -"Total payé par l'entreprise :": 'Total paid by the company :' +"Total payé par l'entreprise :": "Total paid by the company :" Tout effacer: Delete all Tranche de l'assiette: Scale bracket Un seul associé: Only one partner @@ -214,11 +215,11 @@ après: registered, you'll have access to the following kbis: description: - '1': It is the official document attesting to <2>the legal existence of a + "1": It is the official document attesting to <2>the legal existence of a commercial enterprise. In most cases, to be opposable and authentic for administrative procedures, the extract must be less than 3 months old. - '2': This document is generally requested when applying for a public tender, + "2": This document is generally requested when applying for a public tender, opening a professional bank account, purchasing professional equipment from distributors, etc. titre: The Kbis @@ -272,7 +273,7 @@ autoentrepreneur: titre: Auto-entrepeneur back: Resume simulation barème: scale -calcul-avec: 'Calculation from <1>with :' +calcul-avec: "Calculation from <1>with :" cancelExample: Back to your situation car dépend de: because it depends on cible: target @@ -384,8 +385,8 @@ comparaisonRégimes: AS: SAS, SASU or SARL with minority director auto: Auto-entreprise indep: - '1': EI, EIRL, EURL or SARL with majority director - '2': EI or EIRL + "1": EI, EIRL, EURL or SARL with majority director + "2": EI or EIRL legend: Possible legal status sécuritéSociale: | <0> Social security @@ -399,13 +400,13 @@ comparaisonRégimes: trimestreValidés: <0>Number of quarters validated <1>(for retirement) composantes: components coronavirus: - description: '<0>Coronavirus and short-time working: what impact on my + description: "<0>Coronavirus and short-time working: what impact on my income?<1>The government is putting in place measures to support employees affected by the Coronavirus crisis. One of the key measures is the - assumption of the entire short-time working compensation by the State.' + assumption of the entire short-time working compensation by the State." page: description: Estimate net income with short-time working benefits - titre: 'Coronavirus and short-time working: what impact on your income?' + titre: "Coronavirus and short-time working: what impact on your income?" cotisation: contribution créer: cta: @@ -424,7 +425,7 @@ créer: <0>List of legal statuses <1>EURL, SARL, SASU, etc: a shortcut if you already know your status titre: Create a company - warningPL: 'Note: the case of regulated liberal professions is not covered' + warningPL: "Note: the case of regulated liberal professions is not covered" d'aides: of aid domiciliation inconnue: unknown address domiciliée à: domiciled in @@ -540,9 +541,9 @@ entreprise: creation process. It is automatically saved in your browser. banque: description: - '1': The purpose of a <1>professional bank account is to separate your + "1": The purpose of a <1>professional bank account is to separate your company's assets from your personal assets. - '2': 'The professional bank account allows you to:' + "2": "The professional bank account allows you to:" EI: If its opening is not obligatory for an EI, it is strongly recommended. liste: > <0>Differentiate your private and professional operations and simplify @@ -745,13 +746,13 @@ indicationTempsPlein: in full-time gross salary equivalent inférieurs à: lower than jour: day landing: - aboutUs: '<0>Who are we ?<1>We are a small<2>, autonomous and + aboutUs: "<0>Who are we ?<1>We are a small<2>, autonomous and multidisciplinary team within<4> URSSAF. We have at heart to be close to your needs in order to constantly improve this site in accordance with the <7>beta.gouv.fr approach.<2>We have developed this site to <2>support entrepreneurs in the development of their business.<3>Our goal is to <2>remove all uncertainties with regard to the administration - so that you can concentrate on what matters: your business.' + so that you can concentrate on what matters: your business." choice: create: <0>Create a company<1>Assistance in choosing the status and the complete list of creation steps @@ -760,7 +761,7 @@ landing: flow. simulators: <0>Access the simulators<1>The exhaustive list of all the simulators available on the site. - covid19: 'Covid-19: Calculating the impact of short-time work' + covid19: "Covid-19: Calculating the impact of short-time work" seeSimulators: See the simulators list subtitle: All the resources you need to develop your business, from legal status to hiring. @@ -819,13 +820,13 @@ pages: authorities concerning auto-entrepreneurs and the micro-enterprise scheme (in french). dévelopeurs: - bibliothèque: '<0>Integrate our calculation library<1>If you think that your + bibliothèque: "<0>Integrate our calculation library<1>If you think that your site or service would benefit from displaying salary calculations, for example switching from gross salary to net salary, good news: all the contribution and tax calculations behind my-company.fr are free and <2>can be integrated in the form of an <2>NPM library.<2>Put simply, - your team''s developers are able to integrate the calculation into your - interface in 5 minutes{emoji(''⌚'')}, without having to deal with the + your team's developers are able to integrate the calculation into your + interface in 5 minutes{emoji('⌚')}, without having to deal with the complexity of payroll and the regular updating of calculation rules.<3>This library is a common digital library developed by the State and ACOSS. It is based on a new programming language, @@ -836,36 +837,36 @@ pages: recipe for a calculation is simple: input variables (gross wage), one or more output variables (net wage).<10>All these variables are listed and explained in our <2>online documentation.<11>Use the search - engine to find the right variable, then click on "View source code" to - get all the documentation: default value, possible values when it''s an - enumeration of choice, unit when it''s a number, description, associated - user question, etc.<12>Let''s run a calculation closer to a payslip: + engine to find the right variable, then click on \"View source code\" to + get all the documentation: default value, possible values when it's an + enumeration of choice, unit when it's a number, description, associated + user question, etc.<12>Let's run a calculation closer to a payslip: Here is a description of the input situation with links to the corresponding pages of the documentation :<13> An <3>executive earning <7>€3,400 gross, who benefits from the<10> bicycle mileage allowance and works in a company with <14>12 employees.<14>The calculation for this more complete example is - as follows:<15><0><16>{emoji(''ℹ️ '')} Note that in the + as follows:<15><0><16>{emoji('ℹ️ ')} Note that in the previous example we have to specify the transport payment rate ourselves.<17>Whereas in the <2>employee simulator, it is sufficient to fill in the municipality and the corresponding rate is - automatically determined. It''s intentional: to keep the library (and the + automatically determined. It's intentional: to keep the library (and the site) light, we use two online APIs. The<4> Geo API - communes to switch from the commune name to the common code. Then the<7> transport payout API, developed and maintained by us, which is not documented but its use is very simple and understandable <10>in this React component that calls it, a component that also uses the common - API.<18>Making economic charts{emoji('' 📈'')}<19>It is also + API.<18>Making economic charts{emoji(' 📈')}<19>It is also possible to use the library for economic or political analysis calculations. Here, the price of labour and the net wage is plotted against the gross wage.<20>We can see the progressiveness of the total wage, which is in percent lower for a minimum wage than for a high income. In other words, high-wage earners pay part of the social security - contributions of low-wage earners.<21>{emoji(''⚠️ '')}Beware, this + contributions of low-wage earners.<21>{emoji('⚠️ ')}Beware, this example does a lot of calculations in one go, which can block your browser for a few seconds. To overcome this problem, you would have to call the library in a Web Worker, but this is not possible for the <3>moment in - these demos.<22><0>' + these demos.<22><0>" développeurs: choice: github: <0>Contribute to GitHub<1>All our tools are open and publicly @@ -876,10 +877,10 @@ pages: publicode: <0>Publicodes<1>Our tools are powered by Publicodes, a new language for encoding "explainable" algorithms. code: - description: 'Here is the code to copy and paste on your site:' + description: "Here is the code to copy and paste on your site:" titre: Integration Code - code à copier: 'Here is the code to copy and paste on your site:' - couleur: 'What color? ' + code à copier: "Here is the code to copy and paste on your site:" + couleur: "What color? " home: choice: iframe: <0>Integrating a simulator<1>Integrate one of our simulators in one @@ -898,23 +899,43 @@ pages: attribute <1>data-lang="en" allows you to choose English as the simulator language. module: What module? + gérer: + aide-déclaration-indépendant: + meta: + description: Easily calculate the amount of payroll taxes to report on your 2019 + income tax return. + title: "Self-employed tax return: calculation of the amount of contributions" + shortname: Income tax return assistance + title: Help with your 2019 income tax return + demande-mobilité: + meta: + description: Interactive form to be completed for self-employed persons wishing + to carry out their activity in other European countries + title: "Self-employed: demand for mobility in Europe" + shortname: Demand for mobility in Europe simulateurs: + artiste-auteur: + meta: + description: Estimate social contributions on copyright and BNC income + title: "Artist-author: calculation of URSSAF membership fees" + shortname: Artist-author + title: Estimate my artist/author dues auto-entrepreneur: meta: description: Calculation of your income based on turnover, after deduction of contributions and income tax. - ogDescription: 'Thanks to the auto-entrepreneur income simulator developed by + ogDescription: "Thanks to the auto-entrepreneur income simulator developed by URSSAF, you can estimate the amount of your income based on your monthly or annual turnover to better manage your cash flow. Or in the opposite direction: to know what amount to invoice to achieve a - certain income.' - ogTitle: 'Auto-entrepreneur: quickly calculate your net income from sales and - vice versa' - titre: 'Auto-entrepreneurs: income simulator' - seo explanation: '<0>How do you calculate the net income for an + certain income." + ogTitle: "Auto-entrepreneur: quickly calculate your net income from sales and + vice versa" + titre: "Auto-entrepreneurs: income simulator" + seo explanation: "<0>How do you calculate the net income for an auto-entrepreneur?<1>An auto-entrepreneur has to pay social security contributions to the administration (also known as - "social charge"). These social contributions are used to finance + \"social charge\"). These social contributions are used to finance social security, and give rights for retirement or health insurance. They are also used to finance vocational training.<2><0> <2>See details of how the contributions are calculated<3>But this is @@ -922,7 +943,7 @@ pages: account all expenses incurred in the course of the professional activity (assets, raw materials, premises, transport). Although they are not useful for the calculation of contributions and taxes, they must be - taken into account to estimate the viability of one''''s + taken into account to estimate the viability of one''s activity.<4>The complete calculation formula is therefore:<1><0>Net income = Turnover - Social contributions - Professional expenses<5>How to calculate income tax for an @@ -936,8 +957,16 @@ pages: carried out. It is said to be lump-sum because it does not take into account the actual expenses incurred in the activity.<9><0> <2>See details of the calculation of the income allowance for an - auto-entrepreneur<10>Useful resources<11><0>''' + auto-entrepreneur<10>Useful resources<11><0>'" + shortname: Auto-entrepreneur + title: Self-entrepreneur Income Simulator titre: Auto-entrepreneur income simulator + auxiliaire: + shortname: Medical Axiliary + title: Income simulator for a private medical assistant + chirurgien-dentiste: + shortname: Dental surgeon + title: Income simulator for a private dental surgeon chômage-partiel: explications seo: >- [👨 Integrate this simulator on your @@ -979,11 +1008,50 @@ pages: then be able to personalize your situation (part-time, agreement, etc). Take into account all contributions, including those specific to the allowance (CSG and CRDS). - ogTitle: 'Short-time working simulator: find out the impact on the net salaried - income and the total employer cost.' + ogTitle: "Short-time working simulator: find out the impact on the net salaried + income and the total employer cost." titre: Calculation of the short-time working allowance in France + seo: <0>How is the partial activity allowance calculated?<1>The basic + partial activity allowance is fixed by law at <2>70% of gross + salary. It is prorated according to the number of hours off work. For an + employee at € 2300 gross monthly, who works 50% of his usual time, this + gives <5>€ 2300 × 50% × 70% = € 805.<2>In addition to this basic + allowance, there is a supplementary allowance for salaries close to the + minimum wage. This additional allowance is paid when the combined + remuneration and basic allowance are below a net SMIC. These allowances + are paid by the employer, who will then be reimbursed in part or in full + by the State.<3>👉 <2>See the details of the calculation of the + allowance<4> How to calculate the part reimbursed by the + State?<5>The State covers part of the partial compensation for wages + up to **4.5 SMIC**, with a minimum of €8.03 per unemployed hour. In + concrete terms, this results in 100% coverage for salaries close to the + SMIC. This gradually decreases until it stabilizes at **93%** for wages + <3>between €2,000 and €7,000 (wage corresponding to the limit of 4.5 + SMIC).<6>👉 <2>See details of the calculation of the reimbursement + of the allowance<7> How to report a partial activity?<8>In + response to the coronavirus crisis, the conditions for partial + employment have been eased. The employer is allowed to place his + employees in partial activity before the official application is filed. + The employee then has a period of <2>30 days to comply with the + regulations. Benefits will be paid retroactively from the date of the + partial unemployment.<9>👉 <2>Applying for partial unemployment + benefit<10> What social security contributions must be paid for the + partial activity allowance?<11>The partial activity allowance is + subject to the CSG/CRDS and to a sickness contribution in certain cases. + For more information, see the explanatory page on the <2>URSSAF + website. + shortname: Partial unemployment + title: "Covid-19: Short-time work simulator" + comparaison: + meta: + description: Self-employed, self-employed or similarly employed? With this + comparison, find the plan that suits you best + title: "Starting a business: a comparison of social schemes" + shortname: Status Comparison + title: "Self-employed, assimilated employee or auto-entrepreneur: which plan to + choose?" dirigean sasu: - explication seo: '<0>How to calculate the salary of a SASU executive? <1>As + explication seo: "<0>How to calculate the salary of a SASU executive? <1>As for a conventional employee, the SASU <1>manager pays social security contributions on the salary he or she pays. The contributions are calculated in the same way as for the employee: they are broken down @@ -992,15 +1060,35 @@ pages: manager-employee does not pay <2>unemployment contributions. Moreover, they do not benefit from the <5>general reduction in contributions or from the schemes governed by the Labour Code, such as - <9>overtime or bonuses.<3>A SASU executive''s salary can be - calculated by entering the total amount of the salary in the "total - expense" box, but he or she can claim the <2>ACRE reduction at the + <9>overtime or bonuses.<3>A SASU executive's salary can be + calculated by entering the total amount of the salary in the \"total + expense\" box, but he or she can claim the <2>ACRE reduction at the beginning of the activity, under certain conditions.<4>You can use our simulator to calculate the <2>net remuneration from a - super-gross amount allocated to the executive''s remuneration. To do + super-gross amount allocated to the executive's remuneration. To do this, simply enter the announced compensation in the total loaded box. The simulation can then be refined by answering the various - questions.' + questions." + indépendant: + meta: + description: Calculation of net income after tax and contributions based on + turnover and vice versa + title: "Independent: Urssaf income simulator" + shortname: Independent + title: Income simulator for the self-employed + médecin: + shortname: Doctor + title: Income simulator for private practitioners + profession-libérale: + meta: + description: Net Income Calculation for Self-Employed Persons in Liberal Income + Tax (IR, BNC) + title: "Liberal professions: the Urssaf simulator" + shortname: Liberal profession + title: Professional Income Simulator + sage-femme: + shortname: Midwife + title: Income simulator for private midwives salarié: explication seo: <0>Calculate your net salary<1>During the job interview, the employer usually offers a "gross" remuneration. The announced amount @@ -1036,24 +1124,74 @@ pages: (executive status, internship, apprenticeship, overtime, restaurant vouchers, mutual insurance, part-time work, collective agreement, etc.). - ogTitle: 'Gross, net, net after-tax salary, total cost: the ultimate simulator - for employees and employers' - titre: 'Gross / net salary: the Urssaf converter' + ogTitle: "Gross, net, net after-tax salary, total cost: the ultimate simulator + for employees and employers" + titre: "Gross / net salary: the Urssaf converter" + seo: <0>How is the net salary calculated?<1>At the job interview, the + employer usually proposes a "gross" remuneration. The amount announced + thus includes employee contributions, which are used to finance the + employee's social protection and which are deducted from the "net" + salary received by the employee.<2>You can use our simulator to + convert the <2>gross salary into net salary. Simply enter the + advertised remuneration in the gross salary box. The simulation can be + refined by answering the various questions (fixed-term contract, + executive status, overtime, part-time, meal vouchers, + etc.).<3><4>Moreover, since 2019,<1> income tax is deducted + at source. To do this, the Directorate General of Public Finance (DGFiP) + sends the employer the tax rate calculated from the employee's income + tax return. If this rate is unknown, for example in the first year of + employment, the employer uses the <4>neutral rate.<5>How to + calculate the cost of hiring?<6>If you are looking to hire, you can + calculate the total cost of your employee's remuneration, as well as the + corresponding employer and employee contribution amounts. This enables + you to define the remuneration level by knowing the overall amount of + expense this represents for your company.<7>In addition to the + salary, our simulator takes into account the calculation of benefits in + kind (telephone, company car, etc.), as well as the compulsory health + insurance.<8>There are <2>deferred hiring <2>aids which are + not all taken into account by our simulator, you can find them on <6>the + official portal. + shortname: Employee + title: Employee income simulator titre: Income simulator for employees sasu: meta: description: Calculation of net salary from turnover + expenses and vice versa. ogDescription: As an officer in a similar position, immediately calculate your net income after tax from the total allocated to your compensation. - ogTitle: 'SASU executive compensation: a simulator to find out your net salary' - titre: 'Head of SASU: Urssaf revenue simulator' + ogTitle: "SASU executive compensation: a simulator to find out your net salary" + titre: "Head of SASU: Urssaf revenue simulator" + seo-explanation: "<0>How to calculate the salary of a SASU executive? <1>As + for a classic employee, the SASU <2>manager pays social security + contributions on the remuneration he pays himself. The contributions are + calculated in the same way as for the employee: they are broken down + into the employer and employee parts and are expressed as a percentage + of the gross salary.<2>The assimilated manager-employee does not pay + <2>unemployment contributions. Furthermore, they do not benefit from + the <5>general reduction in contributions or from the provisions of + the French Labour Code, such as <9>overtime or + bonuses.<3>However, the employee is entitled to the <2>ACRE + reduction at the start of employment, under certain + conditions.<4>You can use our simulator to calculate the <2>net + remuneration from a super-gross amount allocated to the executive's + remuneration. To do this, simply enter the total amount allocated in the + \"total charged\" box. The simulation can then be refined by answering + the various questions." + shortname: Head of SASU + title: Income simulator for SASU manager titre: Revenue simulator for SAS(U) executive + économie-collaborative: + meta: + description: Airbnb, Drivy, Blablacar, Leboncoin... Find out how to be in order + in your declarations + title: "Online platform income tax return: interactive guide" + shortname: Collaborative Economy Guide par: per payslip: disclaimer: It takes into account national law but not union negotiated rules. Lots of financial aids for your enterprise exist, explore them on <1>aides-entreprises.fr (French). - heures: 'Hours worked per month: ' + heures: "Hours worked per month: " notice: This simulation helps you understand your French payslip, but it should not be used as one. For further details, check <1>service-public.fr (French). @@ -1165,10 +1303,12 @@ simulateurs: and income tax are taken into account. Official URSSAF simulator titre: Official income simulator for self-employed person titre: Self-employed income simulator - inversionFail: | + inversionFail: > The amount entered results in an impossible result. This is due to a + threshold effect in the calculation of contributions. + We invite you to try again by slightly modifying the amount entered (a few euros more for example). profession-libérale: page: @@ -1177,7 +1317,7 @@ simulateurs: titre: Income simulator for {professionName}. précision: bonne: Good accuracy - défaut: 'Refine the simulation by answering the following questions:' + défaut: "Refine the simulation by answering the following questions:" faible: Low accuracy moyenne: Medium accuracy résumé: @@ -1226,7 +1366,7 @@ simulation-end: text: You have reached the most accurate estimate. title: No more questions left! site: - titleTemplate: '%s' + titleTemplate: "%s" statut du dirigeant: description: <0>This choice is important because it determines the social security regime and the social coverage of the manager. The amount and terms @@ -1277,8 +1417,8 @@ une de ces conditions: one of these applies onwards, these revenues will be automatically reported by the platforms to the tax authorities and Urssaf. question: What types of activity did you undertake? - réassurance: 'PS: this tool is only there to inform you, no data will be - transmitted to the administrations' + réassurance: "PS: this tool is only there to inform you, no data will be + transmitted to the administrations" titre: How to declare income from digital platforms? activité: choix: What are more precisely the activities carried out? diff --git a/mon-entreprise/source/rules/dirigeant.yaml b/mon-entreprise/source/rules/dirigeant.yaml index 83e39b887..5b62f9dbd 100644 --- a/mon-entreprise/source/rules/dirigeant.yaml +++ b/mon-entreprise/source/rules/dirigeant.yaml @@ -311,6 +311,14 @@ dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . tau dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . plafond ACRE: formule: plafond sécurité sociale temps plein / impôt . abattement . taux inversé +dirigeant . auto-entrepreneur . notification valeur annuelle: + applicable si: entreprise . ACRE + type: notification + description: | + Le taux ACRE utilisé est celui correspondant au mois courant. Le + simulateur ne prends pas encore en compte le chevauchement de 2 période + d'acre sur une meme année. + dirigeant . auto-entrepreneur . impôt: dirigeant . auto-entrepreneur . impôt . abattement: diff --git a/mon-entreprise/source/rules/profession-libérale.yaml b/mon-entreprise/source/rules/profession-libérale.yaml index 9d489e010..8e008a60a 100644 --- a/mon-entreprise/source/rules/profession-libérale.yaml +++ b/mon-entreprise/source/rules/profession-libérale.yaml @@ -317,6 +317,8 @@ dirigeant . indépendant . PL . PAMC: - conjoint collaborateur - entreprise . franchise de TVA - dirigeant . indépendant . revenus étrangers + - dirigeant . indépendant . cotisations et contributions . exonération de cotisations minimales + - dirigeant . indépendant . cotisations et contributions . maladie domiciliation fiscale étranger formule: oui dirigeant . indépendant . PL . PAMC . proportion recette activité non conventionnée: @@ -661,28 +663,36 @@ dirigeant . indépendant . PL . CARCDSF: - métier = 'santé . chirurgien-dentiste' - métier = 'santé . sage-femme' références: - Site CARMF: https://www.carcdsf.fr + Site CARMF: http://www.carcdsf.fr dirigeant . indépendant . PL . CARCDSF . retraite complémentaire: titre: retraite complémentaire (CARCDSF) remplace: cotisations et contributions . retraite complémentaire formule: somme: - - produit: - assiette: 2960.40 €/an - taux: réduction de la cotisation forfaitaire - arrondi: oui - - barème: - assiette: assiette des cotisations - multiplicateur: plafond sécurité sociale temps plein - tranches: - - taux: 0% - plafond: 0.85 - - taux: 10.65% - plafond: 5 - arrondi: oui + - cotisation forfaitaire + - cotisation proportionnelle références: - Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + Site CARCDSF: http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + +dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation proportionnelle: + formule: + barème: + assiette: assiette des cotisations + multiplicateur: plafond sécurité sociale temps plein + tranches: + - taux: 0% + plafond: 0.85 + - taux: 10.65% + plafond: 5 + arrondi: oui + +dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire: + formule: + produit: + assiette: 2960.40 €/an + taux: réduction de la cotisation forfaitaire + arrondi: oui dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . réduction de la cotisation forfaitaire: applicable si: assiette des cotisations < 85% * plafond sécurité sociale temps plein @@ -706,7 +716,7 @@ dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . réduction formule: assiette des cotisations / (85% * plafond sécurité sociale temps plein) références: - Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + Site CARCDSF: http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste: applicable si: métier = 'santé . chirurgien-dentiste' @@ -740,22 +750,24 @@ dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . PCV: taux: 0.725 % arrondi: oui références: - Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + Site CARCDSF: http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . exonération PCV: type: notification applicable si: (assiette des cotisations / prix d'une consultation) <= 500 consultation/an + formule: oui description: >- Vous avez la possibilité de bénéficier d'une exonération totale de cotisation pour la prestation complémentaire de vieillesse (PCV) si vous en faites la demande. [En savoir plus](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations) -dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . exonération PCV . prix d'une consultation: +dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . prix d'une consultation: formule: 23 €/consultation dirigeant . indépendant . PL . CARCDSF . sage-femme: - applicable si: métier = 'PAM . sage-femme' + applicable si: métier = 'santé . sage-femme' + formule: oui dirigeant . indépendant . PL . CARCDSF . sage-femme . RID: titre: invalidité et décès (CARCDSF sage-femme) @@ -778,7 +790,7 @@ dirigeant . indépendant . PL . CARCDSF . sage-femme . RID: - si: classe = 'C' alors: 273 €/an références: - Montant des cotisations: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + Montant des cotisations: http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations dirigeant . indépendant . PL . CARCDSF . sage-femme . RID . classe: titre: Classe de cotisation @@ -815,7 +827,7 @@ dirigeant . indépendant . PL . CARCDSF . sage-femme . PCV: taux: 1 / 3 arrondi: oui références: - Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations + Site CARCDSF: http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations note: | Une dispense peut être accordée lorsque les revenus professionnels sont inférieurs ou égaux à 3120 €. @@ -830,6 +842,7 @@ dirigeant . indépendant . PL . CARCDSF . sage-femme . PCV: dirigeant . indépendant . PL . CARCDSF . sage-femme . exonération PCV: type: notification applicable si: assiette des cotisations <= 3120 €/an + formule: oui description: >- Vous avez la possibilité de bénéficier d'une exonération totale de cotisation pour la prestation complémentaire de vieillesse (PCV) si vous en diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/iframe-integration-script.js b/mon-entreprise/source/sites/mon-entreprise.fr/iframe-integration-script.js index afb4e7d30..7c1ba732f 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/iframe-integration-script.js +++ b/mon-entreprise/source/sites/mon-entreprise.fr/iframe-integration-script.js @@ -53,7 +53,7 @@ const moduleToSitePath = { } const simulateurLink = (fr ? process.env.FR_SITE : process.env.EN_SITE).replace( '${path}', - moduleToSitePath[moduleName] + moduleToSitePath[moduleName] ?? '' ) links.innerHTML = `
diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Dev/IntegrationTest.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Dev/IntegrationTest.tsx index 615b32dbe..0e2a920bc 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Dev/IntegrationTest.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Dev/IntegrationTest.tsx @@ -1,19 +1,16 @@ -import React, { Suspense } from 'react' +import React, { Suspense, useMemo } from 'react' +import useSimulatorsData from '../Simulateurs/metadata' const LazyColorPicker = React.lazy(() => import('./ColorPicker')) -export const integrableModuleNames = [ - 'simulateur-embauche', - 'simulateur-autoentrepreneur', - 'simulateur-independant', - 'simulateur-assimilesalarie', - 'simulateur-artiste-auteur', - 'simulateur-chomage-partiel' -] - -// Intégrations "cachées" (non diffusées) -const privateModuleNames = ['demande-mobilite'] - export default function IntegrationTest() { + const simulators = useSimulatorsData() + const integrableModuleNames = useMemo( + () => + Object.values(simulators) + .map(s => s.iframe) + .filter(Boolean), + [simulators] + ) const [currentModule, setCurrentModule] = React.useState( integrableModuleNames[0] ) @@ -36,7 +33,7 @@ export default function IntegrationTest() { <>

Quel module ?

diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx index 63c4303f1..ebfc1919e 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx @@ -24,7 +24,7 @@ import RuleLink from 'Components/RuleLink' import { formatValue } from 'publicodes' import Skeleton from 'Components/ui/Skeleton' -export default function() { +export default function AideDéclarationIndépendant() { const dispatch = useDispatch() const rules = useContext(EngineContext).getParsedRules() const company = useSelector( diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/index.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/index.tsx index 5cfc2d70c..590ce5c0f 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/index.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/index.tsx @@ -12,7 +12,7 @@ import formulaire from './formulaire-détachement.yaml' const LazyEndBlock = React.lazy(() => import('./EndBlock')) -export default function formulaireMobilitéIndépendant() { +export default function FormulaireMobilitéIndépendant() { const engine = new Engine(formulaire) return ( <> diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/SimulateurEmbauche.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/SimulateurEmbauche.tsx deleted file mode 100644 index 3886b56ab..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/SimulateurEmbauche.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { SitePathsContext } from 'Components/utils/SitePathsContext' -import React, { useContext } from 'react' -import { Helmet } from 'react-helmet' -import { SalarySimulation } from '../Simulateurs/Salarié' - -export default function IframeSimulateurEmbauche() { - const sitePaths = useContext(SitePathsContext) - return ( - <> - - - - - - ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/index.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/index.tsx index dbfe7f3d8..4da41d53c 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/index.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Iframes/index.tsx @@ -1,50 +1,41 @@ import { IsEmbeddedContext } from 'Components/utils/embeddedContext' import React from 'react' -import { Route } from 'react-router-dom' +import { Route, Switch } from 'react-router-dom' import { inIframe } from '../../../../utils' -import SimulateurChômagePartiel from '../Simulateurs/ChômagePartiel' -import SimulateurArtisteAuteur from '../Simulateurs/ArtisteAuteur' -import SimulateurAssimiléSalarié from '../Simulateurs/RémunérationSASU' -import SimulateurAutoEntrepreneur from '../Simulateurs/AutoEntrepreneur' -import SimulateurIndépendant from '../Simulateurs/Indépendant' -import DemandeMobilite from '../Gérer/DemandeMobilite' +import useSimulatorsData from '../Simulateurs/metadata' +import SimulateurPage from '../Simulateurs/Page' import IframeFooter from './IframeFooter' -import SimulateurEmbauche from './SimulateurEmbauche' +import { Helmet } from 'react-helmet' export default function Iframes() { + const simulators = useSimulatorsData() return ( {/** Open external links in the parent frame. This behavior can be configured on individual link, eg . - Our own link are handled in-app by the router, and aren't affected by this directive. */} + Our own link are handled in-app by the router, and aren't affected by this directive. + */} +
- - - - - - - - + + {Object.values(simulators) + .filter(({ iframe }) => !!iframe) + .map(s => ( + ( + <> + + + + + + )} + /> + ))} + {inIframe() && }
diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx index 2a2c94239..d7dbcd4f4 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx @@ -1,20 +1,18 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' -import { DistributionBranch } from 'Components/Distribution' -import { Condition } from 'Components/EngineValue' -import SimulateurWarning from 'Components/SimulateurWarning' -import config from 'Components/simulationConfigs/artiste-auteur.yaml' -import 'Components/TargetSelection.css' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import { EngineContext, useEvaluation } from 'Components/utils/EngineContext' -import Value from 'Components/EngineValue' import RuleInput from 'Components/conversation/RuleInput' +import { DistributionBranch } from 'Components/Distribution' +import Value, { Condition } from 'Components/EngineValue' +import SimulateurWarning from 'Components/SimulateurWarning' +import 'Components/TargetSelection.css' +import Animate from 'Components/ui/animate' +import { EngineContext, useEvaluation } from 'Components/utils/EngineContext' import React, { createContext, useContext, useEffect, useState } from 'react' import { Trans } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { DottedName } from 'Rules' import { situationSelector } from 'Selectors/simulationSelectors' import styled from 'styled-components' -import Animate from 'Components/ui/animate' +import config from './configs/artiste-auteur.yaml' const InitialRenderContext = createContext(false) function useInitialRender() { @@ -31,17 +29,9 @@ export default function ArtisteAuteur() { dispatch(setSimulationConfig(config)) }, []) const initialRender = useInitialRender() - const inIframe = useContext(IsEmbeddedContext) return ( <> - {!inIframe && ( -

- - Estimer mes cotisations d’artiste-auteur - -

- )}
diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx deleted file mode 100644 index 181802de8..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/AutoEntrepreneur.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import Warning from 'Components/SimulateurWarning' -import Simulation from 'Components/Simulation' -import autoEntrepreneurConfig from 'Components/simulationConfigs/auto-entrepreneur.yaml' -import StackedBarChart from 'Components/StackedBarChart' -import { ThemeColorsContext } from 'Components/utils/colors' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import { EngineContext } from 'Components/utils/EngineContext' -import Meta from 'Components/utils/Meta' -import { SitePathsContext } from 'Components/utils/SitePathsContext' -import { default as React, useContext } from 'react' -import { Trans, useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' -import { targetUnitSelector } from 'Selectors/simulationSelectors' -import AutoEntrepreneurPreview from './images/AutoEntrepreneurPreview.png' -import Emoji from 'Components/utils/Emoji' -import { RessourceAutoEntrepreneur } from '../Créer/CreationChecklist' -import RuleLink from 'Components/RuleLink' - -export default function AutoEntrepreneur() { - const inIframe = useContext(IsEmbeddedContext) - const { t, i18n } = useTranslation() - const META = { - title: t( - 'pages.simulateurs.auto-entrepreneur.meta.titre', - 'Auto-entrepreneurs : simulateur de revenus' - ), - description: t( - 'pages.simulateurs.auto-entrepreneur.meta.description', - "Calcul de votre revenu à partir du chiffre d'affaires, après déduction des cotisations et de l'impôt sur le revenu." - ), - ogTitle: t( - 'pages.simulateurs.auto-entrepreneur.meta.ogTitle', - 'Auto-entrepreneur : calculez rapidement votre revenu net à partir du CA et vice-versa' - ), - ogDescription: t( - 'pages.simulateurs.auto-entrepreneur.meta.ogDescription', - "Grâce au simulateur de revenu auto-entrepreneur développé par l'Urssaf, vous pourrez estimer le montant de vos revenus en fonction de votre chiffre d'affaire mensuel ou annuel pour mieux gérer votre trésorerie. Ou dans le sens inverse : savoir quel montant facturer pour atteindre un certain revenu." - ), - ...(i18n.language === 'fr' && { ogImage: AutoEntrepreneurPreview }) - } - const isEmbedded = React.useContext(IsEmbeddedContext) - return ( - <> - - {!inIframe && ( -

- - Simulateur de revenus auto-entrepreneur - -

- )} - - } - /> - {!isEmbedded && } - - ) -} - -function ExplanationSection() { - const engine = useContext(EngineContext) - const { t } = useTranslation() - const { palettes } = useContext(ThemeColorsContext) - const targetUnit = useSelector(targetUnitSelector) - const impôt = engine.evaluate('impôt', { unit: targetUnit }) - - return ( -
-

- Répartition du chiffre d'affaires -

- -
- ) -} - -function SeoExplanations() { - const sitePaths = useContext(SitePathsContext) - return ( - -

Comment calculer le revenu net d'un auto-entrepreneur ?

-

- Un auto-entrepreneur doit payer des cotisations sociales à - l'administration. Ces cotisations servent au financement de la sécurité - sociale, et ouvrent des droits pour la retraite ou pour l'assurance - maladie. Elle permettent également de financer la formation - professionnelle. Leur montant varie en fonction du type d'activité. -

-

- {' '} - - 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ère premières, - local, transport). Bien qu'elles ne soient pas utilisées pour le calcul - des cotisations et de l'impôt, elles doivent être prises en compte pour - vérifier si l'activité est viable économiquement. -

-

- La formule de calcul complète est donc : -

- - Revenu net = Chiffres d'affaires − Cotisations sociales − Dépenses - professionnelles - -
-

-

- Comment calculer l'impôt sur le revenu pour un auto-entrepreneur ? -

-

- Si vous avez opté pour le versement libératoire lors de la création de - votre auto-entreprise, l'impôt sur le revenu est payé en même temps que - les cotisations sociales. -

-

- {' '} - - Voir comment est calculé le montant du versement libératoire - -

-

- Sinon, vous serez imposé selon le barème standard de l'impôt sur le - revenu. Le revenu imposable est alors calculé comme un pourcentage du - chiffre d'affaires. C'est qu'on appel l'abattement forfaitaire. Ce - pourcentage varie en fonction du type d'activité excercé. On dit qu'il - est forfaitaire car il ne prends pas en compte les dépenses réelles - effectuées dans le cadre de l'activité. -

-

- {' '} - - Voir le détail du calcul du revenu abattu pour un auto-entrepreneur - -

-

- Ressources utiles -

-
- -
-
- ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ChômagePartiel.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ChômagePartiel.tsx index e87b30232..1a5601a42 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ChômagePartiel.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ChômagePartiel.tsx @@ -1,20 +1,15 @@ import RuleLink from 'Components/RuleLink' import Simulation from 'Components/Simulation' -import chomagePartielConfig from 'Components/simulationConfigs/chômage-partiel.yaml' import Animate from 'Components/ui/animate' import Warning from 'Components/ui/WarningBlock' import { IsEmbeddedContext } from 'Components/utils/embeddedContext' import { useEvaluation } from 'Components/utils/EngineContext' -import { Markdown } from 'Components/utils/markdown' -import { ScrollToTop } from 'Components/utils/Scroll' import { EvaluatedRule, formatValue } from 'publicodes' import React, { useContext, useEffect, useState } from 'react' -import { Trans, useTranslation } from 'react-i18next' +import { useTranslation } from 'react-i18next' import { DottedName } from 'Rules' import styled from 'styled-components' import { productionMode } from '../../../../utils' -import ChômagePartielPreview from './images/ChômagePartielPreview.png' -import Meta from 'Components/utils/Meta' declare global { interface Window { @@ -37,37 +32,8 @@ export default function ChômagePartiel() { document.body.removeChild(script) } }, []) - const { t, i18n } = useTranslation() - const META = { - title: t( - 'pages.simulateurs.chômage-partiel.meta.titre', - "Calcul de l'indemnité chômage partiel : le simulateur Urssaf" - ), - description: t( - 'pages.simulateurs.chômage-partiel.meta.description', - "Calcul du revenu net pour l'employé et du reste à charge pour l'employeur après remboursement de l'Etat, en prenant en compte toutes les cotisations sociales." - ), - ogTitle: t( - 'pages.simulateurs.chômage-partiel.meta.ogTitle', - "Simulateur chômage partiel : découvrez l'impact sur le revenu net salarié et le coût total employeur." - ), - ogDescription: t( - 'pages.simulateurs.chômage-partiel.meta.ogDescription', - "Accédez à une première estimation en saisissant à partir d'un salaire brut. Vous pourrez ensuite personaliser votre situation (temps partiel, convention, etc). Prends en compte la totalité des cotisations, y compris celles spécifiques à l'indemnité (CSG et CRDS)." - ), - ...(i18n.language === 'fr' && { ogImage: ChômagePartielPreview }) - } return ( <> - - - - {!inIframe && ( - -

Covid-19 : Simulateur de chômage partiel

-
- )} -
  • @@ -77,14 +43,12 @@ export default function ChômagePartiel() {
} customEndMessages={ Voir les résultats au-dessus } showPeriodSwitch={false} /> - {!inIframe && } ) } @@ -353,58 +317,3 @@ const ResultTable = styled.table` background: var(--lighterColor); } ` - -function TextExplanations() { - const { t } = useTranslation() - - return ( - - ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx index 74498701b..3c34d17bf 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx @@ -1,160 +1,118 @@ -import { SitePathsContext } from 'Components/utils/SitePathsContext' import React, { useContext } from 'react' import emoji from 'react-easy-emoji' import { Helmet } from 'react-helmet' import { Trans, useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' +import classnames from 'classnames' -export function useSimulatorsMetadata() { - const { t } = useTranslation() - const sitePaths = useContext(SitePathsContext) - - type SimulatorMetaData = { - name: string - icône: string - description?: string - sitePath: string - label?: string - } - - return [ - { - name: t('Assimilé salarié'), - icône: '☂️', - description: t( - 'simulateurs.résumé.assimilé', - "Calculer le revenu d'un dirigeant de SAS, SASU ou SARL minoritaire" - ), - sitePath: sitePaths.simulateurs.SASU - }, - { - name: t('Indépendant'), - icône: '👩‍🔧', - description: t( - 'simulateurs.résumé.indépendant', - "Calculer le revenu d'un dirigeant de EURL, EI, ou SARL majoritaire" - ), - sitePath: sitePaths.simulateurs.indépendant - }, - { - name: t('Auto-entrepreneur'), - icône: '🚶‍♂️', - description: t( - 'simulateurs.résumé.auto', - "Calculer le revenu (ou le chiffre d'affaires) d'un auto-entrepreneur" - ), - sitePath: sitePaths.simulateurs['auto-entrepreneur'] - }, - { - name: t('Salarié'), - icône: '🤝', - description: t( - 'simulateurs.résumé.salarié', - "Calculer le salaire net, brut, ou total d'un salarié, stagiaire, ou assimilé" - ), - sitePath: sitePaths.simulateurs.salarié - }, - { - name: t('Artiste-auteur'), - icône: '👩‍🎨', - description: t( - 'simulateurs.résumé.artiste-auteur', - "Estimer les cotisations sociales d'un artiste ou auteur" - ), - sitePath: sitePaths.simulateurs['artiste-auteur'] - }, - { - name: t('Comparaison statuts'), - icône: '📊', - description: t( - 'simulateurs.résumé.comparaison', - 'Découvrir les différences entre les régimes (cotisations,retraite, maternité, maladie, etc.)' - ), - sitePath: sitePaths.simulateurs.comparaison - }, - { - name: t('Économie collaborative'), - description: t( - 'simulateurs.résumé.économie-collaborative', - 'Un guide pour savoir comment déclarer vos revenus issus de plateformes en ligne (AirBnb, leboncoin, blablacar, etc.)' - ), - icône: '🙋', - sitePath: sitePaths.simulateurs.économieCollaborative.index - }, - { - name: t('Chômage partiel'), - description: t( - 'simulateurs.résumé.chômage-partiel', - "Simuler le revenu net versé au salarié, ainsi que le coût total restant à charge pour l'entreprise en cas de recours à l'activité partielle." - ), - icône: '😷', - label: t('Covid 19'), - sitePath: sitePaths.simulateurs['chômage-partiel'] - }, - { - name: t('Aide à la déclaration de revenu'), - description: t( - 'simulateurs.résumé.aide-déclaration-revenu-indep', - 'Calculer facilement les montants des charges sociales à reporter dans votre déclaration de revenu 2019.' - ), - icône: '✍️', - label: t('Indépendant'), - sitePath: sitePaths.gérer.déclarationIndépendant - }, - { - name: t('Demande de mobilité'), - description: t( - 'simulateurs.résumé.demande-mobilité', - 'Formulaire de demande de mobilité en Europe pour les travailleurs indépendants' - ), - icône: '🧳', - label: t('Indépendant'), - sitePath: sitePaths.gérer.formulaireMobilité - } - ] as Array -} +import simulatorSvg from './images/illustration-simulateur.svg' +import useSimulatorsData, { SimulatorData } from './metadata' +import { SitePathsContext } from 'Components/utils/SitePathsContext' export default function Simulateurs() { const { t } = useTranslation() - const simulatorsMetadata = useSimulatorsMetadata() + const sitePaths = useContext(SitePathsContext) + const simulators = useSimulatorsData() const titre = t('simulateurs.accueil.titre', 'Simulateurs disponibles') return ( <> {titre} +
+
+

{titre}

+

+ + Tous les simulateurs sur ce site sont maintenus à jour avec les + dernières évolutions législatives. + +

+ + Intégrer un simulateur + + {/*

+ + Le cas des professions libérales réglementées n'est pas encore + traité + +

*/} +
+ +
-

{titre}

+

+ Salariés et employeurs +

+
+ + +
+
+
+

Par type de société

.card { + border: 4px solid var(--lighterColor); + } + `} > - {simulatorsMetadata.map( - ({ name, description, sitePath, icône, label }) => ( - -
{emoji(icône)}
-

{name}

-

- {description} -

- {label && {label}} - - ) - )} + + + +
+ +

Par métier

+
.card { + border: 4px solid var(--lighterColor); + } + `} + > + + +
+

+ Professionnels de santé {emoji('🏥')} +

+
.card { + border: 4px solid var(--lighterColor); + } + `} + > + + + + +
+
+ +
+

Autres outils

+
+ + + +
@@ -178,3 +136,32 @@ export default function Simulateurs() { ) } + +function SimulateurCard({ + small = false, + shortName, + meta, + path, + icône +}: SimulatorData[keyof SimulatorData] & { small?: boolean }) { + return ( + +
+ {emoji(icône)} +
+ {small ? shortName :

{shortName}

} + {!small && meta?.description && ( +

+ {meta.description} +

+ )} + + ) +} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx deleted file mode 100644 index ef9390c46..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Indépendant.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import Warning from 'Components/SimulateurWarning' -import Simulation from 'Components/Simulation' -import indépendantConfig from 'Components/simulationConfigs/indépendant.yaml' -import StackedBarChart from 'Components/StackedBarChart' -import { ThemeColorsContext } from 'Components/utils/colors' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import { EngineContext } from 'Components/utils/EngineContext' -import { default as React, useContext } from 'react' -import { Helmet } from 'react-helmet' -import { Trans, useTranslation } from 'react-i18next' - -export default function Indépendant() { - const { t } = useTranslation() - const inIframe = useContext(IsEmbeddedContext) - - return ( - <> - - - {t( - 'simulateurs.indépendant.page.titre', - 'Indépendant : simulateur officiel de revenus et de cotisations' - )} - - - - {!inIframe && ( -

- - Simulateur de revenus pour indépendants - -

- )} - - } - /> - - ) -} - -function ExplanationSection() { - const engine = useContext(EngineContext) - const { t } = useTranslation() - const { palettes } = useContext(ThemeColorsContext) - - return ( -
-

Répartition de la rémunération totale

- -
- ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/IndépendantSimulation.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/IndépendantSimulation.tsx new file mode 100644 index 000000000..623c76a0b --- /dev/null +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/IndépendantSimulation.tsx @@ -0,0 +1,12 @@ +import SimulateurWarning from 'Components/SimulateurWarning' +import Simulation from 'Components/Simulation' +import IndépendantExplanation from 'Components/simulationExplanation/IndépendantExplanation' +import React from 'react' +export default function IndépendantSimulation() { + return ( + <> + + } /> + + ) +} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Page.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Page.tsx new file mode 100644 index 000000000..058aa365e --- /dev/null +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Page.tsx @@ -0,0 +1,34 @@ +import { setSimulationConfig } from 'Actions/actions' +import { IsEmbeddedContext } from 'Components/utils/embeddedContext' +import Meta from 'Components/utils/Meta' +import { default as React, useContext, useEffect } from 'react' +import { useDispatch } from 'react-redux' +import { useLocation } from 'react-router-dom' +import { SimulatorData } from './metadata' + +export default function SimulateurPage({ + meta, + title, + config, + component: Component, + seoExplanations +}: SimulatorData[keyof SimulatorData]) { + const inIframe = useContext(IsEmbeddedContext) + const dispatch = useDispatch() + const fromGérer = !!useLocation<{ fromGérer?: boolean }>().state?.fromGérer + useEffect(() => { + if (!config) { + return + } + dispatch(setSimulationConfig(config, fromGérer)) + }, [config]) + + return ( + <> + {meta && } + {title && !inIframe &&

{title}

} + + {seoExplanations && !inIframe && seoExplanations} + + ) +} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ProfessionLibérale.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ProfessionLibérale.tsx deleted file mode 100644 index 4c5a33787..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ProfessionLibérale.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import Simulation from 'Components/Simulation' -import professionLibéraleConfig from 'Components/simulationConfigs/profession-libérale.yaml' -import StackedBarChart from 'Components/StackedBarChart' -import { ThemeColorsContext } from 'Components/utils/colors' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import { EngineContext } from 'Components/utils/EngineContext' -import React, { useContext, useEffect } from 'react' -import { Helmet } from 'react-helmet' -import { Trans, useTranslation } from 'react-i18next' -import { SitePathsContext } from 'Components/utils/SitePathsContext' -import { useHistory, useParams, useRouteMatch } from 'react-router-dom' -import { useDispatch } from 'react-redux' -import { updateSituation } from 'Actions/actions' -import { DottedName } from 'Rules' -import { utils } from 'publicodes' -import { capitalise0 } from '../../../../utils' - -// The subsimulator feature allow to customize a simulator page content (title, -// description) and url based on the answer to a multiple-choice question. -// Arguments: -// - `namespace` correspond to the question in the rule set -// - `sitepath` is a React Router path descriptor which must contain a -// `:subsimulator?` argument -function useSubSimulators( - namespace: DottedName, - sitepath: string -): string | undefined { - const engine = useContext(EngineContext) - const history = useHistory() - const dispatch = useDispatch() - const subsimulatorUrlParam = '/:subsimulator?' - if (!sitepath.includes(subsimulatorUrlParam)) { - throw new Error('sitepath must contain the subsimulator param.') - } - const urlState = useRouteMatch<{ subsimulator: string }>({ path: sitepath }) - ?.params?.subsimulator - const defaultUrl = sitepath.replace(subsimulatorUrlParam, '') - - // TODO: ajouter le support de l'attribut "titre" de la règle - const situationState = engine.situation[namespace]?.nodeValue - - const encodedSituationState = utils.encodeRuleName(situationState) - const subSimulatorsList = Object.keys(engine.getParsedRules()) - .filter(dottedname => dottedname.startsWith(namespace)) - .map(dottedname => dottedname.replace(`${namespace} . `, '')) - .map(rulename => utils.encodeRuleName(rulename)) - - useEffect(() => { - if (urlState && !subSimulatorsList.includes(urlState)) { - history.push(defaultUrl) - } else if (encodedSituationState && encodedSituationState !== urlState) { - history.push(`${defaultUrl}/${encodedSituationState}`) - } else if (urlState && urlState !== encodedSituationState) { - dispatch(updateSituation(namespace, `'${urlState}'`)) - } - }, [urlState, encodedSituationState]) - if (typeof situationState !== 'string') { - return - } - return situationState -} - -export default function ProfessionLibérale() { - const { t } = useTranslation() - const inIframe = useContext(IsEmbeddedContext) - const sitePaths = useContext(SitePathsContext) - const professionName = 'profession libérale' - // useSubSimulators( - // 'dirigeant . indépendant . PL . métier . santé', - // sitePaths.simulateurs['profession-libérale'] - // ) ?? 'profession libérale' - - return ( - <> - - - {t( - 'simulateurs.profession-libérale.page.titre', - `${capitalise0( - professionName - )} : simulateur de revenus et de cotisations` - )} - - - - {!inIframe && ( -

- - Simulateur de revenus pour {professionName} - -

- )} - {/* */} - } - /> - - ) -} - -function ExplanationSection() { - const engine = useContext(EngineContext) - const { t } = useTranslation() - const { palettes } = useContext(ThemeColorsContext) - - return ( -
-

Répartition de la rémunération totale

- -
- ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/RémunérationSASU.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/RémunérationSASU.tsx deleted file mode 100644 index 974c76268..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/RémunérationSASU.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import RuleLink from 'Components/RuleLink' -import SalaryExplanation from 'Components/SalaryExplanation' -import Warning from 'Components/SimulateurWarning' -import Simulation from 'Components/Simulation' -import assimiléConfig from 'Components/simulationConfigs/assimilé.yaml' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import Meta from 'Components/utils/Meta' -import React, { useContext } from 'react' -import { Trans, useTranslation } from 'react-i18next' -import RémunérationSASUPreview from './images/RémunérationSASUPreview.png' - -export default function RémunérationSASU() { - const { t } = useTranslation() - const META = { - title: t( - 'pages.simulateurs.sasu.meta.titre', - 'Dirigeant de SASU : simulateur de revenus Urssaf' - ), - description: t( - 'pages.simulateurs.sasu.meta.description', - "Calcul du salaire net à partir du chiffre d'affaires + charges et vice-versa." - ), - ogTitle: t( - 'pages.simulateurs.sasu.meta.ogTitle', - 'Rémunération du dirigeant de SASU : un simulateur pour connaître votre salaire net' - ), - ogDescription: t( - 'pages.simulateurs.sasu.meta.ogDescription', - 'En tant que dirigeant assimilé-salarié, calculez immédiatement votre revenu net après impôt à partir du total alloué à votre rémunération.' - ), - ogImage: RémunérationSASUPreview - } - const inIframe = useContext(IsEmbeddedContext) - - return ( - <> - - {!inIframe && ( -

- - Simulateur de revenus pour dirigeant de SASU - -

- )} - - } - /> - {!inIframe && } - - ) -} - -function SeoExplanations() { - return ( - -

Comment calculer le salaire d'un dirigeant de SASU ?

- -

- Comme pour un salarié classique, le dirigeant de sasu{' '} - paye des cotisations sociales sur la rémunération qu'il se verse. Les - cotisations sont calculées de la même manière que pour le salarié : - elles sont décomposées en partie employeur et partie salarié et sont - exprimées comme un pourcentage du salaire brut. -

-

- Le dirigeant assimilé-salarié ne paye pas de{' '} - cotisations chômage. Par ailleurs, il ne bénéficie pas - de la{' '} - - réduction générale de cotisations - {' '} - ni des dispositifs encadrés par le code du travail comme les{' '} - - heures supplémentaires - {' '} - ou les primes. -

- -

- Il peut en revanche prétendre à la{' '} - - réduction ACRE - {' '} - en debut d'activité, sous certaines conditions. -

- -

- Vous pouvez utiliser notre simulateur pour calculer la{' '} - rémunération nette à partir d'un montant superbrut - alloué à la rémunération du dirigeant. Il vous suffit pour cela saisir - le montant total alloué dans la case "total chargé". La simulation peut - ensuite être affinée en répondant aux différentes questions. -

-
- ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx deleted file mode 100644 index 2fd3b2474..000000000 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import Banner from 'Components/Banner' -import PreviousSimulationBanner from 'Components/PreviousSimulationBanner' -import RuleLink from 'Components/RuleLink' -import SalaryExplanation from 'Components/SalaryExplanation' -import Simulation from 'Components/Simulation' -import salariéConfig from 'Components/simulationConfigs/salarié.yaml' -import { IsEmbeddedContext } from 'Components/utils/embeddedContext' -import Meta from 'Components/utils/Meta' -import { SitePathsContext } from 'Components/utils/SitePathsContext' -import { default as React, useContext } from 'react' -import { Trans, useTranslation } from 'react-i18next' -import { Link } from 'react-router-dom' -import urlIllustrationNetBrutEn from './images/illustration-net-brut-en.png' -import urlIllustrationNetBrut from './images/illustration-net-brut.png' -import salaireBrutNetPreviewEN from './images/SalaireBrutNetPreviewEN.png' -import salaireBrutNetPreviewFR from './images/SalaireBrutNetPreviewFR.png' - -export default function Salarié() { - const { t, i18n } = useTranslation() - const META = { - title: t( - 'pages.simulateurs.salarié.meta.titre', - 'Salaire brut / net : le convertisseur Urssaf' - ), - description: t( - 'pages.simulateurs.salarié.meta.description', - "Calcul du salaire net, net après impôt et coût total employeur. Beaucoup d'options disponibles (cadre, stage, apprentissage, heures supplémentaires, etc.)" - ), - ogTitle: t( - 'pages.simulateurs.salarié.meta.ogTitle', - 'Salaire brut, net, net après impôt, coût total : le simulateur ultime pour salariés et employeurs' - ), - ogDescription: t( - 'pages.simulateurs.salarié.meta.ogDescription', - "En tant que salarié, calculez immédiatement votre revenu net après impôt à partir du brut mensuel ou annuel. En tant qu'employé, estimez le coût total d'une embauche à partir du brut. Ce simulateur est développé avec les experts de l'Urssaf, et il adapte les calculs à votre situation (statut cadre, stage, apprentissage, heures supplémentaire, titre-restaurants, mutuelle, temps partiel, convention collective, etc.)" - ), - ogImage: - i18n.language === 'fr' ? salaireBrutNetPreviewFR : salaireBrutNetPreviewEN - } - const isEmbedded = React.useContext(IsEmbeddedContext) - return ( - <> - -

- - Simulateur de revenus pour salarié - -

-
- - {!isEmbedded && } - - ) -} - -function SeoExplanations() { - const { i18n } = useTranslation() - - return ( - -

Comment calculer le salaire net ?

- -

- Lors de l'entretien d'embauche l'employeur propose en général une - rémunération exprimée en « brut ». Le montant annoncé inclut ainsi les - cotisations salariales, qui servent à financer la protection sociale du - salarié et qui sont retranchées du salaire « net » perçu par le salarié. -

-

- Vous pouvez utiliser notre simulateur pour convertir le{' '} - salaire brut en net : il vous suffit pour cela saisir - la rémunération annoncée dans la case salaire brut. La simulation - peut-être affinée en répondant aux différentes questions (CDD, statut - cadre, heures supplémentaires, temps partiel, titre-restaurants, etc.). -

- -

- Par ailleurs depuis 2019, l' - impôt sur le revenu est prélevé - à la source. Pour ce faire, la direction générale des finances publiques - (DGFiP) transmet à l'employeur le taux d'imposition calculé à partir de - la déclaration de revenu du salarié. Si ce taux est inconnu, par exemple - lors d'une première année d'activité, l'employeur utilise le{' '} - - taux neutre - - . -

- -

Comment calculer le coût d'embauche ?

- -

- Si vous cherchez à embaucher, vous pouvez calculer le coût total de la - rémunération de votre salarié, ainsi que les montants de cotisations - patronales et salariales correspondants. Cela vous permet de définir le - niveau de rémunération en connaissant le montant global de charge que - cela représente pour votre entreprise. -

- -

- En plus du salaire, notre simulateur prend en compte le calcul des - avantages en nature (téléphone, véhicule de fonction, etc.), ainsi que - la mutuelle santé obligatoire. -

- -

- Il existe des{' '} - - aides différées - {' '} - à l'embauche qui ne sont pas toutes prises en compte par notre - simulateur, vous pouvez les retrouver sur{' '} - - le portail officiel - - . -

- - ) -} - -export const SalarySimulation = () => { - const sitePaths = useContext(SitePathsContext) - return ( - <> - } - customEndMessages={ - <> - - Vous pouvez maintenant concrétiser votre projet d'embauche. - -
- - - Connaître les démarches - - -
- - } - /> -
- - - - Vous êtes dirigeant d'une SAS(U) ?{' '} - - Accéder au simulateur de revenu dédié - - - - - ) -} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SalariéSimulation.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SalariéSimulation.tsx new file mode 100644 index 000000000..5a6ec5028 --- /dev/null +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SalariéSimulation.tsx @@ -0,0 +1,46 @@ +import Banner from 'Components/Banner' +import PreviousSimulationBanner from 'Components/PreviousSimulationBanner' +import Simulation from 'Components/Simulation' +import SalaryExplanation from 'Components/simulationExplanation/SalaryExplanation' +import { SitePathsContext } from 'Components/utils/SitePathsContext' +import { default as React, useContext } from 'react' +import { Trans } from 'react-i18next' +import { Link } from 'react-router-dom' + +export default function SalariéSimulation() { + const sitePaths = useContext(SitePathsContext) + return ( + <> + } + customEndMessages={ + <> + + Vous pouvez maintenant concrétiser votre projet d'embauche. + +
+ + + Connaître les démarches + + +
+ + } + /> +
+ + + + Vous êtes dirigeant d'une SAS(U) ?{' '} + + Accéder au simulateur de revenu dédié + + + + + ) +} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx index efcc9b8eb..212d20fa1 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/SchemeComparaison.tsx @@ -1,34 +1,11 @@ import SchemeComparaison from 'Components/SchemeComparaison' import React from 'react' -import { Helmet } from 'react-helmet' import { Trans, useTranslation } from 'react-i18next' export default function SchemeComparaisonPage() { const { t } = useTranslation() return ( <> - - - {t( - 'comparaisonRégimes.page.titre', - 'Indépendant, assimilé salarié ou auto-entrepreneur : découvrez le régime qui vous correspond le mieux' - )} - - - -

- - Indépendant, assimilé salarié ou{' '} - auto-entrepreneur : quel - régime choisir ? - -

Lorsque vous créez votre société, le choix du statut juridique va diff --git a/mon-entreprise/source/components/simulationConfigs/artiste-auteur.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/artiste-auteur.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/artiste-auteur.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/artiste-auteur.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/auto-entrepreneur.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/auto-entrepreneur.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/auto-entrepreneur.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/auto-entrepreneur.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/chômage-partiel.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/chômage-partiel.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/chômage-partiel.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/chômage-partiel.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/assimilé.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/dirigeant-sasu.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/assimilé.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/dirigeant-sasu.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/indépendant.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/indépendant.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/indépendant.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/indépendant.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/profession-libérale.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/profession-libérale.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/profession-libérale.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/profession-libérale.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/rémunération-dirigeant.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/rémunération-dirigeant.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/rémunération-dirigeant.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/rémunération-dirigeant.yaml diff --git a/mon-entreprise/source/components/simulationConfigs/salarié.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/salarié.yaml similarity index 100% rename from mon-entreprise/source/components/simulationConfigs/salarié.yaml rename to mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/configs/salarié.yaml diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/images/illustration-simulateur.svg b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/images/illustration-simulateur.svg new file mode 100644 index 000000000..e986caa09 --- /dev/null +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/images/illustration-simulateur.svg @@ -0,0 +1 @@ +Calculator \ No newline at end of file diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx index 2781d9480..9c6ac4088 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx @@ -1,19 +1,12 @@ import { usePersistingState } from 'Components/utils/persistState' import { ScrollToTop } from 'Components/utils/Scroll' import { SitePathsContext } from 'Components/utils/SitePathsContext' -import React, { useContext, useEffect } from 'react' +import { default as React, useContext, useEffect, useMemo } from 'react' import { Trans } from 'react-i18next' import { Link, Route, Switch, useLocation } from 'react-router-dom' -import ArtisteAuteur from './ArtisteAuteur' -import AssimiléSalarié from './RémunérationSASU' -import ChômagePartiel from './ChômagePartiel' -import ProfessionLibérale from './ProfessionLibérale' -import AutoEntrepreneur from './AutoEntrepreneur' +import useSimulatorsData from './metadata' +import SimulateurPage from './Page' import Home from './Home' -import Indépendant from './Indépendant' -import Salarié from './Salarié' -import SchemeComparaison from './SchemeComparaison' -import ÉconomieCollaborative from './ÉconomieCollaborative' export default function Simulateurs() { const sitePaths = useContext(SitePathsContext) @@ -26,7 +19,20 @@ export default function Simulateurs() { setLastState(state) } }, [setLastState, state]) - + const simulatorsData = useSimulatorsData() + const simulatorRoutes = useMemo( + () => + Object.values(simulatorsData) + .filter(({ path }) => path.startsWith(sitePaths.simulateurs.index)) + .map(s => ( + } + /> + )), + [simulatorsData, sitePaths] + ) return ( <> @@ -60,36 +66,7 @@ export default function Simulateurs() { )} - - - - - - - - - + {simulatorRoutes} ) diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/metadata.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/metadata.tsx new file mode 100644 index 000000000..ab37422e6 --- /dev/null +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/metadata.tsx @@ -0,0 +1,667 @@ +import RuleLink from 'Components/RuleLink' +import SimulateurWarning from 'Components/SimulateurWarning' +import Simulation from 'Components/Simulation' +import AutoEntrepreneurExplanation from 'Components/simulationExplanation/AutoEntrepreneurExplanation' +import SalaryExplanation from 'Components/simulationExplanation/SalaryExplanation' +import { SitePathsContext } from 'Components/utils/SitePathsContext' +import React, { useContext, useMemo } from 'react' +import { Trans, useTranslation } from 'react-i18next' +import { SimulationConfig } from 'Reducers/rootReducer' +import { constructLocalizedSitePath } from '../../sitePaths' +import AideDéclarationIndépendant from '../Gérer/AideDéclarationIndépendant' +import FormulaireMobilitéIndépendant from '../Gérer/DemandeMobilite' +import ArtisteAuteur from './ArtisteAuteur' +import ChômagePartielComponent from './ChômagePartiel' +import autoEntrepreneurConfig from './configs/auto-entrepreneur.yaml' +import chômageParielConfig from './configs/chômage-partiel.yaml' +import sasuConfig from './configs/dirigeant-sasu.yaml' +import indépendantConfig from './configs/indépendant.yaml' +import professionLibéraleConfig from './configs/profession-libérale.yaml' +import salariéConfig from './configs/salarié.yaml' +import AutoEntrepreneurPreview from './images/AutoEntrepreneurPreview.png' +import ChômagePartielPreview from './images/ChômagePartielPreview.png' +import urlIllustrationNetBrutEn from './images/illustration-net-brut-en.png' +import urlIllustrationNetBrut from './images/illustration-net-brut.png' +import RémunérationSASUPreview from './images/RémunérationSASUPreview.png' +import salaireBrutNetPreviewEN from './images/SalaireBrutNetPreviewEN.png' +import salaireBrutNetPreviewFR from './images/SalaireBrutNetPreviewFR.png' +import IndépendantSimulation from './IndépendantSimulation' +import SalariéSimulation from './SalariéSimulation' +import SchemeComparaisonPage from './SchemeComparaison' +import ÉconomieCollaborative from './ÉconomieCollaborative' + +const simulateurs = [ + 'salarié', + 'auto-entrepreneur', + 'indépendant', + 'sasu', + 'chômage-partiel', + 'artiste-auteur', + 'comparaison-statuts', + 'économie-collaborative', + 'aide-déclaration-indépendant', + 'demande-mobilité', + 'profession-libérale', + 'médecin', + 'chirurgien-dentiste', + 'sage-femme', + 'auxiliaire-médical' +] as const + +export type SimulatorData = Record< + typeof simulateurs[number], + { + meta?: { + title: string + description: string + ogTitle?: string + ogDescription?: string + ogImage?: string + } + icône: string + shortName: string + path: string + iframe?: string + title?: string + config?: SimulationConfig + seoExplanations?: React.ReactNode + private?: true + component: () => JSX.Element + } +> + +export function getSimulatorsData({ + t = (_, text) => text, + sitePaths = constructLocalizedSitePath('fr'), + language = 'fr' +}): SimulatorData { + return { + salarié: { + config: salariéConfig, + component: SalariéSimulation, + icône: '🤝', + title: t( + 'pages.simulateurs.salarié.title', + 'Simulateur de revenus pour salarié' + ), + iframe: 'simulateur-embauche', + meta: { + description: t( + 'pages.simulateurs.salarié.meta.description', + "Calcul du salaire net, net après impôt et coût total employeur. Beaucoup d'options disponibles (cadre, stage, apprentissage, heures supplémentaires, etc.)" + ), + ogDescription: t( + 'pages.simulateurs.salarié.meta.ogDescription', + "En tant que salarié, calculez immédiatement votre revenu net après impôt à partir du brut mensuel ou annuel. En tant qu'employé, estimez le coût total d'une embauche à partir du brut. Ce simulateur est développé avec les experts de l'Urssaf, et il adapte les calculs à votre situation (statut cadre, stage, apprentissage, heures supplémentaire, titre-restaurants, mutuelle, temps partiel, convention collective, etc.)" + ), + ogImage: + language === 'fr' ? salaireBrutNetPreviewFR : salaireBrutNetPreviewEN, + ogTitle: t( + 'pages.simulateurs.salarié.meta.ogTitle', + 'Salaire brut, net, net après impôt, coût total : le simulateur ultime pour salariés et employeurs' + ), + title: t( + 'pages.simulateurs.salarié.meta.titre', + 'Salaire brut / net : le convertisseur Urssaf' + ) + }, + path: sitePaths.simulateurs.salarié, + shortName: t('pages.simulateurs.salarié.shortname', 'Salarié'), + seoExplanations: ( + +

Comment calculer le salaire net ?

+

+ Lors de l'entretien d'embauche l'employeur propose en général une + rémunération exprimée en « brut ». Le montant annoncé inclut ainsi + les cotisations salariales, qui servent à financer la protection + sociale du salarié et qui sont retranchées du salaire « net » perçu + par le salarié. +

+

+ Vous pouvez utiliser notre simulateur pour convertir le{' '} + salaire brut en net : il vous suffit pour cela + saisir la rémunération annoncée dans la case salaire brut. La + simulation peut-être affinée en répondant aux différentes questions + (CDD, statut cadre, heures supplémentaires, temps partiel, + titre-restaurants, etc.). +

+ +

+ Par ailleurs depuis 2019, l' + impôt sur le revenu est + prélevé à la source. Pour ce faire, la direction générale des + finances publiques (DGFiP) transmet à l'employeur le taux + d'imposition calculé à partir de la déclaration de revenu du + salarié. Si ce taux est inconnu, par exemple lors d'une première + année d'activité, l'employeur utilise le{' '} + + taux neutre + + . +

+

Comment calculer le coût d'embauche ?

+

+ Si vous cherchez à embaucher, vous pouvez calculer le coût total de + la rémunération de votre salarié, ainsi que les montants de + cotisations patronales et salariales correspondants. Cela vous + permet de définir le niveau de rémunération en connaissant le + montant global de charge que cela représente pour votre entreprise. +

+

+ En plus du salaire, notre simulateur prend en compte le calcul des + avantages en nature (téléphone, véhicule de fonction, etc.), ainsi + que la mutuelle santé obligatoire. +

+

+ Il existe des{' '} + + aides différées + {' '} + à l'embauche qui ne sont pas toutes prises en compte par notre + simulateur, vous pouvez les retrouver sur{' '} + + le portail officiel + + . +

+ + ) + }, + 'auto-entrepreneur': { + config: autoEntrepreneurConfig, + icône: '🚶‍♂️', + iframe: 'simulateur-autoentrepreneur', + meta: { + description: t( + 'pages.simulateurs.auto-entrepreneur.meta.description', + "Calcul du revenu à partir du chiffre d'affaires, après déduction des cotisations et des impôts" + ), + ogDescription: t( + 'pages.simulateurs.auto-entrepreneur.meta.ogDescription', + "Grâce au simulateur de revenu auto-entrepreneur développé par l'Urssaf, vous pourrez estimer le montant de vos revenus en fonction de votre chiffre d'affaire mensuel ou annuel pour mieux gérer votre trésorerie. Ou dans le sens inverse : savoir quel montant facturer pour atteindre un certain revenu." + ), + ogImage: AutoEntrepreneurPreview, + ogTitle: t( + 'pages.simulateurs.auto-entrepreneur.meta.ogTitle', + 'Auto-entrepreneur : calculez rapidement votre revenu net à partir du CA et vice-versa' + ), + title: t( + 'pages.simulateurs.auto-entrepreneur.meta.titre', + 'Auto-entrepreneurs : simulateur de revenus' + ) + }, + component: function AutoEntrepreneurSimulation() { + return ( + <> + + } /> + + ) + }, + path: sitePaths.simulateurs['auto-entrepreneur'], + shortName: t( + 'pages.simulateurs.auto-entrepreneur.shortname', + 'Auto-entrepreneur' + ), + title: t( + 'pages.simulateurs.auto-entrepreneur.title', + 'Simulateur de revenus auto-entrepreneur' + ) + }, + indépendant: { + config: indépendantConfig, + icône: '🏃', + iframe: 'simulateur-independant', + path: sitePaths.simulateurs.indépendant, + shortName: t('pages.simulateurs.indépendant.shortname', 'Indépendant'), + title: t( + 'pages.simulateurs.indépendant.title', + 'Simulateur de revenus pour indépendant' + ), + meta: { + title: t( + 'pages.simulateurs.indépendant.meta.title', + 'Indépendant : simulateur de revenus Urssaf' + ), + description: t( + 'pages.simulateurs.indépendant.meta.description', + "Calcul du revenu net après impôt et des cotisations à partir du chiffre d'affaires et inversement" + ) + }, + component: IndépendantSimulation + }, + sasu: { + config: sasuConfig, + icône: '👨‍✈️', + iframe: 'simulateur-assimilesalarie', + meta: { + description: t( + 'pages.simulateurs.sasu.meta.description', + 'Calcul du salaire net à partir du total alloué à la rémunération et inversement' + ), + ogDescription: t( + 'pages.simulateurs.sasu.meta.ogDescription', + 'En tant que dirigeant assimilé-salarié, calculez immédiatement votre revenu net après impôt à partir du total alloué à votre rémunération.' + ), + ogImage: RémunérationSASUPreview, + ogTitle: t( + 'pages.simulateurs.sasu.meta.ogTitle', + 'Rémunération du dirigeant de SASU : un simulateur pour connaître votre salaire net' + ), + title: t( + 'pages.simulateurs.sasu.meta.titre', + 'Dirigeant de SASU : simulateur de revenus Urssaf' + ) + }, + path: sitePaths.simulateurs.SASU, + shortName: t('pages.simulateurs.sasu.shortname', 'Dirigeant de SASU'), + title: t( + 'pages.simulateurs.sasu.title', + 'Simulateur de revenus pour dirigeant de SASU' + ), + component: function SasuSimulation() { + return ( + <> + + } /> + + ) + }, + seoExplanations: ( + +

Comment calculer le salaire d'un dirigeant de SASU ?

+

+ Comme pour un salarié classique, le{' '} + dirigeant de sasu paye des cotisations sociales sur + la rémunération qu'il se verse. Les cotisations sont calculées de la + même manière que pour le salarié : elles sont décomposées en partie + employeur et partie salarié et sont exprimées comme un pourcentage + du salaire brut. +

+

+ Le dirigeant assimilé-salarié ne paye pas de{' '} + cotisations chômage. Par ailleurs, il ne bénéficie + pas de la{' '} + + réduction générale de cotisations + {' '} + ni des dispositifs encadrés par le code du travail comme les{' '} + + heures supplémentaires + {' '} + ou les primes. +

+

+ Il peut en revanche prétendre à la{' '} + + réduction ACRE + {' '} + en debut d'activité, sous certaines conditions. +

+

+ Vous pouvez utiliser notre simulateur pour calculer la{' '} + rémunération nette à partir d'un montant superbrut + alloué à la rémunération du dirigeant. Il vous suffit pour cela + saisir le montant total alloué dans la case "total chargé". La + simulation peut ensuite être affinée en répondant aux différentes + questions. +

+
+ ) + }, + 'artiste-auteur': { + icône: '👩‍🎨', + iframe: 'simulateur-artiste-auteur', + meta: { + title: t( + 'pages.simulateurs.artiste-auteur.meta.title', + 'Artiste-auteur: calcul des cotisations Urssaf' + ), + description: t( + 'pages.simulateurs.artiste-auteur.meta.description', + "Estimez les cotisations sociales sur les droits d'auteur et sur le revenu BNC" + ), + ogTitle: 'Artiste-auteur : estimez vos cotisations Urssaf', + ogDescription: + "Renseignez vos revenus (droits d'auteur et bnc) et découvrez immédiatement le montant des cotisations que vous aurez à payer sur l'année." + }, + path: sitePaths.simulateurs['artiste-auteur'], + title: t( + 'pages.simulateurs.artiste-auteur.title', + 'Estimer mes cotisations d’artiste-auteur' + ), + shortName: t( + 'pages.simulateurs.artiste-auteur.shortname', + 'Artiste-auteur' + ), + component: ArtisteAuteur + }, + 'chômage-partiel': { + component: ChômagePartielComponent, + config: chômageParielConfig, + path: sitePaths.simulateurs['chômage-partiel'], + icône: '😷', + iframe: 'simulateur-chomage-partiel', + meta: { + description: t( + 'pages.simulateurs.chômage-partiel.meta.description', + "Calcul du revenu net pour l'employé et du reste à charge pour l'employeur après remboursement de l'Etat, en prenant en compte toutes les cotisations sociales." + ), + ogDescription: t( + 'pages.simulateurs.chômage-partiel.meta.ogDescription', + "Accédez à une première estimation en saisissant à partir d'un salaire brut. Vous pourrez ensuite personaliser votre situation (temps partiel, convention, etc). Prends en compte la totalité des cotisations, y compris celles spécifiques à l'indemnité (CSG et CRDS)." + ), + ogImage: ChômagePartielPreview, + ogTitle: t( + 'pages.simulateurs.chômage-partiel.meta.ogTitle', + "Simulateur chômage partiel : découvrez l'impact sur le revenu net salarié et le coût total employeur." + ), + title: t( + 'pages.simulateurs.chômage-partiel.meta.titre', + "Calcul de l'indemnité chômage partiel : le simulateur Urssaf" + ) + }, + shortName: t( + 'pages.simulateurs.chômage-partiel.shortname', + 'Chômage partiel' + ), + title: t( + 'pages.simulateurs.chômage-partiel.title', + 'Covid-19 : Simulateur de chômage partiel' + ), + seoExplanations: ( + +

Comment calculer l'indemnité d'activité partielle ?

+

+ L'indemnité d'activité partielle de base est fixée par la loi à{' '} + 70% du brut. Elle est proratisée en fonction du + nombre d'heures chômées. Pour un salarié à 2300 € brut mensuel, qui + travaille à 50% de son temps usuel, cela donne{' '} + 2300 € × 50% × 70% = 805 € +

+

+ A cette indemnité de base s'ajoute l'indemnité complémentaire pour + les salaires proches du SMIC. Ce complément intervient lorsque le + cumul de la rémunération et de l'indemnité de base est en dessous + d'un SMIC net. Ces indemnités sont prises en charge par l'employeur, + qui sera ensuite remboursé en parti ou en totalité par l'Etat. +

+

+ 👉{' '} + + Voir le détail du calcul de l'indemnité + +

+

Comment calculer la part remboursée par l'État ?

+

+ L'Etat prend en charge une partie de l'indemnité partielle pour les + salaires allant jusqu'à **4,5 SMIC**, avec un minimum à 8,03€ par + heures chômée. Concrètement, cela abouti à une prise en charge à + 100% pour les salaires proches du SMIC. Celle-ci + diminue progressivement jusqu'à se stabiliser à **93%** pour les + salaires compris entre 2000 € et 7000 € (salaire + correspondant à la limite de 4.5 SMIC). +

+

+ 👉{' '} + + Voir le détail du calcul du remboursement de l'indemnité + +

+

Comment déclarer une activité partielle ?

+

+ Face à la crise du coronavirus, les modalités de passage en activité + partielle ont été allégées. L'employeur est autorisé a placer ses + salariés en activité partielle avant que la demande officielle ne + soit déposée. Celui-ci dispose ensuite d'un délai de{' '} + 30 jours pour se mettre en règle. Les indemnités + seront versées avec un effet rétro-actif débutant à la mise en place + du chômage partiel. +

+

+ 👉{' '} + + Effectuer la demande de chômage partiel + +

+

+ {' '} + Quelles sont les cotisations sociales à payer pour l'indemnité + d'activité partielle ? +

+

+ L'indemnité d'activité partielle est soumise à la CSG/CRDS et à une + contribution maladie dans certains cas. Pour en savoir plus, voir la + page explicative sur{' '} + + le site de l'URSSAF + + . +

+
+ ) + }, + 'comparaison-statuts': { + component: SchemeComparaisonPage, + icône: '📊', + path: sitePaths.simulateurs.comparaison, + title: t( + 'pages.simulateurs.comparaison.title', + 'Indépendant, assimilé salarié ou auto-entrepreneur : quel régime choisir ?' + ), + meta: { + description: t( + 'pages.simulateurs.comparaison.meta.description', + 'Auto-entrepreneur, indépendant ou assimilé salarié ? Avec ce comparatif, trouvez le régime qui vous correspond le mieux' + ), + title: t( + 'pages.simulateurs.comparaison.meta.title', + "Création d'entreprise : le comparatif des régimes sociaux" + ) + }, + shortName: t( + 'pages.simulateurs.comparaison.shortname', + 'Comparaison des statuts' + ) + }, + 'économie-collaborative': { + component: ÉconomieCollaborative, + meta: { + title: t( + 'pages.économie-collaborative.meta.title', + 'Déclaration des revenus des plateforme en ligne : guide intéractif' + ), + description: t( + 'pages.économie-collaborative.meta.description', + 'Airbnb, Drivy, Blablacar, Leboncoin... Découvrez comment être en règle dans vos déclarations' + ) + }, + icône: '🙋', + path: sitePaths.simulateurs.économieCollaborative.index, + shortName: t( + 'pages.économie-collaborative.shortname', + 'Guide économie collaborative' + ) + }, + 'aide-déclaration-indépendant': { + component: AideDéclarationIndépendant, + icône: '✍️', + meta: { + description: t( + 'pages.gérer.aide-déclaration-indépendant.meta.description', + 'Calculer facilement les montants des charges sociales à reporter dans votre déclaration de revenu 2019.' + ), + title: t( + 'pages.gérer.aide-déclaration-indépendant.meta.title', + 'Déclaration de revenus indépendant : calcul du montant des cotisations' + ) + }, + path: sitePaths.gérer.déclarationIndépendant, + shortName: t( + 'pages.gérer.aide-déclaration-indépendant.shortname', + 'Aide à la déclaration de revenu' + ), + title: t( + 'pages.gérer.aide-déclaration-indépendant.title', + "Aide à la déclaration de revenus au titre de l'année 2019" + ) + }, + 'demande-mobilité': { + component: FormulaireMobilitéIndépendant, + icône: '🧳', + meta: { + title: t( + 'pages.gérer.demande-mobilité.meta.title', + 'Travailleur indépendant : demande de mobilité en Europe' + ), + description: t( + 'pages.gérer.demande-mobilité.meta.description', + "Formulaire interactif à compléter pour les indépendants souhaitant exercer leur activité dans d'autres pays d'Europe" + ) + }, + path: sitePaths.gérer.formulaireMobilité, + shortName: t( + 'pages.gérer.demande-mobilité.shortname', + 'Demande de mobilité en Europe' + ), + private: true, + iframe: 'demande-mobilité' + }, + médecin: { + config: médecinConfig, + icône: '⚕️', + iframe: 'médecin', + path: sitePaths.simulateurs['profession-libérale'].médecin, + shortName: t('pages.simulateurs.médecin.shortname', 'Médecin'), + title: t( + 'pages.simulateurs.médecin.title', + 'Simulateur de revenus pour médecin en libéral' + ), + component: IndépendantSimulation + }, + 'chirurgien-dentiste': { + config: dentisteConfig, + icône: '🦷', + iframe: 'chirurgien-dentiste', + path: sitePaths.simulateurs['profession-libérale']['chirurgien-dentiste'], + shortName: t( + 'pages.simulateurs.chirurgien-dentiste.shortname', + 'Chirurgien-dentiste' + ), + title: t( + 'pages.simulateurs.chirurgien-dentiste.title', + 'Simulateur de revenus pour chirurgien-dentiste en libéral' + ), + component: IndépendantSimulation + }, + 'sage-femme': { + config: sageFemmeConfig, + icône: '👶', + iframe: 'sage-femme', + path: sitePaths.simulateurs['profession-libérale']['sage-femme'], + shortName: t('pages.simulateurs.sage-femme.shortname', 'Sage-femme'), + title: t( + 'pages.simulateurs.sage-femme.title', + 'Simulateur de revenus pour sage-femme en libéral' + ), + component: IndépendantSimulation + }, + 'auxiliaire-médical': { + config: auxiliaireConfig, + icône: '🩹', + iframe: 'auxiliaire-médical', + path: sitePaths.simulateurs['profession-libérale'].auxiliaire, + shortName: t( + 'pages.simulateurs.auxiliaire.shortname', + 'Axiliaire médical' + ), + title: t( + 'pages.simulateurs.auxiliaire.title', + 'Simulateur de revenus pour auxiliaire médical en libéral' + ), + component: IndépendantSimulation + }, + 'profession-libérale': { + config: professionLibéraleConfig, + icône: '💻', + meta: { + title: t( + 'pages.simulateurs.profession-libérale.meta.title', + 'Professions libérale : le simulateur Urssaf' + ), + description: t( + 'pages.simulateurs.profession-libérale.meta.description', + "Calcul du revenu net pour les indépendants en libéral à l'impôt sur le revenu (IR, BNC)" + ) + }, + iframe: 'profession-liberale', + path: sitePaths.simulateurs['profession-libérale'].index, + shortName: t( + 'pages.simulateurs.profession-libérale.shortname', + 'Profession libérale' + ), + title: t( + 'pages.simulateurs.profession-libérale.title', + 'Simulateur de revenus pour profession libérale' + ), + component: IndépendantSimulation + } + } +} + +export default function useSimulatorsData(): SimulatorData { + const { t, i18n } = useTranslation() + const sitePaths = useContext(SitePathsContext) + + return useMemo( + () => getSimulatorsData({ t, sitePaths, language: i18n.language }), + [t, sitePaths, i18n.language] + ) +} + +professionLibéraleConfig as SimulationConfig + +const auxiliaireConfig: SimulationConfig = { + ...professionLibéraleConfig, + situation: { + ...professionLibéraleConfig.situation, + "entreprise . catégorie d'activité . libérale règlementée": 'oui', + 'dirigeant . indépendant . PL . métier': "'santé . auxiliaire médical'" + } +} + +const dentisteConfig: SimulationConfig = { + ...professionLibéraleConfig, + situation: { + ...professionLibéraleConfig.situation, + "entreprise . catégorie d'activité . libérale règlementée": 'oui', + 'dirigeant . indépendant . PL . métier': "'santé . chirurgien-dentiste'" + } +} + +const médecinConfig: SimulationConfig = { + ...professionLibéraleConfig, + situation: { + ...professionLibéraleConfig.situation, + "entreprise . catégorie d'activité . libérale règlementée": 'oui', + 'dirigeant . indépendant . PL . métier': "'santé . médecin'" + } +} + +const sageFemmeConfig: SimulationConfig = { + ...professionLibéraleConfig, + situation: { + ...professionLibéraleConfig.situation, + "entreprise . catégorie d'activité . libérale règlementée": 'oui', + 'dirigeant . indépendant . PL . métier': "'santé . sage-femme'" + } +} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx index 6f27861e2..d555b425e 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx @@ -28,9 +28,6 @@ export default function ActivitésSelection() { ) return ( <> - - {titre} -

{titre}

diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Stats/Stats.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Stats/Stats.tsx index 5af2b77f3..bf73f262b 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Stats/Stats.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Stats/Stats.tsx @@ -24,7 +24,7 @@ import styled from 'styled-components' import statsJson from '../../../../data/stats.json' import { capitalise0 } from '../../../../utils' import Privacy from '../../layout/Footer/Privacy' -import { useSimulatorsMetadata } from '../Simulateurs/Home' +import useSimulatorsData from '../Simulateurs/metadata' const stats: StatsData = statsJson as any @@ -78,7 +78,7 @@ export default function Stats() { 'oneMonthAgo' ) const { palettes } = useContext(ThemeColorsContext) - const simulatorsMetadata = useSimulatorsMetadata() + const simulators = Object.values(useSimulatorsData()) return ( <> @@ -130,9 +130,7 @@ export default function Stats() { {stats.simulators[choicesimulators].visites.map( ({ label, nb_visits }) => { - const details = simulatorsMetadata.find(({ sitePath }) => - sitePath.includes(label) - ) + const details = simulators.find(({ path }) => path.includes(label)) if (!details) { return null } @@ -142,12 +140,12 @@ export default function Stats() { value={nb_visits} title={ <> - {details.name}{' '} + {details.shortName}{' '} import('../Dev/ColorPicker')) function IntegrationCustomizer() { const { search } = useLocation() + const simulators = useSimulatorsData() + const integrableModuleNames = useMemo( + () => + Object.values(simulators) + .filter(s => s.iframe && !s.private) + .map(s => s.iframe), + [simulators] + ) const defaultModuleFromUrl = new URLSearchParams(search ?? '').get('module') ?? '' const [currentModule, setCurrentModule] = React.useState( diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/sitePaths.ts b/mon-entreprise/source/sites/mon-entreprise.fr/sitePaths.ts index f146489c8..79988d372 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/sitePaths.ts +++ b/mon-entreprise/source/sites/mon-entreprise.fr/sitePaths.ts @@ -55,8 +55,14 @@ const sitePathsFr = { comparaison: '/comparaison-régimes-sociaux', salarié: '/salaire-brut-net', 'artiste-auteur': '/artiste-auteur', + 'profession-libérale': { + index: '/profession-liberale', + médecin: '/medecin', + auxiliaire: '/auxiliaire-médical', + 'chirurgien-dentiste': '/chirurgien-dentiste', + 'sage-femme': '/sage-femme' + }, 'chômage-partiel': '/chômage-partiel', - 'profession-libérale': '/profession-libérale/:subsimulator?', économieCollaborative: { index: '/économie-collaborative', votreSituation: '/votre-situation' @@ -107,6 +113,13 @@ const sitePathsEn = { salarié: '/salary', 'artiste-auteur': '/artist-author', 'chômage-partiel': '/partial-unemployement', + 'profession-libérale': { + index: '/liberal-profession', + médecin: '/doctor', + auxiliaire: '/medical-auxiliary', + 'chirurgien-dentiste': '/dental-surgeon', + 'sage-femme': '/midwife' + }, économieCollaborative: { index: '/sharing-economy', votreSituation: '/your-situation' diff --git a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap index 2268b108e..6424c9e6a 100644 --- a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap @@ -83,15 +83,30 @@ exports[`calculate simulations-artiste-auteur: salarié 2`] = `"[1603]"`; exports[`calculate simulations-artiste-auteur: salarié 3`] = `"[12410]"`; -exports[`calculate simulations-auto-entrepreneur: ACRE 1`] = `"[20686,57,1667,0,20000]"`; +exports[`calculate simulations-auto-entrepreneur: ACRE 1`] = ` +"[20686,57,1667,0,20000] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-auto-entrepreneur: ACRE 2`] = `"[33228,269,2500,0,30000]"`; +exports[`calculate simulations-auto-entrepreneur: ACRE 2`] = ` +"[33228,269,2500,0,30000] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-auto-entrepreneur: ACRE 3`] = `"[45267,439,3333,0,40000]"`; +exports[`calculate simulations-auto-entrepreneur: ACRE 3`] = ` +"[45267,439,3333,0,40000] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-auto-entrepreneur: aides 1`] = `"[5171,14,417,0,5000]"`; +exports[`calculate simulations-auto-entrepreneur: aides 1`] = ` +"[5171,14,417,0,5000] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-auto-entrepreneur: aides 2`] = `"[51714,143,4167,0,50000]"`; +exports[`calculate simulations-auto-entrepreneur: aides 2`] = ` +"[51714,143,4167,0,50000] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; exports[`calculate simulations-auto-entrepreneur: impôt sur le revenu 1`] = `"[32092,591,2083,706,24294]"`; @@ -274,11 +289,20 @@ exports[`calculate simulations-rémunération-dirigeant (assimilé salarié): é exports[`calculate simulations-rémunération-dirigeant (assimilé salarié): échelle de rémunération 8`] = `"[4751,0,0,52684,4,46]"`; -exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 1`] = `"[0,0,806,2046,2,0]"`; +exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 1`] = ` +"[0,0,806,2046,2,0] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 2`] = `"[0,0,1611,4093,3,8]"`; +exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 2`] = ` +"[0,0,1611,4093,3,8] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; -exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 3`] = `"[0,0,2337,6139,4,12]"`; +exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): ACRE 3`] = ` +"[0,0,2337,6139,4,12] +Notifications affichées : dirigeant . auto-entrepreneur . notification valeur annuelle" +`; exports[`calculate simulations-rémunération-dirigeant (auto-entrepreneur): Contrats Madelin 1`] = `"[0,0,2070,8186,4,16]"`; diff --git a/mon-entreprise/test/regressions/simulations.jest.js b/mon-entreprise/test/regressions/simulations.jest.js index 4969352fe..abd371913 100644 --- a/mon-entreprise/test/regressions/simulations.jest.js +++ b/mon-entreprise/test/regressions/simulations.jest.js @@ -8,11 +8,11 @@ /* eslint-disable no-undef */ import Engine from 'publicodes' import rules from '../../source/rules' -import artisteAuteurConfig from '../../source/components/simulationConfigs/artiste-auteur.yaml' -import autoentrepreneurConfig from '../../source/components/simulationConfigs/auto-entrepreneur.yaml' -import independantConfig from '../../source/components/simulationConfigs/indépendant.yaml' -import remunerationDirigeantConfig from '../../source/components/simulationConfigs/rémunération-dirigeant.yaml' -import employeeConfig from '../../source/components/simulationConfigs/salarié.yaml' +import artisteAuteurConfig from '../../source/sites/mon-entreprise.fr/pages/Simulateurs/configs/artiste-auteur.yaml' +import autoentrepreneurConfig from '../../source/sites/mon-entreprise.fr/pages/Simulateurs/configs/auto-entrepreneur.yaml' +import independantConfig from '../../source/sites/mon-entreprise.fr/pages/Simulateurs/configs/indépendant.yaml' +import remunerationDirigeantConfig from '../../source/sites/mon-entreprise.fr/pages/Simulateurs/configs/rémunération-dirigeant.yaml' +import employeeConfig from '../../source/sites/mon-entreprise.fr/pages/Simulateurs/configs/salarié.yaml' import aideDéclarationConfig from '../../source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml' import artisteAuteurSituations from './simulations-artiste-auteur.yaml' import autoEntrepreneurSituations from './simulations-auto-entrepreneur.yaml' From 3d2edf88372509aa7ad908e82eef528e5a8e63a4 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Tue, 29 Sep 2020 13:04:56 +0200 Subject: [PATCH 2/2] =?UTF-8?q?:art:=20Am=C3=A9liore=20le=20style=20des=20?= =?UTF-8?q?simulateur=20et=20des=20landings=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/components/MoreInfosOnUs.tsx | 2 +- mon-entreprise/source/components/ui/Card.css | 65 ++-- mon-entreprise/source/components/ui/index.css | 5 + mon-entreprise/source/locales/ui-en.yaml | 283 ++++++++---------- .../pages/Créer/CreationChecklist.tsx | 65 ++-- .../mon-entreprise.fr/pages/Créer/Home.tsx | 17 +- .../mon-entreprise.fr/pages/Gérer/Home.tsx | 35 +-- .../pages/Landing/Landing.css | 13 +- .../pages/Landing/Landing.tsx | 14 +- .../pages/Simulateurs/Home.tsx | 109 +++---- .../pages/Simulateurs/metadata.tsx | 78 +++++ .../ActivitésSelection.tsx | 13 +- .../pages/integration/index.tsx | 15 +- 13 files changed, 362 insertions(+), 352 deletions(-) diff --git a/mon-entreprise/source/components/MoreInfosOnUs.tsx b/mon-entreprise/source/components/MoreInfosOnUs.tsx index c7f241ae2..7cf2f35ca 100644 --- a/mon-entreprise/source/components/MoreInfosOnUs.tsx +++ b/mon-entreprise/source/components/MoreInfosOnUs.tsx @@ -16,7 +16,7 @@ export default function MoreInfosOnUs() { return (
img { margin: 0.4rem !important; transform: scale(1.5) translateY(0.1rem); @@ -126,7 +113,7 @@ .ui__.card.box .ui__.big.box-icon > img { transform: scale(2.3) translateY(0.2rem); - margin: 0.8rem !important; + margin: 0.6rem !important; } .ui__.card.box.inverted-colors { @@ -137,9 +124,49 @@ color: #f3f3f3; } -@media (max-width: 500px) { +.ui__.box-container { + display: grid; + justify-items: stretch; +} +.ui__.box-container:not(.full-width) { + margin: 0 -0.6rem; +} +.ui__.small.box-container { + grid-template-columns: repeat(2, 1fr); +} +@media (max-width: 400px) { .ui__.card.box { max-width: 100%; - flex: 1; + } +} + +@media (min-width: 400px) { + .ui__.small.box-container { + grid-template-columns: repeat(3, 1fr); + } + .ui__.box-container { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (min-width: 700px) { + .ui__.small.box-container { + grid-template-columns: repeat(4, 1fr); + } + .ui__.box-container { + grid-template-columns: repeat(3, 1fr); + } +} + +@media (min-width: 1000px) { + .ui__.full-width.small.box-container { + grid-template-columns: repeat(5, auto); + } + .ui__.full-width.box-container { + --padding: calc((100vw - 1300px) / 2); + grid-template-columns: repeat(4, auto); + padding-right: var(--padding); + padding-left: var(--padding); + justify-content: center; } } diff --git a/mon-entreprise/source/components/ui/index.css b/mon-entreprise/source/components/ui/index.css index fba42ebae..23b6876d6 100644 --- a/mon-entreprise/source/components/ui/index.css +++ b/mon-entreprise/source/components/ui/index.css @@ -82,6 +82,11 @@ blockquote { color: #f3f3f3; } +.ui__.light-border { + border: 4px solid var(--lighterColor); + border-radius: 0.3rem; +} + .ui__.center-flex { display: flex; justify-content: center; diff --git a/mon-entreprise/source/locales/ui-en.yaml b/mon-entreprise/source/locales/ui-en.yaml index 3fc923062..4da144e75 100644 --- a/mon-entreprise/source/locales/ui-en.yaml +++ b/mon-entreprise/source/locales/ui-en.yaml @@ -1,7 +1,7 @@ -"404": +'404': action: Return to safe place message: This page does not exist or no longer exists -"<0>Covid-19 et chômage partiel : <3>Calculez votre indemnité": "<0>Covid-19 and Short-Time Work: <3>Calculate Your Benefit" +'<0>Covid-19 et chômage partiel : <3>Calculez votre indemnité': '<0>Covid-19 and Short-Time Work: <3>Calculate Your Benefit' <0>Oui: <0>Yes A quoi servent mes cotisations ?: What's included in my contributions? Accueil: Home @@ -17,6 +17,7 @@ Au-dessus de: Above Aucun résultat: No result$ Auto-entrepreneur: Auto-entrepreneur Auto-entrepreneur en EIRL: Auto-entrepreneur with EIRL option +Autres outils: Other tools Avec chômage partiel: With partial unemployment Calcul: Formula Cette commune n'existe pas: This commune does not exist @@ -28,16 +29,16 @@ Choisir plus tard: Choose later Chômage partiel: Partial unemployment Code d'intégration: Integration Code Commencer: Get started -"Commerçant, artisan, ou libéral ?": Trader, craftsman, or liberal? +'Commerçant, artisan, ou libéral ?': Trader, craftsman, or liberal? Comparaison statuts: Status comparison Continuer: Continue Coronavirus: Coronavirus Cotisations: Contributions Cotisations sociales: Social contributions Covid 19: Covid 19 -"Covid-19 : Calculer l'impact du chômage partiel": "Covid-19: Calculating the impact of short-time work" -"Covid-19 : Découvrez les mesures de soutien aux entreprises": "Covid-19: Find out about business support measures" -"Covid-19 : Découvrir les mesures de soutien aux entreprises": "Covid-19: Discovering Business Support Measures" +"Covid-19 : Calculer l'impact du chômage partiel": 'Covid-19: Calculating the impact of short-time work' +'Covid-19 : Découvrez les mesures de soutien aux entreprises': 'Covid-19: Find out about business support measures' +'Covid-19 : Découvrir les mesures de soutien aux entreprises': 'Covid-19: Discovering Business Support Measures' Coût pour l'entreprise: Cost to the company Crée le: Created on Créer une: Create a @@ -71,7 +72,7 @@ Gérant minoritaire: Managing director Habituellement: Usually Imprimer: Print Impôts: Taxes -"Indemnité chômage partiel prise en charge par l'état :": "State-paid short-time working allowance :" +"Indemnité chômage partiel prise en charge par l'état :": 'State-paid short-time working allowance :' Indépendant: Indépendant International: International Intégrer l'interface de simulation: Integrate the simulation interface @@ -95,6 +96,7 @@ Nous n'avons rien trouvé: We didn't find any matching registered company. Oui: Yes Outils pour les développeurs: Tools for developers Pages associées: Related pages +Par statut: By status Part du salaire net maintenue: Share of net salary maintained Part employeur: Employer share Part salariale: Employee share @@ -103,13 +105,14 @@ Pas en auto-entrepreneur: Not in auto-entrepreneur Pas implémenté: Not implemented Passer: Skip Personnalisez l'integration: Customize the integration -"Perte de revenu net :": "Loss of net income :" +'Perte de revenu net :': 'Loss of net income :' Plafonds des tranches: Wafer ceilings Plein écran: Fullscreen Plus d'informations: More information (fr) Plusieurs associés: Several partners Prise en charge du revenu net avec chômage partiel: Net income support with short-time working Prochaines questions: Next questions +Professionnels de santé: Health Care Professionals Protection sociale: Social security Précédent: Previous Prévisualisation: Preview @@ -131,7 +134,7 @@ Retour à mon activité: Back to my business Revenir à la documentation: Go back to documentation Revenu (incluant les dépenses liées à l'activité): Revenue (including expenses related to the activity) Revenu disponible: Disposable income -"Revenu net avec chômage partiel :": "Net income with short-time work :" +'Revenu net avec chômage partiel :': 'Net income with short-time work :' Revenu net mensuel: Monthly net income Réductions: Discounts Rémunération du dirigeant: Director's remuneration @@ -144,6 +147,7 @@ Salaire: Salary Salaire net: Net Salary Salaire net et brut: Net and gross salary Salarié: Employee +Salariés et employeurs: Employees and employers Sans responsabilité limitée: Without limited liability Si: If Simulateur de salaire: Employee salary simulation @@ -155,7 +159,7 @@ Taux: Rate Taux calculé: Calculated rate Taux moyen: Average rate Total des retenues: Total withheld -"Total payé par l'entreprise :": "Total paid by the company :" +"Total payé par l'entreprise :": 'Total paid by the company :' Tout effacer: Delete all Tranche de l'assiette: Scale bracket Un seul associé: Only one partner @@ -215,11 +219,11 @@ après: registered, you'll have access to the following kbis: description: - "1": It is the official document attesting to <2>the legal existence of a + '1': It is the official document attesting to <2>the legal existence of a commercial enterprise. In most cases, to be opposable and authentic for administrative procedures, the extract must be less than 3 months old. - "2": This document is generally requested when applying for a public tender, + '2': This document is generally requested when applying for a public tender, opening a professional bank account, purchasing professional equipment from distributors, etc. titre: The Kbis @@ -273,7 +277,7 @@ autoentrepreneur: titre: Auto-entrepeneur back: Resume simulation barème: scale -calcul-avec: "Calculation from <1>with :" +calcul-avec: 'Calculation from <1>with :' cancelExample: Back to your situation car dépend de: because it depends on cible: target @@ -385,8 +389,8 @@ comparaisonRégimes: AS: SAS, SASU or SARL with minority director auto: Auto-entreprise indep: - "1": EI, EIRL, EURL or SARL with majority director - "2": EI or EIRL + '1': EI, EIRL, EURL or SARL with majority director + '2': EI or EIRL legend: Possible legal status sécuritéSociale: | <0> Social security @@ -400,13 +404,13 @@ comparaisonRégimes: trimestreValidés: <0>Number of quarters validated <1>(for retirement) composantes: components coronavirus: - description: "<0>Coronavirus and short-time working: what impact on my + description: '<0>Coronavirus and short-time working: what impact on my income?<1>The government is putting in place measures to support employees affected by the Coronavirus crisis. One of the key measures is the - assumption of the entire short-time working compensation by the State." + assumption of the entire short-time working compensation by the State.' page: description: Estimate net income with short-time working benefits - titre: "Coronavirus and short-time working: what impact on your income?" + titre: 'Coronavirus and short-time working: what impact on your income?' cotisation: contribution créer: cta: @@ -425,7 +429,7 @@ créer: <0>List of legal statuses <1>EURL, SARL, SASU, etc: a shortcut if you already know your status titre: Create a company - warningPL: "Note: the case of regulated liberal professions is not covered" + warningPL: 'Note: the case of regulated liberal professions is not covered' d'aides: of aid domiciliation inconnue: unknown address domiciliée à: domiciled in @@ -541,9 +545,9 @@ entreprise: creation process. It is automatically saved in your browser. banque: description: - "1": The purpose of a <1>professional bank account is to separate your + '1': The purpose of a <1>professional bank account is to separate your company's assets from your personal assets. - "2": "The professional bank account allows you to:" + '2': 'The professional bank account allows you to:' EI: If its opening is not obligatory for an EI, it is strongly recommended. liste: > <0>Differentiate your private and professional operations and simplify @@ -746,13 +750,13 @@ indicationTempsPlein: in full-time gross salary equivalent inférieurs à: lower than jour: day landing: - aboutUs: "<0>Who are we ?<1>We are a small<2>, autonomous and + aboutUs: '<0>Who are we ?<1>We are a small<2>, autonomous and multidisciplinary team within<4> URSSAF. We have at heart to be close to your needs in order to constantly improve this site in accordance with the <7>beta.gouv.fr approach.<2>We have developed this site to <2>support entrepreneurs in the development of their business.<3>Our goal is to <2>remove all uncertainties with regard to the administration - so that you can concentrate on what matters: your business." + so that you can concentrate on what matters: your business.' choice: create: <0>Create a company<1>Assistance in choosing the status and the complete list of creation steps @@ -761,7 +765,7 @@ landing: flow. simulators: <0>Access the simulators<1>The exhaustive list of all the simulators available on the site. - covid19: "Covid-19: Calculating the impact of short-time work" + covid19: 'Covid-19: Calculating the impact of short-time work' seeSimulators: See the simulators list subtitle: All the resources you need to develop your business, from legal status to hiring. @@ -810,6 +814,13 @@ oui: yes page: documentation: title: Documentation + simulateurs: + accueil: + description: <0>All the simulators on this site are :<1><0><0>Maintained + up to date with the latest legislative + developments<1><0>Continuously improved to increase the number + of devices considered<2><0>Easily and freely integrates on any + website. <3>Learn more about it. pages: common: ressources-auto-entrepreneur: @@ -820,13 +831,13 @@ pages: authorities concerning auto-entrepreneurs and the micro-enterprise scheme (in french). dévelopeurs: - bibliothèque: "<0>Integrate our calculation library<1>If you think that your + bibliothèque: '<0>Integrate our calculation library<1>If you think that your site or service would benefit from displaying salary calculations, for example switching from gross salary to net salary, good news: all the contribution and tax calculations behind my-company.fr are free and <2>can be integrated in the form of an <2>NPM library.<2>Put simply, - your team's developers are able to integrate the calculation into your - interface in 5 minutes{emoji('⌚')}, without having to deal with the + your team''s developers are able to integrate the calculation into your + interface in 5 minutes{emoji(''⌚'')}, without having to deal with the complexity of payroll and the regular updating of calculation rules.<3>This library is a common digital library developed by the State and ACOSS. It is based on a new programming language, @@ -837,36 +848,36 @@ pages: recipe for a calculation is simple: input variables (gross wage), one or more output variables (net wage).<10>All these variables are listed and explained in our <2>online documentation.<11>Use the search - engine to find the right variable, then click on \"View source code\" to - get all the documentation: default value, possible values when it's an - enumeration of choice, unit when it's a number, description, associated - user question, etc.<12>Let's run a calculation closer to a payslip: + engine to find the right variable, then click on "View source code" to + get all the documentation: default value, possible values when it''s an + enumeration of choice, unit when it''s a number, description, associated + user question, etc.<12>Let''s run a calculation closer to a payslip: Here is a description of the input situation with links to the corresponding pages of the documentation :<13> An <3>executive earning <7>€3,400 gross, who benefits from the<10> bicycle mileage allowance and works in a company with <14>12 employees.<14>The calculation for this more complete example is - as follows:<15><0><16>{emoji('ℹ️ ')} Note that in the + as follows:<15><0><16>{emoji(''ℹ️ '')} Note that in the previous example we have to specify the transport payment rate ourselves.<17>Whereas in the <2>employee simulator, it is sufficient to fill in the municipality and the corresponding rate is - automatically determined. It's intentional: to keep the library (and the + automatically determined. It''s intentional: to keep the library (and the site) light, we use two online APIs. The<4> Geo API - communes to switch from the commune name to the common code. Then the<7> transport payout API, developed and maintained by us, which is not documented but its use is very simple and understandable <10>in this React component that calls it, a component that also uses the common - API.<18>Making economic charts{emoji(' 📈')}<19>It is also + API.<18>Making economic charts{emoji('' 📈'')}<19>It is also possible to use the library for economic or political analysis calculations. Here, the price of labour and the net wage is plotted against the gross wage.<20>We can see the progressiveness of the total wage, which is in percent lower for a minimum wage than for a high income. In other words, high-wage earners pay part of the social security - contributions of low-wage earners.<21>{emoji('⚠️ ')}Beware, this + contributions of low-wage earners.<21>{emoji(''⚠️ '')}Beware, this example does a lot of calculations in one go, which can block your browser for a few seconds. To overcome this problem, you would have to call the library in a Web Worker, but this is not possible for the <3>moment in - these demos.<22><0>" + these demos.<22><0>' développeurs: choice: github: <0>Contribute to GitHub<1>All our tools are open and publicly @@ -877,10 +888,10 @@ pages: publicode: <0>Publicodes<1>Our tools are powered by Publicodes, a new language for encoding "explainable" algorithms. code: - description: "Here is the code to copy and paste on your site:" + description: 'Here is the code to copy and paste on your site:' titre: Integration Code - code à copier: "Here is the code to copy and paste on your site:" - couleur: "What color? " + code à copier: 'Here is the code to copy and paste on your site:' + couleur: 'What color? ' home: choice: iframe: <0>Integrating a simulator<1>Integrate one of our simulators in one @@ -904,38 +915,42 @@ pages: meta: description: Easily calculate the amount of payroll taxes to report on your 2019 income tax return. - title: "Self-employed tax return: calculation of the amount of contributions" + title: 'Self-employed tax return: calculation of the amount of contributions' shortname: Income tax return assistance title: Help with your 2019 income tax return demande-mobilité: meta: description: Interactive form to be completed for self-employed persons wishing to carry out their activity in other European countries - title: "Self-employed: demand for mobility in Europe" + title: 'Self-employed: demand for mobility in Europe' shortname: Demand for mobility in Europe simulateurs: + accueil: + header: All the simulators on this site are kept up to date with the latest + legislative developments. + titre: Simulators available artiste-auteur: meta: description: Estimate social contributions on copyright and BNC income - title: "Artist-author: calculation of URSSAF membership fees" + title: 'Artist-author: calculation of URSSAF membership fees' shortname: Artist-author title: Estimate my artist/author dues auto-entrepreneur: meta: description: Calculation of your income based on turnover, after deduction of contributions and income tax. - ogDescription: "Thanks to the auto-entrepreneur income simulator developed by + ogDescription: 'Thanks to the auto-entrepreneur income simulator developed by URSSAF, you can estimate the amount of your income based on your monthly or annual turnover to better manage your cash flow. Or in the opposite direction: to know what amount to invoice to achieve a - certain income." - ogTitle: "Auto-entrepreneur: quickly calculate your net income from sales and - vice versa" - titre: "Auto-entrepreneurs: income simulator" - seo explanation: "<0>How do you calculate the net income for an + certain income.' + ogTitle: 'Auto-entrepreneur: quickly calculate your net income from sales and + vice versa' + titre: 'Auto-entrepreneurs: income simulator' + seo explanation: '<0>How do you calculate the net income for an auto-entrepreneur?<1>An auto-entrepreneur has to pay social security contributions to the administration (also known as - \"social charge\"). These social contributions are used to finance + "social charge"). These social contributions are used to finance social security, and give rights for retirement or health insurance. They are also used to finance vocational training.<2><0> <2>See details of how the contributions are calculated<3>But this is @@ -943,7 +958,7 @@ pages: account all expenses incurred in the course of the professional activity (assets, raw materials, premises, transport). Although they are not useful for the calculation of contributions and taxes, they must be - taken into account to estimate the viability of one''s + taken into account to estimate the viability of one''''s activity.<4>The complete calculation formula is therefore:<1><0>Net income = Turnover - Social contributions - Professional expenses<5>How to calculate income tax for an @@ -957,7 +972,7 @@ pages: carried out. It is said to be lump-sum because it does not take into account the actual expenses incurred in the activity.<9><0> <2>See details of the calculation of the income allowance for an - auto-entrepreneur<10>Useful resources<11><0>'" + auto-entrepreneur<10>Useful resources<11><0>''' shortname: Auto-entrepreneur title: Self-entrepreneur Income Simulator titre: Auto-entrepreneur income simulator @@ -1008,8 +1023,8 @@ pages: then be able to personalize your situation (part-time, agreement, etc). Take into account all contributions, including those specific to the allowance (CSG and CRDS). - ogTitle: "Short-time working simulator: find out the impact on the net salaried - income and the total employer cost." + ogTitle: 'Short-time working simulator: find out the impact on the net salaried + income and the total employer cost.' titre: Calculation of the short-time working allowance in France seo: <0>How is the partial activity allowance calculated?<1>The basic partial activity allowance is fixed by law at <2>70% of gross @@ -1041,17 +1056,17 @@ pages: For more information, see the explanatory page on the <2>URSSAF website. shortname: Partial unemployment - title: "Covid-19: Short-time work simulator" + title: 'Covid-19: Short-time work simulator' comparaison: meta: description: Self-employed, self-employed or similarly employed? With this comparison, find the plan that suits you best - title: "Starting a business: a comparison of social schemes" + title: 'Starting a business: a comparison of social schemes' shortname: Status Comparison - title: "Self-employed, assimilated employee or auto-entrepreneur: which plan to - choose?" + title: 'Self-employed, assimilated employee or auto-entrepreneur: which plan to + choose?' dirigean sasu: - explication seo: "<0>How to calculate the salary of a SASU executive? <1>As + explication seo: '<0>How to calculate the salary of a SASU executive? <1>As for a conventional employee, the SASU <1>manager pays social security contributions on the salary he or she pays. The contributions are calculated in the same way as for the employee: they are broken down @@ -1060,20 +1075,20 @@ pages: manager-employee does not pay <2>unemployment contributions. Moreover, they do not benefit from the <5>general reduction in contributions or from the schemes governed by the Labour Code, such as - <9>overtime or bonuses.<3>A SASU executive's salary can be - calculated by entering the total amount of the salary in the \"total - expense\" box, but he or she can claim the <2>ACRE reduction at the + <9>overtime or bonuses.<3>A SASU executive''s salary can be + calculated by entering the total amount of the salary in the "total + expense" box, but he or she can claim the <2>ACRE reduction at the beginning of the activity, under certain conditions.<4>You can use our simulator to calculate the <2>net remuneration from a - super-gross amount allocated to the executive's remuneration. To do + super-gross amount allocated to the executive''s remuneration. To do this, simply enter the announced compensation in the total loaded box. The simulation can then be refined by answering the various - questions." + questions.' indépendant: meta: description: Calculation of net income after tax and contributions based on turnover and vice versa - title: "Independent: Urssaf income simulator" + title: 'Independent: Urssaf income simulator' shortname: Independent title: Income simulator for the self-employed médecin: @@ -1083,7 +1098,7 @@ pages: meta: description: Net Income Calculation for Self-Employed Persons in Liberal Income Tax (IR, BNC) - title: "Liberal professions: the Urssaf simulator" + title: 'Liberal professions: the Urssaf simulator' shortname: Liberal profession title: Professional Income Simulator sage-femme: @@ -1124,9 +1139,9 @@ pages: (executive status, internship, apprenticeship, overtime, restaurant vouchers, mutual insurance, part-time work, collective agreement, etc.). - ogTitle: "Gross, net, net after-tax salary, total cost: the ultimate simulator - for employees and employers" - titre: "Gross / net salary: the Urssaf converter" + ogTitle: 'Gross, net, net after-tax salary, total cost: the ultimate simulator + for employees and employers' + titre: 'Gross / net salary: the Urssaf converter' seo: <0>How is the net salary calculated?<1>At the job interview, the employer usually proposes a "gross" remuneration. The amount announced thus includes employee contributions, which are used to finance the @@ -1159,9 +1174,9 @@ pages: description: Calculation of net salary from turnover + expenses and vice versa. ogDescription: As an officer in a similar position, immediately calculate your net income after tax from the total allocated to your compensation. - ogTitle: "SASU executive compensation: a simulator to find out your net salary" - titre: "Head of SASU: Urssaf revenue simulator" - seo-explanation: "<0>How to calculate the salary of a SASU executive? <1>As + ogTitle: 'SASU executive compensation: a simulator to find out your net salary' + titre: 'Head of SASU: Urssaf revenue simulator' + seo-explanation: '<0>How to calculate the salary of a SASU executive? <1>As for a classic employee, the SASU <2>manager pays social security contributions on the remuneration he pays himself. The contributions are calculated in the same way as for the employee: they are broken down @@ -1173,10 +1188,10 @@ pages: bonuses.<3>However, the employee is entitled to the <2>ACRE reduction at the start of employment, under certain conditions.<4>You can use our simulator to calculate the <2>net - remuneration from a super-gross amount allocated to the executive's + remuneration from a super-gross amount allocated to the executive''s remuneration. To do this, simply enter the total amount allocated in the - \"total charged\" box. The simulation can then be refined by answering - the various questions." + "total charged" box. The simulation can then be refined by answering + the various questions.' shortname: Head of SASU title: Income simulator for SASU manager titre: Revenue simulator for SAS(U) executive @@ -1184,14 +1199,14 @@ pages: meta: description: Airbnb, Drivy, Blablacar, Leboncoin... Find out how to be in order in your declarations - title: "Online platform income tax return: interactive guide" + title: 'Online platform income tax return: interactive guide' shortname: Collaborative Economy Guide par: per payslip: disclaimer: It takes into account national law but not union negotiated rules. Lots of financial aids for your enterprise exist, explore them on <1>aides-entreprises.fr (French). - heures: "Hours worked per month: " + heures: 'Hours worked per month: ' notice: This simulation helps you understand your French payslip, but it should not be used as one. For further details, check <1>service-public.fr (French). @@ -1260,87 +1275,6 @@ selectionRégime: page: titre: Social scheme selection titre: Which social scheme would you like to explore? -simulateurs: - accueil: - description: >- - <0>All the simulators on this site are: - - <1><0>Maintained with the latest legislation <1>Continuously improved to increase the number of devices taken into account <2>Developed in partnership with the Urssaf (the contribution collector entity in France)<2> - titre: Available simulators - artiste-auteur: - titre: Estimate my artist/author contributions - assimilé-salarié: - explications: The equal or minority directors of SARL or the directors of SA and - SAS are considered as "assimilé salarié" and are subject to the general - regime. Consequently, the director has the same social protection as an - employee, apart from unemployment coverage. - page: - description: Estimate your income as a SASU or SAS director based on your - turnover. All contributions and income tax are taken into account. - Official URSSAF simulator - titre: Official salary simulator for SASU and SAS directors - titre: SAS and SASU directors income simulator - auto-entrepreneur: - page: - description: Estimate your income as an auto-entrepreneur based on your - turnover. All contributions and income tax are taken into account. - Official URSSAF simulator. - titre: Official income simulator for auto-entrepreneur - titre: Auto-entrepreneur income simulator - indépendant: - explication1: Our estimate takes into account the <1>actual contributions - due by the self-employed person. During the first year of his activity, he - will pay a reduced flat rate (a sum of around 1300€ / year for a craftsman - benefiting from ACRE)... but it will be regularized the following year - according to this real amount. - explication2: Unemployment and occupational accident insurance are not covered - by the Social Security for the self-employed. Retirement based on - professional income is generally lower. To be covered, the professional - may take out additional insurance. - page: - description: Estimate your income as a self-employed person based on your - turnover (for EI, EURL and SARL majority directors). All contributions - and income tax are taken into account. Official URSSAF simulator - titre: Official income simulator for self-employed person - titre: Self-employed income simulator - inversionFail: > - The amount entered results in an impossible result. This is due to a - - threshold effect in the calculation of contributions. - - - We invite you to try again by slightly modifying the amount entered (a few euros more for example). - profession-libérale: - page: - description: simulators.profession-liberal.page.description - titre: simulators.profession-liberal.page.title - titre: Income simulator for {professionName}. - précision: - bonne: Good accuracy - défaut: "Refine the simulation by answering the following questions:" - faible: Low accuracy - moyenne: Medium accuracy - résumé: - aide-déclaration-revenu-indep: Easily calculate the amount of payroll taxes to - report on your 2019 income tax return. - artiste-auteur: Estimating the social security contributions of an artist or author - assimilé: | - Calculate the income of an officer of a minority SAS, SASU or SARL - auto: | - Calculate the income (or turnover) of an auto-entrepreneur - chômage-partiel: Simulate the net income paid to the employee, as well as the - total remaining cost to the company if the partial activity is used. - comparaison: > - Simulate the differences between the plans (contributions, retirement, - maternity, illness, etc.) - demande-mobilité: Application form for mobility in Europe for self-employed workers - indépendant: | - Calculate the income of a majority manager of EURL, EI, or SARL - salarié: > - Calculate the net, gross, or total salary of an employee, trainee, or - similar - économie-collaborative: A guide to know how to declare your income from online - platforms (AirBnb, leboncoin, blablacar, etc.). warning: artiste-auteur: This estimate is proposed for information only. It is based on the applicable regulatory elements and the elements that you have entered, @@ -1358,6 +1292,35 @@ simulateurs: titre: Before starting... urssaf: The figures are indicative and do not replace the actual accounts of the Urssaf, impots.gouv.fr, etc +simulateurs: + inversionFail: >- + The amount entered results in an impossible result. This is due to a + threshold effect in the calculation of contributions. + + + We invite you to try again by slightly modifying the amount entered (a few euros more for example). + précision: + défaut: 'Refine the simulation by answering the questions:' + warning: + artiste-auteur: + '1': This estimate is provided for information purposes. It is based on the + applicable regulatory elements and the elements that you have entered, + but it does not take into account your entire situation. The actual + amount of your contributions may therefore be different. + '2': This simulator allows you to estimate the amount of your contributions for + the year 2020 based on your projected income. + auto-entrepreneur: ' Self-entrepreneurs cannot deduct their expenses from their + turnover. Therefore, <3>all costs related to the business must be + <3>netted out to obtain the income actually received.' + cfe: The simulator does not include the business property tax (CFE), which is + due from the second year of the fiscal year. Its amount varies greatly + depending on the company's turnover and domiciliation. <2>More + information. + plus: Read the details + sasu: Corporate income tax and dividend management are not yet implemented. + titre: Before we start... + urssaf: The calculations are indicative and are not a substitute for the actual + statements of URSSAF, impots.gouv.fr, or others. simulation-end: cta: Know the steps to take hiring: @@ -1366,7 +1329,7 @@ simulation-end: text: You have reached the most accurate estimate. title: No more questions left! site: - titleTemplate: "%s" + titleTemplate: '%s' statut du dirigeant: description: <0>This choice is important because it determines the social security regime and the social coverage of the manager. The amount and terms @@ -1417,8 +1380,8 @@ une de ces conditions: one of these applies onwards, these revenues will be automatically reported by the platforms to the tax authorities and Urssaf. question: What types of activity did you undertake? - réassurance: "PS: this tool is only there to inform you, no data will be - transmitted to the administrations" + réassurance: 'PS: this tool is only there to inform you, no data will be + transmitted to the administrations' titre: How to declare income from digital platforms? activité: choix: What are more precisely the activities carried out? diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx index 32da5c530..b116f4df8 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/CreationChecklist.tsx @@ -452,19 +452,10 @@ export default function CreateCompany({ statut }: CreateCompanyProps) {

{emoji('🧰')} Ressources utiles

-
* { - flex: 1; - } - `} - > +
{isAutoentrepreneur && (

Simulateur de revenus auto-entrepreneur

- +

Simuler le montant de vos cotisations sociales et de votre impôt et estimez votre futur revenu net. - +

)} {['EI', 'EIRL', 'EURL'].includes(statut) && (

Simulateur de cotisations indépendant

- +

Simuler le montant de vos cotisations sociales pour bien préparer votre business plan. - +

)} {['SAS', 'SASU'].includes(statut) && (

Simulateur de rémunération pour dirigeant de SASU

- +

Simuler le montant de vos cotisations sociales pour bien préparer votre business plan. - +

)}

Après la création

- +

SIREN, SIRET, code APE, KBis. Un petit glossaire des termes que vous pourrez (éventuellement) rencontrer après la création. - +

{isAutoentrepreneur && } {i18n.language === 'fr' && ['EI', 'EIRL', 'EURL'].includes(statut) && ( -

Guide Urssaf pour les travailleur indépendant 2020

- +

Guide Urssaf pour les travailleur indépendant

+

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. - +


PDF @@ -577,31 +568,31 @@ export function RessourceAutoEntrepreneur() { <>

Questions fréquentes

- +

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 - +

{i18n.language === 'fr' && ( -

Guide partique Urssaf 2020

- +

Guide pratique 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. - -
+

+
PDF
@@ -609,15 +600,15 @@ export function RessourceAutoEntrepreneur() { )}

Comment déclarer son revenu aux impôts ?

- +

Les informations officielles de l'administration fiscale concernant les auto-entrepreneurs et le régime de la micro-entreprise. - +

diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx index 0d13f09e0..aaa6d3b26 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Créer/Home.tsx @@ -66,18 +66,9 @@ export default function Créer() {

Ressources utiles

-
* { - flex: 1; - } - `} - > +
@@ -89,7 +80,7 @@ export default function Créer() { diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 59f90ad47..6d10e278a 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -81,12 +81,12 @@ export default function SocialSecurity() { />
<> -
-
+
+
{company?.statutJuridique === 'EI' && !company.isAutoEntrepreneur && ( - Covid-19
Découvrir
+ Covid-19 Ressources utiles -
* { - flex: 1; - } - `} - > +
{dirigeant === 'indépendant' && i18n.language === 'fr' && process.env.HEAD !== 'master' && ( @@ -211,7 +200,7 @@ export default function SocialSecurity() { )} {!company?.isAutoEntrepreneur && ( @@ -225,7 +214,7 @@ export default function SocialSecurity() { )} {company?.isAutoEntrepreneur && ( @@ -240,7 +229,7 @@ export default function SocialSecurity() { )} diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.css b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.css index 328644eec..7c84b64da 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.css +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.css @@ -1,4 +1,3 @@ - .landing-title { margin-bottom: 1rem; display: flex; @@ -8,9 +7,9 @@ .landing-title__img { align-self: flex-end; margin-top: 2rem; - max-width: 18rem; - margin-left: 1rem; - margin-bottom: -2rem; + max-width: 19.5rem; + margin-left: 1.5rem; + margin-bottom: -3.5rem; } @media (min-width: 500px) { .landing-title__logo { @@ -20,10 +19,8 @@ @media (max-width: 900px) { .landing-title__img { - margin-top: 2rem; - margin-right: -5rem; - margin-left: -1rem; - max-height: 25rem; + margin: 0; + margin-bottom: -3.5rem; } .landing-header__brand-logo { height: 4rem; diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx index 029760396..0e4980eba 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Landing/Landing.tsx @@ -17,8 +17,8 @@ export default function Landing() { ) return ( <> -
-
+
+
logo mon-entreprise.fr
-
+
{emoji('💶')}
@@ -82,7 +82,7 @@ export default function Landing() {
{emoji('🧮')}
@@ -98,7 +98,7 @@ export default function Landing() {
-
+

Qui sommes-nous ?

diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx index 3c34d17bf..dc0ef22c2 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/Home.tsx @@ -13,7 +13,7 @@ export default function Simulateurs() { const { t } = useTranslation() const sitePaths = useContext(SitePathsContext) const simulators = useSimulatorsData() - const titre = t('simulateurs.accueil.titre', 'Simulateurs disponibles') + const titre = t('pages.simulateurs.accueil.titre', 'Simulateurs disponibles') return ( <> @@ -23,23 +23,11 @@ export default function Simulateurs() {

{titre}

- + Tous les simulateurs sur ce site sont maintenus à jour avec les dernières évolutions législatives.

- - Intégrer un simulateur - - {/*

- - Le cas des professions libérales réglementées n'est pas encore - traité - -

*/}
-
-

- Salariés et employeurs +
+

+ Salariés et employeurs

-
+
-
-
-

Par type de société

-
.card { - border: 4px solid var(--lighterColor); - } - `} - > + +

+ Par statut +

+
-
- -

Par métier

-
.card { - border: 4px solid var(--lighterColor); - } - `} - > - + {process.env.HEAD !== 'master' && ( + + )}
-

- Professionnels de santé {emoji('🏥')} -

-
.card { - border: 4px solid var(--lighterColor); - } - `} - > - - - - -
-
- -
-

Autres outils

-
+ {process.env.HEAD !== 'master' && ( + <> +

+ + Professionnels de santé {emoji('🏥')} + +

+
+ + + + +
+ + )} +

+ Autres outils +

+
@@ -116,7 +83,7 @@ export default function Simulateurs() {
- +

Tous les simulateurs sur ce site sont :

  • @@ -128,7 +95,9 @@ export default function Simulateurs() { de dispositifs pris en compte
  • - Développés en partenariat avec l'Urssaf + Intégrable facilement et gratuitement sur + n'importe quel site internet.{' '} + En savoir plus.
@@ -146,7 +115,9 @@ function SimulateurCard({ }: SimulatorData[keyof SimulatorData] & { small?: boolean }) { return ( +

Comment calculer le revenu net d'un auto-entrepreneur ?

+

+ Un auto-entrepreneur doit payer des cotisations sociales à + l'administration. Ces cotisations servent au financement de la + sécurité sociale, et ouvrent des droits pour la retraite ou pour + l'assurance maladie. Elle permettent également de financer la + formation professionnelle. Leur montant varie en fonction du type + d'activité. +

+

+ {' '} + + 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ère + premières, local, transport). Bien qu'elles ne soient pas utilisées + pour le calcul des cotisations et de l'impôt, elles doivent être + prises en compte pour vérifier si l'activité est viable + économiquement. +

+

+ La formule de calcul complète est donc : +

+ + Revenu net = Chiffres d'affaires − Cotisations sociales − + Dépenses professionnelles + +
+

+

+ Comment calculer l'impôt sur le revenu pour un auto-entrepreneur ? +

+

+ Si vous avez opté pour le versement libératoire lors de la création + de votre auto-entreprise, l'impôt sur le revenu est payé en même + temps que les cotisations sociales. +

+

+ {' '} + + Voir comment est calculé le montant du versement libératoire + +

+

+ Sinon, vous serez imposé selon le barème standard de l'impôt sur le + revenu. Le revenu imposable est alors calculé comme un pourcentage + du chiffre d'affaires. C'est qu'on appel l'abattement forfaitaire. + Ce pourcentage varie en fonction du type d'activité excercé. On dit + qu'il est forfaitaire car il ne prends pas en compte les dépenses + réelles effectuées dans le cadre de l'activité. +

+

+ {' '} + + Voir le détail du calcul du revenu abattu pour un + auto-entrepreneur + +

+

+ Ressources utiles +

+
+ +
+
) }, indépendant: { @@ -538,6 +611,7 @@ export function getSimulatorsData({ }, médecin: { config: médecinConfig, + private: true, icône: '⚕️', iframe: 'médecin', path: sitePaths.simulateurs['profession-libérale'].médecin, @@ -549,6 +623,7 @@ export function getSimulatorsData({ component: IndépendantSimulation }, 'chirurgien-dentiste': { + private: true, config: dentisteConfig, icône: '🦷', iframe: 'chirurgien-dentiste', @@ -564,6 +639,7 @@ export function getSimulatorsData({ component: IndépendantSimulation }, 'sage-femme': { + private: true, config: sageFemmeConfig, icône: '👶', iframe: 'sage-femme', @@ -576,6 +652,7 @@ export function getSimulatorsData({ component: IndépendantSimulation }, 'auxiliaire-médical': { + private: true, config: auxiliaireConfig, icône: '🩹', iframe: 'auxiliaire-médical', @@ -591,6 +668,7 @@ export function getSimulatorsData({ component: IndépendantSimulation }, 'profession-libérale': { + private: true, config: professionLibéraleConfig, icône: '💻', meta: { diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx index d555b425e..f051873cc 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Simulateurs/ÉconomieCollaborative/ActivitésSelection.tsx @@ -1,15 +1,14 @@ import classnames from 'classnames' +import Animate from 'Components/ui/animate' +import Checkbox from 'Components/ui/Checkbox' +import InfoBulle from 'Components/ui/InfoBulle' import { ScrollToTop } from 'Components/utils/Scroll' import { SitePathsContext } from 'Components/utils/SitePathsContext' import { intersection } from 'ramda' import React, { useCallback, useContext } from 'react' import emoji from 'react-easy-emoji' -import { Helmet } from 'react-helmet' import { Trans, useTranslation } from 'react-i18next' import { Link } from 'react-router-dom' -import Animate from 'Components/ui/animate' -import Checkbox from 'Components/ui/Checkbox' -import InfoBulle from 'Components/ui/InfoBulle' import { debounce } from '../../../../../utils' import { toggleActivité } from './actions' import { activités, getTranslatedActivité } from './activitésData' @@ -147,11 +146,15 @@ export const ActivitéCard = ({ selected, interactive }), + style: { + flex: 1, + minWidth: '15rem' + }, key: title, ...(interactive && { tabIndex: -1 }), onMouseDown: toggle }, -
+
{selected !== undefined && (
diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/integration/index.tsx b/mon-entreprise/source/sites/mon-entreprise.fr/pages/integration/index.tsx index b15106b53..29adff825 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/integration/index.tsx +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/integration/index.tsx @@ -16,16 +16,11 @@ export default function Integration() { {pathname !== sitePaths.integration.index && (
-

- 🛠{' '} - - Outils pour les développeurs - {' '} - 🛠 -

+ 🛠{' '} + + Outils pour les développeurs + {' '} + 🛠
)}