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'