From a247e5d57c066585462eeed6f3b5cdf29b0d63e0 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 26 Aug 2019 17:37:05 +0200 Subject: [PATCH] =?UTF-8?q?:hammer:=20Ajoute=20la=20reduction=20de=20cotis?= =?UTF-8?q?ations=20pour=20les=20heures=20suppl=C3=A9mentaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODO: uniformiser la façon de gérer les réductions sur la fiche de paie, entre employeur et salarié --- source/components/PaySlip.js | 40 ++++++++++-------- .../simulationConfigs/assimilé.yaml | 2 +- .../components/simulationConfigs/salarié.yaml | 2 +- source/engine/mecanismViews/Allègement.js | 4 +- source/engine/mecanisms.js | 4 +- source/règles/base.yaml | 41 ++++++++++++++++--- source/selectors/ficheDePaieSelectors.js | 11 ++--- source/selectors/repartitionSelectors.js | 16 ++++---- test/ficheDePaieSelector.test.js | 6 +-- 9 files changed, 82 insertions(+), 44 deletions(-) diff --git a/source/components/PaySlip.js b/source/components/PaySlip.js index 362263048..9ca1b76b1 100644 --- a/source/components/PaySlip.js +++ b/source/components/PaySlip.js @@ -37,14 +37,14 @@ export default compose( parsedRules }: ConnectedPropTypes) => { let getRule = getRuleFromAnalysis(analysis) - console.log( - getRule( - 'contrat salarié . temps de travail . heures supplémentaires . nombre effectuées' - ), - analysis.cache[ - 'contrat salarié . temps de travail . heures supplémentaires . nombre effectuées' - ] + + const heuresSupplémentaires = getRule( + 'contrat salarié . temps de travail . heures supplémentaires' ) + const réductionHeuresSupplémentaires = getRule( + 'contrat salarié . cotisations . salariales . réduction heures supplémentaires' + ) + console.log(réductionHeuresSupplémentaires) return (
@@ -117,18 +117,26 @@ export default compose( - - {0} - + + + {heuresSupplémentaires.nodeValue && ( + <> + + + + + )} {/* Total cotisation */}
Total des retenues
@@ -140,9 +148,7 @@ export default compose( /> {/* Salaire chargé */} - - {0} - + {/* Section salaire net */} diff --git a/source/components/simulationConfigs/assimilé.yaml b/source/components/simulationConfigs/assimilé.yaml index 0aff220d2..b576c1177 100644 --- a/source/components/simulationConfigs/assimilé.yaml +++ b/source/components/simulationConfigs/assimilé.yaml @@ -15,7 +15,7 @@ objectifs: objectifs secondaires: - contrat salarié . temps de travail - - contrat salarié . cotisations . patronales à payer + - contrat salarié . cotisations . patronales . à payer questions: à l'affiche: diff --git a/source/components/simulationConfigs/salarié.yaml b/source/components/simulationConfigs/salarié.yaml index d38d696e0..e2aea4d89 100644 --- a/source/components/simulationConfigs/salarié.yaml +++ b/source/components/simulationConfigs/salarié.yaml @@ -7,7 +7,7 @@ objectifs: objectifs secondaires: - contrat salarié . temps de travail - - contrat salarié . cotisations . patronales à payer + - contrat salarié . cotisations . patronales . à payer questions: à l'affiche: diff --git a/source/engine/mecanismViews/Allègement.js b/source/engine/mecanismViews/Allègement.js index d1660a458..f23467a99 100644 --- a/source/engine/mecanismViews/Allègement.js +++ b/source/engine/mecanismViews/Allègement.js @@ -1,7 +1,7 @@ +import { map, mapObjIndexed, values } from 'ramda' import React from 'react' -import { Node } from './common' import { makeJsx } from '../evaluation' -import { mapObjIndexed, map, values } from 'ramda' +import { Node } from './common' export default function Allègement(nodeValue, rawExplanation) { // properties with a nodeValue of 0 are not interesting to display diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index 5c7000f1c..d6a4e44a6 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -1,4 +1,6 @@ import { decompose } from 'Engine/mecanisms/utils' +import variations from 'Engine/mecanisms/variations' +import { inferUnit } from 'Engine/units' import { add, any, @@ -47,8 +49,6 @@ import Somme from './mecanismViews/Somme' import { disambiguateRuleReference, findRuleByDottedName } from './rules' import { anyNull, val } from './traverse-common-functions' import uniroot from './uniroot' -import { inferUnit } from 'Engine/units' -import variations from 'Engine/mecanisms/variations' export let mecanismOneOf = (recurse, k, v) => { if (!is(Array, v)) throw new Error('should be array') diff --git a/source/règles/base.yaml b/source/règles/base.yaml index 19b39ccc3..3160099e7 100644 --- a/source/règles/base.yaml +++ b/source/règles/base.yaml @@ -1076,6 +1076,37 @@ - CRDS - APEC [salarié] - complémentaire santé [salarié] + - réduction heures supplémentaires + +- espace: contrat salarié . cotisations . salariales + nom: réduction heures supplémentaires + aide: + type: réduction de cotisations + unité: € + période: flexible + formule: 0 - rémunération . heures supplémentaires * taux des cotisations réduites + # multiplication: + # assiette: rémunération . heures supplémentaires + # taux: taux des cotisations réduites + références: + Code de la sécurité sociale - Article D241-21: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000038056813&cidTexte=LEGITEXT000006073189 + urssaf: https://www.urssaf.fr/portail/home/employeur/beneficier-dune-exoneration/exonerations-generales/la-reduction-de-cotisations-sala/modalites-de-calcul-et-de-declar.html + +- espace: contrat salarié . cotisations . salariales . réduction heures supplémentaires + nom: taux des cotisations réduites + période: aucune + unité: '%' + description: le taux effectif des cotisations d'assurance vieillesse à la charge du salarié + formule: + le minimum de: + - 11.31% + - multiplication: + assiette: + somme: + - vieillesse [salarié] + - retraite complémentaire [salarié] + - contribution d'équilibre général [salarié] + facteur: 1 / assiette - espace: contrat salarié . cotisations nom: patronales @@ -1516,9 +1547,9 @@ Des [aides différées](/documentation/aides-employeur) peuvent venir diminuer ce montant. - formule: rémunération . total sans réduction - réductions de cotisations + formule: rémunération . total sans réduction - cotisations . patronales . réductions de cotisations -- espace: contrat salarié +- espace: contrat salarié . cotisations . patronales nom: réductions de cotisations période: flexible unité: € @@ -1528,8 +1559,8 @@ - exonération JEI - réduction ACRE -- espace: contrat salarié . cotisations - nom: patronales à payer +- espace: contrat salarié . cotisations . patronales + nom: à payer période: flexible unité: € formule: patronales - réductions de cotisations @@ -1577,7 +1608,7 @@ - espace: contrat salarié nom: cotisations période: flexible - descitption: Total des cotisation patronales et salariales + description: Total des cotisation patronales et salariales formule: somme: - patronales diff --git a/source/selectors/ficheDePaieSelectors.js b/source/selectors/ficheDePaieSelectors.js index 732b882d4..fc1228624 100644 --- a/source/selectors/ficheDePaieSelectors.js +++ b/source/selectors/ficheDePaieSelectors.js @@ -15,10 +15,7 @@ import { values } from 'ramda' import { createSelector } from 'reselect' -import { - getRuleFromAnalysis, - analysisWithDefaultsSelector -} from 'Selectors/analyseSelectors' +import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors' import type { Analysis } from 'Types/Analysis' import type { @@ -28,7 +25,6 @@ import type { Branche, FicheDePaie } from 'Types/ResultViewTypes' -import { findRuleByDottedName } from 'Engine/rules' import type { Règle } from 'Types/RegleTypes' @@ -123,6 +119,11 @@ export let analysisToCotisations = analysis => { .map(name => analysis.cache[name]) .map(pathOr([], ['explanation', 'formule', 'explanation', 'explanation'])) .reduce(concat, []) + .filter( + ({ dottedName }) => + dottedName !== + 'contrat salarié . cotisations . salariales . réduction heures supplémentaires' + ) const cotisations = pipe( groupBy(prop('dottedName')), diff --git a/source/selectors/repartitionSelectors.js b/source/selectors/repartitionSelectors.js index 97aab6c0d..dc94336f3 100644 --- a/source/selectors/repartitionSelectors.js +++ b/source/selectors/repartitionSelectors.js @@ -1,5 +1,6 @@ /* @flow */ +import { getRuleFromAnalysis } from 'Engine/rules' import { add, compose, @@ -12,19 +13,18 @@ import { mergeWith, pick, pipe, + propEq, reduce, sort, - propEq, without } from 'ramda' import { createSelector } from 'reselect' -import { - BLANK_COTISATION, - mergeCotisations, - analysisToCotisations -} from './ficheDePaieSelectors' import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors' -import { getRuleFromAnalysis } from 'Engine/rules' +import { + analysisToCotisations, + BLANK_COTISATION, + mergeCotisations +} from './ficheDePaieSelectors' import type { Cotisation, @@ -113,7 +113,7 @@ const répartition = (analysis): ?Répartition => { salaireNet = getRule('contrat salarié . salaire . net'), salaireChargé = getRule('contrat salarié . rémunération . total'), réductionsDeCotisations = getRule( - 'contrat salarié . réductions de cotisations' + 'contrat salarié . cotisations . patronales . réductions de cotisations' ) let CSG const autresCotisations = cotisations['protection sociale . autres'] diff --git a/test/ficheDePaieSelector.test.js b/test/ficheDePaieSelector.test.js index e9975b720..4468a8f2c 100644 --- a/test/ficheDePaieSelector.test.js +++ b/test/ficheDePaieSelector.test.js @@ -3,12 +3,12 @@ import { expect } from 'chai' // $FlowFixMe import salariéConfig from 'Components/simulationConfigs/salarié.yaml' +import { getRuleFromAnalysis } from 'Engine/rules' +import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors' import { analysisToCotisationsSelector, COTISATION_BRANCHE_ORDER } from 'Selectors/ficheDePaieSelectors' -import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors' -import { getRuleFromAnalysis } from 'Engine/rules' let state = { form: { @@ -57,7 +57,7 @@ describe('pay slip selector', function() { it('should sum all cotisations', function() { let pat = getRuleFromAnalysis(analysis)( - 'contrat salarié . cotisations . patronales à payer' + 'contrat salarié . cotisations . patronales . à payer' ), sal = getRuleFromAnalysis(analysis)( 'contrat salarié . cotisations . salariales'