From ce2e79ee5bb58908d94ed49b681ba329f6768826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 5 Feb 2020 16:43:08 +0100 Subject: [PATCH 01/14] =?UTF-8?q?=F0=9F=94=A8=20Ajoute=20la=20r=C3=A8gle?= =?UTF-8?q?=20titres-restaurant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 68 ++++++++++++++++++++++++++++++------ source/locales/units.yaml | 3 ++ 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index d09051a70..1a81e3cc3 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -33,7 +33,53 @@ contrat salarié: contrat salarié . CDI: formule: contrat salarié = 'CDI' -contrat salarié . indemnité kilométrique vélo: +contrat salarié . frais professionnels: + description: >- + Les frais professionnels correspondent à des dépenses engagées par le salarié pour les besoins de son activité professionnelle. Ces frais sont ensuite remboursés par l’employeur. + + Le dédommagement de ces frais peut prendre la forme : + - d’un remboursement des dépenses réelles sur justificatifs ; + - d’un versement d’allocations forfaitaires ; + - de l’application d’une déduction forfaitaire spécifique sur le salaire soumis à cotisations ; cette possibilité n’étant ouverte qu’à certaines professions. + + Les frais professionnels sont exclus de la base de calcul des cotisations de Sécurité sociale. Ils sont aussi exclus de la base CSG-CRDS. + formule: + somme: + - indemnité kilométrique vélo + - titres-restaurant + +contrat salarié . frais professionnels . titres-restaurant: + icônes: 🍽️ + description: >- + Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. + + Le salarié ne peut utiliser les titres-restaurant en sa possession que pour régler la consommation : + - d’un repas, + - de préparations alimentaires directement consommables, + - de fruits et légumes. + + Ce titre peut être émis sur support papier ou sous forme dématérialisée. + + formule: + multiplication: + facteur: titres-restaurant par mois + assiette: + encadrement: + valeur: 50% * valeur + plafond: 5.55 € + +contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: + question: Combien de titres-restaurant recevez-vous par mois ? + par défaut: 19 + unité: titres-restaurant/mois + +contrat salarié . frais professionnels . titres-restaurant . valeur: + question: Quelle est la valeur du titre-restaurant ? + par défaut: 8 + unité: €/titre-restaurant + + +contrat salarié . frais professionnels . indemnité kilométrique vélo: icônes: 🚴 description: | Indemnité introduite en 2015 pour inciter l'usage du vélo pour aller au travail. @@ -55,24 +101,24 @@ contrat salarié . indemnité kilométrique vélo: active: oui valeur attendue: 200 -contrat salarié . indemnité kilométrique vélo . plafond d'exonération: +contrat salarié . frais professionnels . indemnité kilométrique vélo . plafond d'exonération: formule: 200 €/an -contrat salarié . indemnité kilométrique vélo . indemnité kilométrique: +contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité kilométrique: formule: 0.25 €/km -contrat salarié . indemnité kilométrique vélo . distance annuelle: +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance annuelle: unité: km/an formule: distance journalière * jours travaillés -contrat salarié . indemnité kilométrique vélo . distance journalière: +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance journalière: description: Une estimation basse de la distance parcourue à vélo par un salarié pour se rendre à son travail. formule: 4 km/jour -contrat salarié . indemnité kilométrique vélo . jours travaillés: +contrat salarié . frais professionnels . indemnité kilométrique vélo . jours travaillés: formule: 218 jours/an -contrat salarié . indemnité kilométrique vélo . active: +contrat salarié . frais professionnels . indemnité kilométrique vélo . active: titre: indemnité vélo active question: Le salarié profite-t-il de l'indemnité kilométrique vélo pour se rendre au travail ? description: | @@ -279,7 +325,7 @@ contrat salarié . CDD . prime de fin de contrat: - rémunération . avantages en nature . montant - rémunération . primes - rémunération . heures supplémentaires - - indemnité kilométrique vélo + - frais professionnels . indemnité kilométrique vélo taux: 10% exemples: @@ -705,7 +751,7 @@ contrat salarié . cotisations . assiette: assiette: rémunération . brut abattement: somme: - - indemnité kilométrique vélo + - frais professionnels - stage . gratification minimale contrat salarié . cotisations . assiette . salariale: @@ -1069,7 +1115,7 @@ contrat salarié . indemnités salarié: formule: somme: - CDD . indemnités salarié CDD - - indemnité kilométrique vélo + - frais professionnels . indemnité kilométrique vélo contrat salarié . statut cadre: question: Le salarié a-t-il le statut cadre ? @@ -1199,7 +1245,7 @@ contrat salarié . rémunération . net imposable: assiette: base abattement: somme: - - indemnité kilométrique vélo + - frais professionnels . indemnité kilométrique vélo - prime d'impatriation - exonération d'impôt des stagiaires et apprentis - heures supplémentaires et complémentaires défiscalisées diff --git a/source/locales/units.yaml b/source/locales/units.yaml index d9f9c052c..161b8116d 100644 --- a/source/locales/units.yaml +++ b/source/locales/units.yaml @@ -10,6 +10,7 @@ fr: point_plural: points mois_plural: mois manifestation_plural: manifestations + titre-restaurant_plural: titres-restaurant en: heure: hour heure_plural: hours @@ -36,3 +37,5 @@ en: mois_plural: months manifestation: event manifestation_plural: events + titre-restaurant: meal voucher + titre-restaurant_plural: meal vouchers From 8116b57509e135db83950ce54c4109abe337247b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 5 Feb 2020 16:58:30 +0100 Subject: [PATCH 02/14] =?UTF-8?q?=F0=9F=94=A8=20demande=20si=20le=20salari?= =?UTF-8?q?=C3=A9=20re=C3=A7oit=20des=20titres-restaurant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 1a81e3cc3..6b69ca38a 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -59,7 +59,13 @@ contrat salarié . frais professionnels . titres-restaurant: - de fruits et légumes. Ce titre peut être émis sur support papier ou sous forme dématérialisée. + question: Le salarié reçoit-il des titres-restaurant ? + par défaut: non +contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: + question: Combien de titres-restaurant recevez-vous par mois ? + par défaut: 19 + unité: titres-restaurant/mois formule: multiplication: facteur: titres-restaurant par mois @@ -68,11 +74,6 @@ contrat salarié . frais professionnels . titres-restaurant: valeur: 50% * valeur plafond: 5.55 € -contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: - question: Combien de titres-restaurant recevez-vous par mois ? - par défaut: 19 - unité: titres-restaurant/mois - contrat salarié . frais professionnels . titres-restaurant . valeur: question: Quelle est la valeur du titre-restaurant ? par défaut: 8 @@ -1084,7 +1085,7 @@ contrat salarié . rémunération . avantages en nature . nourriture: L'employeur fournit-il gratuitement les repas ? par défaut: non description: > - Les tickets restaurants ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. + Les titres-restaurant ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. contrat salarié . rémunération . avantages en nature . nourriture . montant: titre: nourriture From 53f045339cbba9988c4af2ba2e6e9df765a78dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 5 Feb 2020 17:22:20 +0100 Subject: [PATCH 03/14] =?UTF-8?q?=F0=9F=92=9A=20corrige=20les=20traduction?= =?UTF-8?q?s=20et=20les=20espaces=20de=20noms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/simulationConfigs/salarié.yaml | 2 +- source/locales/rules-en.yaml | 84 +++++++++++++++--- test/bug-cotisations.test.js | 88 +++++++++---------- 3 files changed, 119 insertions(+), 55 deletions(-) diff --git a/source/components/simulationConfigs/salarié.yaml b/source/components/simulationConfigs/salarié.yaml index b3b9d93cc..1b8b3f71b 100644 --- a/source/components/simulationConfigs/salarié.yaml +++ b/source/components/simulationConfigs/salarié.yaml @@ -21,7 +21,7 @@ questions: JEI: contrat salarié . statut JEI Avantages: contrat salarié . rémunération . avantages en nature non prioritaires: - - contrat salarié . indemnité kilométrique vélo . active + - contrat salarié . frais professionnels . indemnité kilométrique vélo . active - contrat salarié . rémunération . avantages en nature - entreprise . établissement bancaire - entreprise . association non lucrative diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index 9507be149..b6dd37fe4 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -1374,7 +1374,34 @@ contrat salarié . formation professionnelle: entreprises de travail temporaire) titre.en: professional training titre.fr: formation professionnelle -contrat salarié . indemnité kilométrique vélo: +contrat salarié . frais professionnels: + description.en: >- + [automatic] Business expenses correspond to expenses incurred by the + employee for the needs of his professional activity. These costs are then + reimbursed by the employer. + + Compensation for these costs may take the form of : + - reimbursement of actual expenditure on the basis of supporting documents; + - a lump-sum payment ; + - the application of a specific lump-sum deduction on the salary subject to contributions; this possibility is only open to certain professions. + + Business expenses are excluded from the basis for calculating Social + Security contributions. They are also excluded from the CSG-CRDS database. + description.fr: >- + Les frais professionnels correspondent à des dépenses engagées par le + salarié pour les besoins de son activité professionnelle. Ces frais sont + ensuite remboursés par l’employeur. + + Le dédommagement de ces frais peut prendre la forme : + - d’un remboursement des dépenses réelles sur justificatifs ; + - d’un versement d’allocations forfaitaires ; + - de l’application d’une déduction forfaitaire spécifique sur le salaire soumis à cotisations ; cette possibilité n’étant ouverte qu’à certaines professions. + + Les frais professionnels sont exclus de la base de calcul des cotisations de + Sécurité sociale. Ils sont aussi exclus de la base CSG-CRDS. + titre.en: '[automatic] business expenses' + titre.fr: frais professionnels +contrat salarié . frais professionnels . indemnité kilométrique vélo: description.en: >- Employer's incitation to the use of bicycles for commuting. This financial aid is not taxed. @@ -1392,7 +1419,7 @@ contrat salarié . indemnité kilométrique vélo: part au-dessus de 200€ devient une prime classique. titre.en: kilometric bicycle allowance titre.fr: indemnité kilométrique vélo -contrat salarié . indemnité kilométrique vélo . active: +contrat salarié . frais professionnels . indemnité kilométrique vélo . active: description.en: > This allowance is not mandatory at this time. @@ -1440,25 +1467,62 @@ contrat salarié . indemnité kilométrique vélo . active: travail ? titre.en: active bicycle allowance titre.fr: indemnité vélo active -contrat salarié . indemnité kilométrique vélo . distance annuelle: +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance annuelle: titre.en: annual distance titre.fr: distance annuelle -contrat salarié . indemnité kilométrique vélo . distance journalière: +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance journalière: description.en: A low estimate of the distance an employee bikes to work. description.fr: >- Une estimation basse de la distance parcourue à vélo par un salarié pour se rendre à son travail. titre.en: daily distance titre.fr: distance journalière -contrat salarié . indemnité kilométrique vélo . indemnité kilométrique: +contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité kilométrique: titre.en: kilometre allowance titre.fr: indemnité kilométrique -contrat salarié . indemnité kilométrique vélo . jours travaillés: +contrat salarié . frais professionnels . indemnité kilométrique vélo . jours travaillés: titre.en: days worked titre.fr: jours travaillés -contrat salarié . indemnité kilométrique vélo . plafond d'exonération: +contrat salarié . frais professionnels . indemnité kilométrique vélo . plafond d'exonération: titre.en: exemption cap titre.fr: plafond d'exonération +contrat salarié . frais professionnels . titres-restaurant: + description.en: >- + [automatic] The meal voucher is a special "meal" payment voucher issued by + the employer to the employee. + + The employee may only use the meal vouchers in his or her possession to pay + for consumption: + - of a meal, + - of directly consumable food preparations, + - of fruits and vegetables. + + This voucher can be issued in paper or dematerialised form. + description.fr: >- + Le titre-restaurant est un titre spécial de paiement « des repas » remis par + l’employeur au salarié. + + Le salarié ne peut utiliser les titres-restaurant en sa possession que pour + régler la consommation : + - d’un repas, + - de préparations alimentaires directement consommables, + - de fruits et légumes. + + Ce titre peut être émis sur support papier ou sous forme dématérialisée. + question.en: '[automatic] Does the employee receive luncheon vouchers?' + 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 . titres-restaurant par mois: + question.en: '[automatic] How many restaurant vouchers do you receive per month?' + question.fr: Combien de titres-restaurant recevez-vous par mois ? + titre.en: '[automatic] meal vouchers per month' + titre.fr: titres-restaurant par mois +contrat salarié . frais professionnels . titres-restaurant . valeur: + question.en: '[automatic] What is the value of the restaurant voucher?' + question.fr: Quelle est la valeur du titre-restaurant ? + titre.en: '[automatic] value' + titre.fr: valeur contrat salarié . indemnités salarié: titre.en: Employee benefits titre.fr: indemnités salarié @@ -2032,10 +2096,10 @@ contrat salarié . rémunération . avantages en nature . montant: titre.fr: Avantages en nature (montant) contrat salarié . rémunération . avantages en nature . nourriture: description.en: > - Lunch vouchers("tickets restaurants") are not considered as a benefit in - kind but as a reimbursement of expenses. + [automatic] Restaurant vouchers are not considered a benefit in kind but a + reimbursement of expenses. description.fr: > - Les tickets restaurants ne sont pas considérés comme un avantage en nature + Les titres-restaurant ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. question.en: | Does the employer provide free meals? diff --git a/test/bug-cotisations.test.js b/test/bug-cotisations.test.js index b53472d2e..5a6b61587 100644 --- a/test/bug-cotisations.test.js +++ b/test/bug-cotisations.test.js @@ -5,9 +5,9 @@ import { safeLoad } from 'js-yaml' import { rules as realRules } from '../source/engine/rules' import { analyse, analyseMany, parseAll } from '../source/engine/traverse' -describe('bug-analyse-many', function() { - it('complex inversion with composantes', () => { - let rawRules = dedent` +describe('bug-analyse-many', function () { + it('complex inversion with composantes', () => { + let rawRules = dedent` - nom: net formule: brut - cotisations - nom: cotisations @@ -48,48 +48,48 @@ describe('bug-analyse-many', function() { avec: - net `, - rules = parseAll(safeLoad(rawRules).map(enrichRule)), - stateSelector = name => ({ net: 700 }[name]) - const targets = ['brut', 'cotisations'] - const many = analyseMany(rules, targets)(stateSelector).targets + rules = parseAll(safeLoad(rawRules).map(enrichRule)), + stateSelector = name => ({ net: 700 }[name]) + const targets = ['brut', 'cotisations'] + const many = analyseMany(rules, targets)(stateSelector).targets - const one = analyse(rules, 'cotisations')(stateSelector).targets[0] + const one = analyse(rules, 'cotisations')(stateSelector).targets[0] - //console.log(many[0].nodeValue, many[1].nodeValue, one.nodeValue) - expect(many[1].nodeValue).to.be.closeTo(one.nodeValue, 0.1) - }) - it('should compute the same contributions if asked with analyseMany or analyse', function() { - const situationSelector = dottedName => - ({ - 'contrat salarié . rémunération . net de cotisations': 3500, - 'auto-entrepreneur': 'non', - 'contrat salarié': 'oui', - dirigeant: 'assimilé salarié', - 'contrat salarié . ATMP . taux réduit': 'oui', - 'contrat salarié . CDD': 'non', - 'contrat salarié . indemnité kilométrique vélo . indemnité vélo active': - 'non', - 'contrat salarié . rémunération . avantages en nature . montant': 0, - 'contrat salarié . temps partiel': 'non', - 'établissement . localisation': {}, - 'contrat salarié . complémentaire santé . part employeur': 50, - 'contrat salarié . complémentaire santé . forfait . en france': 50, - 'entreprise . effectif': 1, - 'entreprise . association non lucrative': 'non' - }[dottedName]) - const rules = parseAll(realRules.map(enrichRule)) - const targets = [ - 'contrat salarié . rémunération . brut de base', - 'contrat salarié . cotisations . salariales' - ] - const analyseManyValue = analyseMany(rules, targets)(situationSelector) - .targets[1] - const analyseValue = analyse( - rules, - 'contrat salarié . cotisations . salariales' - )(situationSelector).targets[0] + //console.log(many[0].nodeValue, many[1].nodeValue, one.nodeValue) + expect(many[1].nodeValue).to.be.closeTo(one.nodeValue, 0.1) + }) + it('should compute the same contributions if asked with analyseMany or analyse', function () { + const situationSelector = dottedName => + ({ + 'contrat salarié . rémunération . net de cotisations': 3500, + 'auto-entrepreneur': 'non', + 'contrat salarié': 'oui', + dirigeant: 'assimilé salarié', + 'contrat salarié . ATMP . taux réduit': 'oui', + 'contrat salarié . CDD': 'non', + 'contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité vélo active': + 'non', + 'contrat salarié . rémunération . avantages en nature . montant': 0, + 'contrat salarié . temps partiel': 'non', + 'établissement . localisation': {}, + 'contrat salarié . complémentaire santé . part employeur': 50, + 'contrat salarié . complémentaire santé . forfait . en france': 50, + 'entreprise . effectif': 1, + 'entreprise . association non lucrative': 'non' + }[dottedName]) + const rules = parseAll(realRules.map(enrichRule)) + const targets = [ + 'contrat salarié . rémunération . brut de base', + 'contrat salarié . cotisations . salariales' + ] + const analyseManyValue = analyseMany(rules, targets)(situationSelector) + .targets[1] + const analyseValue = analyse( + rules, + 'contrat salarié . cotisations . salariales' + )(situationSelector).targets[0] - console.log(analyseManyValue.nodeValue, analyseValue.nodeValue) - expect(analyseManyValue.nodeValue).to.equal(analyseValue.nodeValue) - }) + console.log(analyseManyValue.nodeValue, analyseValue.nodeValue) + expect(analyseManyValue.nodeValue).to.equal(analyseValue.nodeValue) + }) }) From 0d56eff98172b26616e85f8e2344c4ca39f7d8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 5 Feb 2020 17:33:09 +0100 Subject: [PATCH 04/14] =?UTF-8?q?=F0=9F=92=9A=20corrige=20la=20r=C3=A8gle?= =?UTF-8?q?=20des=20titres-restaurants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 12 +++++++----- source/locales/rules-en.yaml | 3 +++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 6b69ca38a..2a2b9d127 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -46,7 +46,7 @@ contrat salarié . frais professionnels: formule: somme: - indemnité kilométrique vélo - - titres-restaurant + - titres-restaurant . montant contrat salarié . frais professionnels . titres-restaurant: icônes: 🍽️ @@ -62,10 +62,7 @@ contrat salarié . frais professionnels . titres-restaurant: question: Le salarié reçoit-il des titres-restaurant ? par défaut: non -contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: - question: Combien de titres-restaurant recevez-vous par mois ? - par défaut: 19 - unité: titres-restaurant/mois +contrat salarié . frais professionnels . titres-restaurant . montant: formule: multiplication: facteur: titres-restaurant par mois @@ -74,6 +71,11 @@ contrat salarié . frais professionnels . titres-restaurant . titres-restaurant valeur: 50% * valeur plafond: 5.55 € +contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: + question: Combien de titres-restaurant recevez-vous par mois ? + par défaut: 19 + unité: titres-restaurant/mois + contrat salarié . frais professionnels . titres-restaurant . valeur: question: Quelle est la valeur du titre-restaurant ? par défaut: 8 diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index b6dd37fe4..e0ff74385 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -1513,6 +1513,9 @@ 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 . montant: + titre.en: '[automatic] amount' + titre.fr: montant contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question.en: '[automatic] How many restaurant vouchers do you receive per month?' question.fr: Combien de titres-restaurant recevez-vous par mois ? From 96e8edf1d1c7ec3afbc040a2db77d46db832efc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Thu, 6 Feb 2020 11:11:23 +0100 Subject: [PATCH 05/14] =?UTF-8?q?=F0=9F=92=9A=20corrige=20l'indentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 45 ++++++-- source/components/PaySlip.tsx | 197 +++++++++++++++++----------------- test/bug-cotisations.test.js | 86 +++++++-------- 3 files changed, 180 insertions(+), 148 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 2a2b9d127..2d5217514 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -36,17 +36,17 @@ contrat salarié . CDI: contrat salarié . frais professionnels: description: >- Les frais professionnels correspondent à des dépenses engagées par le salarié pour les besoins de son activité professionnelle. Ces frais sont ensuite remboursés par l’employeur. - + Le dédommagement de ces frais peut prendre la forme : - d’un remboursement des dépenses réelles sur justificatifs ; - d’un versement d’allocations forfaitaires ; - de l’application d’une déduction forfaitaire spécifique sur le salaire soumis à cotisations ; cette possibilité n’étant ouverte qu’à certaines professions. - + Les frais professionnels sont exclus de la base de calcul des cotisations de Sécurité sociale. Ils sont aussi exclus de la base CSG-CRDS. formule: somme: - indemnité kilométrique vélo - - titres-restaurant . montant + - titres-restaurant . participation employeur contrat salarié . frais professionnels . titres-restaurant: icônes: 🍽️ @@ -62,14 +62,29 @@ contrat salarié . frais professionnels . titres-restaurant: question: Le salarié reçoit-il des titres-restaurant ? par défaut: non -contrat salarié . frais professionnels . titres-restaurant . montant: +contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: + formule: + multiplication: + facteur: + encadrement: + valeur: taux participation employeur * valeur - participation employeur . plafond + plancher: 0€ + assiette: titres-restaurant par mois + +contrat salarié . frais professionnels . titres-restaurant . participation employeur . plafond: + formule: 5.36€ + +contrat salarié . frais professionnels . titres-restaurant . participation employeur: formule: multiplication: facteur: titres-restaurant par mois assiette: encadrement: - valeur: 50% * valeur - plafond: 5.55 € + valeur: taux participation employeur * valeur + plafond: plafond + +contrat salarié . frais professionnels . titres-restaurant . participation salarié: + formule: valeur * titres-restaurant par mois - participation employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question: Combien de titres-restaurant recevez-vous par mois ? @@ -81,6 +96,21 @@ contrat salarié . frais professionnels . titres-restaurant . valeur: par défaut: 8 unité: €/titre-restaurant +contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: + description: Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et de 60% maximum + question: Quelle est la participation de l'employeur ? + par défaut: 50 + unité: '%' + 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 . indemnité kilométrique vélo: icônes: 🚴 @@ -755,6 +785,7 @@ contrat salarié . cotisations . assiette: abattement: somme: - frais professionnels + - (- frais professionnels . titres-restaurant . part non exonérée de cotisation) - stage . gratification minimale contrat salarié . cotisations . assiette . salariale: @@ -1249,6 +1280,8 @@ contrat salarié . rémunération . net imposable: abattement: somme: - frais professionnels . indemnité kilométrique vélo + - (- frais professionnels . titres-restaurant . participation employeur) + - frais professionnels . titres-restaurant . participation salarié - prime d'impatriation - exonération d'impôt des stagiaires et apprentis - heures supplémentaires et complémentaires défiscalisées diff --git a/source/components/PaySlip.tsx b/source/components/PaySlip.tsx index d9fa79bce..85cc4c4e5 100644 --- a/source/components/PaySlip.tsx +++ b/source/components/PaySlip.tsx @@ -4,29 +4,26 @@ import { findRuleByDottedName, getRuleFromAnalysis } from 'Engine/rules' import React, { Fragment, useContext } from 'react' import { Trans } from 'react-i18next' import { useSelector } from 'react-redux' -import { - analysisWithDefaultsSelector, - parsedRulesSelector -} from 'Selectors/analyseSelectors' +import { analysisWithDefaultsSelector, parsedRulesSelector } from 'Selectors/analyseSelectors' import { analysisToCotisationsSelector } from 'Selectors/ficheDePaieSelectors' import './PaySlip.css' import { Line, SalaireBrutSection, SalaireNetSection } from './PaySlipSections' import RuleLink from './RuleLink' export default function PaySlip() { - const { lightestColor } = useContext(ThemeColorsContext) - const cotisations = useSelector(analysisToCotisationsSelector) - const analysis = useSelector(analysisWithDefaultsSelector) - const parsedRules = useSelector(parsedRulesSelector) - let getRule = getRuleFromAnalysis(analysis) + const { lightestColor } = useContext(ThemeColorsContext) + const cotisations = useSelector(analysisToCotisationsSelector) + const analysis = useSelector(analysisWithDefaultsSelector) + const parsedRules = useSelector(parsedRulesSelector) + let getRule = getRuleFromAnalysis(analysis) - const heuresSupplémentaires = getRule( - 'contrat salarié . temps de travail . heures supplémentaires' - ) - return ( -
-
- - {heuresSupplémentaires?.nodeValue > 0 && ( - - )} -
+ > +
+ + {heuresSupplémentaires?.nodeValue > 0 && ( + + )} +
- - {/* Section cotisations */} -
-

- Cotisations sociales -

-

- Part employeur -

-

- Part salarié -

- {cotisations.map(([brancheDottedName, cotisationList]) => { - let branche = findRuleByDottedName(parsedRules, brancheDottedName) - return ( - -
- -
- {cotisationList.map(cotisation => ( - - - - {cotisation.montant.partPatronale} - - - {cotisation.montant.partSalariale} - - - ))} -
- ) - })} + + {/* Section cotisations */} +
+

+ Cotisations sociales +

+

+ Part employeur +

+

+ Part salarié +

+ {cotisations.map(([brancheDottedName, cotisationList]) => { + let branche = findRuleByDottedName(parsedRules, brancheDottedName) + return ( + +
+ +
+ {cotisationList.map(cotisation => ( + + + + {cotisation.montant.partPatronale} + + + {cotisation.montant.partSalariale} + + + ))} +
+ ) + })} - {/* Total cotisation */} -
- Total des retenues -
- - - {/* Salaire chargé */} - - -
- {/* Section salaire net */} - -
- ) + {/* Total cotisation */} +
+ Total des retenues +
+ + + {/* Salaire chargé */} + + + {/* Titres-restaurant */} + +
+ {/* Section salaire net */} + + + ) } diff --git a/test/bug-cotisations.test.js b/test/bug-cotisations.test.js index 5a6b61587..7e46ab572 100644 --- a/test/bug-cotisations.test.js +++ b/test/bug-cotisations.test.js @@ -6,8 +6,8 @@ import { rules as realRules } from '../source/engine/rules' import { analyse, analyseMany, parseAll } from '../source/engine/traverse' describe('bug-analyse-many', function () { - it('complex inversion with composantes', () => { - let rawRules = dedent` + it('complex inversion with composantes', () => { + let rawRules = dedent` - nom: net formule: brut - cotisations - nom: cotisations @@ -48,48 +48,48 @@ describe('bug-analyse-many', function () { avec: - net `, - rules = parseAll(safeLoad(rawRules).map(enrichRule)), - stateSelector = name => ({ net: 700 }[name]) - const targets = ['brut', 'cotisations'] - const many = analyseMany(rules, targets)(stateSelector).targets + rules = parseAll(safeLoad(rawRules).map(enrichRule)), + stateSelector = name => ({ net: 700 }[name]) + const targets = ['brut', 'cotisations'] + const many = analyseMany(rules, targets)(stateSelector).targets - const one = analyse(rules, 'cotisations')(stateSelector).targets[0] + const one = analyse(rules, 'cotisations')(stateSelector).targets[0] - //console.log(many[0].nodeValue, many[1].nodeValue, one.nodeValue) - expect(many[1].nodeValue).to.be.closeTo(one.nodeValue, 0.1) - }) - it('should compute the same contributions if asked with analyseMany or analyse', function () { - const situationSelector = dottedName => - ({ - 'contrat salarié . rémunération . net de cotisations': 3500, - 'auto-entrepreneur': 'non', - 'contrat salarié': 'oui', - dirigeant: 'assimilé salarié', - 'contrat salarié . ATMP . taux réduit': 'oui', - 'contrat salarié . CDD': 'non', - 'contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité vélo active': - 'non', - 'contrat salarié . rémunération . avantages en nature . montant': 0, - 'contrat salarié . temps partiel': 'non', - 'établissement . localisation': {}, - 'contrat salarié . complémentaire santé . part employeur': 50, - 'contrat salarié . complémentaire santé . forfait . en france': 50, - 'entreprise . effectif': 1, - 'entreprise . association non lucrative': 'non' - }[dottedName]) - const rules = parseAll(realRules.map(enrichRule)) - const targets = [ - 'contrat salarié . rémunération . brut de base', - 'contrat salarié . cotisations . salariales' - ] - const analyseManyValue = analyseMany(rules, targets)(situationSelector) - .targets[1] - const analyseValue = analyse( - rules, - 'contrat salarié . cotisations . salariales' - )(situationSelector).targets[0] + //console.log(many[0].nodeValue, many[1].nodeValue, one.nodeValue) + expect(many[1].nodeValue).to.be.closeTo(one.nodeValue, 0.1) + }) + it('should compute the same contributions if asked with analyseMany or analyse', function () { + const situationSelector = dottedName => + ({ + 'contrat salarié . rémunération . net de cotisations': 3500, + 'auto-entrepreneur': 'non', + 'contrat salarié': 'oui', + dirigeant: 'assimilé salarié', + 'contrat salarié . ATMP . taux réduit': 'oui', + 'contrat salarié . CDD': 'non', + 'contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité vélo active': + 'non', + 'contrat salarié . rémunération . avantages en nature . montant': 0, + 'contrat salarié . temps partiel': 'non', + 'établissement . localisation': {}, + 'contrat salarié . complémentaire santé . part employeur': 50, + 'contrat salarié . complémentaire santé . forfait . en france': 50, + 'entreprise . effectif': 1, + 'entreprise . association non lucrative': 'non' + }[dottedName]) + const rules = parseAll(realRules.map(enrichRule)) + const targets = [ + 'contrat salarié . rémunération . brut de base', + 'contrat salarié . cotisations . salariales' + ] + const analyseManyValue = analyseMany(rules, targets)(situationSelector) + .targets[1] + const analyseValue = analyse( + rules, + 'contrat salarié . cotisations . salariales' + )(situationSelector).targets[0] - console.log(analyseManyValue.nodeValue, analyseValue.nodeValue) - expect(analyseManyValue.nodeValue).to.equal(analyseValue.nodeValue) - }) + console.log(analyseManyValue.nodeValue, analyseValue.nodeValue) + expect(analyseManyValue.nodeValue).to.equal(analyseValue.nodeValue) + }) }) From c633ead85c6f7b647deb7d906e0ffb58bbd19c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Thu, 6 Feb 2020 15:22:14 +0100 Subject: [PATCH 06/14] =?UTF-8?q?=F0=9F=92=9A=20corrige=20la=20traduction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/locales/rules-en.yaml | 56 +++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index e0ff74385..ddaf4c491 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -328,7 +328,7 @@ contrat salarié . CDD . contrat jeune vacances: description.fr: >- Aussi appelé CDD vendanges. Contrat conclu avec un jeune pendant ses vacances scolaires ou universitaires. - note.en: '[automatic] That''s not a reason for a fixed-term contract.' + note.en: "[automatic] That's not a reason for a fixed-term contract." note.fr: Ce n'est pas un motif de CDD. question.en: Is it a young holiday contract? question.fr: Est-ce un contrat jeune vacances ? @@ -706,7 +706,7 @@ contrat salarié . aides employeur: France. Découvrez-les sur le [portail officiel](http://www.aides-entreprises.fr). résumé.en: Deferred aids available to the employer. - résumé.fr: 'Pour l''employeur, différées dans le temps' + résumé.fr: "Pour l'employeur, différées dans le temps" titre.en: deferred employer aids titre.fr: aides à l'embauche contrat salarié . aides employeur . aide à l'embauche d'apprentis: @@ -798,7 +798,7 @@ contrat salarié . apprentissage . diplôme préparé . niveau supérieur au bac titre.fr: Diplôme d'un niveau supérieur au bac contrat salarié . assiette CSG et CRDS: note.en: '[automatic] This plate is complex, this version is only a simplification.' - note.fr: 'Cette assiette est complexe, cette version n''est qu''une simplification.' + note.fr: "Cette assiette est complexe, cette version n'est qu'une simplification." titre.en: CSG and CRDS base titre.fr: assiette CSG et CRDS contrat salarié . assiette CSG et CRDS . assiette abattue: @@ -993,12 +993,12 @@ contrat salarié . convention collective: 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] ' + question.fr: "Quelle convention collective est applicable à l'entreprise ? [beta] " titre.en: convention collective titre.fr: convention collective contrat salarié . convention collective . HCR: description.en: 'The company is a hotel, café, restaurant or similar.' - description.fr: 'L''entreprise est un hôtel, café, restaurant ou assimilé.' + description.fr: "L'entreprise est un hôtel, café, restaurant ou assimilé." titre.en: 'hotels, cafés restaurants HCR (beta)' titre.fr: 'hôtels, cafés restaurants HCR (beta)' contrat salarié . convention collective . HCR . majoration heures supplémentaires: @@ -1513,9 +1513,39 @@ 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 . montant: - titre.en: '[automatic] amount' - titre.fr: montant +contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: + titre.en: '[automatic] non-exempt portion' + titre.fr: part non exonérée de cotisation +contrat salarié . frais professionnels . titres-restaurant . participation employeur: + titre.en: '[automatic] employer contribution' + titre.fr: participation employeur +contrat salarié . frais professionnels . titres-restaurant . participation employeur . plafond: + titre.en: '[automatic] ceiling' + titre.fr: plafond +contrat salarié . frais professionnels . titres-restaurant . participation salarié: + titre.en: '[automatic] employee participation' + titre.fr: participation salarié +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: >- + [automatic] Employer-paid portion of the meal voucher. Must be a minimum of + 50% and a maximum of 60%. + description.fr: >- + Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et + de 60% maximum + question.en: "[automatic] What is the employer's paid portion?" + question.fr: Quelle est la participation de l'employeur ? + suggestions.50%.en: '[automatic] 50%' + suggestions.50%.fr: 50% + suggestions.60%.en: '[automatic] 60%' + suggestions.60%.fr: 60% + titre.en: '[automatic] employer contribution rate' + titre.fr: taux participation employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question.en: '[automatic] How many restaurant vouchers do you receive per month?' question.fr: Combien de titres-restaurant recevez-vous par mois ? @@ -1922,7 +1952,7 @@ contrat salarié . réduction générale . assiette: titre.fr: Assiette de la réduction générale contrat salarié . réduction générale . assiette . part de la cotisation ATMP: note.en: '[automatic] In practice, the ATMP is always higher than 0.78%.' - note.fr: 'En pratique, l''ATMP est toujours supérieure à 0.78%' + note.fr: "En pratique, l'ATMP est toujours supérieure à 0.78%" titre.en: share of ATMP contribution titre.fr: part de la cotisation ATMP contrat salarié . réduction générale . multiplicateur: @@ -3661,7 +3691,7 @@ dirigeant . rattachement CIPAV: note.en: >- [automatic] for the time being, we have only retained the CIPAV for the calculations. - note.fr: 'pour l''instant, nous n''avons retenu que la CIPAV pour les calculs' + note.fr: "pour l'instant, nous n'avons retenu que la CIPAV pour les calculs" titre.en: CIPAV attachment titre.fr: rattachement CIPAV dirigeant . rattachement CIPAV . retraite complémentaire: @@ -3991,7 +4021,7 @@ entreprise . catégorie d'activité . restauration ou hébergement: titre.fr: restauration ou hébergement entreprise . catégorie d'activité . service ou vente: question.en: 'Is it a service activity, or the purchase and sale of goods?' - question.fr: 'Est-ce une activité de prestation de service, ou de l''achat-vente de biens ?' + question.fr: "Est-ce une activité de prestation de service, ou de l'achat-vente de biens ?" titre.en: service or sale titre.fr: service ou vente entreprise . catégorie d'activité . service ou vente . service: @@ -4110,7 +4140,7 @@ 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.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 @@ -4327,7 +4357,7 @@ entreprise . établissement bancaire: L'entreprise est un établissement bancaire, financier ou d'assurance. Elle est non assujettie à la TVA. question.en: 'Is it a banking, financial or insurance institution?' - question.fr: 'S''agit-il d''un établissement bancaire, financier, d''assurance ?' + question.fr: "S'agit-il d'un établissement bancaire, financier, d'assurance ?" titre.en: banking institution titre.fr: établissement bancaire impôt: From a3cfc56c41074c56386a8ae7ef994e0871580f33 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Fri, 7 Feb 2020 11:16:04 +0100 Subject: [PATCH 07/14] =?UTF-8?q?=F0=9F=90=9B=20Remonte=20les=20variables?= =?UTF-8?q?=20manquantes=20dans=20le=20m=C3=A9canisme=20encadrement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/engine/mecanisms/encadrement.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/engine/mecanisms/encadrement.tsx b/source/engine/mecanisms/encadrement.tsx index 6a8ec6bd1..73909a87c 100644 --- a/source/engine/mecanisms/encadrement.tsx +++ b/source/engine/mecanisms/encadrement.tsx @@ -79,6 +79,11 @@ const evaluate = (cache, situation, parsedRules, node) => { return { ...node, nodeValue, + missingVariables: { + ...valeur?.missingVariables, + ...plafond?.missingVariables, + ...plancher?.missingVariables + }, unit: valeur.unit, explanation: { valeur, From e7475d626e86621881b054457f0df38ad158e6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Fri, 7 Feb 2020 15:59:22 +0100 Subject: [PATCH 08/14] =?UTF-8?q?Titres=20restaurants:=20mise=20=C3=A0=20j?= =?UTF-8?q?our=20feuille=20de=20paie=20+=20r=C3=A8gle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 22 ++-- source/components/PaySlip.tsx | 227 +++++++++++++++++++--------------- source/locales/rules-en.yaml | 40 +++--- 3 files changed, 162 insertions(+), 127 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 2d5217514..7adc6e192 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -66,13 +66,15 @@ contrat salarié . frais professionnels . titres-restaurant . part non exonéré formule: multiplication: facteur: - encadrement: - valeur: taux participation employeur * valeur - participation employeur . plafond - plancher: 0€ + allègement: + assiette: taux participation employeur * montant unitaire + abattement: participation employeur . plafond assiette: titres-restaurant par mois contrat salarié . frais professionnels . titres-restaurant . participation employeur . plafond: - formule: 5.36€ + formule: 5.55€ + références: + urssaf.fr: https://www.urssaf.fr/portail/home/taux-et-baremes/frais-professionnels/les-titres-restaurant.html contrat salarié . frais professionnels . titres-restaurant . participation employeur: formule: @@ -80,19 +82,20 @@ contrat salarié . frais professionnels . titres-restaurant . participation empl facteur: titres-restaurant par mois assiette: encadrement: - valeur: taux participation employeur * valeur + valeur: taux participation employeur * montant unitaire plafond: plafond contrat salarié . frais professionnels . titres-restaurant . participation salarié: - formule: valeur * titres-restaurant par mois - participation employeur + titre: Titres-restaurant + formule: montant unitaire * titres-restaurant par mois - participation employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question: Combien de titres-restaurant recevez-vous par mois ? par défaut: 19 unité: titres-restaurant/mois -contrat salarié . frais professionnels . titres-restaurant . valeur: - question: Quelle est la valeur du titre-restaurant ? +contrat salarié . frais professionnels . titres-restaurant . montant unitaire: + question: Quelle est le montant du titre-restaurant ? par défaut: 8 unité: €/titre-restaurant @@ -1281,7 +1284,6 @@ contrat salarié . rémunération . net imposable: somme: - frais professionnels . indemnité kilométrique vélo - (- frais professionnels . titres-restaurant . participation employeur) - - frais professionnels . titres-restaurant . participation salarié - prime d'impatriation - exonération d'impôt des stagiaires et apprentis - heures supplémentaires et complémentaires défiscalisées @@ -1335,7 +1337,7 @@ contrat salarié . rémunération . net: Aussi appelé salaire net à payer (c'était du moins le cas avant l'impôt à la source). Cette somme peut varier en fonction de décisions politiques (augmentation ou diminution des cotisations) alors que le salaire brut est contractuel (pour le changer, il faut signer un avenant au contrat). - formule: rémunération . net de cotisations - avantages en nature . montant + formule: rémunération . net de cotisations - avantages en nature . montant - frais professionnels . titres-restaurant . participation salarié contrat salarié . rémunération . net après impôt: titre: Salaire net après impôt diff --git a/source/components/PaySlip.tsx b/source/components/PaySlip.tsx index 85cc4c4e5..9d7498ccd 100644 --- a/source/components/PaySlip.tsx +++ b/source/components/PaySlip.tsx @@ -4,26 +4,33 @@ import { findRuleByDottedName, getRuleFromAnalysis } from 'Engine/rules' import React, { Fragment, useContext } from 'react' import { Trans } from 'react-i18next' import { useSelector } from 'react-redux' -import { analysisWithDefaultsSelector, parsedRulesSelector } from 'Selectors/analyseSelectors' +import { + analysisWithDefaultsSelector, + parsedRulesSelector +} from 'Selectors/analyseSelectors' import { analysisToCotisationsSelector } from 'Selectors/ficheDePaieSelectors' import './PaySlip.css' import { Line, SalaireBrutSection, SalaireNetSection } from './PaySlipSections' import RuleLink from './RuleLink' export default function PaySlip() { - const { lightestColor } = useContext(ThemeColorsContext) - const cotisations = useSelector(analysisToCotisationsSelector) - const analysis = useSelector(analysisWithDefaultsSelector) - const parsedRules = useSelector(parsedRulesSelector) - let getRule = getRuleFromAnalysis(analysis) + const { lightestColor } = useContext(ThemeColorsContext) + const cotisations = useSelector(analysisToCotisationsSelector) + const analysis = useSelector(analysisWithDefaultsSelector) + const parsedRules = useSelector(parsedRulesSelector) + let getRule = getRuleFromAnalysis(analysis) - const heuresSupplémentaires = getRule( - 'contrat salarié . temps de travail . heures supplémentaires' - ) - return ( -
-
- - {heuresSupplémentaires?.nodeValue > 0 && ( - - )} -
+ > +
+ + {heuresSupplémentaires?.nodeValue > 0 && ( + + )} +
- - {/* Section cotisations */} -
-

- Cotisations sociales -

-

- Part employeur -

-

- Part salarié -

- {cotisations.map(([brancheDottedName, cotisationList]) => { - let branche = findRuleByDottedName(parsedRules, brancheDottedName) - return ( - -
- -
- {cotisationList.map(cotisation => ( - - - - {cotisation.montant.partPatronale} - - - {cotisation.montant.partSalariale} - - - ))} -
- ) - })} + + {/* Section cotisations */} +
+

+ Cotisations sociales +

+

+ Part employeur +

+

+ Part salarié +

+ {cotisations.map(([brancheDottedName, cotisationList]) => { + let branche = findRuleByDottedName(parsedRules, brancheDottedName) + return ( + +
+ +
+ {cotisationList.map(cotisation => ( + + + + {cotisation.montant.partPatronale} + + + {cotisation.montant.partSalariale} + + + ))} +
+ ) + })} - {/* Total cotisation */} -
- Total des retenues -
- - - {/* Salaire chargé */} - - - {/* Titres-restaurant */} - -
- {/* Section salaire net */} - -
- ) + {/* Titres-restaurant */} + {retenueTitresRestaurant.nodeValue > 0 && ( + + + + {0} + + + {retenueTitresRestaurant.nodeValue} + + + )} + + {/**/} + + {/* Total cotisation */} +
+ Total des retenues +
+ + + {/* Salaire chargé */} + + +
+ {/* Section salaire net */} + + + ) } diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index ddaf4c491..86f71bf9d 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -328,7 +328,7 @@ contrat salarié . CDD . contrat jeune vacances: description.fr: >- Aussi appelé CDD vendanges. Contrat conclu avec un jeune pendant ses vacances scolaires ou universitaires. - note.en: "[automatic] That's not a reason for a fixed-term contract." + note.en: '[automatic] That''s not a reason for a fixed-term contract.' note.fr: Ce n'est pas un motif de CDD. question.en: Is it a young holiday contract? question.fr: Est-ce un contrat jeune vacances ? @@ -706,7 +706,7 @@ contrat salarié . aides employeur: France. Découvrez-les sur le [portail officiel](http://www.aides-entreprises.fr). résumé.en: Deferred aids available to the employer. - résumé.fr: "Pour l'employeur, différées dans le temps" + résumé.fr: 'Pour l''employeur, différées dans le temps' titre.en: deferred employer aids titre.fr: aides à l'embauche contrat salarié . aides employeur . aide à l'embauche d'apprentis: @@ -798,7 +798,7 @@ contrat salarié . apprentissage . diplôme préparé . niveau supérieur au bac titre.fr: Diplôme d'un niveau supérieur au bac contrat salarié . assiette CSG et CRDS: note.en: '[automatic] This plate is complex, this version is only a simplification.' - note.fr: "Cette assiette est complexe, cette version n'est qu'une simplification." + note.fr: 'Cette assiette est complexe, cette version n''est qu''une simplification.' titre.en: CSG and CRDS base titre.fr: assiette CSG et CRDS contrat salarié . assiette CSG et CRDS . assiette abattue: @@ -993,12 +993,12 @@ contrat salarié . convention collective: 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] " + question.fr: 'Quelle convention collective est applicable à l''entreprise ? [beta] ' titre.en: convention collective titre.fr: convention collective contrat salarié . convention collective . HCR: description.en: 'The company is a hotel, café, restaurant or similar.' - description.fr: "L'entreprise est un hôtel, café, restaurant ou assimilé." + description.fr: 'L''entreprise est un hôtel, café, restaurant ou assimilé.' titre.en: 'hotels, cafés restaurants HCR (beta)' titre.fr: 'hôtels, cafés restaurants HCR (beta)' contrat salarié . convention collective . HCR . majoration heures supplémentaires: @@ -1513,6 +1513,11 @@ 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 . montant unitaire: + question.en: '[automatic] How much is the restaurant voucher?' + question.fr: Quelle est le montant du titre-restaurant ? + titre.en: '[automatic] unitary amount' + titre.fr: montant unitaire contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: titre.en: '[automatic] non-exempt portion' titre.fr: part non exonérée de cotisation @@ -1523,10 +1528,12 @@ contrat salarié . frais professionnels . titres-restaurant . participation empl titre.en: '[automatic] ceiling' titre.fr: plafond contrat salarié . frais professionnels . titres-restaurant . participation salarié: - titre.en: '[automatic] employee participation' - titre.fr: participation salarié + titre.en: '[automatic] Restaurant vouchers' + titre.fr: Titres-restaurant 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.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 @@ -1538,7 +1545,7 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation description.fr: >- Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et de 60% maximum - question.en: "[automatic] What is the employer's paid portion?" + question.en: '[automatic] What is the employer''s paid portion?' question.fr: Quelle est la participation de l'employeur ? suggestions.50%.en: '[automatic] 50%' suggestions.50%.fr: 50% @@ -1551,11 +1558,6 @@ contrat salarié . frais professionnels . titres-restaurant . titres-restaurant question.fr: Combien de titres-restaurant recevez-vous par mois ? titre.en: '[automatic] meal vouchers per month' titre.fr: titres-restaurant par mois -contrat salarié . frais professionnels . titres-restaurant . valeur: - question.en: '[automatic] What is the value of the restaurant voucher?' - question.fr: Quelle est la valeur du titre-restaurant ? - titre.en: '[automatic] value' - titre.fr: valeur contrat salarié . indemnités salarié: titre.en: Employee benefits titre.fr: indemnités salarié @@ -1952,7 +1954,7 @@ contrat salarié . réduction générale . assiette: titre.fr: Assiette de la réduction générale contrat salarié . réduction générale . assiette . part de la cotisation ATMP: note.en: '[automatic] In practice, the ATMP is always higher than 0.78%.' - note.fr: "En pratique, l'ATMP est toujours supérieure à 0.78%" + note.fr: 'En pratique, l''ATMP est toujours supérieure à 0.78%' titre.en: share of ATMP contribution titre.fr: part de la cotisation ATMP contrat salarié . réduction générale . multiplicateur: @@ -3691,7 +3693,7 @@ dirigeant . rattachement CIPAV: note.en: >- [automatic] for the time being, we have only retained the CIPAV for the calculations. - note.fr: "pour l'instant, nous n'avons retenu que la CIPAV pour les calculs" + note.fr: 'pour l''instant, nous n''avons retenu que la CIPAV pour les calculs' titre.en: CIPAV attachment titre.fr: rattachement CIPAV dirigeant . rattachement CIPAV . retraite complémentaire: @@ -4021,7 +4023,7 @@ entreprise . catégorie d'activité . restauration ou hébergement: titre.fr: restauration ou hébergement entreprise . catégorie d'activité . service ou vente: question.en: 'Is it a service activity, or the purchase and sale of goods?' - question.fr: "Est-ce une activité de prestation de service, ou de l'achat-vente de biens ?" + question.fr: 'Est-ce une activité de prestation de service, ou de l''achat-vente de biens ?' titre.en: service or sale titre.fr: service ou vente entreprise . catégorie d'activité . service ou vente . service: @@ -4140,7 +4142,7 @@ 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.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 @@ -4357,7 +4359,7 @@ entreprise . établissement bancaire: L'entreprise est un établissement bancaire, financier ou d'assurance. Elle est non assujettie à la TVA. question.en: 'Is it a banking, financial or insurance institution?' - question.fr: "S'agit-il d'un établissement bancaire, financier, d'assurance ?" + question.fr: 'S''agit-il d''un établissement bancaire, financier, d''assurance ?' titre.en: banking institution titre.fr: établissement bancaire impôt: From e7a80e58abef8acb8e85e738d0fe630438317309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Mon, 10 Feb 2020 14:43:18 +0100 Subject: [PATCH 09/14] =?UTF-8?q?=F0=9F=90=9B=20Correction=20de=20la=20r?= =?UTF-8?q?=C3=A8gle=20de=20plafond?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/salarié.yaml | 55 +++++++++++-------- source/components/PaySlip.tsx | 6 +- source/locales/rules-en.yaml | 22 ++++---- .../__snapshots__/simulations.jest.js.snap | 6 ++ test/regressions/simulations-salarié.yaml | 11 ++++ 5 files changed, 62 insertions(+), 38 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 7adc6e192..473f5abc7 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -46,9 +46,27 @@ contrat salarié . frais professionnels: formule: somme: - indemnité kilométrique vélo - - titres-restaurant . participation employeur + - titres-restaurant .employeur contrat salarié . frais professionnels . titres-restaurant: + applicable si: actif + formule: + multiplication: + assiette: montant unitaire + facteur: titres-restaurant par mois + composantes: + - attributs: + dû par: employeur + taux: taux participation employeur + - attributs: + dû par: salarié + taux: 100% - taux participation employeur + +# Hack: le filtre .salarié ne fonctionne pas dans la méthode getRule dans l'UI. On crée une règle spécifique juste pour pouvoir récupérer la valeur dans l'UI +contrat salarié . frais professionnels . titres-restaurant . part salarié: + formule: titres-restaurant .salarié + +contrat salarié . frais professionnels . titres-restaurant . actif: icônes: 🍽️ description: >- Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. @@ -62,32 +80,19 @@ contrat salarié . frais professionnels . titres-restaurant: question: Le salarié reçoit-il des titres-restaurant ? par défaut: non -contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: +contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: formule: multiplication: - facteur: - allègement: - assiette: taux participation employeur * montant unitaire - abattement: participation employeur . plafond assiette: titres-restaurant par mois - -contrat salarié . frais professionnels . titres-restaurant . participation employeur . plafond: - formule: 5.55€ - références: + facteur: 5.55 €/titres-restaurant + références: urssaf.fr: https://www.urssaf.fr/portail/home/taux-et-baremes/frais-professionnels/les-titres-restaurant.html -contrat salarié . frais professionnels . titres-restaurant . participation employeur: +contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: formule: - multiplication: - facteur: titres-restaurant par mois - assiette: - encadrement: - valeur: taux participation employeur * montant unitaire - plafond: plafond - -contrat salarié . frais professionnels . titres-restaurant . participation salarié: - titre: Titres-restaurant - formule: montant unitaire * titres-restaurant par mois - participation employeur + allègement: + assiette: titres-restaurant .employeur + abattement: plafond d'exonération employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question: Combien de titres-restaurant recevez-vous par mois ? @@ -1283,7 +1288,7 @@ contrat salarié . rémunération . net imposable: abattement: somme: - frais professionnels . indemnité kilométrique vélo - - (- frais professionnels . titres-restaurant . participation employeur) + - (- frais professionnels . titres-restaurant .employeur) - prime d'impatriation - exonération d'impôt des stagiaires et apprentis - heures supplémentaires et complémentaires défiscalisées @@ -1337,7 +1342,11 @@ contrat salarié . rémunération . net: Aussi appelé salaire net à payer (c'était du moins le cas avant l'impôt à la source). Cette somme peut varier en fonction de décisions politiques (augmentation ou diminution des cotisations) alors que le salaire brut est contractuel (pour le changer, il faut signer un avenant au contrat). - formule: rémunération . net de cotisations - avantages en nature . montant - frais professionnels . titres-restaurant . participation salarié + formule: + somme: + - rémunération . net de cotisations + - (- avantages en nature . montant) + - (- frais professionnels . titres-restaurant .salarié) contrat salarié . rémunération . net après impôt: titre: Salaire net après impôt diff --git a/source/components/PaySlip.tsx b/source/components/PaySlip.tsx index 9d7498ccd..a0cf184e4 100644 --- a/source/components/PaySlip.tsx +++ b/source/components/PaySlip.tsx @@ -24,7 +24,7 @@ export default function PaySlip() { 'contrat salarié . temps de travail . heures supplémentaires' ) const retenueTitresRestaurant = getRule( - 'contrat salarié . frais professionnels . titres-restaurant . participation salarié' + 'contrat salarié . frais professionnels . titres-restaurant' ) console.log(retenueTitresRestaurant) return ( @@ -100,7 +100,7 @@ export default function PaySlip() { })} {/* Titres-restaurant */} - {retenueTitresRestaurant.nodeValue > 0 && ( + {retenueTitresRestaurant?.nodeValue > 0 && ( )} - {/**/} - {/* Total cotisation */}
Total des retenues diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index 86f71bf9d..f4d55f98d 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -1487,6 +1487,9 @@ contrat salarié . frais professionnels . indemnité kilométrique vélo . plafo titre.en: exemption cap titre.fr: plafond d'exonération contrat salarié . frais professionnels . titres-restaurant: + titre.en: '[automatic] restaurant vouchers' + titre.fr: titres-restaurant +contrat salarié . frais professionnels . titres-restaurant . actif: description.en: >- [automatic] The meal voucher is a special "meal" payment voucher issued by the employer to the employee. @@ -1511,8 +1514,8 @@ contrat salarié . frais professionnels . titres-restaurant: Ce titre peut être émis sur support papier ou sous forme dématérialisée. question.en: '[automatic] Does the employee receive luncheon vouchers?' question.fr: Le salarié reçoit-il des titres-restaurant ? - titre.en: '[automatic] restaurant vouchers' - titre.fr: titres-restaurant + titre.en: '[automatic] active' + titre.fr: actif contrat salarié . frais professionnels . titres-restaurant . montant unitaire: question.en: '[automatic] How much is the restaurant voucher?' question.fr: Quelle est le montant du titre-restaurant ? @@ -1521,15 +1524,12 @@ contrat salarié . frais professionnels . titres-restaurant . montant unitaire: contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: titre.en: '[automatic] non-exempt portion' titre.fr: part non exonérée de cotisation -contrat salarié . frais professionnels . titres-restaurant . participation employeur: - titre.en: '[automatic] employer contribution' - titre.fr: participation employeur -contrat salarié . frais professionnels . titres-restaurant . participation employeur . plafond: - titre.en: '[automatic] ceiling' - titre.fr: plafond -contrat salarié . frais professionnels . titres-restaurant . participation salarié: - titre.en: '[automatic] Restaurant vouchers' - titre.fr: Titres-restaurant +contrat salarié . frais professionnels . titres-restaurant . part salarié: + titre.en: '[automatic] employee share' + titre.fr: part salarié +contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: + titre.en: '[automatic] employer exemption limit' + titre.fr: plafond d'exonération employeur 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 diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap index acdb6b528..b4da4fa55 100644 --- a/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/test/regressions/__snapshots__/simulations.jest.js.snap @@ -224,6 +224,12 @@ exports[`calculate simulations-salarié: cdd 2`] = `"[2591,0,0,2000,1599,1557]" exports[`calculate simulations-salarié: cdd 3`] = `"[3410,0,0,2400,1984,1900]"`; +exports[`calculate simulations-salarié: frais pro 1`] = `"[2443,0,0,2000,1530,1486]"`; + +exports[`calculate simulations-salarié: frais pro 2`] = `"[2434,0,0,2000,1522,1476]"`; + +exports[`calculate simulations-salarié: frais pro 3`] = `"[2385,0,0,2000,1545,1489]"`; + exports[`calculate simulations-salarié: heures supplémentaires et complémentaires 1`] = `"[2583,0,0,2000,1636,1599]"`; exports[`calculate simulations-salarié: heures supplémentaires et complémentaires 2`] = `"[3105,0,0,2000,2009,1965]"`; diff --git a/test/regressions/simulations-salarié.yaml b/test/regressions/simulations-salarié.yaml index 46d178bae..505b63d55 100644 --- a/test/regressions/simulations-salarié.yaml +++ b/test/regressions/simulations-salarié.yaml @@ -163,3 +163,14 @@ JEI: - contrat salarié . rémunération . brut de base: 4000 dirigeant: 'assimilé salarié' contrat salarié . statut JEI: true +frais pro: + - contrat salarié . rémunération . brut de base: 2000 + contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 + - contrat salarié . rémunération . brut de base: 2000 + contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 + contrat salarié . frais professionnels . titres-restaurant . montant unitaire: 10 + - contrat salarié . rémunération . brut de base: 2000 + contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: 75 From 4d9e7563f41ea3023bd123348e607c7b79b1c315 Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Wed, 12 Feb 2020 11:50:58 +0100 Subject: [PATCH 10/14] =?UTF-8?q?=F0=9F=90=9B=20Finalise=20les=20titres-re?= =?UTF-8?q?staurants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Répare l'affichage des titres-restaurant sur la fiche de paie * Correction de coquilles dans les questions * Déplace la question oui/non dans le premier niveau et le calcul dans une règle enfant "montant" --- publicode/rules/salarié.yaml | 44 +++++++++---------- source/components/PaySlip.tsx | 4 +- source/locales/rules-en.yaml | 23 +++++----- .../__snapshots__/simulations.jest.js.snap | 2 +- test/regressions/simulations-salarié.yaml | 6 +-- 5 files changed, 36 insertions(+), 43 deletions(-) diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 473f5abc7..55f7caa9f 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -46,27 +46,9 @@ contrat salarié . frais professionnels: formule: somme: - indemnité kilométrique vélo - - titres-restaurant .employeur + - titres-restaurant . montant .employeur contrat salarié . frais professionnels . titres-restaurant: - applicable si: actif - formule: - multiplication: - assiette: montant unitaire - facteur: titres-restaurant par mois - composantes: - - attributs: - dû par: employeur - taux: taux participation employeur - - attributs: - dû par: salarié - taux: 100% - taux participation employeur - -# Hack: le filtre .salarié ne fonctionne pas dans la méthode getRule dans l'UI. On crée une règle spécifique juste pour pouvoir récupérer la valeur dans l'UI -contrat salarié . frais professionnels . titres-restaurant . part salarié: - formule: titres-restaurant .salarié - -contrat salarié . frais professionnels . titres-restaurant . actif: icônes: 🍽️ description: >- Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. @@ -80,6 +62,20 @@ contrat salarié . frais professionnels . titres-restaurant . actif: question: Le salarié reçoit-il des titres-restaurant ? par défaut: non +contrat salarié . frais professionnels . titres-restaurant . montant: + titre: Titres-restaurant + formule: + multiplication: + assiette: montant unitaire + facteur: titres-restaurant par mois + composantes: + - attributs: + dû par: employeur + taux: taux participation employeur + - attributs: + dû par: salarié + taux: 100% - taux participation employeur + contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: formule: multiplication: @@ -91,16 +87,16 @@ contrat salarié . frais professionnels . titres-restaurant . plafond d'exonéra contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: formule: allègement: - assiette: titres-restaurant .employeur + assiette: montant .employeur abattement: plafond d'exonération employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: - question: Combien de titres-restaurant recevez-vous par mois ? + question: Combien de titres-restaurants recevez-vous par mois ? par défaut: 19 unité: titres-restaurant/mois contrat salarié . frais professionnels . titres-restaurant . montant unitaire: - question: Quelle est le montant du titre-restaurant ? + question: Quelle est la valeur unitaire du titre-restaurant ? par défaut: 8 unité: €/titre-restaurant @@ -1126,7 +1122,7 @@ contrat salarié . rémunération . avantages en nature . nourriture: L'employeur fournit-il gratuitement les repas ? par défaut: non description: > - Les titres-restaurant ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. + Les titres-restaurants ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. contrat salarié . rémunération . avantages en nature . nourriture . montant: titre: nourriture @@ -1346,7 +1342,7 @@ contrat salarié . rémunération . net: somme: - rémunération . net de cotisations - (- avantages en nature . montant) - - (- frais professionnels . titres-restaurant .salarié) + - (- frais professionnels . titres-restaurant . montant .salarié) contrat salarié . rémunération . net après impôt: titre: Salaire net après impôt diff --git a/source/components/PaySlip.tsx b/source/components/PaySlip.tsx index a0cf184e4..2f9cfa97d 100644 --- a/source/components/PaySlip.tsx +++ b/source/components/PaySlip.tsx @@ -24,9 +24,9 @@ export default function PaySlip() { 'contrat salarié . temps de travail . heures supplémentaires' ) const retenueTitresRestaurant = getRule( - 'contrat salarié . frais professionnels . titres-restaurant' + 'contrat salarié . frais professionnels . titres-restaurant . montant.salarié' ) - console.log(retenueTitresRestaurant) + return (
- [automatic] The meal voucher is a special "meal" payment voucher issued by the employer to the employee. @@ -1500,7 +1497,7 @@ contrat salarié . frais professionnels . titres-restaurant . actif: - of directly consumable food preparations, - of fruits and vegetables. - This voucher can be issued in paper or dematerialised form. + This security can be issued in paper or dematerialised form. description.fr: >- Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. @@ -1514,19 +1511,19 @@ contrat salarié . frais professionnels . titres-restaurant . actif: Ce titre peut être émis sur support papier ou sous forme dématérialisée. question.en: '[automatic] Does the employee receive luncheon vouchers?' question.fr: Le salarié reçoit-il des titres-restaurant ? - titre.en: '[automatic] active' - titre.fr: actif + titre.en: '[automatic] restaurant vouchers' + titre.fr: titres-restaurant +contrat salarié . frais professionnels . titres-restaurant . montant: + titre.en: '[automatic] Restaurant vouchers' + titre.fr: Titres-restaurant contrat salarié . frais professionnels . titres-restaurant . montant unitaire: - question.en: '[automatic] How much is the restaurant voucher?' - question.fr: Quelle est le montant du titre-restaurant ? + question.en: '[automatic] What is the unit value of the restaurant voucher?' + question.fr: Quelle est la valeur unitaire du titre-restaurant ? titre.en: '[automatic] unitary amount' titre.fr: montant unitaire contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: titre.en: '[automatic] non-exempt portion' titre.fr: part non exonérée de cotisation -contrat salarié . frais professionnels . titres-restaurant . part salarié: - titre.en: '[automatic] employee share' - titre.fr: part salarié contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: titre.en: '[automatic] employer exemption limit' titre.fr: plafond d'exonération employeur @@ -1555,7 +1552,7 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation titre.fr: taux participation employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: question.en: '[automatic] How many restaurant vouchers do you receive per month?' - question.fr: Combien de titres-restaurant recevez-vous par mois ? + question.fr: Combien de titres-restaurants recevez-vous par mois ? titre.en: '[automatic] meal vouchers per month' titre.fr: titres-restaurant par mois contrat salarié . indemnités salarié: @@ -2134,7 +2131,7 @@ contrat salarié . rémunération . avantages en nature . nourriture: [automatic] Restaurant vouchers are not considered a benefit in kind but a reimbursement of expenses. description.fr: > - Les titres-restaurant ne sont pas considérés comme un avantage en nature + Les titres-restaurants ne sont pas considérés comme un avantage en nature mais comme un remboursement de frais. question.en: | Does the employer provide free meals? diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap index b4da4fa55..65fee25fd 100644 --- a/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/test/regressions/__snapshots__/simulations.jest.js.snap @@ -222,7 +222,7 @@ exports[`calculate simulations-salarié: cdd 1`] = `"[2508,0,0,2000,1561,1524]" exports[`calculate simulations-salarié: cdd 2`] = `"[2591,0,0,2000,1599,1557]"`; -exports[`calculate simulations-salarié: cdd 3`] = `"[3410,0,0,2400,1984,1900]"`; +exports[`calculate simulations-salarié: cdd 3`] = `"[3394,0,0,2400,1967,1883]"`; exports[`calculate simulations-salarié: frais pro 1`] = `"[2443,0,0,2000,1530,1486]"`; diff --git a/test/regressions/simulations-salarié.yaml b/test/regressions/simulations-salarié.yaml index 505b63d55..53d99a007 100644 --- a/test/regressions/simulations-salarié.yaml +++ b/test/regressions/simulations-salarié.yaml @@ -165,12 +165,12 @@ JEI: contrat salarié . statut JEI: true frais pro: - contrat salarié . rémunération . brut de base: 2000 - contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant: true contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 - contrat salarié . rémunération . brut de base: 2000 - contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant: true contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 contrat salarié . frais professionnels . titres-restaurant . montant unitaire: 10 - contrat salarié . rémunération . brut de base: 2000 - contrat salarié . frais professionnels . titres-restaurant . actif: true + contrat salarié . frais professionnels . titres-restaurant: true contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: 75 From e252a2d828233da0691f444fe9d872052a00cd74 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 12 Feb 2020 15:37:20 +0100 Subject: [PATCH 11/14] =?UTF-8?q?:hammer::fire:=20refactor=20la=20gestion?= =?UTF-8?q?=20des=20frais=20professionnels=20et=20am=C3=A9liore=20l'impl?= =?UTF-8?q?=C3=A9mentation=20des=20titre-restaurants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/dirigeant.yaml | 1 + publicode/rules/salarié.yaml | 182 ++++++++++-------- source/components/PaySlip.tsx | 27 --- source/components/PaySlipSections.js | 42 ++-- source/components/TargetSelection.tsx | 28 ++- .../components/simulationConfigs/salarié.yaml | 7 +- .../__snapshots__/simulations.jest.js.snap | 12 ++ test/regressions/simulations-salarié.yaml | 23 ++- 8 files changed, 180 insertions(+), 142 deletions(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index bf390b9b7..c01814593 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -23,6 +23,7 @@ dirigeant . assimilé salarié: - contrat salarié . rémunération . primes - contrat salarié . rémunération . primes . fin d'année - contrat salarié . rémunération . primes . activité + - contrat salarié . frais professionnels - contrat salarié . chômage - contrat salarié . réduction générale - contrat salarié . allocations familiales . taux réduit diff --git a/publicode/rules/salarié.yaml b/publicode/rules/salarié.yaml index 55f7caa9f..c31e7745f 100644 --- a/publicode/rules/salarié.yaml +++ b/publicode/rules/salarié.yaml @@ -34,28 +34,55 @@ contrat salarié . CDI: formule: contrat salarié = 'CDI' contrat salarié . frais professionnels: + titre: remboursement de frais description: >- - Les frais professionnels correspondent à des dépenses engagées par le salarié pour les besoins de son activité professionnelle. Ces frais sont ensuite remboursés par l’employeur. + Les frais professionnels correspondent à des dépenses engagées par le + salarié pour les besoins de son activité professionnelle. Ces frais sont + ensuite remboursés par l’employeur. + Le dédommagement de ces frais peut prendre la forme : + - d’un remboursement des dépenses réelles sur justificatifs ; + - d’un versement d’allocations forfaitaires ; + - de l’application d’une déduction forfaitaire spécifique sur le salaire soumis à cotisations ; cette possibilité n’étant ouverte qu’à certaines professions. - Les frais professionnels sont exclus de la base de calcul des cotisations de Sécurité sociale. Ils sont aussi exclus de la base CSG-CRDS. + + Les frais professionnels sont généralement exclus de la base de calcul des + cotisations de Sécurité sociale et de la CSG-CRDS, sauf en cas de + dépassement de plafond pour les remboursement forfaitaires (indemnité + kilométrique vélo, frais de panier, titre-restaurants...). formule: somme: - - indemnité kilométrique vélo + - indemnité kilométrique vélo . montant - titres-restaurant . montant .employeur +contrat salarié . frais professionnels . part déductible: + titre: Frais professionnels déductibles + description: >- + Part des frais déduite de l'assiette de cotisation sociale et pour le calcul + de l'impôt sur le revenu. + formule: + somme: + - indemnité kilométrique vélo . part déductible + - titres-restaurant . part déductible + contrat salarié . frais professionnels . titres-restaurant: icônes: 🍽️ description: >- - Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. + Le titre-restaurant est un titre spécial de paiement « des repas » remis par + l’employeur au salarié. + + + Le salarié ne peut utiliser les titres-restaurant en sa possession que pour + régler la consommation : - Le salarié ne peut utiliser les titres-restaurant en sa possession que pour régler la consommation : - d’un repas, + - de préparations alimentaires directement consommables, + - de fruits et légumes. Ce titre peut être émis sur support papier ou sous forme dématérialisée. @@ -76,32 +103,40 @@ contrat salarié . frais professionnels . titres-restaurant . montant: dû par: salarié taux: 100% - taux participation employeur -contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: +contrat salarié . frais professionnels . titres-restaurant . part déductible: + titre: Titres-restaurant (déductible) formule: - multiplication: - assiette: titres-restaurant par mois - facteur: 5.55 €/titres-restaurant + encadrement: + valeur: montant .employeur + plafond: + multiplication: + assiette: titres-restaurant par mois + facteur: 5.55 €/titres-restaurant références: urssaf.fr: https://www.urssaf.fr/portail/home/taux-et-baremes/frais-professionnels/les-titres-restaurant.html -contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: - formule: - allègement: - assiette: montant .employeur - abattement: plafond d'exonération employeur - contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: - question: Combien de titres-restaurants recevez-vous par mois ? + question: Combien de titres-restaurants sont distribués au salarié ? par défaut: 19 unité: titres-restaurant/mois contrat salarié . frais professionnels . titres-restaurant . montant unitaire: question: Quelle est la valeur unitaire du titre-restaurant ? + description: >- + Il n'y a pas de valeur maximale ou minimale pour les titres-restaurant. En + revanche, pour bénéficier de l'exonération de cotisation, il ne faut pas + dépasser 11,10€ par titre en 2020. par défaut: 8 + suggestions: + faible: 6 + moyenne: 8 + max exonéré: 11.10 unité: €/titre-restaurant contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: - description: Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et de 60% maximum + description: >- + Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et + de 60% maximum. question: Quelle est la participation de l'employeur ? par défaut: 50 unité: '%' @@ -118,45 +153,6 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation contrat salarié . frais professionnels . indemnité kilométrique vélo: icônes: 🚴 - description: | - Indemnité introduite en 2015 pour inciter l'usage du vélo pour aller au travail. - - Nous avons retenu une implémentation simplifiée de cette règle : nous fixons cette indemnité à 200€ annuels, car c'est le montant maximum donnant lieu aux exonérations de cotisations sociales et d'impôt. C'est aussi un montant tout à fait accessible, correspondant approximativement à 2km aller et 2km retour pour 218 jours travaillés dans l'année. Elle peut être supérieure, mais l'employeur n'a alors aucune incitation à verser ce supplément : la part au-dessus de 200€ devient une prime classique. - unité: €/an - - applicable si: active - formule: - encadrement: - valeur: distance annuelle * indemnité kilométrique - plafond: plafond d'exonération - références: - fiche URSSAF: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-elements-a-prendre-en-compte/les-frais-professionnels/les-frais-de-transport/trajet-domicilelieu-de-travail/prise-en-charge-facultative-des/indemnites-kilometriques-velo.html - fiche service-public: https://www.service-public.fr/professionnels-entreprises/vosdroits/F33808 - exemples: - - nom: active - situation: - active: oui - valeur attendue: 200 - -contrat salarié . frais professionnels . indemnité kilométrique vélo . plafond d'exonération: - formule: 200 €/an - -contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité kilométrique: - formule: 0.25 €/km - -contrat salarié . frais professionnels . indemnité kilométrique vélo . distance annuelle: - unité: km/an - formule: distance journalière * jours travaillés - -contrat salarié . frais professionnels . indemnité kilométrique vélo . distance journalière: - description: Une estimation basse de la distance parcourue à vélo par un salarié pour se rendre à son travail. - formule: 4 km/jour - -contrat salarié . frais professionnels . indemnité kilométrique vélo . jours travaillés: - formule: 218 jours/an - -contrat salarié . frais professionnels . indemnité kilométrique vélo . active: - titre: indemnité vélo active question: Le salarié profite-t-il de l'indemnité kilométrique vélo pour se rendre au travail ? description: | Cette indemnité n'est pour l'instant pas obligatoire. @@ -170,6 +166,31 @@ contrat salarié . frais professionnels . indemnité kilométrique vélo . activ Cette indemnité est exonérée de cotisations sociales et d'impôt sur le revenu. Pour verser une prime de salaire équivalente à son salarié sans ce dispositif, **l'employeur devrait débourser près de 500€ pour un salaire médian**. par défaut: non +contrat salarié . frais professionnels . indemnité kilométrique vélo . montant: + titre: indemnité kilométrique vélo + unité: €/an + formule: + multiplication: + assiette: distance mensuelle + facteur: 0.25 €/km + +contrat salarié . frais professionnels . indemnité kilométrique vélo . part déductible: + titre: indemnité kilométrique vélo (déductible) + formule: + encadrement: + valeur: montant + plafond: 200 €/an + +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance mensuelle: + unité: km/mois + question: >- + Quelle est la distance parcourue en vélo chaque mois pour le trajet domicile / travail ? + suggestions: + 2 km/jour: 40 + 5 km/jour: 100 + 10 km/jour: 200 + par défaut: 80 + contrat salarié . CDD . taxe forfaitaire sur les CDD d'usage: description: | À compter du 1er janvier 2020, l'employeur doit s'acquiter d'une taxe @@ -362,7 +383,6 @@ contrat salarié . CDD . prime de fin de contrat: - rémunération . avantages en nature . montant - rémunération . primes - rémunération . heures supplémentaires - - frais professionnels . indemnité kilométrique vélo taux: 10% exemples: @@ -656,7 +676,7 @@ contrat salarié . CDD . contrat jeune vacances: note: Ce n'est pas un motif de CDD. par défaut: non -contrat salarié . CDD . indemnités salarié CDD: +contrat salarié . CDD . indemnités salarié: description: Cotisations employeur spécifiques au CDD formule: somme: @@ -788,8 +808,7 @@ contrat salarié . cotisations . assiette: assiette: rémunération . brut abattement: somme: - - frais professionnels - - (- frais professionnels . titres-restaurant . part non exonérée de cotisation) + - frais professionnels . part déductible - stage . gratification minimale contrat salarié . cotisations . assiette . salariale: @@ -958,7 +977,7 @@ contrat salarié . rémunération . primes . fin d'année: travail. formule: multiplication: - assiette: assiette de vérification du SMIC [€/mois] * temps de travail . quotité de travail / 1 an + assiette: assiette de vérification du SMIC * temps de travail . quotité de travail / 1 an facteur: prime de fin d'année en mois contrat salarié . rémunération . primes . fin d'année . prime de fin d'année en mois: @@ -980,15 +999,15 @@ contrat salarié . rémunération . brut: description: Toutes les sommes versées au salarié sous forme monétaire en échange de son travail. titre: Rémunération brute unité par défaut: €/mois - formule: somme: - rémunération . brut de base - avantages en nature . montant - primes - - indemnités salarié + - CDD . indemnités salarié - heures supplémentaires - heures complémentaires + - frais professionnels contrat salarié . rémunération . heures supplémentaires: titre: rémunération heures supplémentaires @@ -1037,11 +1056,10 @@ contrat salarié . rémunération . avantages en nature: par défaut: non contrat salarié . rémunération . avantages en nature . montant: - titre: Avantages en nature (montant) + titre: Avantages en nature description: > Les avantages en nature sont soumis aux cotisations et à l'impôt sur le revenu. Ils sont pris en compte pour vérifier que le salaire minimum est atteint. unité par défa: €/mois - formule: somme: - nourriture . montant @@ -1066,6 +1084,7 @@ contrat salarié . rémunération . avantages en nature . autres: par défaut: non contrat salarié . rémunération . avantages en nature . autres . montant: + titre: autres question: > Quel est le montant de ces autres avantages ? par défaut: 0 @@ -1149,12 +1168,6 @@ contrat salarié . rémunération . avantages en nature . nourriture . repas par 1 par jour: 21 2 par jour: 42 -contrat salarié . indemnités salarié: - formule: - somme: - - CDD . indemnités salarié CDD - - frais professionnels . indemnité kilométrique vélo - contrat salarié . statut cadre: question: Le salarié a-t-il le statut cadre ? description: >- @@ -1283,8 +1296,7 @@ contrat salarié . rémunération . net imposable: assiette: base abattement: somme: - - frais professionnels . indemnité kilométrique vélo - - (- frais professionnels . titres-restaurant .employeur) + - frais professionnels . part déductible - prime d'impatriation - exonération d'impôt des stagiaires et apprentis - heures supplémentaires et complémentaires défiscalisées @@ -1332,17 +1344,25 @@ contrat salarié . rémunération . net: type: salaire question: Quel est le salaire net ? résumé: Salaire net avant impôt - description: | - C'est le montant que le salarié toucherait à la fin du mois avant de payer l'impôt sur le revenu. + description: >- + C'est le montant que le salarié toucherait à la fin du mois avant de payer + l'impôt sur le revenu. - Aussi appelé salaire net à payer (c'était du moins le cas avant l'impôt à la source). + Aussi appelé salaire net à payer (c'était du moins le cas avant l'impôt à la + source). + + + Cette somme peut varier en fonction de décisions politiques (augmentation ou + diminution des cotisations) alors que le salaire brut est contractuel (pour + le changer, il faut signer un avenant au contrat). - Cette somme peut varier en fonction de décisions politiques (augmentation ou diminution des cotisations) alors que le salaire brut est contractuel (pour le changer, il faut signer un avenant au contrat). formule: - somme: - - rémunération . net de cotisations - - (- avantages en nature . montant) - - (- frais professionnels . titres-restaurant . montant .salarié) + allègement: + assiette: rémunération . net de cotisations + abattement: + somme: + - avantages en nature . montant + - frais professionnels . titres-restaurant . montant contrat salarié . rémunération . net après impôt: titre: Salaire net après impôt diff --git a/source/components/PaySlip.tsx b/source/components/PaySlip.tsx index 2f9cfa97d..973557258 100644 --- a/source/components/PaySlip.tsx +++ b/source/components/PaySlip.tsx @@ -23,9 +23,6 @@ export default function PaySlip() { const heuresSupplémentaires = getRule( 'contrat salarié . temps de travail . heures supplémentaires' ) - const retenueTitresRestaurant = getRule( - 'contrat salarié . frais professionnels . titres-restaurant . montant.salarié' - ) return (
0 && ( - - - - {0} - - - {retenueTitresRestaurant.nodeValue} - - - )} - {/* Total cotisation */}
Total des retenues diff --git a/source/components/PaySlipSections.js b/source/components/PaySlipSections.js index c37f057d1..3b8659807 100644 --- a/source/components/PaySlipSections.js +++ b/source/components/PaySlipSections.js @@ -7,7 +7,8 @@ export let SalaireBrutSection = ({ getRule }) => { let avantagesEnNature = getRule( 'contrat salarié . rémunération . avantages en nature' ), - indemnitésSalarié = getRule('contrat salarié . indemnités salarié'), + indemnitésSalarié = getRule('contrat salarié . CDD . indemnités salarié'), + remboursementDeFrais = getRule('contrat salarié . frais professionnels'), heuresSupplémentaires = getRule( 'contrat salarié . rémunération . heures supplémentaires' ), @@ -27,11 +28,14 @@ export let SalaireBrutSection = ({ getRule }) => { )} /> )} - {!!indemnitésSalarié?.nodeValue && } {!!heuresSupplémentaires?.nodeValue && ( )} {!!primes?.nodeValue && } + {!!remboursementDeFrais?.nodeValue && ( + + )} + {!!indemnitésSalarié?.nodeValue && } {rémunérationBrute.nodeValue !== salaireDeBase.nodeValue && ( )} @@ -48,35 +52,33 @@ export let Line = ({ rule, ...props }) => ( export let SalaireNetSection = ({ getRule }) => { let avantagesEnNature = getRule( - 'contrat salarié . rémunération . avantages en nature' + 'contrat salarié . rémunération . avantages en nature . montant' ) let impôt = getRule('impôt') let netImposable = getRule('contrat salarié . rémunération . net imposable') + const retenueTitresRestaurant = getRule( + 'contrat salarié . frais professionnels . titres-restaurant . montant' + ) return (

Salaire net

{netImposable && } - {avantagesEnNature.nodeValue && ( - <> - {/* Salaire net de cotisations */} - - {/* Avantages en nature */} - - + {(avantagesEnNature.nodeValue || retenueTitresRestaurant.nodeValue) && ( + )} + {!!avantagesEnNature.nodeValue && ( + + )} + {!!retenueTitresRestaurant.nodeValue && ( + + )} + - {impôt && ( + {!!impôt && ( <> )} {target.dottedName.includes('prix du travail') && } + {target.dottedName === 'contrat salarié . rémunération . net' && ( + + )} ) } - +function TitreRestaurant() { + const titresRestaurant = useTarget( + 'contrat salarié . frais professionnels . titres-restaurant . montant' + ) + const { language } = useTranslation().i18n + if (!titresRestaurant?.nodeValue) return null + return ( + +
+ + +{' '} + + {formatCurrency(titresRestaurant.nodeValue, language)} + {' '} + en titres-restaurant {emoji(' 🍽')} + +
+
+ ) +} function AidesGlimpse() { const aides = useTarget('contrat salarié . aides employeur') const { language } = useTranslation().i18n @@ -295,7 +317,7 @@ function AidesGlimpse() { if (!aides?.nodeValue) return null return ( - +
en incluant{' '} @@ -307,6 +329,6 @@ function AidesGlimpse() { d'aides {emoji(aides.explanation.icons)}
-
+ ) } diff --git a/source/components/simulationConfigs/salarié.yaml b/source/components/simulationConfigs/salarié.yaml index 1b8b3f71b..dc159f44e 100644 --- a/source/components/simulationConfigs/salarié.yaml +++ b/source/components/simulationConfigs/salarié.yaml @@ -9,17 +9,16 @@ objectifs: objectifs secondaires: - contrat salarié . temps de travail - contrat salarié . cotisations + - contrat salarié . frais professionnels . titres-restaurant . montant questions: à l'affiche: - Contrat: contrat salarié + Temps partiel: contrat salarié . temps de travail . temps partiel Cadre: contrat salarié . statut cadre . choix statut cadre Heures supplémentaires: contrat salarié . temps de travail . heures supplémentaires + Titres-restaurant: contrat salarié . frais professionnels . titres-restaurant Impôt: impôt . méthode de calcul - Temps partiel: contrat salarié . temps de travail . temps partiel Commune: établissement . localisation - JEI: contrat salarié . statut JEI - Avantages: contrat salarié . rémunération . avantages en nature non prioritaires: - contrat salarié . frais professionnels . indemnité kilométrique vélo . active - contrat salarié . rémunération . avantages en nature diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap index 65fee25fd..ddee13cae 100644 --- a/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/test/regressions/__snapshots__/simulations.jest.js.snap @@ -224,6 +224,18 @@ exports[`calculate simulations-salarié: cdd 2`] = `"[2591,0,0,2000,1599,1557]" exports[`calculate simulations-salarié: cdd 3`] = `"[3394,0,0,2400,1967,1883]"`; +exports[`calculate simulations-salarié: frais pro - IKV 1`] = `"[4367,0,0,3200,2530,2320]"`; + +exports[`calculate simulations-salarié: frais pro - IKV 2`] = `"[4346,0,0,3200,2511,2302]"`; + +exports[`calculate simulations-salarié: frais pro - IKV 3`] = `"[2774,0,0,2157,1685,1630]"`; + +exports[`calculate simulations-salarié: frais pro - titres restaurant 1`] = `"[2518,0,0,2000,1561,1524]"`; + +exports[`calculate simulations-salarié: frais pro - titres restaurant 2`] = `"[4307,0,0,3000,2334,2149]"`; + +exports[`calculate simulations-salarié: frais pro - titres restaurant 3`] = `"[2562,0,0,2000,1576,1540]"`; + exports[`calculate simulations-salarié: frais pro 1`] = `"[2443,0,0,2000,1530,1486]"`; exports[`calculate simulations-salarié: frais pro 2`] = `"[2434,0,0,2000,1522,1476]"`; diff --git a/test/regressions/simulations-salarié.yaml b/test/regressions/simulations-salarié.yaml index 53d99a007..2b291c366 100644 --- a/test/regressions/simulations-salarié.yaml +++ b/test/regressions/simulations-salarié.yaml @@ -50,7 +50,7 @@ cdd: contrat salarié . rémunération . brut de base: 2400 contrat salarié . CDD . durée contrat: 10 contrat salarié . temps de travail . heures supplémentaires: 5 - contrat salarié . indemnité kilométrique vélo . active: true + contrat salarié . indemnité kilométrique vélo: true contrat salarié . avantages en nature . montant: 200 atmp: @@ -163,14 +163,23 @@ JEI: - contrat salarié . rémunération . brut de base: 4000 dirigeant: 'assimilé salarié' contrat salarié . statut JEI: true -frais pro: + +frais pro - titres restaurant: - contrat salarié . rémunération . brut de base: 2000 contrat salarié . frais professionnels . titres-restaurant: true contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 + - contrat salarié . rémunération . brut de base: 3000 + contrat salarié . frais professionnels . titres-restaurant: true + contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 20 + contrat salarié . frais professionnels . titres-restaurant . montant unitaire: 20 - contrat salarié . rémunération . brut de base: 2000 contrat salarié . frais professionnels . titres-restaurant: true - contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: 10 - contrat salarié . frais professionnels . titres-restaurant . montant unitaire: 10 - - contrat salarié . rémunération . brut de base: 2000 - contrat salarié . frais professionnels . titres-restaurant: true - contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: 75 + contrat salarié . frais professionnels . titres-restaurant . taux participation employeur: 55 + +frais pro - IKV: + - contrat salarié . rémunération . brut de base: 3200 + contrat salarié . frais professionnels . indemnité kilométrique vélo: true + - contrat salarié . rémunération . brut de base: 3200 + contrat salarié . frais professionnels . indemnité kilométrique vélo . distance mensuelle: 200 + - contrat salarié . rémunération . net après impôt: 1630 + contrat salarié . frais professionnels . indemnité kilométrique vélo . distance mensuelle: 30 From 57c63d4c5e89604dbdcf9b85f45cf1684b4a97fa Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 12 Feb 2020 15:38:35 +0100 Subject: [PATCH 12/14] :alien: traductions manquantes --- source/locales/en.yaml | 1 + source/locales/rules-en.yaml | 188 ++++++++++++++++++++--------------- source/scripts/i18n/utils.js | 1 + 3 files changed, 108 insertions(+), 82 deletions(-) diff --git a/source/locales/en.yaml b/source/locales/en.yaml index 71442afed..63d29d054 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -418,6 +418,7 @@ embauche: titre: Hiring process checklist employeur: employer en incluant: including +en titres-restaurant: in restaurant vouchers entreprise: page: autoEntrepreneur: diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index 654b220b2..3e8ec57f0 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -355,11 +355,11 @@ contrat salarié . CDD . durée contrat: suggestions.6 mois.fr: 6 mois titre.en: contract duration titre.fr: durée du contrat -contrat salarié . CDD . indemnités salarié CDD: - description.en: Employer contributions specific to the fixed-term contract +contrat salarié . CDD . indemnités salarié: + description.en: '[automatic] Employer contributions specific to the CDD' description.fr: Cotisations employeur spécifiques au CDD - titre.en: fixed-term contrat employee compensations - titre.fr: indemnités salarié CDD + titre.en: '[automatic] employee compensation' + titre.fr: indemnités salarié contrat salarié . CDD . motif: description.en: >- The CDD is an exceptional contract: the reason for its use must be one of @@ -1380,64 +1380,60 @@ contrat salarié . frais professionnels: employee for the needs of his professional activity. These costs are then reimbursed by the employer. + Compensation for these costs may take the form of : + - reimbursement of actual expenditure on the basis of supporting documents; - - a lump-sum payment ; + + - a lump sum payment ; + - the application of a specific lump-sum deduction on the salary subject to contributions; this possibility is only open to certain professions. - Business expenses are excluded from the basis for calculating Social - Security contributions. They are also excluded from the CSG-CRDS database. + + Professional expenses are generally excluded from the basis of calculation + of Social Security and CSG-CRDS contributions, except in the case of + exceeding the ceiling for lump-sum reimbursements (bicycle mileage + allowance, basket costs, restaurant vouchers, etc.). description.fr: >- Les frais professionnels correspondent à des dépenses engagées par le salarié pour les besoins de son activité professionnelle. Ces frais sont ensuite remboursés par l’employeur. + Le dédommagement de ces frais peut prendre la forme : + - d’un remboursement des dépenses réelles sur justificatifs ; + - d’un versement d’allocations forfaitaires ; + - de l’application d’une déduction forfaitaire spécifique sur le salaire soumis à cotisations ; cette possibilité n’étant ouverte qu’à certaines professions. - Les frais professionnels sont exclus de la base de calcul des cotisations de - Sécurité sociale. Ils sont aussi exclus de la base CSG-CRDS. - titre.en: '[automatic] business expenses' - titre.fr: frais professionnels + + Les frais professionnels sont généralement exclus de la base de calcul des + cotisations de Sécurité sociale et de la CSG-CRDS, sauf en cas de + dépassement de plafond pour les remboursement forfaitaires (indemnité + kilométrique vélo, frais de panier, titre-restaurants...). + titre.en: '[automatic] reimbursement of expenses' + titre.fr: remboursement de frais contrat salarié . frais professionnels . indemnité kilométrique vélo: - description.en: >- - Employer's incitation to the use of bicycles for commuting. This financial - aid is not taxed. - description.fr: > - Indemnité introduite en 2015 pour inciter l'usage du vélo pour aller au - travail. - - - Nous avons retenu une implémentation simplifiée de cette règle : nous fixons - cette indemnité à 200€ annuels, car c'est le montant maximum donnant lieu - aux exonérations de cotisations sociales et d'impôt. C'est aussi un montant - tout à fait accessible, correspondant approximativement à 2km aller et 2km - retour pour 218 jours travaillés dans l'année. Elle peut être supérieure, - mais l'employeur n'a alors aucune incitation à verser ce supplément : la - part au-dessus de 200€ devient une prime classique. - titre.en: kilometric bicycle allowance - titre.fr: indemnité kilométrique vélo -contrat salarié . frais professionnels . indemnité kilométrique vélo . active: description.en: > - This allowance is not mandatory at this time. + [automatic] This allowance is currently not mandatory. The employer has the choice to implement it in his company. - To benefit from the €200 compensation deducted in this calculation, the - employee must cycle 4km (round trip) to work each day worked. + To benefit from the €200 allowance deducted in this calculation, the + employee must cycle 4km (round trip) to work each working day. - This allowance can be combined with the reimbursement of transport costs if - it is a bike trip to a transport station. + This allowance can be combined with the reimbursement of public transit + costs if the trip is a feeder bike ride to a transit station. - This allowance is exempt from social security contributions and tax on the - income. To pay a salary bonus equivalent to his employee without this - device, **the employer should pay nearly 500€ for a salary median**. + This allowance is exempt from social security contributions and income tax. + To pay an equivalent salary bonus to his employee without this scheme, **the + employer would have to pay nearly €500 for a median salary**. description.fr: > Cette indemnité n'est pour l'instant pas obligatoire. @@ -1460,41 +1456,54 @@ contrat salarié . frais professionnels . indemnité kilométrique vélo . activ dispositif, **l'employeur devrait débourser près de 500€ pour un salaire médian**. question.en: >- - Does the employee take advantage of the bicycle mileage allowance to commute - to work? + [automatic] Does the employee take advantage of the bicycle mileage + allowance to get to work? question.fr: >- Le salarié profite-t-il de l'indemnité kilométrique vélo pour se rendre au travail ? - titre.en: active bicycle allowance - titre.fr: indemnité vélo active -contrat salarié . frais professionnels . indemnité kilométrique vélo . distance annuelle: - titre.en: annual distance - titre.fr: distance annuelle -contrat salarié . frais professionnels . indemnité kilométrique vélo . distance journalière: - description.en: A low estimate of the distance an employee bikes to work. + titre.en: kilometric bicycle allowance + titre.fr: indemnité kilométrique vélo +contrat salarié . frais professionnels . indemnité kilométrique vélo . distance mensuelle: + question.en: '[automatic] What is the distance cycled each month between home and work?' + question.fr: >- + Quelle est la distance parcourue en vélo chaque mois pour le trajet domicile + / travail ? + suggestions.10 km/jour.en: '[automatic] 10 km/day' + suggestions.10 km/jour.fr: 10 km/jour + suggestions.2 km/jour.en: '[automatic] 2 km/day' + suggestions.2 km/jour.fr: 2 km/jour + suggestions.5 km/jour.en: '[automatic] 5 km/day' + suggestions.5 km/jour.fr: 5 km/jour + titre.en: '[automatic] monthly distance' + titre.fr: distance mensuelle +contrat salarié . frais professionnels . indemnité kilométrique vélo . montant: + titre.en: '[automatic] bicycle kilometre allowance' + titre.fr: indemnité kilométrique vélo +contrat salarié . frais professionnels . indemnité kilométrique vélo . part déductible: + titre.en: '[automatic] bicycle kilometre allowance (deductible)' + titre.fr: indemnité kilométrique vélo (déductible) +contrat salarié . frais professionnels . part déductible: + description.en: >- + [automatic] Share of expenses deducted from the social contribution base and + for income tax calculation. description.fr: >- - Une estimation basse de la distance parcourue à vélo par un salarié pour se - rendre à son travail. - titre.en: daily distance - titre.fr: distance journalière -contrat salarié . frais professionnels . indemnité kilométrique vélo . indemnité kilométrique: - titre.en: kilometre allowance - titre.fr: indemnité kilométrique -contrat salarié . frais professionnels . indemnité kilométrique vélo . jours travaillés: - titre.en: days worked - titre.fr: jours travaillés -contrat salarié . frais professionnels . indemnité kilométrique vélo . plafond d'exonération: - titre.en: exemption cap - titre.fr: plafond d'exonération + 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 business expenses' + titre.fr: Frais professionnels déductibles contrat salarié . frais professionnels . titres-restaurant: description.en: >- [automatic] The meal voucher is a special "meal" payment voucher issued by the employer to the employee. + The employee may only use the meal vouchers in his or her possession to pay for consumption: + - of a meal, + - of directly consumable food preparations, + - of fruits and vegetables. This security can be issued in paper or dematerialised form. @@ -1502,10 +1511,14 @@ contrat salarié . frais professionnels . titres-restaurant: Le titre-restaurant est un titre spécial de paiement « des repas » remis par l’employeur au salarié. + Le salarié ne peut utiliser les titres-restaurant en sa possession que pour régler la consommation : + - d’un repas, + - de préparations alimentaires directement consommables, + - de fruits et légumes. Ce titre peut être émis sur support papier ou sous forme dématérialisée. @@ -1517,16 +1530,27 @@ contrat salarié . frais professionnels . titres-restaurant . montant: titre.en: '[automatic] Restaurant vouchers' titre.fr: Titres-restaurant contrat salarié . frais professionnels . titres-restaurant . montant unitaire: + description.en: >- + [automatic] There is no maximum or minimum value for restaurant vouchers. On + the other hand, in order to benefit from the contribution exemption, you + must not exceed €11.10 per title in 2020. + description.fr: >- + Il n'y a pas de valeur maximale ou minimale pour les titres-restaurant. En + revanche, pour bénéficier de l'exonération de cotisation, il ne faut pas + dépasser 11,10€ par titre en 2020. question.en: '[automatic] What is the unit value of the restaurant voucher?' question.fr: Quelle est la valeur unitaire du titre-restaurant ? + suggestions.faible.en: '[automatic] low' + suggestions.faible.fr: faible + suggestions.max exonéré.en: '[automatic] max exonerated' + suggestions.max exonéré.fr: max exonéré + suggestions.moyenne.en: '[automatic] average' + suggestions.moyenne.fr: moyenne titre.en: '[automatic] unitary amount' titre.fr: montant unitaire -contrat salarié . frais professionnels . titres-restaurant . part non exonérée de cotisation: - titre.en: '[automatic] non-exempt portion' - titre.fr: part non exonérée de cotisation -contrat salarié . frais professionnels . titres-restaurant . plafond d'exonération employeur: - titre.en: '[automatic] employer exemption limit' - titre.fr: plafond d'exonération employeur +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 @@ -1541,7 +1565,7 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation 50% and a maximum of 60%. description.fr: >- Part du titre-restaurant payée par l'employeur. Doit être de 50% minimum et - de 60% maximum + de 60% maximum. question.en: '[automatic] What is the employer''s paid portion?' question.fr: Quelle est la participation de l'employeur ? suggestions.50%.en: '[automatic] 50%' @@ -1551,13 +1575,10 @@ contrat salarié . frais professionnels . titres-restaurant . taux participation titre.en: '[automatic] employer contribution rate' titre.fr: taux participation employeur contrat salarié . frais professionnels . titres-restaurant . titres-restaurant par mois: - question.en: '[automatic] How many restaurant vouchers do you receive per month?' - question.fr: Combien de titres-restaurants recevez-vous par mois ? + question.en: '[automatic] How many restaurant vouchers are distributed to the employee?' + question.fr: Combien de titres-restaurants sont distribués au salarié ? titre.en: '[automatic] meal vouchers per month' titre.fr: titres-restaurant par mois -contrat salarié . indemnités salarié: - titre.en: Employee benefits - titre.fr: indemnités salarié contrat salarié . intermittents du spectacle: question.en: To which "intermittent" status is the employee attached? question.fr: A quel statut d'intermittent est rattaché l'employé ? @@ -2114,8 +2135,8 @@ contrat salarié . rémunération . avantages en nature . autres . montant: Quel est le montant de ces autres avantages ? "suggestions.\U0001F697 véhicule.en": "[automatic] \U0001F697 vehicle" "suggestions.\U0001F697 véhicule.fr": "\U0001F697 véhicule" - titre.en: amount - titre.fr: montant + titre.en: '[automatic] others' + titre.fr: autres contrat salarié . rémunération . avantages en nature . montant: description.en: > Benefits in kind are subject to contributions and income tax. They are taken @@ -2124,8 +2145,8 @@ contrat salarié . rémunération . avantages en nature . montant: Les avantages en nature sont soumis aux cotisations et à l'impôt sur le revenu. Ils sont pris en compte pour vérifier que le salaire minimum est atteint. - titre.en: Benefits in kind (amount) - titre.fr: Avantages en nature (montant) + titre.en: '[automatic] Benefits in kind' + titre.fr: Avantages en nature contrat salarié . rémunération . avantages en nature . nourriture: description.en: > [automatic] Restaurant vouchers are not considered a benefit in kind but a @@ -2322,17 +2343,20 @@ contrat salarié . rémunération . heures supplémentaires: titre.en: overtime compensation titre.fr: rémunération heures supplémentaires contrat salarié . rémunération . net: - description.en: > - The gross salary minus the social contributions. + description.en: >- + [automatic] This is the amount the employee would receive at the end of the + month before paying income tax. - This amount can vary according to political decisions (increase or decrease - in contributions) while the gross salary is contractual: to change it, an - amendment to the contract must be signed. - description.fr: > + Also known as take-home pay (at least it was before withholding tax). + + + This amount may vary according to political decisions (increase or decrease + in contributions) while the gross salary is contractual (to change it, an + amendment to the contract must be signed). + description.fr: >- C'est le montant que le salarié toucherait à la fin du mois avant de payer l'impôt sur le revenu. - Aussi appelé salaire net à payer (c'était du moins le cas avant l'impôt à la source). diff --git a/source/scripts/i18n/utils.js b/source/scripts/i18n/utils.js index 196155034..ebd91567e 100644 --- a/source/scripts/i18n/utils.js +++ b/source/scripts/i18n/utils.js @@ -55,6 +55,7 @@ function getRulesMissingTranslations() { const enTrad = `suggestions.${suggestion}.en` const frTrad = `suggestions.${suggestion}.fr` if ( + currentTranslation && currentTranslation[enTrad] && currentTranslation[frTrad] === suggestion ) { From 3c8024366a0453d51550019b7011c6ea2cfbe733 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 12 Feb 2020 15:40:14 +0100 Subject: [PATCH 13/14] =?UTF-8?q?:white=5Fcheck=5Fmark:=20met=20=C3=A0=20j?= =?UTF-8?q?our=20les=20tests=20de=20non-regression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__snapshots__/simulations.jest.js.snap | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap index ddee13cae..eed0b5b0b 100644 --- a/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/test/regressions/__snapshots__/simulations.jest.js.snap @@ -230,17 +230,11 @@ exports[`calculate simulations-salarié: frais pro - IKV 2`] = `"[4346,0,0,3200 exports[`calculate simulations-salarié: frais pro - IKV 3`] = `"[2774,0,0,2157,1685,1630]"`; -exports[`calculate simulations-salarié: frais pro - titres restaurant 1`] = `"[2518,0,0,2000,1561,1524]"`; +exports[`calculate simulations-salarié: frais pro - titres restaurant 1`] = `"[2518,0,0,2000,1521,1484]"`; -exports[`calculate simulations-salarié: frais pro - titres restaurant 2`] = `"[4307,0,0,3000,2334,2149]"`; +exports[`calculate simulations-salarié: frais pro - titres restaurant 2`] = `"[4307,0,0,3000,2134,1949]"`; -exports[`calculate simulations-salarié: frais pro - titres restaurant 3`] = `"[2562,0,0,2000,1576,1540]"`; - -exports[`calculate simulations-salarié: frais pro 1`] = `"[2443,0,0,2000,1530,1486]"`; - -exports[`calculate simulations-salarié: frais pro 2`] = `"[2434,0,0,2000,1522,1476]"`; - -exports[`calculate simulations-salarié: frais pro 3`] = `"[2385,0,0,2000,1545,1489]"`; +exports[`calculate simulations-salarié: frais pro - titres restaurant 3`] = `"[2562,0,0,2000,1493,1456]"`; exports[`calculate simulations-salarié: heures supplémentaires et complémentaires 1`] = `"[2583,0,0,2000,1636,1599]"`; From 6676f90cda2113ed150ef6174c72ea8d49f6a55d Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 12 Feb 2020 15:46:02 +0100 Subject: [PATCH 14/14] =?UTF-8?q?:bug:=20d=C3=A9sactive=20les=20frais=20pr?= =?UTF-8?q?o=20pour=20les=20assimil=C3=A9=20salari=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/dirigeant.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index c01814593..16f5b8098 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -23,7 +23,8 @@ dirigeant . assimilé salarié: - contrat salarié . rémunération . primes - contrat salarié . rémunération . primes . fin d'année - contrat salarié . rémunération . primes . activité - - contrat salarié . frais professionnels + - contrat salarié . frais professionnels . titres-restaurant + - contrat salarié . frais professionnels . indemnité kilométrique vélo - contrat salarié . chômage - contrat salarié . réduction générale - contrat salarié . allocations familiales . taux réduit