From 847b4eeb4c71405b505f6d3e7a51fa168b743ae3 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Mon, 7 Sep 2020 12:14:24 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20Refacto=20des=20contr=C3=B4les?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ce commit supprime le concept de "contrôle" au sein du moteur, en les remplaçant par des règles publicodes classiques. Cela permet notamment d'uniformiser les règles d'applicabilité (désactivation via espace de nom ou "rend non applicable" par exemple) ainsi que d'accéder à la valeur d'un contrôle donné avec le nom de la règle correspondante. Par ailleurs renomme le concept de "contrôle" en "notifcation" dans la partie mon-entreprise/. --- mon-entreprise/scripts/i18n/utils.js | 23 - mon-entreprise/source/actions/actions.ts | 8 +- mon-entreprise/source/components/Controls.tsx | 79 --- .../{Controls.css => Notifications.css} | 22 +- .../source/components/Notifications.tsx | 81 +++ .../source/components/SchemeComparaison.tsx | 11 +- .../source/components/Simulation.tsx | 4 +- .../source/components/utils/EngineContext.tsx | 4 - mon-entreprise/source/locales/rules-en.yaml | 496 ++++++++++-------- mon-entreprise/source/reducers/rootReducer.ts | 13 +- mon-entreprise/source/rules/dirigeant.yaml | 85 +-- .../rules/entreprise-établissement.yaml | 30 +- .../source/rules/profession-libérale.yaml | 56 +- mon-entreprise/source/rules/salarié.yaml | 271 +++++----- .../formulaire-détachement.yaml | 24 +- publicodes/source/controls.js | 19 - publicodes/source/index.ts | 5 - publicodes/source/parseRule.tsx | 21 +- publicodes/source/translateRules.ts | 17 - publicodes/source/types/index.ts | 11 - publicodes/test/contrôles.test.js | 77 --- 21 files changed, 625 insertions(+), 732 deletions(-) delete mode 100644 mon-entreprise/source/components/Controls.tsx rename mon-entreprise/source/components/{Controls.css => Notifications.css} (62%) create mode 100644 mon-entreprise/source/components/Notifications.tsx delete mode 100644 publicodes/source/controls.js delete mode 100644 publicodes/test/contrôles.test.js diff --git a/mon-entreprise/scripts/i18n/utils.js b/mon-entreprise/scripts/i18n/utils.js index 3408b603a..9d8388b73 100644 --- a/mon-entreprise/scripts/i18n/utils.js +++ b/mon-entreprise/scripts/i18n/utils.js @@ -16,7 +16,6 @@ let attributesToTranslate = [ 'question', 'résumé', 'suggestions', - 'contrôles', 'note' ] @@ -69,28 +68,6 @@ function getRulesMissingTranslations() { } }, {}) } - if ('contrôles' === attrToTranslate) { - return v.reduce((acc, control, i) => { - const enTrad = `contrôles.${i}.en` - const frTrad = `contrôles.${i}.fr` - if ( - currentTranslation && - currentTranslation[enTrad] && - currentTranslation[frTrad] === control.message - ) { - return { - ...acc, - [frTrad]: currentTranslation[frTrad], - [enTrad]: currentTranslation[enTrad] - } - } - missingTranslations.push([dottedName, enTrad, control.message]) - return { - ...acc, - [frTrad]: control.message - } - }, {}) - } // Check if a human traduction exists already for this attribute and if // it does need to be updated diff --git a/mon-entreprise/source/actions/actions.ts b/mon-entreprise/source/actions/actions.ts index f138dbcc2..a138b5647 100644 --- a/mon-entreprise/source/actions/actions.ts +++ b/mon-entreprise/source/actions/actions.ts @@ -14,7 +14,7 @@ export type Action = | DeletePreviousSimulationAction | ExplainVariableAction | UpdateSituationAction - | HideControlAction + | HideNotificationAction | LoadPreviousSimulationAction | SetSituationBranchAction | UpdateTargetUnitAction @@ -51,7 +51,7 @@ type UpdateSituationAction = ReturnType type LoadPreviousSimulationAction = ReturnType type SetSituationBranchAction = ReturnType type SetActiveTargetAction = ReturnType -type HideControlAction = ReturnType +type HideNotificationAction = ReturnType type ExplainVariableAction = ReturnType type UpdateTargetUnitAction = ReturnType @@ -142,8 +142,8 @@ export function loadPreviousSimulation() { } as const } -export function hideControl(id: string) { - return { type: 'HIDE_CONTROL', id } as const +export function hideNotification(id: string) { + return { type: 'HIDE_NOTIFICATION', id } as const } export const explainVariable = (variableName: DottedName | null = null) => diff --git a/mon-entreprise/source/components/Controls.tsx b/mon-entreprise/source/components/Controls.tsx deleted file mode 100644 index 9f58f5848..000000000 --- a/mon-entreprise/source/components/Controls.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { goToQuestion, hideControl } from 'Actions/actions' -import animate from 'Components/ui/animate' -import { useControls, useInversionFail } from 'Components/utils/EngineContext' -import React from 'react' -import emoji from 'react-easy-emoji' -import { useTranslation } from 'react-i18next' -import { useDispatch, useSelector } from 'react-redux' -import { RootState } from 'Reducers/rootReducer' -import { answeredQuestionsSelector } from 'Selectors/simulationSelectors' -import './Controls.css' -import { Markdown } from './utils/markdown' -import { ScrollToElement } from './utils/Scroll' - -export default function Controls() { - const { t } = useTranslation() - const answeredQuestions = useSelector(answeredQuestionsSelector) - const controls = useControls() - const inversionFail = useInversionFail() - const hiddenControls = useSelector( - (state: RootState) => state.simulation?.hiddenControls - ) - const dispatch = useDispatch() - - if (!controls) { - return null - } - const messages = inversionFail - ? [ - { - message: t([ - 'simulateurs.inversionFail', - 'Le montant saisi ne permet pas de calculer un résultat, nous vous invitons à essayer une autre valeur.' - ]), - level: 'avertissement' - } - ] - : controls - if (!messages?.length) return null - - return ( -
-
    - {messages.map(({ level, test, message, solution, evaluated }) => - hiddenControls?.includes(test) ? null : ( - -
  • -
    - {emoji(level == 'avertissement' ? '⚠️' : 'ℹ️')} -
    - - {solution && !answeredQuestions?.includes(solution.cible) && ( -
    - -
    - )} - -
    -
    -
  • - -
    - ) - )} -
-
- ) -} diff --git a/mon-entreprise/source/components/Controls.css b/mon-entreprise/source/components/Notifications.css similarity index 62% rename from mon-entreprise/source/components/Controls.css rename to mon-entreprise/source/components/Notifications.css index dfc2103fa..0c699d32d 100644 --- a/mon-entreprise/source/components/Controls.css +++ b/mon-entreprise/source/components/Notifications.css @@ -1,51 +1,51 @@ -.blockingControl { +.blockingNotification { text-align: center; font-size: 150%; } -#controlsBlock > ul { +#notificationsBlock > ul { list-style: none; padding: 0; } -#controlsBlock .control { +#notificationsBlock .notification { margin: 1em 0; display: flex; align-items: center; } -#controlsBlock .controlText { +#notificationsBlock .notificationText { width: 100%; padding: 1rem 2.6rem 1rem 1.6rem; /*For the .hide element */ position: relative; } -#controlsBlock .controlText p { +#notificationsBlock .notificationText p { margin: 0; } -.controlText .hide { +.notificationText .hide { position: absolute; top: 0rem; right: -1.4rem; font-size: 200%; } -#controlExplanation { +#notificationExplanation { } -#controlExplanation > div { +#notificationExplanation > div { display: inline; } /*Disable links visually */ -#controlExplanation a { +#notificationExplanation a { color: inherit; text-decoration: none; } /* Display the values of the variables in the explanation of the failed control */ -#controlsBlock .variable .situationValue { +#notificationsBlock .variable .situationValue { display: inline-block; } -#controlsBlock img { +#notificationsBlock img { margin: 0 1em 0 !important; width: 1.6em !important; height: 1.6em !important; diff --git a/mon-entreprise/source/components/Notifications.tsx b/mon-entreprise/source/components/Notifications.tsx new file mode 100644 index 000000000..258f9d8c5 --- /dev/null +++ b/mon-entreprise/source/components/Notifications.tsx @@ -0,0 +1,81 @@ +import { hideNotification } from 'Actions/actions' +import animate from 'Components/ui/animate' +import { useInversionFail, EngineContext } from 'Components/utils/EngineContext' +import React, { useContext } from 'react' +import emoji from 'react-easy-emoji' +import { useTranslation } from 'react-i18next' +import { useDispatch, useSelector } from 'react-redux' +import { RootState } from 'Reducers/rootReducer' +import './Notifications.css' +import { Markdown } from './utils/markdown' +import { ScrollToElement } from './utils/Scroll' +import { EvaluatedRule } from 'publicodes' + +// To add a new notification to a simulator, you should create a publicode rule +// with the "type: notification" attribute. The display can be customized with +// the "sévérité" attribute. The notification will only be displayed if the +// publicode rule is applicable. +type Notification = Pick & { + type: 'notification' + sévérité: 'avertissement' | 'information' +} + +export default function Notifications() { + const { t } = useTranslation() + const engine = useContext(EngineContext) + const notifications = Object.values(engine.getParsedRules()) + .filter(rule => rule['type'] === 'notification') + .filter( + notification => engine.evaluate(notification.dottedName).isApplicable + ) + + const inversionFail = useInversionFail() + const hiddenNotifications = useSelector( + (state: RootState) => state.simulation?.hiddenNotifications + ) + const dispatch = useDispatch() + + const messages: Array = inversionFail + ? [ + { + dottedName: 'inversion fail', + description: t([ + 'simulateurs.inversionFail', + 'Le montant saisi ne permet pas de calculer un résultat, nous vous invitons à essayer une autre valeur.' + ]), + type: 'notification', + sévérité: 'avertissement' + } + ] + : ((notifications as any) as Array) + if (!messages?.length) return null + + return ( +
+
    + {messages.map(({ sévérité, dottedName, description }) => + hiddenNotifications?.includes(dottedName) ? null : ( + +
  • +
    + {emoji(sévérité == 'avertissement' ? '⚠️' : 'ℹ️')} +
    + + +
    +
    +
  • + +
    + ) + )} +
+
+ ) +} diff --git a/mon-entreprise/source/components/SchemeComparaison.tsx b/mon-entreprise/source/components/SchemeComparaison.tsx index 1cb58bf59..a03a35c8f 100644 --- a/mon-entreprise/source/components/SchemeComparaison.tsx +++ b/mon-entreprise/source/components/SchemeComparaison.tsx @@ -24,7 +24,7 @@ import { useDispatch, useSelector } from 'react-redux' import { situationSelector } from 'Selectors/simulationSelectors' import InfoBulle from 'Components/ui/InfoBulle' import './SchemeComparaison.css' -import { EngineContext } from './utils/EngineContext' +import { EngineContext, useEvaluation } from './utils/EngineContext' type SchemeComparaisonProps = { hideAutoEntrepreneur?: boolean @@ -39,12 +39,9 @@ export default function SchemeComparaison({ useEffect(() => { dispatch(setSimulationConfig(dirigeantComparaison)) }, []) - const plafondAutoEntrepreneurDépassé = useContext(EngineContext) - .controls() - .find( - ({ test }) => - test.includes && test.includes('base des cotisations > plafond') - ) + const plafondAutoEntrepreneurDépassé = useEvaluation( + 'dirigeant . auto-entrepreneur . contrôle seuil de CA dépassé' + ).isApplicable const [showMore, setShowMore] = useState(false) const [conversationStarted, setConversationStarted] = useState( diff --git a/mon-entreprise/source/components/Simulation.tsx b/mon-entreprise/source/components/Simulation.tsx index adf61406d..3e6676669 100644 --- a/mon-entreprise/source/components/Simulation.tsx +++ b/mon-entreprise/source/components/Simulation.tsx @@ -1,5 +1,5 @@ import { setSimulationConfig } from 'Actions/actions' -import Controls from 'Components/Controls' +import Notifications from 'Components/Notifications' import Conversation, { ConversationProps } from 'Components/conversation/Conversation' @@ -92,7 +92,7 @@ function Questions({
- +
diff --git a/mon-entreprise/source/components/utils/EngineContext.tsx b/mon-entreprise/source/components/utils/EngineContext.tsx index a079b14c1..8e0a01c0b 100644 --- a/mon-entreprise/source/components/utils/EngineContext.tsx +++ b/mon-entreprise/source/components/utils/EngineContext.tsx @@ -45,7 +45,3 @@ export function useEvaluation( export function useInversionFail() { return useContext(EngineContext).inversionFail() } - -export function useControls() { - return useContext(EngineContext).controls() -} diff --git a/mon-entreprise/source/locales/rules-en.yaml b/mon-entreprise/source/locales/rules-en.yaml index 33921c463..e3d2d650b 100644 --- a/mon-entreprise/source/locales/rules-en.yaml +++ b/mon-entreprise/source/locales/rules-en.yaml @@ -318,34 +318,6 @@ chômage partiel . revenu net habituel: titre.en: '[automatic] usual net income' titre.fr: revenu net habituel contrat salarié: - contrôles.0.en: > - [automatic] Remember that a fixed-term contract must always correspond to a - temporary business need. - - [Labour Code - Article A1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006901194idTexte=LEGITEXT000006072050) - contrôles.0.fr: > - Rappelez-vous qu'un CDD doit toujours correspondre à un besoin temporaire de - l'entreprise. - - [Code du travail - Article L1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006901194&cidTexte=LEGITEXT000006072050) - contrôles.1.en: > - [automatic] An internship agreement **is not an employment contract**, and - cannot be concluded to carry out a regular task corresponding to a permanent - job, or a temporary increase in the company's activity. [Education Code - - Article - A124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119idTexte=LEGITEXT000006071191) - - - Furthermore, a company with less than 20 employees may not take on more than **3 trainees**, and no more than **15% of the workforce** for companies with more than 20 employees. - contrôles.1.fr: > - Une convention de stage **n'est pas un contrat de travail**, et ne peut pas - être conclue pour réaliser une tâche régulière correspondant à un poste de - travail permanent, ou à un accroissement temporaire de l'activité de - l'entreprise. [Code de l'éducation - Article - L124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119&cidTexte=LEGITEXT000006071191) - - - Par ailleurs, une entreprise de moins de 20 salariés ne peut pas accueillir plus de **3 stagiaires**, et pas plus de **15% de l’effectif** pour les entreprises de plus de 20 salariés. description.en: > The contract that binds a company (via its establishment) to an individual, who is then his employee. @@ -509,8 +481,6 @@ contrat salarié . CDD . congés dus en jours ouvrés: titre.en: leave due in working days titre.fr: congés dus en jours ouvrés contrat salarié . CDD . congés non pris: - contrôles.0.en: '[automatic] An employee normally earns 2.08 working days off per month.' - contrôles.0.fr: Un salarié acquiert normalement 2.08 jours de congés ouvrés par mois. description.en: How many days of paid leave the employee will not be able to take, given the length of his / her fixed term contract. In working days, compared to 25 days of legal leave for a twelve-month contract. @@ -541,6 +511,11 @@ contrat salarié . CDD . contrat jeune vacances: question.fr: Est-ce un contrat jeune vacances ? titre.en: Young holiday contract titre.fr: Contrat jeune vacances +contrat salarié . CDD . contrôle congés non pris max: + description.en: '[automatic] An employee normally earns 2.08 working days off per month.' + description.fr: Un salarié acquiert normalement 2.08 jours de congés ouvrés par mois. + titre.en: '[automatic] control leave not taken max' + titre.fr: contrôle congés non pris max contrat salarié . CDD . durée contrat: description.en: '[Click here] (https://www.service-public.fr/professionnels-entreprises/vosdroits/F31211) @@ -566,6 +541,16 @@ contrat salarié . CDD . indemnités salarié: description.fr: Cotisations employeur spécifiques au CDD titre.en: '[automatic] employee compensation' titre.fr: indemnités salarié +contrat salarié . CDD . information: + description.en: "[automatic] Remember that a fixed-term contract must always + correspond to a temporary business need. [Labour Code - Article + A1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGI\ + ARTI000006901194&cidTexte=LEGITEXT000006072050)" + description.fr: Rappelez-vous qu'un CDD doit toujours correspondre à un besoin + temporaire de l'entreprise. [Code du travail - Article + L1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006901194&cidTexte=LEGITEXT000006072050) + titre.en: '[automatic] information' + titre.fr: information contrat salarié . CDD . motif: description.en: 'The CDD is an exceptional contract: the reason for its use must @@ -969,12 +954,6 @@ contrat salarié . activité partielle . heures chômées: titre.en: '[automatic] non-working hours' titre.fr: heures chômées contrat salarié . activité partielle . heures travaillées: - contrôles.0.en: - '[automatic] In the context of the partial activity, the working - time must be less than that stipulated in the employment contract.' - contrôles.0.fr: - Dans le cadre de l'activité partielle, le temps de travail doit - être inférieur à celui inscrit dans le contrat de travail. description.en: '[automatic] In the case of short-time working, the number of remaining hours worked. Must be less than the contractual time.' description.fr: Dans le cadre du chômage partiel, le nombre d'heure restantes @@ -989,6 +968,15 @@ contrat salarié . activité partielle . heures travaillées: suggestions.30 h/semaine.fr: 30 h/semaine titre.en: '[automatic] remaining hours worked' titre.fr: heures travaillées restantes +? contrat salarié . activité partielle . heures travaillées . contrôle temps de travail +: description.en: + '[automatic] In the context of the partial activity, the working + time must be less than that stipulated in the employment contract.' + description.fr: + Dans le cadre de l'activité partielle, le temps de travail doit + être inférieur à celui inscrit dans le contrat de travail. + titre.en: '[automatic] working-time control' + titre.fr: contrôle temps de travail contrat salarié . activité partielle . indemnisation entreprise: description.en: '[automatic] In the context of the Coronavirus crisis, the government has announced that the short-time working allowance will be 100% @@ -1211,11 +1199,6 @@ contrat salarié . apprentissage: titre.en: apprenticeship titre.fr: apprentissage contrat salarié . apprentissage . ancienneté: - contrôles.0.en: '[automatic] The maximum duration of the contract can be - extended to 4 years when the apprentice is recognised as a disabled worker.' - contrôles.0.fr: - La durée maximale du contrat peut être portée à 4 ans lorsque la - qualité de travailleur handicapé est reconnue à l'apprenti. question.en: How long has the apprentice been employed? question.fr: Depuis combien de temps l'apprenti est-il employé ? titre.en: age @@ -1229,6 +1212,14 @@ contrat salarié . apprentissage . ancienneté . moins de deux ans: contrat salarié . apprentissage . ancienneté . moins de quatre ans: titre.en: less than four years titre.fr: moins de quatre ans +? contrat salarié . apprentissage . ancienneté . moins de quatre ans . information +: description.en: '[automatic] The maximum duration of the contract may be + extended to 4 years when the apprentice is recognised as a disabled worker.' + description.fr: + La durée maximale du contrat peut être portée à 4 ans lorsque la + qualité de travailleur handicapé est reconnue à l'apprenti. + titre.en: '[automatic] information' + titre.fr: information contrat salarié . apprentissage . ancienneté . moins de trois ans: titre.en: less than three years titre.fr: moins de trois ans @@ -1289,12 +1280,15 @@ contrat salarié . complémentaire santé: En plus de la complémentaire santé, le dispositif collectif de l'entreprise peut proposer d'autres garanties (garanties décès, garantie dépendance, etc.). titre.en: Complementary health insurance titre.fr: complémentaire santé -contrat salarié . complémentaire santé . forfait: - contrôles.0.en: '[automatic] Make sure that such an inexpensive health - supplement covers the minimum care basket defined in the law.' - contrôles.0.fr: +contrat salarié . complémentaire santé . contrôle min: + description.en: '[automatic] Make sure that such an inexpensive health + supplement covers the minimum care basket defined by law.' + description.fr: Vérifiez bien qu'une complémentaire santé si peu chère couvre le panier de soin minimal défini dans la loi. + titre.en: '[automatic] minimum control' + titre.fr: contrôle min +contrat salarié . complémentaire santé . forfait: description.en: >- [automatic] The employer has the obligation to offer a complementary health care package. He must pay at least half of the cost. @@ -1329,9 +1323,6 @@ contrat salarié . complémentaire santé . forfait: titre.en: Complementary health insurance package titre.fr: Forfait de complémentaire santé entreprise contrat salarié . complémentaire santé . part employeur: - contrôles.0.en: "[automatic] The employer's share of the supplementary health - insurance must be at least 50%." - contrôles.0.fr: La part employeur de la complémentaire santé doit être de 50% au minimum description.en: Share of complementary health insurance paid by the employer. Must be at least 50%. description.fr: @@ -1345,6 +1336,12 @@ contrat salarié . complémentaire santé . part employeur: suggestions.50%.fr: 50% titre.en: employer share titre.fr: part employeur +contrat salarié . complémentaire santé . part employeur min: + description.en: "[automatic] The employer's share of the supplementary health + insurance must be at least 50%." + description.fr: La part employeur de la complémentaire santé doit être de 50% au minimum + titre.en: "[automatic] employer's minimum share" + titre.fr: part employeur min contrat salarié . complémentaire santé . part salarié: description.en: Share of the complementary health insurance paid by the employee. Cannot be more than 50%. @@ -1390,16 +1387,6 @@ contrat salarié . contribution d'équilibre technique: titre.en: technical equilibrium contribution titre.fr: contribution d'équilibre technique contrat salarié . convention collective: - contrôles.0.en: | - [automatic] Caution, the implementation of collective agreements is still - partial and unverified. - Nevertheless, this allows a first, more accurate estimate to be obtained. - than the general regime. - contrôles.0.fr: | - Attention, l'implémentation des conventions collective est encore - partielle et non vérifiée. - Néanmoins, cela permet d'obtenir une première estimation, plus précise - que le régime général. question.en: 'Which "convention collective" is applicable to the company ? [beta] ' question.fr: "Quelle convention collective est applicable à l'entreprise ? [beta] " titre.en: convention collective @@ -1572,6 +1559,16 @@ contrat salarié . convention collective . compta: ? contrat salarié . convention collective . compta . majoration heures supplémentaires : titre.en: '[automatic] overtime increase' titre.fr: majoration heures supplémentaires +contrat salarié . convention collective . contrôle décharge: + description.en: '[automatic] Please note that the implementation of the + collective agreements is still partial and unverified. Nevertheless, this + allows us to obtain a first estimate, which is more precise than the general + regime.' + description.fr: Attention, l'implémentation des conventions collective est + encore partielle et non vérifiée. Néanmoins, cela permet d'obtenir une + première estimation, plus précise que le régime général. + titre.en: '[automatic] discharge control' + titre.fr: contrôle décharge contrat salarié . convention collective . droit commun: titre.en: common law titre.fr: droit commun @@ -2063,6 +2060,18 @@ contrat salarié . frais professionnels . titres-restaurant: question.fr: Le salarié reçoit-il des titres-restaurant ? titre.en: '[automatic] restaurant vouchers' titre.fr: titres-restaurant +? contrat salarié . frais professionnels . titres-restaurant . contrôle taux employeur max +: description.en: + "[automatic] The employer's share of the meal voucher must be a + maximum of 60%." + description.fr: La part employeur du titre-restaurant doit être de 60% au maximum + titre.en: '[automatic] control max. employer rate' + titre.fr: contrôle taux employeur max +? contrat salarié . frais professionnels . titres-restaurant . contrôle taux employeur min +: description.en: "[automatic] The employer's share of the meal voucher must be at least 50%." + description.fr: La part employeur du titre-restaurant doit être de 50% au minimum + titre.en: '[automatic] control minimum employer rate' + titre.fr: contrôle taux employeur min contrat salarié . frais professionnels . titres-restaurant . montant: titre.en: '[automatic] Restaurant vouchers' titre.fr: Titres-restaurant @@ -2088,15 +2097,7 @@ contrat salarié . frais professionnels . titres-restaurant . part déductible: titre.en: '[automatic] Restaurant vouchers (deductible)' titre.fr: Titres-restaurant (déductible) ? contrat salarié . frais professionnels . titres-restaurant . taux participation employeur -: contrôles.0.en: - '[automatic] The Employer-paid portion of the meal voucher must - be at least 50%.' - contrôles.0.fr: La part employeur du titre-restaurant doit être de 50% au minimum - contrôles.1.en: - '[automatic] Employer-paid portion of the meal voucher must be a - maximum of 60%.' - contrôles.1.fr: La part employeur du titre-restaurant doit être de 60% au maximum - description.en: +: description.en: '[automatic] Employer-paid portion of the meal voucher. Must be a minimum of 50% and a maximum of 60%.' description.fr: @@ -2635,26 +2636,6 @@ contrat salarié . régime alsace moselle: titre.en: Alsace-Moselle scheme titre.fr: Régime Alsace-Moselle contrat salarié . régime des impatriés: - contrôles.0.en: > - [automatic] The following conditions must be met in order to benefit from - the old-age contribution exemption: - - - To be able to prove a minimum contribution paid elsewhere for old-age insurance - - - Not having been affiliated, during the five calendar years preceding that of taking up his duties, to a compulsory French old-age insurance scheme, except for ancillary activities of a seasonal nature or for studies. - - - [Read the text of the law](https://www.legifrance.gouv.fr/affichCode.do;jsessionid=F5CFB7C90D1F529A2CDC9FFD20BD6E.tplgfr34s_3?idSectionTA=LEGISCTA000038510929&cidTexte=LEGITEXT000006073189&dateTexte=20190626) - contrôles.0.fr: > - Pour bénéficier de l'exonération de cotisations vieillesse, il faut remplir - les conditions suivantes : - - - Pouvoir justifier d'une contribution minimale versée ailleurs pour une assurance vieillesse - - - Ne pas avoir été affilié, au cours des cinq années civiles précédant celle de la prise de fonctions, à un régime français obligatoire d'assurance vieillesse, sauf pour des activités accessoires, de caractère saisonnier ou pour les études. - - - [Lire le texte de loi](https://www.legifrance.gouv.fr/affichCode.do;jsessionid=F5CFB7C90D1D1F529A2CDC9FFD20BD6E.tplgfr34s_3?idSectionTA=LEGISCTA000038510929&cidTexte=LEGITEXT000006073189&dateTexte=20190626) description.en: > If you are an employee or a director with the 'assimilé-salarié' social and fiscal scheme, and if you have been called upon by a foreign company to take @@ -2688,6 +2669,9 @@ contrat salarié . régime des impatriés: question.fr: Le salarié bénéficie-t-il du régime des impatriés ? titre.en: impatriate scheme titre.fr: régime des impatriés +contrat salarié . régime des impatriés . information: + titre.en: '[automatic] information' + titre.fr: information contrat salarié . rémunération: description.en: The remuneration is distinguished from the salary by including non-monetary benefits paid for work. It is therefore wider than the sums of @@ -2884,23 +2868,6 @@ contrat salarié . rémunération . brut: titre.en: gross salary with benefits titre.fr: Rémunération brute contrat salarié . rémunération . brut de base: - contrôles.0.en: | - [automatic] The wage entered is less than the minimum wage. - contrôles.0.fr: | - Le salaire saisi est inférieur au SMIC. - contrôles.1.en: > - [automatic] The remuneration for the traineeship is less than the [minimum - bonus] - (https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131). - contrôles.1.fr: > - La rémunération du stage est inférieure à la [gratification - minimale](https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131). - contrôles.2.en: > - [automatic] The monthly salary entered is high. Didn't you have the wrong - calculation period? - contrôles.2.fr: > - Le salaire mensuel saisi est élevé. Ne vous êtes-vous pas trompé de période - de calcul ? description.en: >- This is the negociated salary written on the employment contract in France. It normally includes bonuses computed on a monthly basis. @@ -2934,6 +2901,19 @@ contrat salarié . rémunération . brut de base . équivalent temps plein: suggestions.salaire médian.fr: salaire médian titre.en: Full-time equivalent gross salary titre.fr: Salaire brut équivalent temps plein +contrat salarié . rémunération . contrôle salaire élevé: + description.en: '[automatic] The monthly salary entered is high. Have you + entered the wrong payroll period?' + description.fr: + Le salaire mensuel saisi est élevé. Ne vous êtes-vous pas trompé + de période de calcul ? + titre.en: '[automatic] high wage control' + titre.fr: contrôle salaire élevé +contrat salarié . rémunération . contrôle smic: + description.en: '[automatic] The wage entered is below the minimum wage.' + description.fr: Le salaire saisi est inférieur au SMIC. + titre.en: '[automatic] smic control' + titre.fr: contrôle smic contrat salarié . rémunération . heures complémentaires: description.en: '[automatic] Compensation for overtime' description.fr: La rémunération relative aux heures complémentaires @@ -3167,6 +3147,34 @@ contrat salarié . stage: minimale. Celle-ci est en partie exonérée de cotisations sociales. titre.en: internship titre.fr: stage +contrat salarié . stage . avertissement: + description.en: >- + [automatic] An internship agreement **is not an employment contract**, and + cannot be concluded to carry out a regular task corresponding to a permanent + job, or a temporary increase in the company's activity. [Education Code - + Article + L124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119&cidTexte=LEGITEXT000006071191) + + Furthermore, a company with less than 20 employees may not take on more than **3 trainees**, and no more than **15% of the workforce** for companies with more than 20 employees. + description.fr: >- + Une convention de stage **n'est pas un contrat de travail**, et ne peut pas + être conclue pour réaliser une tâche régulière correspondant à un poste de + travail permanent, ou à un accroissement temporaire de l'activité de + l'entreprise. [Code de l'éducation - Article + L124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119&cidTexte=LEGITEXT000006071191) + + Par ailleurs, une entreprise de moins de 20 salariés ne peut pas accueillir plus de **3 stagiaires**, et pas plus de **15% de l’effectif** pour les entreprises de plus de 20 salariés. + titre.en: '[automatic] warning' + titre.fr: avertissement +contrat salarié . stage . contrôle gratification minimale: + description.en: "[automatic] The remuneration for the traineeship is less than + the [minimum bonus] + (https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131)\ + ." + description.fr: La rémunération du stage est inférieure à la [gratification + minimale](https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131). + titre.en: '[automatic] minimum reward check' + titre.fr: contrôle gratification minimale contrat salarié . stage . gratification minimale: titre.en: minimum bonus titre.fr: gratification minimale @@ -3313,20 +3321,36 @@ contrat salarié . temps de travail: contrat salarié . temps de travail . base légale: titre.en: legal base titre.fr: base légale -contrat salarié . temps de travail . heures complémentaires: - contrôles.0.en: +contrat salarié . temps de travail . contrôle 44h max: + description.en: '[automatic] The average working week may not exceed 44 hours.' + description.fr: La durée hebdomadaire moyenne de travail ne peut pas dépasser 44h + titre.en: '[automatic] control 44h max' + titre.fr: contrôle 44h max +contrat salarié . temps de travail . contrôle 48h max: + description.en: '[automatic] The maximum weekly working time may not exceed 48 hours.' + description.fr: La durée hebdomadaire maximale de travail ne peut pas dépasser 48h + titre.en: '[automatic] control 48h max' + titre.fr: contrôle 48h max +? contrat salarié . temps de travail . contrôle heures complémentaires 10 pourcents +: description.en: '[automatic] Unless otherwise provided by agreement, the number of overtime hours may not exceed one tenth of the contractual duration of the part-time contract.' - contrôles.0.fr: Sauf disposition conventionnelle, le nombre d'heures + description.fr: Sauf disposition conventionnelle, le nombre d'heures complémentaires ne peut être supérieur à un dixième de la durée contractuelle du temps partiel. - contrôles.1.en: + titre.en: '[automatic] overtime control 10 percent' + titre.fr: contrôle heures complémentaires 10 pourcents +contrat salarié . temps de travail . contrôle heures complémentaires max: + description.en: '[automatic] Overtime must not cause the employee to work for a period greater than or equal to the legal working time (35 hours).' - contrôles.1.fr: Les heures complémentaires ne doivent pas amener le salarié à + description.fr: Les heures complémentaires ne doivent pas amener le salarié à travailler pour une durée supérieure ou égale à la durée légale du travail (35h) + titre.en: '[automatic] max. overtime control' + titre.fr: contrôle heures complémentaires max +contrat salarié . temps de travail . heures complémentaires: description.en: > [automatic] Overtime hours are the hours worked by a part-time employee in excess of his or her contractual working hours. Overtime must not cause the @@ -3377,10 +3401,6 @@ contrat salarié . temps de travail . heures complémentaires . seuil légal: titre.en: '[automatic] statutory threshold' titre.fr: seuil légal contrat salarié . temps de travail . heures supplémentaires: - contrôles.0.en: '[automatic] The average working week may not exceed 44 hours.' - contrôles.0.fr: La durée hebdomadaire moyenne de travail ne peut pas dépasser 44h - contrôles.1.en: '[automatic] The maximum weekly working time may not exceed 48 hours.' - contrôles.1.fr: La durée hebdomadaire maximale de travail ne peut pas dépasser 48h description.en: Any hour of work performed, at the employer's request, beyond the legal 35-hour limit (or equivalent) is considered overtime. Overtime work entitles the employee to more favourable remuneration (higher hourly @@ -3471,16 +3491,21 @@ contrat salarié . temps de travail . temps partiel: question.fr: Le contrat est-il à temps partiel ? titre.en: part-time titre.fr: temps partiel -contrat salarié . temps de travail . temps partiel . heures par semaine: - contrôles.0.en: '[automatic] The minimum number of hours per week is 24, +contrat salarié . temps de travail . temps partiel . contrôle temps max: + description.en: '[automatic] Part-time work must be below the legal working time (35 hours).' + description.fr: Un temps partiel doit être en dessous de la durée de travail légale (35h) + titre.en: '[automatic] max time control' + titre.fr: contrôle temps max +contrat salarié . temps de travail . temps partiel . contrôle temps min: + description.en: '[automatic] The minimum number of hours per week is 24, although it is possible to go lower in some cases only. [More info](https://www.service-public.fr/particuliers/vosdroits/F32428).' - contrôles.0.fr: Le nombre minimum d'heures par semaine est 24. Il est possible + description.fr: Le nombre minimum d'heures par semaine est 24. Il est possible de descendre plus bas dans certains cas seulement. [Plus d'infos](https://www.service-public.fr/particuliers/vosdroits/F32428). - contrôles.1.en: '[automatic] Part-time work must be below the legal working - hours (35 hours).' - contrôles.1.fr: Un temps partiel doit être en dessous de la durée de travail légale (35h) + titre.en: '[automatic] min time control' + titre.fr: contrôle temps min +contrat salarié . temps de travail . temps partiel . heures par semaine: question.en: What is the number of hours worked per week as part of part-time work? question.fr: Quel est le nombre d'heures travaillées par semaine dans le cadre du temps partiel ? @@ -3537,18 +3562,25 @@ dirigeant . auto-entrepreneur: titre.en: auto-entrepreneur titre.fr: auto-entrepreneur dirigeant . auto-entrepreneur . base des cotisations: - contrôles.0.en: '[automatic] The annual turnover threshold for the - self-employment plan is exceeded. Read - more](/documentation/manager/self-contractor/ceiling)' - contrôles.0.fr: Le seuil annuel de chiffre d'affaires pour le régime de - l'auto-entreprise est dépassé. [En savoir - plus](/documentation/dirigeant/auto‑entrepreneur/plafond) - contrôles.1.en: The annual turnover threshold for VAT exemption is exceeded. - [Read more](/documentation/entreprise/franchise-de-TVA) - contrôles.1.fr: Le seuil annuel de chiffre d'affaires pour la franchise de TVA - est dépassé. [En savoir plus](/documentation/entreprise/franchise-de-TVA) titre.en: contribution basis titre.fr: base des cotisations +dirigeant . auto-entrepreneur . contrôle seuil de CA dépassé: + description.en: '[automatic] The annual turnover threshold for the + self-employment plan is exceeded. Read + more](/documentation/manager/self-entrepreneur/ceiling)' + description.fr: Le seuil annuel de chiffre d'affaires pour le régime de + l'auto-entreprise est dépassé. [En savoir + plus](/documentation/dirigeant/auto‑entrepreneur/plafond) + titre.en: '[automatic] Threshold control of turnover exceeded' + titre.fr: contrôle seuil de CA dépassé +dirigeant . auto-entrepreneur . contrôle seuil de TVA dépassé: + description.en: + '[automatic] The annual turnover threshold for VAT exemption is + exceeded. More information](/documentation/enterprise/VAT-exemption)' + description.fr: Le seuil annuel de chiffre d'affaires pour la franchise de TVA + est dépassé. [En savoir plus](/documentation/entreprise/franchise-de-TVA) + titre.en: '[automatic] VAT threshold control' + titre.fr: contrôle seuil de TVA dépassé dirigeant . auto-entrepreneur . cotisations et contributions: titre.en: Contributions titre.fr: cotisations et contributions @@ -3682,11 +3714,6 @@ dirigeant . auto-entrepreneur . impôt . revenu imposable: titre.en: taxable income titre.fr: revenu imposable dirigeant . auto-entrepreneur . impôt . versement libératoire: - contrôles.0.en: '[automatic] The payment in full discharge is not available if - your household income exceeds €27,086 per unit in 2018.' - contrôles.0.fr: - Le versement libératoire n'est pas disponible si les revenus de - votre ménage sont supérieurs à 27 086 € par part en 2018 description.en: > With the option for the discharge payment, the income tax is paid at the same time as your contributions (per month or per quarter) with the @@ -3702,6 +3729,14 @@ dirigeant . auto-entrepreneur . impôt . versement libératoire: question.fr: Bénéficiez-vous du versement libératoire de l'impôt sur le revenu ? titre.en: discharge payment titre.fr: versement libératoire +dirigeant . auto-entrepreneur . impôt . versement libératoire . contrôle seuil: + description.en: '[automatic] The payment in full discharge is not available if + your household income exceeds €27,086 per unit in 2018.' + description.fr: + Le versement libératoire n'est pas disponible si les revenus de + votre ménage sont supérieurs à 27 086 € par part en 2018 + titre.en: '[automatic] threshold control' + titre.fr: contrôle seuil dirigeant . auto-entrepreneur . impôt . versement libératoire . montant: description.en: > If you have opted for the discharge payment, the income tax is paid at the @@ -3818,43 +3853,6 @@ dirigeant . auto-entrepreneur . vente ou hébergement: titre.en: '[automatic] Sales, catering or accommodation' titre.fr: Vente, restauration ou hébergement dirigeant . indépendant: - contrôles.0.en: | - [automatic] When you start your business, your professional income - not being known, the dues and contributions of the first two - years are calculated on a flat-rate basis. - - This base amounts to 19% of the annual Social Security ceiling for - in the first and second year of operation. - - There is an adjustment in the third year based on actual income... - reported in the previous two years. - - This simulator calculates the cruise contributions (after - regularization). It therefore enables you to find out the amount to - provision for accruals and deferrals. - contrôles.0.fr: > - Lorsque vous commencez votre activité, vos revenus professionnels - - n’étant pas connus, les cotisations et contributions des deux premières - - années sont calculées sur une base forfaitaire. - - - Cette base s’élève à 19 % du plafond annuel de la Sécurité sociale au titre de - - la première et de la deuxième année d’activité. - - - Il y a un ajustement la troisième année en fonction des revenus réels - - déclarées lors des deux années précédentes. - - - Ce simulateur calcul les cotisations au régime de croisière (après - - régularisation). Il vous permet donc de connaître le montant à - - provisionner pour la régularisation. titre.en: indépendant titre.fr: indépendant dirigeant . indépendant . IJSS: @@ -4015,20 +4013,6 @@ dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste: titre.en: '[automatic] dental surgeon' titre.fr: chirurgien-dentiste dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . PCV: - contrôles.0.en: > - [automatic] You have the possibility of benefiting from a total exemption of - contribution. - - for supplementary old-age pension (AHV) if you apply for it. More information - - more](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations) - contrôles.0.fr: > - Vous avez la possibilité de bénéficier d'une éxoné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) note.en: >- [automatic] An exemption can be granted when the 2019 professional income is less than or equal to C 500 (value on 1 January of the year in question), @@ -4047,6 +4031,18 @@ dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . PCV: Cette dispense entraîne l’annulation des droits pour l’année et les points non cotisés ne sont pas rachetables. titre.en: '[automatic] PCV' titre.fr: PCV +? dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . PCV . info exonération +: description.en: "[automatic] You have the option of taking a full contribution + waiver for supplementary old-age benefits (AVC) if you apply for it. [More + information](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cot\ + isations)" + description.fr: + 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) + titre.en: '[automatic] exoneration info' + titre.fr: info exonération dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . RID: titre.en: '[automatic] disability and death (CARCDSF Dental Surgeon)' titre.fr: invalidité et décès (CARCDSF chirurgien-dentiste) @@ -4114,20 +4110,7 @@ dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire: titre.en: '[automatic] supplementary pension (CARCDSF)' titre.fr: retraite complémentaire (CARCDSF) ? dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire . réduction de la cotisation forfaitaire -: contrôles.0.en: > - [automatic] You have the possibility of benefiting from a contribution - reduction - - for the supplementary pension if you apply for it. More information - - more](/documentation/lead/independent/WFP/WFP/CARCDSF/additional withdrawal/removal) - contrôles.0.fr: > - Vous avez la possibilité de bénéficier d'une réduction de cotisation - - pour la retraite complémentaire si vous en faites la demande. [En savoir - - plus](/documentation/dirigeant/indépendant/PL/PAM/CARCDSF/retraite-complémentaire/forfaitaire/réduction) - description.en: > +: description.en: > [automatic] Affiliates whose net professional income for the year N-1 is less than 85%. @@ -4167,24 +4150,22 @@ dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire: annexes (2033 B et D ou 2053 et 2058 A) de l’année 2019. titre.en: '[automatic] reduced flat-rate contribution' titre.fr: réduction de la cotisation forfaitaire +? dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire . réduction de la cotisation forfaitaire . info réduction +: description.en: "[automatic] You have the possibility to benefit from a + contribution reduction for the supplementary pension if you apply for it. + Find out + more](/documentation/documentation/manager/self-employed/PL/PAM/CARCDSF/com\ + plementary pension/deduction)" + description.fr: Vous avez la possibilité de bénéficier d'une réduction de + cotisation pour la retraite complémentaire si vous en faites la demande. [En + savoir + plus](/documentation/dirigeant/indépendant/PL/PAM/CARCDSF/retraite-complémentaire/forfaitaire/réduction) + titre.en: '[automatic] discount info' + titre.fr: info réduction dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme: titre.en: '[automatic] midwife' titre.fr: sage-femme dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . PCV: - contrôles.0.en: > - [automatic] You have the possibility of benefiting from a total exemption of - contributions - - for supplementary old-age pension (AHV) if you apply for it. More information - - more](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations) - contrôles.0.fr: > - Vous avez la possibilité de bénéficier d'une éxoné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) description.en: > [automatic] For 2020, the amount is set at €780, a third of which, i.e. €260 to your @@ -4230,6 +4211,18 @@ dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . PCV: non cotisés ne sont pas rachetables. titre.en: '[automatic] PCV' titre.fr: PCV +? dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . PCV . info exonération +: description.en: "[automatic] You have the option of taking a full contribution + waiver for supplementary old-age benefits (AVC) if you apply for it. [More + information](http://www.carcdsf.fr/cotisations-du-praticien/montant-des-cot\ + isations)" + description.fr: + 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) + titre.en: '[automatic] exoneration info' + titre.fr: info exonération dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . RID: description.en: > [automatic] There are contribution classes to choose from, corresponding to @@ -4869,17 +4862,18 @@ dirigeant . indépendant . conjoint collaborateur . cotisations . assiette: dirigeant . indépendant . contrats madelin: titre.en: Madelin Contracts titre.fr: Contrats Madelin -dirigeant . indépendant . contrats madelin . montant: - contrôles.0.en: > - [automatic] The amount of all contributions to your Madelin contracts - - must be included in your operating expenses, and you have to include it in your - - have indicated a contribution amount greater than expenses. - contrôles.0.fr: | +dirigeant . indépendant . contrats madelin . contrôle montant charges: + description.en: + '[automatic] The amount of all the contributions to your Madelin + contracts must be included in your operating expenses, but you have + indicated an amount of contributions greater than the expenses.' + description.fr: Le montant de l'ensemble des cotisations à vos contrats Madelin - doit être inclus dans vos charges de fonctionnement, or ce vous - avez indiqué un montant de cotisations supérieur aux charges. + doit être inclus dans vos charges de fonctionnement, or ce vous avez indiqué + un montant de cotisations supérieur aux charges. + titre.en: '[automatic] expense control' + titre.fr: contrôle montant charges +dirigeant . indépendant . contrats madelin . montant: titre.en: Sum of subscriptions to Madelin contracts titre.fr: Somme des cotisations à contrats Madelin dirigeant . indépendant . contrats madelin . mutuelle: @@ -4926,6 +4920,29 @@ dirigeant . indépendant . contrats madelin . retraite . montant: dirigeant . indépendant . contrats madelin . retraite . plafond: titre.en: ceiling titre.fr: plafond +dirigeant . indépendant . contrôle base forfaitaire: + description.en: >- + [automatic] When you start your activity, as your professional income is not + known, the contributions and fees for the first two years are calculated on + a flat-rate basis. + + This base is 19% of the annual Social Security ceiling for the first and second year of activity. + + There is an adjustment in the third year based on the actual income declared in the two previous years. + + This simulator calculates the contributions to the cruise scheme (after regularisation). It therefore allows you to know the amount to be accrued for the regularization. + description.fr: >- + Lorsque vous commencez votre activité, vos revenus professionnels n’étant + pas connus, les cotisations et contributions des deux premières années sont + calculées sur une base forfaitaire. + + Cette base s’élève à 19 % du plafond annuel de la Sécurité sociale au titre de la première et de la deuxième année d’activité. + + Il y a un ajustement la troisième année en fonction des revenus réels déclarées lors des deux années précédentes. + + Ce simulateur calcul les cotisations au régime de croisière (après régularisation). Il vous permet donc de connaître le montant à provisionner pour la régularisation. + titre.en: '[automatic] flat-rate control' + titre.fr: contrôle base forfaitaire dirigeant . indépendant . cotisations et contributions: titre.en: all contributions titre.fr: cotisations et contributions @@ -5460,6 +5477,19 @@ entreprise . catégorie d'activité . libérale règlementée: question.fr: Est-ce une activité libérale règlementée ? titre.en: regulated liberal titre.fr: libérale règlementée +entreprise . catégorie d'activité . libérale règlementée . avertissement: + description.en: >- + [automatic] Attention, the simulator is not yet complete for regulated + professions: + + - for supplementary retirement, only the interprofessional scale, that of the CIPAV, has been integrated for the moment. - Make sure that the auto-entrepreneur status is compatible with your regulated profession - for medical practitioners and medical auxiliaries (PAM), [the specificities of contribution calculation](https://www.urssaf.fr/portail/home/praticien-et-auxiliaire-medical/mes-cotisations/le-calcul-de-mes-cotisations/la-participation-de-la-cpam-a-me.html) and the [CURPS](https://www.urssaf.fr/portail/home/indépendant/mes-cotisations/quelles-cotisations/la-contribution-aux-unions-regio/qui-est-redevable-de-la-curps.html) are not yet integrated. + description.fr: >- + Attention, le simulateur n'est pas encore complet pour les professions + libérales règlementées : + + - pour la retraite complémentaire, seul le barème interprofessionnel, celui de la CIPAV, a été intégré pour l'instant. - assurez-vous que le statut auto-entrepreneur est bien compatible avec votre profession règlementée - pour les praticiens et auxiliaires médicaux (PAM), [les spécificités de calcul des cotisations](https://www.urssaf.fr/portail/home/praticien-et-auxiliaire-medical/mes-cotisations/le-calcul-de-mes-cotisations/la-participation-de-la-cpam-a-me.html) et la [CURPS](https://www.urssaf.fr/portail/home/indépendant/mes-cotisations/quelles-cotisations/la-contribution-aux-unions-regio/qui-est-redevable-de-la-curps.html) ne sont pas encore intégrées. + titre.en: '[automatic] warning' + titre.fr: avertissement ? entreprise . catégorie d'activité . libérale règlementée . type d'activité libérale règlementée : titre.en: type of regulated liberal activity titre.fr: type d'activité libérale règlementée @@ -5579,13 +5609,6 @@ entreprise . chiffre d'affaires minimum: titre.en: Minimum turnover titre.fr: chiffre d'affaires minimum entreprise . date de création: - contrôles.0.en: "[automatic] We can't see that far into the future" - contrôles.0.fr: Nous ne pouvons voir aussi loin dans le futur - contrôles.1.en: - "[automatic] This is a very old company! Are you sure you didn't - make a mistake in the seizure?" - contrôles.1.fr: Il s'agit d'une très vieille entreprise ! Êtes-vous sûr de ne - pas vous être trompé dans la saisie ? description.en: > [automatic] The activity start date (or creation date) is set at the time of the @@ -5620,6 +5643,19 @@ entreprise . date de création: suggestions.Fin 2017.fr: Fin 2017 titre.en: Creation date titre.fr: date de création +entreprise . date de création . contrôle date future: + description.en: '[automatic] We can only see so far into the future' + description.fr: Nous ne pouvons voir aussi loin dans le futur + titre.en: '[automatic] check future date' + titre.fr: contrôle date future +entreprise . date de création . contrôle date passée: + description.en: + "[automatic] This is a very old company! Are you sure you didn't + make a mistake in the seizure?" + description.fr: Il s'agit d'une très vieille entreprise ! Êtes-vous sûr de ne + pas vous être trompé dans la saisie ? + titre.en: '[automatic] past date check' + titre.fr: contrôle date passée entreprise . durée d'activité: titre.en: length of service titre.fr: durée d'activité diff --git a/mon-entreprise/source/reducers/rootReducer.ts b/mon-entreprise/source/reducers/rootReducer.ts index 5a578f5e0..83b23ee9d 100644 --- a/mon-entreprise/source/reducers/rootReducer.ts +++ b/mon-entreprise/source/reducers/rootReducer.ts @@ -64,7 +64,7 @@ type Situation = Partial> export type Simulation = { config: SimulationConfig url: string - hiddenControls: Array + hiddenNotifications: Array situation: Situation initialSituation: Situation targetUnit: string @@ -101,7 +101,7 @@ function simulation( return { config, url, - hiddenControls: [], + hiddenNotifications: [], situation: companySituation, initialSituation: companySituation, targetUnit: config['unité par défaut'] || '€/mois', @@ -114,12 +114,15 @@ function simulation( } switch (action.type) { - case 'HIDE_CONTROL': - return { ...state, hiddenControls: [...state.hiddenControls, action.id] } + case 'HIDE_NOTIFICATION': + return { + ...state, + hiddenNotifications: [...state.hiddenNotifications, action.id] + } case 'RESET_SIMULATION': return { ...state, - hiddenControls: [], + hiddenNotifications: [], situation: state.initialSituation, foldedSteps: [], unfoldedStep: null diff --git a/mon-entreprise/source/rules/dirigeant.yaml b/mon-entreprise/source/rules/dirigeant.yaml index c65300bae..e8bf59b78 100644 --- a/mon-entreprise/source/rules/dirigeant.yaml +++ b/mon-entreprise/source/rules/dirigeant.yaml @@ -39,6 +39,7 @@ dirigeant . assimilé salarié: - contrat salarié . temps de travail . heures supplémentaires - contrat salarié . déduction forfaitaire spécifique - contrat salarié . régime des impatriés + - contrat salarié . rémunération . contrôle smic - entreprise . association non lucrative références: Le régime des dirigeants: https://www.urssaf.fr/portail/home/employeur/creer/choisir-une-forme-juridique/le-statut-du-dirigeant/les-dirigeants-rattaches-au-regi.html @@ -75,13 +76,17 @@ dirigeant . auto-entrepreneur: dirigeant . auto-entrepreneur . base des cotisations: formule: entreprise . chiffre d'affaires - contrôles: - - si: base des cotisations > plafond - message: Le seuil annuel de chiffre d'affaires pour le régime de l'auto-entreprise est dépassé. [En savoir plus](/documentation/dirigeant/auto‑entrepreneur/plafond) - niveau: avertissement - - si: entreprise . chiffre d'affaires > entreprise . franchise de TVA - message: Le seuil annuel de chiffre d'affaires pour la franchise de TVA est dépassé. [En savoir plus](/documentation/entreprise/franchise-de-TVA) - niveau: information + +dirigeant . auto-entrepreneur . contrôle seuil de CA dépassé: + type: notification + sévérité: avertissement + applicable si: base des cotisations > plafond + description: Le seuil annuel de chiffre d'affaires pour le régime de l'auto-entreprise est dépassé. [En savoir plus](/documentation/dirigeant/auto‑entrepreneur/plafond) + +dirigeant . auto-entrepreneur . contrôle seuil de TVA dépassé: + type: notification + applicable si: entreprise . chiffre d'affaires > entreprise . franchise de TVA + description: Le seuil annuel de chiffre d'affaires pour la franchise de TVA est dépassé. [En savoir plus](/documentation/entreprise/franchise-de-TVA) dirigeant . auto-entrepreneur . plafond: description: | @@ -337,13 +342,14 @@ dirigeant . auto-entrepreneur . impôt . versement libératoire: Pour en bénéficier, votre revenu fiscal de référence ne doit pas excéder 27 086 € en 2018 question: Bénéficiez-vous du versement libératoire de l'impôt sur le revenu ? par défaut: non - contrôles: - - si: - toutes ces conditions: - - impôt . foyer fiscal . revenu fiscal de référence > 27086 €/an - - versement libératoire - message: Le versement libératoire n'est pas disponible si les revenus de votre ménage sont supérieurs à 27 086 € par part en 2018 - niveau: info + +dirigeant . auto-entrepreneur . impôt . versement libératoire . contrôle seuil: + type: notification + applicable si: + toutes ces conditions: + - impôt . foyer fiscal . revenu fiscal de référence > 27086 €/an + - versement libératoire + description: Le versement libératoire n'est pas disponible si les revenus de votre ménage sont supérieurs à 27 086 € par part en 2018 dirigeant . auto-entrepreneur . impôt . versement libératoire . montant: titre: versement libératoire auto-entrepreneur @@ -433,27 +439,27 @@ dirigeant . rémunération totale: dirigeant . indépendant: rend non applicable: contrat salarié formule: dirigeant = 'indépendant' - contrôles: - - si: - toutes ces conditions: - - dirigeant = 'indépendant' - - entreprise . durée d'activité . en fin d'année < 2 ans - - entreprise . date de création != 02/01/2020 - message: | - Lorsque vous commencez votre activité, vos revenus professionnels - n’étant pas connus, les cotisations et contributions des deux premières - années sont calculées sur une base forfaitaire. - Cette base s’élève à 19 % du plafond annuel de la Sécurité sociale au titre de - la première et de la deuxième année d’activité. +dirigeant . indépendant . contrôle base forfaitaire: + type: notification + applicable si: + toutes ces conditions: + - entreprise . durée d'activité . en fin d'année < 2 ans + - entreprise . date de création != 02/01/2020 + description: >- + Lorsque vous commencez votre activité, vos revenus professionnels + n’étant pas connus, les cotisations et contributions des deux premières + années sont calculées sur une base forfaitaire. - Il y a un ajustement la troisième année en fonction des revenus réels - déclarées lors des deux années précédentes. + Cette base s’élève à 19 % du plafond annuel de la Sécurité sociale au titre de + la première et de la deuxième année d’activité. - Ce simulateur calcul les cotisations au régime de croisière (après - régularisation). Il vous permet donc de connaître le montant à - provisionner pour la régularisation. - niveau: info + Il y a un ajustement la troisième année en fonction des revenus réels + déclarées lors des deux années précédentes. + + Ce simulateur calcul les cotisations au régime de croisière (après + régularisation). Il vous permet donc de connaître le montant à + provisionner pour la régularisation. dirigeant . indépendant . cotisations et contributions . exonérations . ACRE: applicable si: entreprise . ACRE @@ -761,13 +767,14 @@ dirigeant . indépendant . contrats madelin . montant: somme: - mutuelle . montant - retraite . montant - contrôles: - - si: entreprise . charges < montant - niveau: avertissement - message: | - Le montant de l'ensemble des cotisations à vos contrats Madelin - doit être inclus dans vos charges de fonctionnement, or ce vous - avez indiqué un montant de cotisations supérieur aux charges. + +dirigeant . indépendant . contrats madelin . contrôle montant charges: + type: notification + applicable si: entreprise . charges < montant + description: >- + Le montant de l'ensemble des cotisations à vos contrats Madelin + doit être inclus dans vos charges de fonctionnement, or ce vous + avez indiqué un montant de cotisations supérieur aux charges. dirigeant . indépendant . contrats madelin . part déductible fiscalement: titre: Part de la cotisation à contrat Madelin qui est déductible fiscalement diff --git a/mon-entreprise/source/rules/entreprise-établissement.yaml b/mon-entreprise/source/rules/entreprise-établissement.yaml index 1d3588270..233e5338c 100644 --- a/mon-entreprise/source/rules/entreprise-établissement.yaml +++ b/mon-entreprise/source/rules/entreprise-établissement.yaml @@ -19,13 +19,18 @@ entreprise . date de création: Début 2019: 01/01/2019 Fin 2017: 31/12/2017 type: date - contrôles: - - si: date de création > 01/2021 - niveau: avertissement - message: Nous ne pouvons voir aussi loin dans le futur - - si: date de création < 01/1900 - niveau: avertissement - message: Il s'agit d'une très vieille entreprise ! Êtes-vous sûr de ne pas vous être trompé dans la saisie ? + +entreprise . date de création . contrôle date future: + type: notification + sévérité: avertissement + applicable si: date de création > 01/2021 + description: Nous ne pouvons voir aussi loin dans le futur + +entreprise . date de création . contrôle date passée: + type: notification + sévérité: avertissement + applicable si: date de création < 01/1900 + description: Il s'agit d'une très vieille entreprise ! Êtes-vous sûr de ne pas vous être trompé dans la saisie ? entreprise . durée d'activité: formule: @@ -377,10 +382,19 @@ entreprise . catégorie d'activité . libérale règlementée: Il s'agit des autres personnes qui pratiquent, une science ou un art et dont l'activité intellectuelle joue le principal rôle. Leurs recettes doivent représenter la rémunération d'un travail personnel, sans lien de subordination, tout en engageant leur responsabilité technique et morale. > Exemples de professions non-règlementées : développeur, historien, urbaniste... - références: Liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales +entreprise . catégorie d'activité . libérale règlementée . avertissement: + type: notification + sévérité: avertissement + description: >- + Attention, le simulateur n'est pas encore complet pour les professions libérales règlementées : + + - pour la retraite complémentaire, seul le barème interprofessionnel, celui de la CIPAV, a été intégré pour l'instant. + - assurez-vous que le statut auto-entrepreneur est bien compatible avec votre profession règlementée + - pour les praticiens et auxiliaires médicaux (PAM), [les spécificités de calcul des cotisations](https://www.urssaf.fr/portail/home/praticien-et-auxiliaire-medical/mes-cotisations/le-calcul-de-mes-cotisations/la-participation-de-la-cpam-a-me.html) et la [CURPS](https://www.urssaf.fr/portail/home/indépendant/mes-cotisations/quelles-cotisations/la-contribution-aux-unions-regio/qui-est-redevable-de-la-curps.html) ne sont pas encore intégrées. + entreprise . catégorie d'activité . libérale règlementée . type d'activité libérale règlementée: formule: une possibilité: diff --git a/mon-entreprise/source/rules/profession-libérale.yaml b/mon-entreprise/source/rules/profession-libérale.yaml index 906943ad2..b719d6caf 100644 --- a/mon-entreprise/source/rules/profession-libérale.yaml +++ b/mon-entreprise/source/rules/profession-libérale.yaml @@ -658,19 +658,17 @@ dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire . rédu annexes (2033 B et D ou 2053 et 2058 A) de l’année 2019. unité: '%' formule: assiette des cotisations / (85% * plafond sécurité sociale temps plein) - contrôles: - - si: - toutes ces conditions: - - dirigeant . indépendant . PL . PAM . CARCDSF - - assiette des cotisations < 85% * plafond sécurité sociale temps plein - niveau: info - message: | - Vous avez la possibilité de bénéficier d'une réduction de cotisation - pour la retraite complémentaire si vous en faites la demande. [En savoir - plus](/documentation/dirigeant/indépendant/PL/PAM/CARCDSF/retraite-complémentaire/forfaitaire/réduction) références: Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations +dirigeant . indépendant . PL . PAM . CARCDSF . retraite complémentaire . réduction de la cotisation forfaitaire . info réduction: + type: notification + applicable si: assiette des cotisations < 85% * plafond sécurité sociale temps plein + description: >- + Vous avez la possibilité de bénéficier d'une réduction de cotisation + pour la retraite complémentaire si vous en faites la demande. [En savoir + plus](/documentation/dirigeant/indépendant/PL/PAM/CARCDSF/retraite-complémentaire/forfaitaire/réduction) + dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste: applicable si: métier = 'PAM . chirurgien-dentiste' formule: oui @@ -703,19 +701,18 @@ dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . PCV: assiette: assiette des cotisations plafond: 5 * plafond sécurité sociale temps plein taux: 0.725 % - contrôles: - - si: - toutes ces conditions: - - chirurgien-dentiste - - (assiette des cotisations / prix d'une consultation) <= 500 consultation/an - niveau: info - message: | - Vous avez la possibilité de bénéficier d'une éxoné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) références: Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations +dirigeant . indépendant . PL . PAM . CARCDSF . chirurgien-dentiste . PCV . info exonération: + type: notification + applicable si: (assiette des cotisations / prix d'une consultation) <= 500 consultation/an + 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 . PAM . CARCDSF . chirurgien-dentiste . taux Urssaf: description: | Le « taux Urssaf » (taux UR) permet de calculer la part de votre @@ -818,19 +815,18 @@ dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . PCV: produit: assiette: 780 €/an taux: 1 / 3 - contrôles: - - si: - toutes ces conditions: - - sage-femme - - assiette des cotisations <= 3120 €/an - niveau: info - message: | - Vous avez la possibilité de bénéficier d'une éxoné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) références: Site CARCDSF: www.carcdsf.fr/cotisations-du-praticien/montant-des-cotisations +dirigeant . indépendant . PL . PAM . CARCDSF . sage-femme . PCV . info exonération: + type: notification + applicable si: assiette des cotisations <= 3120 €/an + 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 . PAM . PCV: titre: Prestations complémentaires vieillesse acronyme: PCV diff --git a/mon-entreprise/source/rules/salarié.yaml b/mon-entreprise/source/rules/salarié.yaml index 750a27a10..12e9f0549 100644 --- a/mon-entreprise/source/rules/salarié.yaml +++ b/mon-entreprise/source/rules/salarié.yaml @@ -17,19 +17,6 @@ contrat salarié: - Particuliers employeurs : Plus de 8 heures par semaine ou de plus de 4 semaines consécutives dans l'année. - CDI : La signature d’un contrat de travail n’est pas obligatoire dans certains cas. C’est le cas du Contrat de travail à Durée Indéterminée, considéré comme la forme normale et générale de la relation de travail entre un salarié et un employeur (Art. L1221-2 du Code du travail). - contrôles: - - si: CDD - niveau: information - message: | - Rappelez-vous qu'un CDD doit toujours correspondre à un besoin temporaire de l'entreprise. - [Code du travail - Article L1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006901194&cidTexte=LEGITEXT000006072050) - - si: stage - niveau: avertissement - message: | - Une convention de stage **n'est pas un contrat de travail**, et ne peut pas être conclue pour réaliser une tâche régulière correspondant à un poste de travail permanent, ou à un accroissement temporaire de l'activité de l'entreprise. [Code de l'éducation - Article L124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119&cidTexte=LEGITEXT000006071191) - - Par ailleurs, une entreprise de moins de 20 salariés ne peut pas accueillir plus de **3 stagiaires**, et pas plus de **15% de l’effectif** pour les entreprises de plus de 20 salariés. - contrat salarié . CDI: formule: contrat salarié = 'CDI' @@ -157,13 +144,18 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation suggestions: 50%: 50 60%: 60 - contrôles: - - si: taux participation employeur < 50% - niveau: avertissement - message: La part employeur du titre-restaurant doit être de 50% au minimum - - si: taux participation employeur > 60% - niveau: avertissement - message: La part employeur du titre-restaurant doit être de 60% au maximum + +contrat salarié . frais professionnels . titres-restaurant . contrôle taux employeur min: + type: notification + sévérité: avertissement + applicable si: taux participation employeur < 50% + description: La part employeur du titre-restaurant doit être de 50% au minimum + +contrat salarié . frais professionnels . titres-restaurant . contrôle taux employeur max: + type: notification + sévérité: avertissement + applicable si: taux participation employeur > 60% + description: La part employeur du titre-restaurant doit être de 60% au maximum contrat salarié . frais professionnels . indemnité kilométrique vélo: icônes: 🚴 @@ -255,12 +247,14 @@ contrat salarié . activité partielle . heures travaillées: 30 h/semaine: 130 20 h/semaine: 86.6666 10 h/semaine: 43.3333 - contrôles: - - si: heures travaillées > temps de travail . temps contractuel - niveau: avertissement - message: >- - Dans le cadre de l'activité partielle, le temps de travail doit être inférieur - à celui inscrit dans le contrat de travail. + +contrat salarié . activité partielle . heures travaillées . contrôle temps de travail: + type: notification + sévérité: avertissement + applicable si: heures travaillées > temps de travail . temps contractuel + description: >- + Dans le cadre de l'activité partielle, le temps de travail doit être inférieur + à celui inscrit dans le contrat de travail. contrat salarié . activité partielle . indemnités: titre: indemnités activité partielle @@ -910,13 +904,12 @@ contrat salarié . CDD . congés non pris: 3 jours: 3 10 jours: 10 par défaut: 0 jour ouvré - contrôles: - - si: congés non pris > congés dus en jours ouvrés - message: Un salarié acquiert normalement 2.08 jours de congés ouvrés par mois. - niveau: avertissement - solution: - cible: contrat salarié . CDD . durée contrat - texte: Définir la durée de contrat + +contrat salarié . CDD . contrôle congés non pris max: + type: notification + sévérité: avertissement + applicable si: congés non pris > congés dus en jours ouvrés + description: Un salarié acquiert normalement 2.08 jours de congés ouvrés par mois. contrat salarié . CDD . contrat jeune vacances: titre: Contrat jeune vacances @@ -974,10 +967,6 @@ contrat salarié . apprentissage . ancienneté: - moins de trois ans - moins de quatre ans par défaut: "'moins d'un an'" - contrôles: - - si: moins de quatre ans - niveau: information - message: La durée maximale du contrat peut être portée à 4 ans lorsque la qualité de travailleur handicapé est reconnue à l'apprenti. contrat salarié . apprentissage . ancienneté . moins d'un an: formule: ancienneté = 'moins d'un an' @@ -991,6 +980,12 @@ contrat salarié . apprentissage . ancienneté . moins de trois ans: contrat salarié . apprentissage . ancienneté . moins de quatre ans: formule: ancienneté = 'moins de quatre ans' +contrat salarié . apprentissage . ancienneté . moins de quatre ans . information: + type: notification + description: >- + La durée maximale du contrat peut être portée à 4 ans lorsque la qualité de + travailleur handicapé est reconnue à l'apprenti. + contrat salarié . stage: description: | Un employeur qui accueille un stagiaire doit lui verser une gratification minimale. Celle-ci est en partie exonérée de cotisations sociales. @@ -1012,6 +1007,22 @@ contrat salarié . stage: - temps de travail . temps partiel - temps de travail . heures supplémentaires - régime des impatriés + - rémunération . contrôle smic + +contrat salarié . stage . avertissement: + type: notification + sévérité: avertissement + description: >- + Une convention de stage **n'est pas un contrat de travail**, et ne peut pas être conclue pour réaliser une tâche régulière correspondant à un poste de travail permanent, ou à un accroissement temporaire de l'activité de l'entreprise. [Code de l'éducation - Article L124-7](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029234119&cidTexte=LEGITEXT000006071191) + + Par ailleurs, une entreprise de moins de 20 salariés ne peut pas accueillir plus de **3 stagiaires**, et pas plus de **15% de l’effectif** pour les entreprises de plus de 20 salariés. + +contrat salarié . stage . contrôle gratification minimale: + type: notification + sévérité: avertissement + applicable si: rémunération . brut de base < stage . gratification minimale + description: >- + La rémunération du stage est inférieure à la [gratification minimale](https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131). contrat salarié . stage . gratification minimale: formule: 15% * plafond sécurité sociale temps plein @@ -1035,17 +1046,12 @@ contrat salarié . CDD: Par défaut, faire travailler quelqu'un en France établit automatiquement un CDI à temps plein. Certaines situations exceptionnelles permettent aux employeurs de prévoir une date de fin. Le contrat, qui est alors nécessaire, mentionne cette date de fin. - # TODO: règle de type : il faut qu'un motif et une durée soient sélectionnés pour qu'un contrat soit un CDD. Cela revient à dire que les variables CDD et motif sont obligatoires *dans le contexte* de leur attache - # implique: - # - emploi temporaire - # - motif de recours - # # C'est ici que l'on dit : si le CDD a été choisi, la réponses à motif CDD doit être donnée (on ne peut ne pas y répondre) - # - # - Variable: emploi temporaire - # description: Le contrat n'a ni pour objet ni pour effet de pourvoir durablement un emploi lié à l'activité normale et permanente de l'entreprise. - # références: - # Code du travail - Article L1242-1 - # +contrat salarié . CDD . information: + type: notification + description: >- + Rappelez-vous qu'un CDD doit toujours correspondre à un besoin temporaire de l'entreprise. + [Code du travail - Article L1242-1](https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006901194&cidTexte=LEGITEXT000006072050) + contrat salarié . cotisations . assiette: titre: Assiette des cotisations sociales description: | @@ -1096,32 +1102,6 @@ contrat salarié . rémunération . brut de base: suggestions: salaire médian: 2300 €/mois SMIC: 1539 €/mois - contrôles: - - si: - toutes ces conditions: - - rémunération . assiette de vérification du SMIC < (SMIC contractuel - 1 €/mois) - - dirigeant != 'assimilé salarié' - - stage != oui - - apprentissage != oui - niveau: avertissement - message: | - Le salaire saisi est inférieur au SMIC. - - - si: - toutes ces conditions: - - stage - - brut de base < stage . gratification minimale - niveau: avertissement - message: | - La rémunération du stage est inférieure à la [gratification minimale](https://www.service-public.fr/professionnels-entreprises/vosdroits/F32131). - - - si: - toutes ces conditions: - - brut de base > 10000 €/mois - - dirigeant = non - niveau: information - message: | - Le salaire mensuel saisi est élevé. Ne vous êtes-vous pas trompé de période de calcul ? formule: inversion numérique: question: Quel est le salaire ? @@ -1139,6 +1119,21 @@ contrat salarié . rémunération . brut de base: références: Le salaire. Fixation et paiement: http://travail-emploi.gouv.fr/droit-du-travail/remuneration-et-participation-financiere/remuneration/article/le-salaire-fixation-et-paiement +contrat salarié . rémunération . contrôle smic: + type: notification + sévérité: avertissement + applicable si: assiette de vérification du SMIC < (SMIC contractuel - 1 €/mois) + description: Le salaire saisi est inférieur au SMIC. + +contrat salarié . rémunération . contrôle salaire élevé: + type: notification + applicable si: + toutes ces conditions: + - brut de base >= 10000 €/mois + - dirigeant = non + description: >- + Le salaire mensuel saisi est élevé. Ne vous êtes-vous pas trompé de période de calcul ? + contrat salarié . rémunération . brut de base . équivalent temps plein: applicable si: temps de travail . temps partiel titre: Salaire brut équivalent temps plein @@ -1979,16 +1974,18 @@ contrat salarié . temps de travail . temps partiel: contrat salarié . temps de travail . temps partiel . heures par semaine: par défaut: 32 heures/semaine question: Quel est le nombre d'heures travaillées par semaine dans le cadre du temps partiel ? - contrôles: - - si: - toutes ces conditions: - - temps partiel - - heures par semaine < 24 - niveau: avertissement - message: Le nombre minimum d'heures par semaine est 24. Il est possible de descendre plus bas dans certains cas seulement. [Plus d'infos](https://www.service-public.fr/particuliers/vosdroits/F32428). - - si: heures par semaine >= base légale - niveau: avertissement - message: Un temps partiel doit être en dessous de la durée de travail légale (35h) + +contrat salarié . temps de travail . temps partiel . contrôle temps min: + type: notification + sévérité: avertissement + applicable si: heures par semaine < 24 + description: Le nombre minimum d'heures par semaine est 24. Il est possible de descendre plus bas dans certains cas seulement. [Plus d'infos](https://www.service-public.fr/particuliers/vosdroits/F32428). + +contrat salarié . temps de travail . temps partiel . contrôle temps max: + type: notification + sévérité: avertissement + applicable si: heures par semaine >= base légale + description: Un temps partiel doit être en dessous de la durée de travail légale (35h) contrat salarié . temps de travail . quotité de travail: description: Temps de travail en proportion du temps complet légal. @@ -2013,20 +2010,23 @@ contrat salarié . temps de travail . heures supplémentaires: aucune: 0 39h / semaine: 17.33 42h / semaine: 30.33 - contrôles: - - si: - toutes ces conditions: - - heures supplémentaires > 9 heures/semaine * période . semaines par mois - - heures supplémentaires <= 13 heures/semaine * période . semaines par mois - niveau: info - message: La durée hebdomadaire moyenne de travail ne peut pas dépasser 44h - - si: heures supplémentaires > 13 heures/semaine * période . semaines par mois - niveau: avertissement - message: La durée hebdomadaire maximale de travail ne peut pas dépasser 48h - références: service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F2391 +contrat salarié . temps de travail . contrôle 44h max: + type: notification + applicable si: + toutes ces conditions: + - heures supplémentaires > 9 heures/semaine * période . semaines par mois + - heures supplémentaires <= 13 heures/semaine * période . semaines par mois + description: La durée hebdomadaire moyenne de travail ne peut pas dépasser 44h + +contrat salarié . temps de travail . contrôle 48h max: + type: notification + sévérité: avertissement + applicable si: heures supplémentaires > 13 heures/semaine * période . semaines par mois + description: La durée hebdomadaire maximale de travail ne peut pas dépasser 48h + contrat salarié . temps de travail . heures supplémentaires . majoration: description: | La rémunération des heures supplémentaires fait l'objet d'un ou plusieurs taux de majoration, fixés par convention ou accord collectif d'entreprise ou d'établissement (ou, à défaut, par convention ou accord de branche). Chaque taux est au minimum fixé à 10%. @@ -2055,14 +2055,18 @@ contrat salarié . temps de travail . heures complémentaires: applicable si: temps partiel question: Combien d'heures complémentaires (non récupérées en repos) sont effectuées par mois ? par défaut: 0 heure/mois - contrôles: - - si: heures complémentaires > seuil légal - niveau: information - message: Sauf disposition conventionnelle, le nombre d'heures complémentaires ne peut être supérieur à un dixième de la durée contractuelle du temps partiel. - # TODO: Le système d'unité ne fait pas la conversion mois/semaines automatiquement donc nous devons ajouter un terme "semaines par mois" manuellement - - si: heures complémentaires + temps partiel . heures par semaine * période . semaines par mois >= base légale * période . semaines par mois - niveau: avertissement - message: Les heures complémentaires ne doivent pas amener le salarié à travailler pour une durée supérieure ou égale à la durée légale du travail (35h) + +contrat salarié . temps de travail . contrôle heures complémentaires 10 pourcents: + type: notification + applicable si: heures complémentaires > heures complémentaires . seuil légal + description: Sauf disposition conventionnelle, le nombre d'heures complémentaires ne peut être supérieur à un dixième de la durée contractuelle du temps partiel. + +# TODO: Le système d'unité ne fait pas la conversion mois/semaines automatiquement donc nous devons ajouter un terme "semaines par mois" manuellement +contrat salarié . temps de travail . contrôle heures complémentaires max: + type: notification + sévérité: avertissement + applicable si: heures complémentaires + temps partiel . heures par semaine * période . semaines par mois >= base légale * période . semaines par mois + description: Les heures complémentaires ne doivent pas amener le salarié à travailler pour une durée supérieure ou égale à la durée légale du travail (35h) contrat salarié . temps de travail . heures complémentaires . majoration: description: > @@ -2502,10 +2506,12 @@ contrat salarié . complémentaire santé . part employeur: 50%: 50 100%: 100 par défaut: 50% - contrôles: - - si: part employeur < 50% - niveau: avertissement - message: La part employeur de la complémentaire santé doit être de 50% au minimum + +contrat salarié . complémentaire santé . part employeur min: + type: notification + sévérité: avertissement + applicable si: part employeur < 50% + description: La part employeur de la complémentaire santé doit être de 50% au minimum contrat salarié . complémentaire santé . part salarié: description: Part de la complémentaire santé payée par l'employé. Ne peut pas être supérieure à 50% @@ -2537,10 +2543,12 @@ contrat salarié . complémentaire santé . forfait: basique: 40 élevé: 100 alsace moselle basique: 30 - contrôles: - - si: complémentaire santé . forfait < 15 €/mois - message: Vérifiez bien qu'une complémentaire santé si peu chère couvre le panier de soin minimal défini dans la loi. - niveau: avertissement + +contrat salarié . complémentaire santé . contrôle min: + type: notification + sévérité: avertissement + applicable si: complémentaire santé . forfait < 15 €/mois + description: Vérifiez bien qu'une complémentaire santé si peu chère couvre le panier de soin minimal défini dans la loi. contrat salarié . régime alsace moselle: titre: Régime Alsace-Moselle @@ -3220,20 +3228,20 @@ contrat salarié . régime des impatriés: - vieillesse - retraite complémentaire - protection sociale . retraite . base - contrôles: - - si: contrat salarié . régime des impatriés - niveau: information - message: | - Pour bénéficier de l'exonération de cotisations vieillesse, il faut remplir les conditions suivantes : - - Pouvoir justifier d'une contribution minimale versée ailleurs pour une assurance vieillesse - - Ne pas avoir été affilié, au cours des cinq années civiles précédant celle de la prise de fonctions, à un régime français obligatoire d'assurance vieillesse, sauf pour des activités accessoires, de caractère saisonnier ou pour les études. - - [Lire le texte de loi](https://www.legifrance.gouv.fr/affichCode.do;jsessionid=F5CFB7C90D1D1F529A2CDC9FFD20BD6E.tplgfr34s_3?idSectionTA=LEGISCTA000038510929&cidTexte=LEGITEXT000006073189&dateTexte=20190626) références: impots.gouv.fr: https://www.impots.gouv.fr/portail/particulier/questions/puis-je-beneficier-du-regime-des-impatries bofip: http://bofip.impots.gouv.fr/bofip/5694-PGP Article 155B du Code général des impôts: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069577&idArticle=LEGIARTI000006307476&dateTexte=&categorieLien=cid +contrat salarié . régime des impatriés . information: + type: notification + description: >- + Pour bénéficier de l'exonération de cotisations vieillesse, il faut remplir les conditions suivantes : + - Pouvoir justifier d'une contribution minimale versée ailleurs pour une assurance vieillesse + - Ne pas avoir été affilié, au cours des cinq années civiles précédant celle de la prise de fonctions, à un régime français obligatoire d'assurance vieillesse, sauf pour des activités accessoires, de caractère saisonnier ou pour les études. + + [Lire le texte de loi](https://www.legifrance.gouv.fr/affichCode.do;jsessionid=F5CFB7C90D1D1F529A2CDC9FFD20BD6E.tplgfr34s_3?idSectionTA=LEGISCTA000038510929&cidTexte=LEGITEXT000006073189&dateTexte=20190626) + contrat salarié . taxe sur les salaires: unité: €/mois taxe: @@ -3583,17 +3591,18 @@ contrat salarié . convention collective: - SVP - compta - optique - contrôles: - - si: - toutes ces conditions: - - convention collective != non - - convention collective != 'droit commun' - niveau: avertissement - message: | - Attention, l'implémentation des conventions collective est encore - partielle et non vérifiée. - Néanmoins, cela permet d'obtenir une première estimation, plus précise - que le régime général. + +contrat salarié . convention collective . contrôle décharge: + type: notification + sévérité: avertissement + applicable si: + toutes ces conditions: + - convention collective != non + - convention collective != 'droit commun' + description: >- + Attention, l'implémentation des conventions collective est encore partielle + et non vérifiée. Néanmoins, cela permet d'obtenir une première estimation, + plus précise que le régime général. contrat salarié . convention collective . droit commun: formule: convention collective = 'droit commun' diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/formulaire-détachement.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/formulaire-détachement.yaml index 32c5fdc25..cfeabc87f 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/formulaire-détachement.yaml +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/DemandeMobilite/formulaire-détachement.yaml @@ -227,16 +227,20 @@ activité transfrontalière simultanée . activité non salariée: activité transfrontalière simultanée . activité non salariée . nombre: question: Dans combien de pays autre que la France exercerez-vous une activité non salariée ? type: nombre - contrôles: - - si: nombre > 2 - message: > - Ce formulaire ne permet pas de déclarer une activité dans plus de - 3 pays - niveau: avertissement - - si: nombre < 1 - message: > - Vous devez déclarer un pays au moins - niveau: avertissement + +activité transfrontalière simultanée . activité non salariée . nombre max: + type: notification + sévérité: avertissement + applicable si: nombre > 2 + description: > + Ce formulaire ne permet pas de déclarer une activité dans plus de 3 pays + +activité transfrontalière simultanée . activité non salariée . nombre min: + type: notification + sévérité: avertissement + applicable si: nombre < 1 + description: > + Vous devez déclarer un pays au moins activité transfrontalière simultanée . activité non salariée . n°1: titre: activité non salarié n°1 diff --git a/publicodes/source/controls.js b/publicodes/source/controls.js deleted file mode 100644 index 8d6509b09..000000000 --- a/publicodes/source/controls.js +++ /dev/null @@ -1,19 +0,0 @@ -import { evaluateNode } from './evaluation' - -export let evaluateControls = (cache, situation, parsedRules) => { - return Object.values(parsedRules) - .filter(rule => !!rule.contrôles) - .map(rule => - rule.contrôles.map(contrôle => ({ - ...contrôle, - evaluated: evaluateNode( - { ...cache, contextRule: [rule.dottedName] }, - situation, - parsedRules, - contrôle.testExpression - ) - })) - ) - .flat() - .filter(contrôle => contrôle.evaluated.nodeValue === true) -} diff --git a/publicodes/source/index.ts b/publicodes/source/index.ts index 318aaa24f..744779d33 100644 --- a/publicodes/source/index.ts +++ b/publicodes/source/index.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/ban-types */ import { mapObjIndexed } from 'ramda' -import { evaluateControls } from './controls' import { evaluationError, warning } from './error' import { evaluateNode } from './evaluation' import { convertNodeToUnit, simplifyNodeUnit } from './nodeUnits' @@ -145,10 +144,6 @@ export default class Engine { return result } - controls() { - return evaluateControls(this.cache, this.situation, this.parsedRules) - } - getWarnings() { return this.warnings } diff --git a/publicodes/source/parseRule.tsx b/publicodes/source/parseRule.tsx index d5328e3e9..382927635 100644 --- a/publicodes/source/parseRule.tsx +++ b/publicodes/source/parseRule.tsx @@ -160,26 +160,7 @@ export default function( unit: child.unit, explanation: child } - }, - contrôles: map((control: any) => { - const testExpression = parse(rules, rule, parsedRules)(control.si) - if ( - !testExpression.explanation && - !(testExpression.category === 'reference') - ) - throw new Error( - 'Ce contrôle ne semble pas être compris :' + control['si'] - ) - - return { - dottedName: dottedName, - level: control['niveau'], - test: control['si'], - message: control['message'], - testExpression, - solution: control['solution'] - } - }) + } })(rule) parsedRules[dottedName] = { diff --git a/publicodes/source/translateRules.ts b/publicodes/source/translateRules.ts index ae3d06406..46d35c04e 100644 --- a/publicodes/source/translateRules.ts +++ b/publicodes/source/translateRules.ts @@ -10,19 +10,6 @@ type translateAttribute = ( ) => Rule /* Traduction */ -const translateContrôle: translateAttribute = (prop, rule, translation, lang) => - assoc( - 'contrôles', - rule.contrôles!.map((control, i) => ({ - ...control, - message: translation[`${prop}.${i}.${lang}`]?.replace( - /^\[automatic\] /, - '' - ) - })), - rule - ) - const translateSuggestion: translateAttribute = ( prop, rule, @@ -50,7 +37,6 @@ export const attributesToTranslate = [ 'question', 'résumé', 'suggestions', - 'contrôles', 'note' ] @@ -58,9 +44,6 @@ const translateProp = (lang: string, translation: Translation) => ( rule: Rule, prop: string ) => { - if (prop === 'contrôles' && rule?.contrôles) { - return translateContrôle(prop, rule, translation, lang) - } if (prop === 'suggestions' && rule?.suggestions) { return translateSuggestion(prop, rule, translation, lang) } diff --git a/publicodes/source/types/index.ts b/publicodes/source/types/index.ts index 05562783e..48b8cfb47 100644 --- a/publicodes/source/types/index.ts +++ b/publicodes/source/types/index.ts @@ -1,15 +1,5 @@ import { Temporal } from '../temporal' -type Contrôle = { - si: string - message: string - niveau: 'avertissement' | 'information' - solution?: { - cible: string - texte: string - } -} - type BaseUnit = string export type Unit = { @@ -30,7 +20,6 @@ export type Rule = { note?: string suggestions?: { [description: string]: number } références?: { [source: string]: string } - contrôles?: Array } export type Rules = Record diff --git a/publicodes/test/contrôles.test.js b/publicodes/test/contrôles.test.js deleted file mode 100644 index 008ffd0e6..000000000 --- a/publicodes/test/contrôles.test.js +++ /dev/null @@ -1,77 +0,0 @@ -import { expect } from 'chai' -import Engine, { parseRules } from '../source/index' - -describe('controls', function() { - let rawRules = { - net: { formule: 'brut - cotisation' }, - cotisation: { formule: 235 }, - 'résident en France': { formule: 'oui' }, - brut: { - unité: '€', - question: 'Quel est le salaire brut ?', - contrôles: [ - { - si: 'brut < 300', - niveau: 'bloquant', - message: - 'Malheureux, je crois que vous vous êtes trompé dans votre saisie.' - }, - { - si: 'brut < 1000', - niveau: 'bloquant', - message: 'Toujours pas, nous avons des standards en France !' - }, - { - si: 'brut < 1500', - niveau: 'avertissement', - message: 'Toujours pas, nous avons des standards en France !' - }, - { - si: 'brut > 100000', - niveau: 'information', - message: 'Oulah ! Oulah !' - }, - { - si: { - 'toutes ces conditions': ['brut > 1000000', 'résident en France'] - }, - niveau: 'information', - message: 'Vous êtes un contribuable hors-pair !' - } - ] - } - } - - it('Should parse blocking controls', function() { - let controls = Object.values(parseRules(rawRules)).find(r => r.contrôles) - .contrôles - expect( - controls.filter(({ level }) => level == 'bloquant') - ).to.have.lengthOf(2) - }) - - it('Should allow imbricated conditions', function() { - const engine = new Engine(rawRules) - let controls = engine.setSituation({ brut: 2000000 }).controls() - expect( - controls.find( - ({ message }) => message === 'Vous êtes un contribuable hors-pair !' - ) - ).to.exist - - let controls2 = engine.setSituation({ brut: 100001 }).controls() - - expect(controls2.find(({ message }) => message === 'Oulah ! Oulah !')).to - .exist - - let controls3 = engine.setSituation({ brut: 100 }).controls() - - expect( - controls3.find( - ({ message }) => - message === - 'Malheureux, je crois que vous vous êtes trompé dans votre saisie.' - ) - ).to.exist - }) -})