From 3eb26718efaf6da3278abf6340bbc5af237ceb29 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 20 Aug 2024 16:56:02 +0200 Subject: [PATCH 1/7] =?UTF-8?q?refactor(salari=C3=A9):=20Renomme=20le=20co?= =?UTF-8?q?mposant=20Fiche=20de=20Paie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/source/components/FicheDePaie/Cotisations.tsx | 2 +- .../FicheDePaie/{PaySlip.css => FicheDePaie.css} | 0 .../FicheDePaie/{PaySlip.tsx => FicheDePaie.tsx} | 8 ++++++-- site/source/components/FicheDePaie/SalaireBrut.tsx | 2 +- site/source/components/FicheDePaie/SalaireNet.tsx | 2 +- .../simulationExplanation/SalaryExplanation.tsx | 4 ++-- 6 files changed, 11 insertions(+), 7 deletions(-) rename site/source/components/FicheDePaie/{PaySlip.css => FicheDePaie.css} (100%) rename site/source/components/FicheDePaie/{PaySlip.tsx => FicheDePaie.tsx} (81%) diff --git a/site/source/components/FicheDePaie/Cotisations.tsx b/site/source/components/FicheDePaie/Cotisations.tsx index 573bcf82fe..5770a0b370 100644 --- a/site/source/components/FicheDePaie/Cotisations.tsx +++ b/site/source/components/FicheDePaie/Cotisations.tsx @@ -3,7 +3,7 @@ import { ASTNode, ParsedRules, reduceAST, Rule, RuleNode } from 'publicodes' import { Fragment } from 'react' import { Trans } from 'react-i18next' -import './PaySlip.css' +import './FicheDePaie' import { Strong } from '@/design-system/typography' import { H4, H5 } from '@/design-system/typography/heading' diff --git a/site/source/components/FicheDePaie/PaySlip.css b/site/source/components/FicheDePaie/FicheDePaie.css similarity index 100% rename from site/source/components/FicheDePaie/PaySlip.css rename to site/source/components/FicheDePaie/FicheDePaie.css diff --git a/site/source/components/FicheDePaie/PaySlip.tsx b/site/source/components/FicheDePaie/FicheDePaie.tsx similarity index 81% rename from site/source/components/FicheDePaie/PaySlip.tsx rename to site/source/components/FicheDePaie/FicheDePaie.tsx index 7e066de99e..f6762930e8 100644 --- a/site/source/components/FicheDePaie/PaySlip.tsx +++ b/site/source/components/FicheDePaie/FicheDePaie.tsx @@ -1,4 +1,4 @@ -import './PaySlip.css' +import './FicheDePaie.css' import { styled } from 'styled-components' @@ -7,7 +7,7 @@ import Line from './Line' import SalaireBrut from './SalaireBrut' import SalaireNet from './SalaireNet' -export default function PaySlip() { +export default function FicheDePaie() { return (
@@ -25,6 +25,10 @@ export default function PaySlip() { + {/* + + + */} ) diff --git a/site/source/components/FicheDePaie/SalaireBrut.tsx b/site/source/components/FicheDePaie/SalaireBrut.tsx index cbaf674e41..6f17651644 100644 --- a/site/source/components/FicheDePaie/SalaireBrut.tsx +++ b/site/source/components/FicheDePaie/SalaireBrut.tsx @@ -5,7 +5,7 @@ import { H4 } from '@/design-system/typography/heading' import { Condition } from '../EngineValue/Condition' import Line from './Line' -import './PaySlip.css' +import './FicheDePaie.css' export default function SalaireBrut() { return ( diff --git a/site/source/components/FicheDePaie/SalaireNet.tsx b/site/source/components/FicheDePaie/SalaireNet.tsx index 3efadafe02..c8cb1b6eea 100644 --- a/site/source/components/FicheDePaie/SalaireNet.tsx +++ b/site/source/components/FicheDePaie/SalaireNet.tsx @@ -1,6 +1,6 @@ import { Trans, useTranslation } from 'react-i18next' -import './PaySlip.css' +import './FicheDePaie.css' import { H4 } from '@/design-system/typography/heading' diff --git a/site/source/components/simulationExplanation/SalaryExplanation.tsx b/site/source/components/simulationExplanation/SalaryExplanation.tsx index b3f70146c0..2dee29cacf 100644 --- a/site/source/components/simulationExplanation/SalaryExplanation.tsx +++ b/site/source/components/simulationExplanation/SalaryExplanation.tsx @@ -14,7 +14,7 @@ import { SmallBody } from '@/design-system/typography/paragraphs' import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData' import { getCotisationsBySection } from '../FicheDePaie/Cotisations' -import PaySlip from '../FicheDePaie/PaySlip' +import FicheDePaie from '../FicheDePaie/FicheDePaie' export default function SalaryExplanation() { const payslipRef = useRef(null) @@ -66,7 +66,7 @@ export default function SalaryExplanation() {

Fiche de paie

- + Le simulateur vous aide à comprendre votre bulletin de paie, From 7e6875402ebedd62f5981ed6a707c6ef7bbf165b Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Tue, 20 Aug 2024 17:08:17 +0200 Subject: [PATCH 2/7] =?UTF-8?q?refactor(salari=C3=A9):=20Distingue=20la=20?= =?UTF-8?q?r=C3=A9partition=20des=20cotisations=20des=20cat=C3=A9gories=20?= =?UTF-8?q?de=20la=20fiche=20de=20paie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryExplanation.tsx | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/site/source/components/simulationExplanation/SalaryExplanation.tsx b/site/source/components/simulationExplanation/SalaryExplanation.tsx index 2dee29cacf..8dd5b2ce2c 100644 --- a/site/source/components/simulationExplanation/SalaryExplanation.tsx +++ b/site/source/components/simulationExplanation/SalaryExplanation.tsx @@ -1,3 +1,4 @@ +import { DottedName } from 'modele-social' import { useRef } from 'react' import { Trans, useTranslation } from 'react-i18next' import { useTheme } from 'styled-components' @@ -5,7 +6,7 @@ import { useTheme } from 'styled-components' import { ÀQuoiServentMesCotisationsSection } from '@/components/simulationExplanation/ÀQuoiServentMesCotisationsSection' import StackedBarChart from '@/components/StackedBarChart' import { FromTop } from '@/components/ui/animate' -import { useEngine, useInversionFail } from '@/components/utils/EngineContext' +import { useInversionFail } from '@/components/utils/EngineContext' import { Emoji } from '@/design-system/emoji' import { Container, Grid, Spacing } from '@/design-system/layout' import { H2 } from '@/design-system/typography/heading' @@ -13,16 +14,11 @@ import { Link } from '@/design-system/typography/link' import { SmallBody } from '@/design-system/typography/paragraphs' import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData' -import { getCotisationsBySection } from '../FicheDePaie/Cotisations' import FicheDePaie from '../FicheDePaie/FicheDePaie' export default function SalaryExplanation() { const payslipRef = useRef(null) - const regroupement = Object.fromEntries( - getCotisationsBySection(useEngine().getParsedRules()) - ) - if (useInversionFail()) { return null } @@ -39,7 +35,7 @@ export default function SalaryExplanation() { /> - <ÀQuoiServentMesCotisationsSection regroupement={regroupement} /> + <ÀQuoiServentMesCotisationsSection regroupement={CotisationsSection} /> @@ -160,3 +156,43 @@ function RevenueRepartitionSection(props: { onSeePayslip: () => void }) { ) } + +const CotisationsSection: Partial>> = { + 'protection sociale . maladie': [ + 'salarié . cotisations . maladie', + 'salarié . cotisations . prévoyances', + 'salarié . cotisations . prévoyances . santé', + 'salarié . cotisations . ATMP', + ], + 'protection sociale . retraite': [ + 'salarié . cotisations . vieillesse', + 'salarié . cotisations . retraite complémentaire', + 'salarié . cotisations . CEG', + 'salarié . cotisations . CET', + // 'salarié . cotisations . retraite supplémentaire', + ], + 'protection sociale . famille': [ + 'salarié . cotisations . allocations familiales', + ], + 'protection sociale . assurance chômage': [ + 'salarié . cotisations . AGS', + 'salarié . cotisations . chômage', + ], + 'protection sociale . formation': [ + "salarié . cotisations . taxe d'apprentissage", + 'salarié . cotisations . formation professionnelle', + 'salarié . cotisations . CPF CDD', + ], + 'protection sociale . transport': [ + 'salarié . cotisations . versement mobilité', + ], + 'protection sociale . autres': [ + 'salarié . cotisations . CSG-CRDS', + 'salarié . cotisations . APEC', + 'salarié . cotisations . FNAL', + 'salarié . cotisations . CSA', + 'salarié . cotisations . forfait social', + 'salarié . cotisations . PEEC', + 'salarié . cotisations . contribution au dialogue social', + ], +} From c65a558d17bdd3b4dd4716a70827c80bc744ad4a Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Fri, 23 Aug 2024 18:20:15 +0200 Subject: [PATCH 3/7] =?UTF-8?q?feat(salari=C3=A9):=20Met=20=C3=A0=20jour?= =?UTF-8?q?=20la=20pr=C3=A9sentation=20de=20la=20fiche=20de=20paie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salari\303\251/cotisations.publicodes" | 262 ++++++++++++++---- .../r\303\251mun\303\251ration.publicodes" | 15 +- .../components/FicheDePaie/Cotisations.tsx | 135 ++++----- .../components/FicheDePaie/FicheDePaie.css | 37 +-- .../components/FicheDePaie/FicheDePaie.tsx | 4 - .../components/FicheDePaie/SalaireBrut.tsx | 16 +- .../components/FicheDePaie/SalaireNet.tsx | 86 ++++-- site/source/locales/rules-en.yaml | 123 ++++++-- site/source/locales/ui-en.yaml | 14 +- site/source/locales/ui-fr.yaml | 14 +- 10 files changed, 499 insertions(+), 207 deletions(-) diff --git "a/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes" "b/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes" index a28af398ea..d346cf2a94 100644 --- "a/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes" +++ "b/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes" @@ -11,44 +11,68 @@ salarié . cotisations: titre: part employeur somme: - maladie . employeur - - CSA + - prévoyances . santé . employeur - ATMP - - vieillesse . employeur - - retraite complémentaire . employeur - - CEG . employeur - - CET . employeur + - vieillesse . plafonnée . employeur + - vieillesse . déplafonnée . employeur + # TODO: séparer T1 et T2 + - retraite complémentaire-CEG-CET . employeur - allocations familiales - - chômage . employeur + - assurance chômage - APEC . employeur - - AGS - - FNAL - - PEEC - - contribution au dialogue social - - formation professionnelle - - versement mobilité - - taxe d'apprentissage - - CPF CDD - - forfait social - - prévoyances . employeur + - autres employeur + - prévoyances . incapacité invalidité décès . employeur + # - retraite supplémentaire . employeur abattement: exonérations . employeur salarié: titre: part salarié somme: - - vieillesse . salarié - maladie . salarié - - retraite complémentaire . salarié - - CEG . salarié - - CET . salarié - - chômage . salarié - - CSG-CRDS + - prévoyances . santé . salarié + - vieillesse . plafonnée . salarié + - vieillesse . déplafonnée . salarié + # TODO: séparer T1 et T2 + - retraite complémentaire-CEG-CET . salarié - APEC . salarié - - prévoyances . salarié + - CSG-CRDS . CSG . déductible + - CSG-CRDS . sur revenus imposables non déductible + - CSG-CRDS . sur revenus non imposables + - prévoyances . incapacité invalidité décès . salarié # - retraite supplémentaire . salarié abattement: exonérations . salarié +salarié . cotisations . catégories: + avec: + maladie: + titre: santé + type: branche + atmp: + titre: accidents du travail & maladies professionnelles + type: branche + retraite: + titre: retraite + type: branche + divers: + titre: cotisations employeur + type: branche + convention collective: + titre: cotisations statutaires ou prévues par la convention collective + type: branche + CSG-CRDS: + titre: CSG / CRDS + type: branche + exonérations: + titre: exonérations et allègements de cotisations + type: branche + facultatives: + titre: cotisations et contributions sociales facultatives + type: branche + salarié . cotisations . exonérations: - titre: Réductions et exonérations + cotisation: + branche: exonérations + titre: exonérations et allègements de cotisations formule: somme: - employeur @@ -394,6 +418,26 @@ salarié . cotisations . CPF CDD: références: Code du travail - Article L6322-37: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000022234996&cidTexte=LEGITEXT000006072050 +salarié . cotisations . retraite complémentaire-CEG-CET: + titre: retraite complémentaire, CEG et CET + cotisation: + branche: retraite + somme: + - employeur + - salarié + + avec: + employeur: + somme: + - retraite complémentaire . employeur + - CEG . employeur + - CET . employeur + salarié: + somme: + - retraite complémentaire . salarié + - CEG . salarié + - CET . salarié + salarié . cotisations . CEG: titre: contribution d'équilibre général description: >- @@ -552,9 +596,10 @@ salarié . cotisations . AGS: - sinon: 0.15% salarié . cotisations . allocations familiales: + titre: famille cotisation: dû par: employeur - branche: famille + branche: divers produit: - cotisations . assiette - taux @@ -584,7 +629,9 @@ salarié . cotisations . allocations familiales: Code de la sécurité sociale - Article D241-7 II (salaire minimum de croissance): https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000048852497 salarié . cotisations . APEC: - titre: Association pour l’emploi des cadres + cotisation: + branche: divers + titre: Apec acronymes: APEC description: | Cotisation spécifique aux cadre pour le fonctionnement de l'APEC @@ -611,36 +658,55 @@ salarié . cotisations . APEC: - 0.024% titre: part salarié +salarié . cotisations . assurance chômage: + cotisation: + dû par: employeur + branche: divers + somme: + - AGS + - chômage + salarié . cotisations . chômage: cotisation: + dû par: employeur branche: assurance chômage description: Cotisation d’assurance chômage références: Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/cotisations/liste-cotisations/assurance-chomage-ags.html - somme: - - salarié - - employeur + produit: + - valeur: cotisations . assiette + plafond: 4 * temps de travail . plafond sécurité sociale + - 4.05% avec: employeur: + déprécié: oui produit: - valeur: cotisations . assiette plafond: 4 * temps de travail . plafond sécurité sociale - taux titre: part employeur - employeur . taux: 4.05% + employeur . taux: + déprécié: oui + valeur: 4.05% salarié: + déprécié: oui produit: - valeur: cotisations . assiette plafond: 4 * temps de travail . plafond sécurité sociale - taux titre: part salarié - salarié . taux: 0% + salarié . taux: + déprécié: oui + valeur: 0% salarié . cotisations . ATMP: + cotisation: + dû par: employeur + branche: atmp experimental: oui - titre: Accidents du Travail et Maladies Professionnelles + titre: accidents du travail & maladies professionnelles description: Cotisation due au titre des Accidents du Travail et Maladies Professionnelles. produit: @@ -779,6 +845,22 @@ salarié . cotisations . CSG-CRDS . non déductible: - revenus de remplacement . CSG non déductible - revenus de remplacement . CRDS +salarié . cotisations . CSG-CRDS . sur revenus imposables non déductible: + titre: CSG / CRDS non déductible de l'impôt sur le revenu + cotisation: + branche: CSG-CRDS + somme: + - CSG . non déductible . revenus imposables + - CRDS + +salarié . cotisations . CSG-CRDS . sur revenus non imposables: + titre: CSG / CRDS sur les revenus non imposables + cotisation: + branche: CSG-CRDS + valeur: CSG . non déductible . heures supplémentaires et complémentaires défiscalisées + références: + BOSS: https://boss.gouv.fr/portail/accueil/bulletin-de-paie/regles-generales-relatives-au-bu.html#titre-iiiprecisions-sur-la-definition-17quels-sont-les-montants-devant + salarié . cotisations . CSG-CRDS . CSG: non applicable si: établissement . commune . département . outre-mer . Mayotte description: >- @@ -799,6 +881,9 @@ salarié . cotisations . CSG-CRDS . CSG: avec: déductible: + titre: CSG déductible de l'impôt sur le revenu + cotisation: + branche: CSG-CRDS produit: - assiette de base - taux @@ -806,16 +891,19 @@ salarié . cotisations . CSG-CRDS . CSG: non déductible: somme: - - produit: - - assiette de base - - taux + - revenus imposables - heures supplémentaires et complémentaires défiscalisées + non déductible . revenus imposables: + produit: + - assiette de base + - taux + non déductible . heures supplémentaires et complémentaires défiscalisées: produit: - assiette heures supplémentaires et complémentaires défiscalisées - déductible . taux + non déductible . taux - privé: oui + non déductible . taux: 2.4% salarié . cotisations . CSG-CRDS . CRDS: @@ -878,8 +966,6 @@ salarié . cotisations . FNAL: titre: Contribution au Fonds National d’Aide au Logement description: | Le fonds national d’aide au logement (Fnal) est une contribution qui assure le financement de l’allocation logement. - cotisation: - branche: famille références: Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/cotisations/liste-cotisations/fonds-national-aide-logement.html Cas particuliers: https://www.urssaf.fr/accueil/employeur/cotisations/liste-cotisations/taux-reduits-cas-particuliers.html @@ -901,10 +987,7 @@ salarié . cotisations . FNAL: - sinon: 0.5% salarié . cotisations . formation professionnelle: - cotisation: - branche: formation - # TODO majoration pour les entreprises de travail temporaire - # + # TODO majoration pour les entreprises de travail temporaire description: Cette contribution obligatoire est collectée par l'OPCO (opérateurs de compétences) désigné par la branche conventionnelle de l'entreprise, ou à @@ -938,6 +1021,7 @@ salarié . cotisations . formation professionnelle: Taux réduit: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000037387044 salarié . cotisations . maladie: + titre: Sécurité Sociale Maladie Maternité Invalidité Décès description: La cotisation d’assurance maladie-maternité-invalidité finance les prestations versées par le régime général de Sécurité sociale en cas @@ -1004,8 +1088,6 @@ salarié . cotisations . maladie: salarié . cotisations . CSA: titre: Contribution solidarité autonomie - cotisation: - branche: maladie acronyme: CSA produit: - cotisations . assiette @@ -1022,8 +1104,6 @@ salarié . cotisations . PEEC: alias: Dispositif du 1% logement acronyme: PEEC description: Participation des employeurs à l'effort de construction - cotisation: - branche: logement références: fiche: https://entreprendre.service-public.fr/vosdroits/F22583 note: | @@ -1039,13 +1119,26 @@ salarié . cotisations . prévoyances: possiblement non applicable: oui références: Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/embaucher-gerer-salaries/embaucher/prevoyance-complementaire.html - cotisation: - branche: maladie somme: - employeur - salarié avec: + incapacité invalidité décès: + cotisation: + branche: facultatives + titre: Prévoyance, Incapacité, Invalidité, Décès, Autres + somme: + - employeur + - salarié + avec: + employeur: + somme: + - conventionnelle . employeur + - employeur . cadres + salarié: + valeur: conventionnelle . salarié + conventionnelle: somme: - employeur @@ -1087,7 +1180,6 @@ salarié . cotisations . prévoyances: employeur . cadres: applicable si: contrat . statut cadre description: prévoyance obligatoire pour les cadres - privé: oui produit: - valeur: cotisations . assiette . sans prévoyance plafond: plafond sécurité sociale @@ -1114,6 +1206,9 @@ salarié . cotisations . prévoyances: Bopfip § 120: https://bofip.impots.gouv.fr/bofip/5956-PGP.html salarié . cotisations . prévoyances . santé: + titre: complémentaire garanties frais de santé obligatoire + cotisation: + branche: maladie avec: employeur: montant * taux employeur @@ -1162,8 +1257,6 @@ salarié . cotisations . prévoyances . santé: minimum salarié . cotisations . vieillesse: - cotisation: - branche: retraite description: Cotisation vieillesse pour le régime de retraite de base des salariés. références: Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/cotisations/liste-cotisations/at-vieillesse-csa-dialoguesocial.html#ancre-cotisation-d-assurance-vieilless @@ -1174,6 +1267,30 @@ salarié . cotisations . vieillesse: - employeur avec: + déplafonnée: + cotisation: + branche: retraite + titre: Sécurité Sociale Vieillesse déplafonnée + somme: + - employeur + - salarié + + avec: + employeur: employeur . déplafonnée + salarié: salarié . déplafonnée + + plafonnée: + cotisation: + branche: retraite + titre: Sécurité Sociale Vieillesse plafonnée + somme: + - employeur + - salarié + + avec: + employeur: employeur . plafonnée + salarié: salarié . plafonnée + employeur: titre: part employeur somme: @@ -1221,8 +1338,6 @@ salarié . cotisations . vieillesse: taux: 6.90% salarié . cotisations . taxe d'apprentissage: - cotisation: - branche: formation description: La taxe d'apprentissage permet de financer par les entreprises les dépenses de l'apprentissage et des formations technologiques et @@ -1306,8 +1421,6 @@ salarié . cotisations . taxe d'apprentissage: salarié . cotisations . versement mobilité: description: Contribution sur les salaires destinée au financement des transports publics. applicable si: entreprise . salariés . effectif > 10 - cotisation: - branche: transport produit: - cotisations . assiette - établissement . commune . taux versement mobilité @@ -1333,7 +1446,24 @@ salarié . cotisations . forfait social: produit: - prévoyances . employeur - 8% - # TODO Les cotisations au taux de 20% ne sont pas encore dans le modèle (intéressement, plans d'épargne, indemnités de rupture conventionnelles...) + # TODO Les cotisations au taux de 10, 16 et 20% ne sont pas encore dans le modèle (intéressement, plans d'épargne, indemnités de rupture conventionnelles...) + +salarié . cotisations . autres employeur: + titre: Autres charges dues par l'employeur + cotisation: + branche: divers + somme: + - versement mobilité + - FNAL + - CSA + - forfait social + - taxe d'apprentissage + - formation professionnelle + - CPF CDD + - PEEC + - contribution au dialogue social + références: + Arrêté du 25 février 2016 fixant les libellés, l'ordre et le regroupement des informations figurant sur le bulletin de paie mentionnées à l'article R. 3243-2 du code du travail: https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000047098507 salarié . cotisations . assiette forfaitaire: applicable si: non @@ -1387,3 +1517,23 @@ salarié . cotisations . assiette forfaitaire: Voulez-vous calculer les cotisations sur la rémunération réelle (au lieu de la base forfaitaire) ? par défaut: non + +# TODO: ajouter les cotisations sur la retraite supplémentaire + +# salarié . cotisations . retraite supplémentaire : +# titre: retraite supplémentaire +# cotisation: +# branche: facultatives +# somme: +# - employeur +# - salarié + +# avec: +# employeur: +# produit: +# - cotisations . assiette +# - 0 % +# salarié : +# produit: +# - cotisations . assiette +# - 0 % diff --git "a/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" "b/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" index f51614eb22..8a3d740276 100644 --- "a/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" +++ "b/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" @@ -394,7 +394,7 @@ salarié . rémunération . frais professionnels: avec: déductible: - titre: Part déductibles + titre: Part déductible description: >- Part des frais déduite de l'assiette de cotisation sociale et pour le calcul de l'impôt sur le revenu. @@ -402,6 +402,13 @@ salarié . rémunération . frais professionnels: - titres-restaurant . déductible - trajets domicile travail . déductible + non déductible: + titre: Part non déductible + somme: + - titres-restaurant . employeur + - trajets domicile travail . employeur + abattement: déductible + titres-restaurant: icônes: 🍽️ description: >- @@ -424,7 +431,7 @@ salarié . rémunération . frais professionnels: avec: déductible: - titre: Titre restaurant déductibles + titre: Part déductible valeur: employeur plafond: produit: @@ -481,6 +488,10 @@ salarié . rémunération . frais professionnels: 5 repas/semaine: 5 titres-restaurant/semaine * période . semaines par mois 3 repas/semaine: 3 titres-restaurant/semaine * période . semaines par mois + salarié: + valeur: montant + abattement: employeur + taux employeur: description: >- Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum diff --git a/site/source/components/FicheDePaie/Cotisations.tsx b/site/source/components/FicheDePaie/Cotisations.tsx index 5770a0b370..175d8c73e2 100644 --- a/site/source/components/FicheDePaie/Cotisations.tsx +++ b/site/source/components/FicheDePaie/Cotisations.tsx @@ -3,94 +3,95 @@ import { ASTNode, ParsedRules, reduceAST, Rule, RuleNode } from 'publicodes' import { Fragment } from 'react' import { Trans } from 'react-i18next' -import './FicheDePaie' +import './FicheDePaie.css' -import { Strong } from '@/design-system/typography' -import { H4, H5 } from '@/design-system/typography/heading' -import { Body } from '@/design-system/typography/paragraphs' +import { styled } from 'styled-components' + +import { H3, H4 } from '@/design-system/typography/heading' import { ExplicableRule } from '../conversation/Explicable' import Value from '../EngineValue/Value' import { useEngine } from '../utils/EngineContext' import CotisationLine from './CotisationLine' -import Line from './Line' + +const StyledH3 = styled(H3)` + text-align: right; +` + +function CotisationLines({ cotisations }: { cotisations: Array }) { + return cotisations.map((cotisation: DottedName) => ( + + )) +} export function Cotisations() { const parsedRules = useEngine().getParsedRules() const cotisationsBySection = getCotisationsBySection(parsedRules) return ( - <> -
-

- Cotisations sociales -

-

- employeur -

-

- salarié -

- {cotisationsBySection.map(([sectionDottedName, cotisations]) => { - const section = parsedRules[sectionDottedName] - - return ( - -
- {section.title} - -
- {cotisations.map((cotisation) => ( - - ))} -
- ) - })} - - {/* Total cotisation */} - - - Total des retenues - - -
- -
-
- -
- - {/* Salaire chargé */} - - +
+

+ Cotisations sociales +

+ + employeur + + + salarié + + + {cotisationsBySection.map(([sectionDottedName, cotisations]) => { + const section = parsedRules[sectionDottedName] + + return ( + +

+ {section.title} + +

+ +
+ ) + })} + + {/* Total cotisation */} +

+ Total des cotisations et contributions + +

+
+ +
+
+
- +
) } export const SECTION_ORDER = [ - 'protection sociale . maladie', - 'protection sociale . accidents du travail et maladies professionnelles', - 'protection sociale . retraite', - 'protection sociale . famille', - 'protection sociale . assurance chômage', - 'protection sociale . formation', - 'protection sociale . transport', - 'protection sociale . autres', + 'salarié . cotisations . catégories . maladie', + 'salarié . cotisations . catégories . atmp', + 'salarié . cotisations . catégories . retraite', + 'salarié . cotisations . catégories . divers', + 'salarié . cotisations . catégories . convention collective', + 'salarié . cotisations . catégories . CSG-CRDS', + 'salarié . cotisations . catégories . exonérations', + 'salarié . cotisations . catégories . facultatives', ] as Array type Section = (typeof SECTION_ORDER)[number] function getSection(rule: RuleNode): Section { - const section = `protection sociale . ${ + const section = `salarié . cotisations . catégories . ${ (rule.rawNode as Rule & { cotisation?: { branche?: string } })?.cotisation ?.branche ?? '' }` as Section @@ -98,7 +99,7 @@ function getSection(rule: RuleNode): Section { return section } - return 'protection sociale . autres' + return 'salarié . cotisations . catégories . divers' } export function getCotisationsBySection( diff --git a/site/source/components/FicheDePaie/FicheDePaie.css b/site/source/components/FicheDePaie/FicheDePaie.css index 3a8a887556..3597d02b28 100644 --- a/site/source/components/FicheDePaie/FicheDePaie.css +++ b/site/source/components/FicheDePaie/FicheDePaie.css @@ -25,17 +25,19 @@ margin-top: 1.5rem; margin-bottom: 0.5rem; padding-bottom: 0.5rem; - padding-left: 0.5rem; - align-self: flex-end; -} -.payslip__container h3:first-child { padding-left: 0; + align-self: flex-end; + width: 100%; font-size: 1.125rem; } +.payslip__container h4 { + font-size: 1rem; +} + .payslip__total { font-weight: bold; - margin-top: 1em; + margin-top: 1.5rem; background-color: transparent !important; color: inherit; } @@ -60,9 +62,6 @@ justify-content: flex-end; } -.payslip__cotisationsSection h4:not(:first-child) { - text-align: right; -} .payslip__cotisationsSection a:nth-of-type(2n), .payslip__salarySection a:nth-of-type(2n) { background-color: rgba(255, 255, 255, 0.4); @@ -95,25 +94,3 @@ .payslip__salaireNet { font-weight: bold; } - -/* IE */ -@media not print and (-ms-high-contrast: active), (-ms-high-contrast: none) { - .payslip__cotisationsSection > h4:nth-child(1), - .payslip__cotisationsSection > a, - div.payslip__total { - display: inline-block; - } - .payslip__cotisationsSection > h4:not(:nth-child(1)) { - width: 25%; - display: inline-block; - } - .payslip__container .montant { - display: inline-block; - width: 25%; - text-align: right; - } - .payslip__salarySection > a { - width: 75%; - display: inline-block; - } -} diff --git a/site/source/components/FicheDePaie/FicheDePaie.tsx b/site/source/components/FicheDePaie/FicheDePaie.tsx index f6762930e8..04af82ed71 100644 --- a/site/source/components/FicheDePaie/FicheDePaie.tsx +++ b/site/source/components/FicheDePaie/FicheDePaie.tsx @@ -25,10 +25,6 @@ export default function FicheDePaie() { - {/* - - - */} ) diff --git a/site/source/components/FicheDePaie/SalaireBrut.tsx b/site/source/components/FicheDePaie/SalaireBrut.tsx index 6f17651644..9d2da7500b 100644 --- a/site/source/components/FicheDePaie/SalaireBrut.tsx +++ b/site/source/components/FicheDePaie/SalaireBrut.tsx @@ -1,6 +1,6 @@ import { Trans } from 'react-i18next' -import { H4 } from '@/design-system/typography/heading' +import { H3 } from '@/design-system/typography/heading' import { Condition } from '../EngineValue/Condition' import Line from './Line' @@ -10,18 +10,18 @@ import './FicheDePaie.css' export default function SalaireBrut() { return (
-

- Salaire -

+

+ Salaire brut +

- - - - + + + + diff --git a/site/source/components/FicheDePaie/SalaireNet.tsx b/site/source/components/FicheDePaie/SalaireNet.tsx index c8cb1b6eea..1d9e3b60aa 100644 --- a/site/source/components/FicheDePaie/SalaireNet.tsx +++ b/site/source/components/FicheDePaie/SalaireNet.tsx @@ -2,48 +2,96 @@ import { Trans, useTranslation } from 'react-i18next' import './FicheDePaie.css' -import { H4 } from '@/design-system/typography/heading' +import { DottedName } from 'modele-social' +import { H3, H4 } from '@/design-system/typography/heading' + +import { ExplicableRule } from '../conversation/Explicable' import { Condition } from '../EngineValue/Condition' +import Value from '../EngineValue/Value' import Line from './Line' +function SalaireLine({ rule, title }: { rule: DottedName; title?: string }) { + return ( + <> +

+ {title} + +

+ + + ) +} + export default function SalaireNet() { const { t } = useTranslation() return (
-

+

Salaire net -

- + + + + 0', 'salarié . rémunération . frais professionnels . titres-restaurant', // bool + 'salarié . rémunération . avantages en nature', // bool ], }} > - +

+ Remboursements et déductions diverses +

+
+ + + + + +

+ Impôt sur le revenu +

+ + + - - - - - + rule="impôt . montant" + title={t('impôt sur le revenu prélevé à la source')} + /> + +
) } diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml index a7c2008f4b..502736bdf4 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -8790,8 +8790,8 @@ salarié . cotisations . APEC: description.fr: | Cotisation spécifique aux cadre pour le fonctionnement de l'APEC (Association Pour l’Emploi des Cadres) - titre.en: '[automatic] Association for the employment of executives' - titre.fr: Association pour l’emploi des cadres + titre.en: '[automatic] Apec' + titre.fr: Apec salarié . cotisations . ATMP: avec: seuil taux mixte ou individuel: @@ -8847,8 +8847,8 @@ salarié . cotisations . ATMP: and occupational diseases.' description.fr: Cotisation due au titre des Accidents du Travail et Maladies Professionnelles. - titre.en: '[automatic] Workplace accidents and occupational diseases' - titre.fr: Accidents du Travail et Maladies Professionnelles + titre.en: '[automatic] accidents at work & occupational diseases' + titre.fr: accidents du travail & maladies professionnelles salarié . cotisations . CEG: avec: employeur: @@ -8927,8 +8927,8 @@ salarié . cotisations . CSG-CRDS . CRDS: salarié . cotisations . CSG-CRDS . CSG: avec: déductible: - titre.en: '[automatic] deductible' - titre.fr: déductible + titre.en: '[automatic] CSG deductible from income tax' + titre.fr: CSG déductible de l'impôt sur le revenu déductible . taux: titre.en: '[automatic] rate' titre.fr: taux @@ -8938,6 +8938,9 @@ salarié . cotisations . CSG-CRDS . CSG: non déductible . heures supplémentaires et complémentaires défiscalisées: titre.en: '[automatic] tax-free overtime and complementary hours' titre.fr: heures supplémentaires et complémentaires défiscalisées + non déductible . revenus imposables: + titre.en: '[automatic] taxable income' + titre.fr: revenus imposables non déductible . taux: titre.en: '[automatic] rate' titre.fr: taux @@ -9005,6 +9008,12 @@ salarié . cotisations . CSG-CRDS . revenus de remplacement: chômage à un seuil inférieur au Smic brut. titre.en: '[automatic] CSG-CRDS replacement income' titre.fr: CSG-CRDS revenus de remplacement +salarié . cotisations . CSG-CRDS . sur revenus imposables non déductible: + titre.en: '[automatic] CSG / CRDS not deductible from income tax' + titre.fr: CSG / CRDS non déductible de l'impôt sur le revenu +salarié . cotisations . CSG-CRDS . sur revenus non imposables: + titre.en: '[automatic] CSG / CRDS on non-taxable income' + titre.fr: CSG / CRDS sur les revenus non imposables salarié . cotisations . FNAL: avec: privé: @@ -9050,8 +9059,8 @@ salarié . cotisations . allocations familiales: titre.fr: plafond titre.en: '[automatic] reduced rate' titre.fr: taux réduit - titre.en: Family allowances - titre.fr: allocations familiales + titre.en: '[automatic] family' + titre.fr: famille salarié . cotisations . assiette: avec: sans prévoyance: @@ -9102,6 +9111,40 @@ salarié . cotisations . assiette forfaitaire: titre.fr: rémunération réelle titre.en: '[automatic] lump-sum basis' titre.fr: assiette forfaitaire +salarié . cotisations . assurance chômage: + titre.en: '[automatic] unemployment insurance' + titre.fr: assurance chômage +salarié . cotisations . autres employeur: + titre.en: '[automatic] Other employer charges' + titre.fr: Autres charges dues par l'employeur +salarié . cotisations . catégories: + avec: + CSG-CRDS: + titre.en: '[automatic] CSG / CRDS' + titre.fr: CSG / CRDS + atmp: + titre.en: '[automatic] accidents at work & occupational diseases' + titre.fr: accidents du travail & maladies professionnelles + convention collective: + titre.en: '[automatic] statutory or collective agreement contributions' + titre.fr: cotisations statutaires ou prévues par la convention collective + divers: + titre.en: '[automatic] employer contributions' + titre.fr: cotisations employeur + exonérations: + titre.en: '[automatic] contribution exemptions and reductions' + titre.fr: exonérations et allègements de cotisations + facultatives: + titre.en: '[automatic] optional social security contributions' + titre.fr: cotisations et contributions sociales facultatives + maladie: + titre.en: '[automatic] health' + titre.fr: santé + retraite: + titre.en: '[automatic] retirement' + titre.fr: retraite + titre.en: '[automatic] categories' + titre.fr: catégories salarié . cotisations . chômage: avec: employeur: @@ -9149,8 +9192,8 @@ salarié . cotisations . exonérations: salarié: titre.en: '[automatic] employee share' titre.fr: part salarié - titre.en: '[automatic] Reductions and exemptions' - titre.fr: Réductions et exonérations + titre.en: '[automatic] contribution exemptions and reductions' + titre.fr: exonérations et allègements de cotisations salarié . cotisations . exonérations . JEI: description.en: >- [automatic] The Young Innovative Company (JEI) status was created by the @@ -9478,8 +9521,8 @@ salarié . cotisations . maladie: les prestations versées par le régime général de Sécurité sociale en cas d’incapacité de travail. Elle permet le versement des prestations en nature et en espèces. - titre.en: health insurance - titre.fr: maladie + titre.en: '[automatic] Social Security Sickness Maternity Disability Death' + titre.fr: Sécurité Sociale Maladie Maternité Invalidité Décès salarié . cotisations . prévoyances: avec: conventionnelle: @@ -9510,6 +9553,16 @@ salarié . cotisations . prévoyances: description.fr: prévoyance obligatoire pour les cadres titre.en: '[automatic] frames' titre.fr: cadres + incapacité invalidité décès: + avec: + employeur: + titre.en: '[automatic] employer' + titre.fr: employeur + salarié: + titre.en: '[automatic] employee' + titre.fr: salarié + titre.en: '[automatic] Pensions, Incapacity, Disability, Death, Other' + titre.fr: Prévoyance, Incapacité, Invalidité, Décès, Autres salarié: avec: non déductible: @@ -9584,8 +9637,8 @@ salarié . cotisations . prévoyances . santé: suggestions.50%.fr: 50% titre.en: '[automatic] employer rate' titre.fr: taux employeur - titre.en: '[automatic] health' - titre.fr: santé + titre.en: '[automatic] complementary compulsory health insurance' + titre.fr: complémentaire garanties frais de santé obligatoire salarié . cotisations . retraite complémentaire: avec: employeur: @@ -9613,6 +9666,16 @@ salarié . cotisations . retraite complémentaire: Cotisations de retraite complémentaire. titre.en: supplementary pension titre.fr: retraite complémentaire +salarié . cotisations . retraite complémentaire-CEG-CET: + avec: + employeur: + titre.en: '[automatic] employer' + titre.fr: employeur + salarié: + titre.en: '[automatic] employee' + titre.fr: salarié + titre.en: '[automatic] supplementary pension, CEG and CET' + titre.fr: retraite complémentaire, CEG et CET salarié . cotisations . taxe d'apprentissage: avec: assiette: @@ -9652,6 +9715,16 @@ salarié . cotisations . versement mobilité: titre.fr: versement mobilité salarié . cotisations . vieillesse: avec: + déplafonnée: + avec: + employeur: + titre.en: '[automatic] employer' + titre.fr: employeur + salarié: + titre.en: '[automatic] employee' + titre.fr: salarié + titre.en: '[automatic] Social Security Unfunded old-age pension' + titre.fr: Sécurité Sociale Vieillesse déplafonnée employeur: titre.en: "[automatic] employer's share" titre.fr: part employeur @@ -9669,6 +9742,16 @@ salarié . cotisations . vieillesse: titre.fr: taux titre.en: '[automatic] capped' titre.fr: plafonnée + plafonnée: + avec: + employeur: + titre.en: '[automatic] employer' + titre.fr: employeur + salarié: + titre.en: '[automatic] employee' + titre.fr: salarié + titre.en: '[automatic] Social Security Old-age ceiling' + titre.fr: Sécurité Sociale Vieillesse plafonnée salarié: titre.en: '[automatic] employee share' titre.fr: part salarié @@ -10487,12 +10570,15 @@ salarié . rémunération . frais professionnels: Part des frais déduite de l'assiette de cotisation sociale et pour le calcul de l'impôt sur le revenu. titre.en: '[automatic] Deductible portion' - titre.fr: Part déductibles + titre.fr: Part déductible + non déductible: + titre.en: '[automatic] Non-deductible portion' + titre.fr: Part non déductible titres-restaurant: avec: déductible: - titre.en: '[automatic] Deductible luncheon vouchers' - titre.fr: Titre restaurant déductibles + titre.en: '[automatic] Deductible portion' + titre.fr: Part déductible déductible . plafond unitaire: titre.en: '[automatic] unit ceiling' titre.fr: plafond unitaire @@ -10525,6 +10611,9 @@ salarié . rémunération . frais professionnels: suggestions.5 repas/semaine.fr: 5 repas/semaine titre.en: '[automatic] number' titre.fr: nombre + salarié: + titre.en: '[automatic] employee' + titre.fr: salarié taux employeur: description.en: '[automatic] Portion of meal voucher paid by the employer. Must diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 8c51a755f2..61ecfcbd17 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -125,6 +125,7 @@ Fermer: Close Fermer le module "Donner son avis": Close the "Give your opinion" module Fiche de paie: Pay slip Fond de la boite de dialogue: Dialog box background +Frais de transport: Transport costs Graphique des principaux simulateurs, présence d’une alternative accessible après l’image: Graphics of the main simulators, with an alternative available after the image. Graphique statistiques détaillés de la satisfaction, présence d’une alternative accessible après l’image: Detailed statistical graph of satisfaction, presence of an accessible @@ -135,6 +136,7 @@ Graphique statistiques détaillés du nombre visites par jour, présence d’une Habituellement: Usually Impôt: Tax Impôt au barème: Tax scale +Impôt sur le revenu: Income tax Impôts: Taxes Information: Information Insérer dans le champ la valeur du {{text}}: Insert the value of the {{text}} @@ -189,6 +191,11 @@ Mon entreprise recrute ! Voir les offres d'emplois de mon-entreprise: Montant annuel: Annual amount Montant de l'impôt sur les sociétés: Amount of corporate income tax Montant mensuel: Monthly amount +Montant net des HC/HS exonérées: Net amount of exempt HC/HS +Montant net imposable: Net taxable amount +Montant net social: Net corporate amount +Montant net à payer: Net amount payable +Montant net à payer avant impôt sur le revenu: Net amount payable before income tax Mots-clés définissants l'activité: Keywords defining the activity Nombres: Numbers Non: No @@ -241,6 +248,7 @@ Rechercher: Search Rechercher un simulateur ou une règle: Search for a simulator or a rule Rechercher une règle dans la documentation: Search for a rule in the documentation Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche.: Search, open the dialog box to enter your search terms. +Remboursements et déductions diverses: Reimbursements and miscellaneous deductions Renseigner une adresse e-mail (au format nom@domaine: com) pour recevoir une réponse: Enter an e-mail address (in nom@domaine.com format) to receive a reply. Replier: Fold @@ -264,7 +272,7 @@ Répondez à quelques questions additionnelles afin de préciser votre résultat Résultat fiscal: Taxable income Réussite: Success Saisissez votre domaine d'activité: Enter your field of activity -Salaire: Salary +Salaire brut: Gross salary Salaire brut mensuel: Gross monthly salary Salaire net: Net salary Salariés et embauche: Employees and hiring @@ -293,7 +301,8 @@ Tableau indiquant la satisfaction des utilisateurs en {{percentOrVotes}} sur le site, by month. Tableau indiquant le nombre de visites par {{period}}.: Table showing the number of visits per {{period}}. Tableau présentant le nombre de visites par simulateur et par mois.: Table showing the number of visits per simulator per month. -Total des retenues: Total deductions +Titres-restaurant: Meal vouchers +Total des cotisations et contributions: Total contributions "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, vos points sont transformés en <5>un montant qui s’ajoute chaque mois à votre retraite de base. Cette valeur se calcule sur le long terme. Par exemple, au bout de 10 ans, vous auriez droit à :": "Every year, depending on how much you earn, <2>you earn points that make up your supplementary pension. At the end of your career, your points are @@ -658,6 +667,7 @@ impotSociété: into account reduced corporate tax rates." impôt: tax impôt sur le revenu: income tax +impôt sur le revenu prélevé à la source: income tax deducted at source info: info intégration: description: Tools for developers diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index daa5fc8d9a..c0885fa135 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -132,6 +132,7 @@ Fermer: Fermer Fermer le module "Donner son avis": Fermer le module "Donner son avis" Fiche de paie: Fiche de paie Fond de la boite de dialogue: Fond de la boite de dialogue +Frais de transport: Frais de transport Graphique des principaux simulateurs, présence d’une alternative accessible après l’image: Graphique des principaux simulateurs, présence d’une alternative accessible après l’image @@ -144,6 +145,7 @@ Graphique statistiques détaillés du nombre visites par jour, présence d’une Habituellement: Habituellement Impôt: Impôt Impôt au barème: Impôt au barème +Impôt sur le revenu: Impôt sur le revenu Impôts: Impôts Information: Information Insérer dans le champ la valeur du {{text}}: Insérer dans le champ la valeur du {{text}} @@ -201,6 +203,11 @@ Mon entreprise recrute ! Voir les offres d'emplois de mon-entreprise: Montant annuel: Montant annuel Montant de l'impôt sur les sociétés: Montant de l'impôt sur les sociétés Montant mensuel: Montant mensuel +Montant net des HC/HS exonérées: Montant net des HC/HS exonérées +Montant net imposable: Montant net imposable +Montant net social: Montant net social +Montant net à payer: Montant net à payer +Montant net à payer avant impôt sur le revenu: Montant net à payer avant impôt sur le revenu Mots-clés définissants l'activité: Mots-clés définissants l'activité Nombres: Nombres Non: Non @@ -255,6 +262,7 @@ Rechercher: Rechercher Rechercher un simulateur ou une règle: Rechercher un simulateur ou une règle Rechercher une règle dans la documentation: Rechercher une règle dans la documentation Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche.: Rechercher, ouvrir la boite de dialogue pour entrer vos termes de recherche. +Remboursements et déductions diverses: Remboursements et déductions diverses Renseigner une adresse e-mail (au format nom@domaine: com) pour recevoir une réponse: Renseigner une adresse e-mail (au format nom@domaine.com) pour recevoir une réponse @@ -279,7 +287,7 @@ Répondez à quelques questions additionnelles afin de préciser votre résultat Résultat fiscal: Résultat fiscal Réussite: Réussite Saisissez votre domaine d'activité: Saisissez votre domaine d'activité -Salaire: Salaire +Salaire brut: Salaire brut Salaire brut mensuel: Salaire brut mensuel Salaire net: Salaire net Salariés et embauche: Salariés et embauche @@ -309,7 +317,8 @@ Tableau indiquant la satisfaction des utilisateurs en {{percentOrVotes}} sur le le site mon-entreprise par mois. Tableau indiquant le nombre de visites par {{period}}.: Tableau indiquant le nombre de visites par {{period}}. Tableau présentant le nombre de visites par simulateur et par mois.: Tableau présentant le nombre de visites par simulateur et par mois. -Total des retenues: Total des retenues +Titres-restaurant: Titres-restaurant +Total des cotisations et contributions: Total des cotisations et contributions "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, vos points sont transformés en <5>un montant qui s’ajoute chaque mois à votre retraite de base. Cette valeur se calcule sur le long terme. Par exemple, au bout de 10 ans, vous auriez droit à :": "Tous les ans, selon votre rémunération, <2>vous gagnez des points qui constituent votre pension de retraite complémentaire. En fin de carrière, @@ -693,6 +702,7 @@ impotSociété: réduits de l’impôt sur les sociétés." impôt: impôt impôt sur le revenu: impôt sur le revenu +impôt sur le revenu prélevé à la source: impôt sur le revenu prélevé à la source info: info intégration: description: Outils pour les développeurs From 307088e5a907e46ccdc6c79d63be725f016b9584 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Fri, 6 Sep 2024 15:38:40 +0200 Subject: [PATCH 4/7] =?UTF-8?q?refactor:=20groupe=20la=20manipulation=20d'?= =?UTF-8?q?objets=20de=20Publicodes=20dans=20un=20fichier=20utils=20d?= =?UTF-8?q?=C3=A9di=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChiffreAffairesActivit\303\251Mixte.tsx" | 2 +- .../components/FicheDePaie/CotisationLine.tsx | 24 +---- .../components/conversation/AnswerList.tsx | 2 +- .../conversation/QuestionEnCours.tsx | 2 +- .../components/conversation/RuleInput.tsx | 2 +- .../pages/assistants/components/Fields.tsx | 2 +- .../demande-mobilit\303\251/index.tsx" | 5 +- .../assistants/pour-mon-entreprise/index.tsx | 2 +- .../Ch\303\264magePartiel.tsx" | 2 +- site/source/store/actions/actions.ts | 2 +- .../store/reducers/companySituationReducer.ts | 3 +- site/source/utils/index.ts | 66 +------------- site/source/utils/publicodes.ts | 89 +++++++++++++++++++ 13 files changed, 104 insertions(+), 99 deletions(-) create mode 100644 site/source/utils/publicodes.ts diff --git "a/site/source/components/ChiffreAffairesActivit\303\251Mixte.tsx" "b/site/source/components/ChiffreAffairesActivit\303\251Mixte.tsx" index f66ada017f..120028407e 100644 --- "a/site/source/components/ChiffreAffairesActivit\303\251Mixte.tsx" +++ "b/site/source/components/ChiffreAffairesActivit\303\251Mixte.tsx" @@ -8,7 +8,7 @@ import { styled } from 'styled-components' import { Switch } from '@/design-system/switch' import { batchUpdateSituation } from '@/store/actions/actions' import { situationSelector } from '@/store/selectors/simulationSelectors' -import { catchDivideByZeroError } from '@/utils' +import { catchDivideByZeroError } from '@/utils/publicodes' import { ExplicableRule } from './conversation/Explicable' import { Condition } from './EngineValue/Condition' diff --git a/site/source/components/FicheDePaie/CotisationLine.tsx b/site/source/components/FicheDePaie/CotisationLine.tsx index 722eea6e99..3cbf9d61b3 100644 --- a/site/source/components/FicheDePaie/CotisationLine.tsx +++ b/site/source/components/FicheDePaie/CotisationLine.tsx @@ -1,10 +1,11 @@ import { DottedName } from 'modele-social' -import { ASTNode, formatValue, reduceAST } from 'publicodes' +import { formatValue } from 'publicodes' import { useContext } from 'react' import { useTranslation } from 'react-i18next' import RuleLink from '@/components/RuleLink' import { EngineContext } from '@/components/utils/EngineContext' +import { findReferenceInNode } from '@/utils/publicodes' export default function CotisationLine({ dottedName, @@ -53,24 +54,3 @@ export default function CotisationLine({ function isExoneration(dottedName: DottedName): boolean { return dottedName === 'salarié . cotisations . exonérations' } - -function findReferenceInNode( - dottedName: DottedName, - node: ASTNode -): string | undefined { - return reduceAST( - (acc, node) => { - if ( - node.nodeKind === 'reference' && - node.dottedName?.startsWith(dottedName) && - !node.dottedName.endsWith('$SITUATION') - ) { - return node.dottedName - } else if (node.nodeKind === 'reference') { - return acc - } - }, - undefined, - node - ) -} diff --git a/site/source/components/conversation/AnswerList.tsx b/site/source/components/conversation/AnswerList.tsx index f82ee3291c..79df670349 100644 --- a/site/source/components/conversation/AnswerList.tsx +++ b/site/source/components/conversation/AnswerList.tsx @@ -25,7 +25,7 @@ import { companySituationSelector, situationSelector, } from '@/store/selectors/simulationSelectors' -import { evaluateQuestion } from '@/utils' +import { evaluateQuestion } from '@/utils/publicodes' import Value from '../EngineValue/Value' import { JeDonneMonAvis } from '../JeDonneMonAvis' diff --git a/site/source/components/conversation/QuestionEnCours.tsx b/site/source/components/conversation/QuestionEnCours.tsx index c0b2494e25..908ff22c99 100644 --- a/site/source/components/conversation/QuestionEnCours.tsx +++ b/site/source/components/conversation/QuestionEnCours.tsx @@ -23,7 +23,7 @@ import { } from '@/store/actions/actions' import { estSurLaPremièreQuestionRépondueSelector } from '@/store/selectors/estSurLaPremièreQuestionRépondue.selector' import { situationSelector } from '@/store/selectors/simulationSelectors' -import { evaluateQuestion } from '@/utils' +import { evaluateQuestion } from '@/utils/publicodes' interface Props { previousAnswers: DottedName[] diff --git a/site/source/components/conversation/RuleInput.tsx b/site/source/components/conversation/RuleInput.tsx index cf860566bd..666d9f8132 100644 --- a/site/source/components/conversation/RuleInput.tsx +++ b/site/source/components/conversation/RuleInput.tsx @@ -14,7 +14,7 @@ import SelectCommune from '@/components/conversation/select/SelectCommune' import { EngineContext } from '@/components/utils/EngineContext' import { DateFieldProps } from '@/design-system/field/DateField' import { Spacing } from '@/design-system/layout' -import { getMeta } from '@/utils' +import { getMeta } from '@/utils/publicodes' import { Choice, MultipleAnswerInput, OuiNonInput } from './ChoicesInput' import DateInput from './DateInput' diff --git a/site/source/pages/assistants/components/Fields.tsx b/site/source/pages/assistants/components/Fields.tsx index 8dee35d3f8..bd31aef615 100644 --- a/site/source/pages/assistants/components/Fields.tsx +++ b/site/source/pages/assistants/components/Fields.tsx @@ -19,7 +19,7 @@ import { situationSelector, targetUnitSelector, } from '@/store/selectors/simulationSelectors' -import { evaluateQuestion, getMeta } from '@/utils' +import { evaluateQuestion, getMeta } from '@/utils/publicodes' type SubSectionProp = { dottedName: DottedName diff --git "a/site/source/pages/assistants/demande-mobilit\303\251/index.tsx" "b/site/source/pages/assistants/demande-mobilit\303\251/index.tsx" index b377f5c393..2bd6bbb2ed 100644 --- "a/site/source/pages/assistants/demande-mobilit\303\251/index.tsx" +++ "b/site/source/pages/assistants/demande-mobilit\303\251/index.tsx" @@ -19,13 +19,12 @@ import PopoverConfirm from '@/design-system/popover/PopoverConfirm' import { headings } from '@/design-system/typography' import { Intro, SmallBody } from '@/design-system/typography/paragraphs' import useSimulationConfig from '@/hooks/useSimulationConfig' +import { hash, omit } from '@/utils' import { buildSituationFromObject, evaluateQuestion, getMeta, - hash, - omit, -} from '@/utils' +} from '@/utils/publicodes' import formulaire from './demande-mobilité.yaml' diff --git a/site/source/pages/assistants/pour-mon-entreprise/index.tsx b/site/source/pages/assistants/pour-mon-entreprise/index.tsx index d3010412f6..cf8839c478 100644 --- a/site/source/pages/assistants/pour-mon-entreprise/index.tsx +++ b/site/source/pages/assistants/pour-mon-entreprise/index.tsx @@ -42,7 +42,7 @@ import { useSitePaths } from '@/sitePaths' import { resetCompany } from '@/store/actions/companyActions' import { SimulationConfig } from '@/store/reducers/rootReducer' import { companySituationSelector } from '@/store/selectors/simulationSelectors' -import { evaluateQuestion } from '@/utils' +import { evaluateQuestion } from '@/utils/publicodes' import forms from './forms.svg' import growth from './growth.svg' diff --git "a/site/source/pages/simulateurs/ch\303\264mage-partiel/Ch\303\264magePartiel.tsx" "b/site/source/pages/simulateurs/ch\303\264mage-partiel/Ch\303\264magePartiel.tsx" index 1e31178505..494fb65251 100644 --- "a/site/source/pages/simulateurs/ch\303\264mage-partiel/Ch\303\264magePartiel.tsx" +++ "b/site/source/pages/simulateurs/ch\303\264mage-partiel/Ch\303\264magePartiel.tsx" @@ -20,7 +20,7 @@ import { H2 } from '@/design-system/typography/heading' import { Link } from '@/design-system/typography/link' import { Li, Ul } from '@/design-system/typography/list' import { Body } from '@/design-system/typography/paragraphs' -import { catchDivideByZeroError } from '@/utils' +import { catchDivideByZeroError } from '@/utils/publicodes' declare global { interface Window { diff --git a/site/source/store/actions/actions.ts b/site/source/store/actions/actions.ts index 4fa4371ab3..db2c279631 100644 --- a/site/source/store/actions/actions.ts +++ b/site/source/store/actions/actions.ts @@ -4,7 +4,7 @@ import Engine, { PublicodesExpression } from 'publicodes' import { SimpleRuleEvaluation } from '@/domaine/engine/SimpleRuleEvaluation' import { SimulationConfig } from '@/store/reducers/rootReducer' import { QuestionRépondue } from '@/store/reducers/simulation.reducer' -import { buildSituationFromObject } from '@/utils' +import { buildSituationFromObject } from '@/utils/publicodes' import { CompanyActions } from './companyActions' import { HiringChecklistAction } from './hiringChecklistAction' diff --git a/site/source/store/reducers/companySituationReducer.ts b/site/source/store/reducers/companySituationReducer.ts index 37587853f3..cee54bb560 100644 --- a/site/source/store/reducers/companySituationReducer.ts +++ b/site/source/store/reducers/companySituationReducer.ts @@ -4,7 +4,8 @@ import { CodeCatégorieJuridique } from '@/domaine/CodeCatégorieJuridique' import { toPublicodeDate } from '@/domaine/Date' import { Entreprise } from '@/domaine/Entreprise' import { Action } from '@/store/actions/actions' -import { buildSituationFromObject, omit } from '@/utils' +import { omit } from '@/utils' +import { buildSituationFromObject } from '@/utils/publicodes' import { Situation } from './rootReducer' diff --git a/site/source/utils/index.ts b/site/source/utils/index.ts index 145f57a0cf..5b89e3bd10 100644 --- a/site/source/utils/index.ts +++ b/site/source/utils/index.ts @@ -1,13 +1,4 @@ -import { DottedName } from 'modele-social' -import Engine, { - formatValue, - isPublicodesError, - PublicodesExpression, - Rule, - RuleNode, -} from 'publicodes' - -import { Situation } from '@/store/reducers/rootReducer' +import { formatValue } from 'publicodes' /** The `capitalise0` function is a utility function that capitalizes the first letter of a string. The function takes an optional `name` parameter, which is a string that needs to be capitalized. */ @@ -180,17 +171,6 @@ export const getValueFrom = < ): Extract[K] | undefined => key in obj ? obj[key] : undefined -const isMeta = (rule: Rule): rule is Rule & { meta?: T } => 'meta' in rule - -/** - * Return typed meta property from a rule - * @param rule - * @param defaultValue - * @returns - */ -export const getMeta = (rule: Rule, defaultValue: T) => - (isMeta(rule) ? getValueFrom(rule, 'meta') : null) ?? defaultValue - /** * Wraps each event function specified in eventsToWrap (default onPress) with an * asynchronous function that waits x ms before executing the original function @@ -245,50 +225,6 @@ export async function getIframeOffset(): Promise { }) } -export function evaluateQuestion( - engine: Engine, - rule: RuleNode -): string | undefined { - const question = rule.rawNode.question as Exclude< - number, - PublicodesExpression - > - if (question && typeof question === 'object') { - return engine.evaluate(question as PublicodesExpression).nodeValue as string - } - - return question -} - -export function buildSituationFromObject( - contextDottedName: Names, - situationObject: Record -): Situation { - return Object.fromEntries( - Object.entries(situationObject).map( - ([key, value]: [string, PublicodesExpression]) => [ - `${contextDottedName} . ${key}` as Names, - typeof value === 'string' ? `'${value}'` : value, - ] - ) - ) -} - -export const catchDivideByZeroError = (func: () => T) => { - try { - return func() - } catch (err) { - if ( - isPublicodesError(err, 'EvaluationError') && - err.message === 'Division by zero' - ) { - // eslint-disable-next-line no-console - console.error(err) - } - throw err - } -} - export const generateUuid = () => { return Math.floor(Math.random() * Date.now()).toString(16) } diff --git a/site/source/utils/publicodes.ts b/site/source/utils/publicodes.ts new file mode 100644 index 0000000000..383e943741 --- /dev/null +++ b/site/source/utils/publicodes.ts @@ -0,0 +1,89 @@ +import { DottedName } from 'modele-social' +import Engine, { + ASTNode, + isPublicodesError, + PublicodesExpression, + reduceAST, + Rule, + RuleNode, +} from 'publicodes' + +import { Situation } from '@/store/reducers/rootReducer' + +import { getValueFrom } from '.' + +const isMeta = (rule: Rule): rule is Rule & { meta?: T } => 'meta' in rule + +/** + * Return typed meta property from a rule + * @param rule + * @param defaultValue + * @returns + */ +export const getMeta = (rule: Rule, defaultValue: T) => + (isMeta(rule) ? getValueFrom(rule, 'meta') : null) ?? defaultValue + +export function evaluateQuestion( + engine: Engine, + rule: RuleNode +): string | undefined { + const question = rule.rawNode.question as Exclude< + number, + PublicodesExpression + > + if (question && typeof question === 'object') { + return engine.evaluate(question as PublicodesExpression).nodeValue as string + } + + return question +} + +export function buildSituationFromObject( + contextDottedName: Names, + situationObject: Record +): Situation { + return Object.fromEntries( + Object.entries(situationObject).map( + ([key, value]: [string, PublicodesExpression]) => [ + `${contextDottedName} . ${key}` as Names, + typeof value === 'string' ? `'${value}'` : value, + ] + ) + ) +} + +export const catchDivideByZeroError = (func: () => T) => { + try { + return func() + } catch (err) { + if ( + isPublicodesError(err, 'EvaluationError') && + err.message === 'Division by zero' + ) { + // eslint-disable-next-line no-console + console.error(err) + } + throw err + } +} + +export function findReferenceInNode( + dottedName: DottedName, + node: ASTNode +): string | undefined { + return reduceAST( + (acc, node) => { + if ( + node.nodeKind === 'reference' && + node.dottedName?.startsWith(dottedName) && + !node.dottedName.endsWith('$SITUATION') + ) { + return node.dottedName + } else if (node.nodeKind === 'reference') { + return acc + } + }, + undefined, + node + ) +} From 28c27908455531449cc651c545b3be486cb800f5 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Fri, 20 Sep 2024 12:44:50 +0200 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20ajoute=20un=20avertissement=20avant?= =?UTF-8?q?=20le=20simulateur=20salari=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/source/components/SimulateurWarning.tsx | 35 ++++++++++++++++++- site/source/locales/ui-en.yaml | 9 +++++ site/source/locales/ui-fr.yaml | 9 +++++ .../salari\303\251/Salari\303\251.tsx" | 2 ++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/site/source/components/SimulateurWarning.tsx b/site/source/components/SimulateurWarning.tsx index 592a9c82d3..be707a65fb 100644 --- a/site/source/components/SimulateurWarning.tsx +++ b/site/source/components/SimulateurWarning.tsx @@ -3,6 +3,8 @@ import { Trans } from 'react-i18next' import { styled } from 'styled-components' import Warning from '@/components/ui/WarningBlock' +import { Spacing } from '@/design-system/layout' +import { Strong } from '@/design-system/typography' import { Link } from '@/design-system/typography/link' import { Li, Ul } from '@/design-system/typography/list' import { Body } from '@/design-system/typography/paragraphs' @@ -56,7 +58,7 @@ export default function SimulateurWarning({ )} - {simulateur !== 'artiste-auteur' && ( + {simulateur !== 'artiste-auteur' && simulateur !== 'salarié' && ( Les calculs sont indicatifs. Ils ne se substituent pas aux décomptes @@ -151,6 +153,37 @@ export default function SimulateurWarning({ )} + {simulateur === 'salarié' && ( + + + Cette estimation est proposée à titre indicatif. + Elle est faite à partir des éléments que vous avez saisis et des + éléments réglementaires applicables, mais elle ne tient pas compte + de l'ensemble de votre situation.{' '} + Les montants réels peuvent donc être différents. + + + + Le simulateur ne prend pour l'instant pas en compte les accords et + conventions collectives, ni la myriade d'aides aux entreprises. + Trouvez votre convention collective{' '} + + ici + + , et explorez les aides sur  + + aides-entreprises.fr + + . + + + )} ) } diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 61ecfcbd17..310ccc8b75 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -1738,6 +1738,15 @@ simulateurs: plus: Read more profession-libérale: This simulator is intended for self-employed professionals who earn a BNC. It does not take into account self-employed companies. + salarié: + "1": <0>This estimate is provided for information only. It is based on the + information you have entered and the applicable regulations, but it does + not take into account your entire situation. <2>Actual amounts may + therefore differ. + "2": The simulator does not currently take into account collective agreements, + nor the myriad of company subsidies. Find your collective bargaining + agreement <2>here, and explore the range of assistance available on + <4>aides-entreprises.fr. sasu: This simulator does not handle the case of SAS(U) taxable on income (IR). Only the corporate income tax (IS) option is implemented. titre: Before we begin... diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index c0885fa135..779d10bb61 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -1852,6 +1852,15 @@ simulateurs: plus: Lire les précisions profession-libérale: Ce simulateur est à destination des professions libérales en BNC. Il ne prend pas en compte les sociétés d'exercice libéral. + salarié: + "1": <0>Cette estimation est proposée à titre indicatif. Elle est faite à + partir des éléments que vous avez saisis et des éléments réglementaires + applicables, mais elle ne tient pas compte de l'ensemble de votre + situation. <2>Les montants réels peuvent donc être différents. + "2": Le simulateur ne prend pour l'instant pas en compte les accords et + conventions collectives, ni la myriade d'aides aux entreprises. Trouvez + votre convention collective <2>ici, et explorez les aides sur + <4>aides-entreprises.fr. sasu: Ce simulateur ne gère pas le cas des SAS(U) à l'impôt sur le revenu (IR). Seule l'option pour l'impôt sur les sociétés est implémentée (IS). titre: Avant de commencer... diff --git "a/site/source/pages/simulateurs/salari\303\251/Salari\303\251.tsx" "b/site/source/pages/simulateurs/salari\303\251/Salari\303\251.tsx" index ca5854ca89..81d89aceae 100644 --- "a/site/source/pages/simulateurs/salari\303\251/Salari\303\251.tsx" +++ "b/site/source/pages/simulateurs/salari\303\251/Salari\303\251.tsx" @@ -11,6 +11,7 @@ import Value from '@/components/EngineValue/Value' import { WhenNotAlreadyDefined } from '@/components/EngineValue/WhenNotAlreadyDefined' import PeriodSwitch from '@/components/PeriodSwitch' import RuleLink from '@/components/RuleLink' +import SimulateurWarning from '@/components/SimulateurWarning' import Simulation, { SimulationGoal, SimulationGoals, @@ -74,6 +75,7 @@ export default function SalariéSimulation() { } > + From ae073dbf295a4e52d06ecc2a0a5d7c423c057735 Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Fri, 20 Sep 2024 14:17:21 +0200 Subject: [PATCH 6/7] feat: ajoute un avertissement au niveau de la fiche de paie --- .../SalaryExplanation.tsx | 59 ++++++++----------- site/source/locales/ui-en.yaml | 14 ++--- site/source/locales/ui-fr.yaml | 18 +++--- 3 files changed, 37 insertions(+), 54 deletions(-) diff --git a/site/source/components/simulationExplanation/SalaryExplanation.tsx b/site/source/components/simulationExplanation/SalaryExplanation.tsx index 8dd5b2ce2c..084f011805 100644 --- a/site/source/components/simulationExplanation/SalaryExplanation.tsx +++ b/site/source/components/simulationExplanation/SalaryExplanation.tsx @@ -7,11 +7,12 @@ import { ÀQuoiServentMesCotisationsSection } from '@/components/simulationExpla import StackedBarChart from '@/components/StackedBarChart' import { FromTop } from '@/components/ui/animate' import { useInversionFail } from '@/components/utils/EngineContext' +import { Message } from '@/design-system' import { Emoji } from '@/design-system/emoji' import { Container, Grid, Spacing } from '@/design-system/layout' import { H2 } from '@/design-system/typography/heading' import { Link } from '@/design-system/typography/link' -import { SmallBody } from '@/design-system/typography/paragraphs' +import { Body } from '@/design-system/typography/paragraphs' import { useCurrentSimulatorData } from '@/hooks/useCurrentSimulatorData' import FicheDePaie from '../FicheDePaie/FicheDePaie' @@ -62,42 +63,28 @@ export default function SalaryExplanation() {

Fiche de paie

+ + + + + Cette fiche de paie est issue de la simulation que vous avez + faite. Elle vous aide à comprendre votre bulletin de paie : + vous pouvez cliquer sur les liens pour comprendre le calcul de + chaque montant. Cette fiche de paie ne peut pas de substituer + à une fiche de paie réelle. Pour plus d'informations, + rendez-vous sur{' '} + + service-public.fr + + . + + + + - - - Le simulateur vous aide à comprendre votre bulletin de paie, - sans lui être opposable. Pour plus d'informations, rendez - vous sur  - - service-public.fr - - . - - - - - Il ne prend pour l'instant pas en compte les accords et - conventions collectives, ni la myriade d'aides aux entreprises. - Trouvez votre convention collective{' '} - - ici - - , et explorez les aides sur  - - aides-entreprises.fr - - . - - diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml index 310ccc8b75..b7d96a120a 100644 --- a/site/source/locales/ui-en.yaml +++ b/site/source/locales/ui-en.yaml @@ -1547,12 +1547,10 @@ pages: back: Back to simulator {{year}} info: "This simulation concerns the year <2>{{actualYear}}. " payslip: - disclaimer: For the moment, it does not take into account collective bargaining - agreements, nor the myriad forms of assistance available to companies. Find - your collective bargaining agreement <2>here, and find out more about - <4>company aid on aides-entreprises.fr. - notice: The simulator helps you to understand your pay slip, but is not binding - on you. For more information, visit <1>service-public.fr. + disclaimer: "This payslip is the result of the simulation you made. It helps you + to understand your pay slip: you can click on the links to understand how + each amount is calculated. This payslip is not a substitute for a real + payslip. For more information, visit <2>service-public.fr." repartition: Breakdown of total expenses points: points pourcentage: percentage @@ -1741,8 +1739,8 @@ simulateurs: salarié: "1": <0>This estimate is provided for information only. It is based on the information you have entered and the applicable regulations, but it does - not take into account your entire situation. <2>Actual amounts may - therefore differ. + not take into account your entire situation. <3>Actual amounts may + therefore differ. "2": The simulator does not currently take into account collective agreements, nor the myriad of company subsidies. Find your collective bargaining agreement <2>here, and explore the range of assistance available on diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml index 779d10bb61..dd7e12dccd 100644 --- a/site/source/locales/ui-fr.yaml +++ b/site/source/locales/ui-fr.yaml @@ -1648,13 +1648,11 @@ pages: back: Retourner au simulateur {{year}} info: "Cette simulation concerne l'année <2>{{actualYear}}. " payslip: - disclaimer: Il ne prend pour l'instant pas en compte les accords et conventions - collectives, ni la myriade d'aides aux entreprises. Trouvez votre convention - collective <2>ici, et explorez les aides sur - <4>aides-entreprises.fr. - notice: Le simulateur vous aide à comprendre votre bulletin de paie, sans lui - être opposable. Pour plus d'informations, rendez vous sur - <1>service-public.fr. + disclaimer: "Cette fiche de paie est issue de la simulation que vous avez faite. + Elle vous aide à comprendre votre bulletin de paie : vous pouvez cliquer sur + les liens pour comprendre le calcul de chaque montant. Cette fiche de paie + ne peut pas de substituer à une fiche de paie réelle. Pour plus + d'informations, rendez-vous sur <2>service-public.fr." repartition: Répartition du total chargé points: points pourcentage: pourcentage @@ -1854,9 +1852,9 @@ simulateurs: en BNC. Il ne prend pas en compte les sociétés d'exercice libéral. salarié: "1": <0>Cette estimation est proposée à titre indicatif. Elle est faite à - partir des éléments que vous avez saisis et des éléments réglementaires - applicables, mais elle ne tient pas compte de l'ensemble de votre - situation. <2>Les montants réels peuvent donc être différents. + partir des éléments que vous avez saisis et des éléments réglementaires + applicables, mais elle ne tient pas compte de l'ensemble de votre + situation. <3>Les montants réels peuvent donc être différents. "2": Le simulateur ne prend pour l'instant pas en compte les accords et conventions collectives, ni la myriade d'aides aux entreprises. Trouvez votre convention collective <2>ici, et explorez les aides sur From 14c3c94049c7306f1751bb1f927f3711df45cb0f Mon Sep 17 00:00:00 2001 From: Alice Dahan Date: Mon, 30 Sep 2024 10:49:45 +0200 Subject: [PATCH 7/7] docs: ajout d'un avertissement sur la valeur du montant net social --- .../r\303\251mun\303\251ration.publicodes" | 6 ++++-- site/source/locales/rules-en.yaml | 14 ++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git "a/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" "b/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" index 8a3d740276..ba25c298a6 100644 --- "a/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" +++ "b/modele-social/r\303\250gles/salari\303\251/r\303\251mun\303\251ration.publicodes" @@ -864,8 +864,10 @@ salarié . rémunération . montant net social: description: | Le montant net social, ou MNS, correspond au montant de référence à déclarer par les allocataires depuis le 1er février 2024 pour bénéficier de la Prime d’activité - et du revenu de solidarité active (RSA). Il facilite les démarches administratives, limite les - risques d’erreur de déclaration et réduit le taux de non-recours aux droits. + et du revenu de solidarité active (RSA). + + Le résultat affiché est une estimation qui ne tient pas compte de tous les éléments + de votre situation. unité: €/mois somme: - contrat . salaire brut diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml index 502736bdf4..f52b8bf77c 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -11136,18 +11136,24 @@ salarié . rémunération . montant net social: as of February 1, 2024 to qualify for the Prime d'Activité (activity allowance) - and the revenu de solidarité active (RSA). It simplifies administrative procedures, reduces the risk of + and the revenu de solidarité active (RSA). - and reduces the rate of non-use of entitlements. + + The result displayed is an estimate that does not take into account all the elements + + of your situation. description.fr: > Le montant net social, ou MNS, correspond au montant de référence à déclarer par les allocataires depuis le 1er février 2024 pour bénéficier de la Prime d’activité - et du revenu de solidarité active (RSA). Il facilite les démarches administratives, limite les + et du revenu de solidarité active (RSA). + + + Le résultat affiché est une estimation qui ne tient pas compte de tous les éléments - risques d’erreur de déclaration et réduit le taux de non-recours aux droits. + de votre situation. résumé.en: "[automatic] Amount to declare for Prime d'activité and RSA applications" résumé.fr: Montant à déclarer pour les demandes de Prime d'activité et de RSA titre.en: '[automatic] Net corporate amount'