Merge pull request #82 from sgmap/temps-partiel

Temps partiel
pull/75/merge
Laurent Bossavit 2017-10-09 17:42:19 +02:00 committed by GitHub
commit e688fdc5e6
12 changed files with 74 additions and 50 deletions

View File

@ -86,7 +86,7 @@
"style-loader": "^0.18.2",
"url-loader": "^0.5.8",
"webpack": "^3.6.0",
"webpack-dev-server": "^2.4.5"
"webpack-dev-server": "^2.9.1"
},
"scripts": {
"start": "node source/server.js",

View File

@ -62,7 +62,3 @@
- espace: contrat salarié
nom: multiplicateur réduction générale
formule: 1.6
- espace: contrat salarié
nom: smic mensuel
formule: 1480.27

View File

@ -5,47 +5,28 @@
type de retraite: complémentaire
destinataire: AGIRC
description: |
Les salariés relevant du régime Agirc et travaillant à temps plein dont le salaire ne permet pas d'obtenir le nombre minimum de 120 points Agirc, ont la garantie de les obtenir en contrepartie d'une cotisation forfaitaire.
Les salariés relevant du régime Agirc qui n'ont pas un salaire suffisant pour
atteindre le nombre minimum de 120 points Agirc,
ont la garantie de les obtenir en contrepartie d'une cotisation forfaitaire.
référence: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
note: |
Mécanisme:
si < PSS -> cotisation forfaitaire GMP
si > PSS alors on va payer une cotisation AGIRC sur la tranche B, et la GMP sera le complément pour arriver à un montant total = cotisation #forfaitaire GMP
Autrement dit, si agirc < cotisation forfaitaire, GMP = complément
# TODO On pourrait aussi se dire que cette formule est un complément de AGIRC,
# donc que les conditions d'applicabilité d'AGIRC n'ont pas à être répétées
non applicable si: ≠ statut cadre
formule:
complément:
# TODO harmoniser la syntaxe de ce 'complément' avec les systèmes de réduction de cotisation. C'est pareil avec une addition finalement
# cette cotisation vient compléter la cotisation cible, à hauteur du montant spécifié
cible: agirc
composantes:
- attributs:
dû par: employeur
montant: 43.76
cible: agirc (employeur)
montant: 43.67 * quotité de travail
- attributs:
dû par: salarié
montant: 26.71
cible: agirc (salarié)
montant: 26.71 * quotité de travail
# salaire charnière, inutile avec le méchanisme de complément.
# C'est le salaire pour lequel le salarié acquiert 120 points AGIRC
# 2017: 42590.88
# 2016: 42590.88
# 2015: 41913.84
# 2014: 41444.64
# 2013: 40948.70
# 2012: 40251.98
# 2011: 39146.63
# 2010: 38332.92
# 2009: 37973.00
# 2008: 36877.00
# 2007: 35666.00
# 2006: 34428.00
# 2005: 33512.00
# 2004: 32952.00
# 2003: 32349.00
# 2002: 31337.00
note: Le mécanisme de complément de la cotisation AGIRC nous évite d'avoir à utiliser le "salaire charnière"
# TODO
# - harmoniser la syntaxe de ce 'complément' avec les systèmes de réduction de cotisation. C'est pareil avec une addition finalement
# - on pourrait aussi se dire que cette formule est un complément de AGIRC,
# donc que les conditions d'applicabilité d'AGIRC n'ont pas à être répétées

View File

@ -26,3 +26,12 @@
- nom: plafonnée
plafond: plafond sécurité sociale
taux: 8.55%
exemples:
- nom: SMIC
situation:
assiette cotisations sociales: 1480
valeur attendue: 262.70
- nom: Salaire élevé
situation:
assiette cotisations sociales: 8000
valeur attendue: 689.06

View File

@ -98,6 +98,7 @@
entreprise . effectif: 1
entreprise . association non lucrative: 1
par défaut:
contrat salarié . temps partiel: non
contrat salarié . CDD . événement: non
contrat salarié . CDD . congés non pris: 0
contrat salarié . CDD . contrat jeune vacances: non

View File

@ -89,11 +89,26 @@
description: Notion mal définie mais reconnue par les conventions collectives et déterminant l'appartenance à une caise de retraite de base spécifique
- espace: contrat salarié
nom: plafond sécurité sociale
nom: plafond sécurité sociale temps plein
#TODO peut-être à déplacer ? Doit être accessible par d'autres types d'activité que contrat salarié
# type de période: mensuel
formule: 3269
- espace: contrat salarié
nom: plafond sécurité sociale
#TODO peut-être à déplacer ? Doit être accessible par d'autres types d'activité que contrat salarié
# type de période: mensuel
formule: plafond sécurité sociale temps plein * quotité de travail
- espace: contrat salarié
nom: smic mensuel temps plein
formule: 1480.27
- espace: contrat salarié
nom: smic mensuel
formule: smic mensuel temps plein * quotité de travail
- espace: contrat salarié
nom: cotisations salariales
formule:

View File

@ -0,0 +1,23 @@
- espace: contrat salarié
nom: temps partiel
question: Le contrat est-il à temps partiel ?
description: |
Le temps partiel peut avoir une influence sur les règles.
Par exemple les cotisations plafonnées ou les exonérations dépendant du SMIC.
- espace: contrat salarié
nom: heures par semaine
question: Quel est le nombre d'heures travaillées par semaine dans le cadre du temps partiel ?
format: nombre
# contrôle : le code du travail définit la borne inférieure de 24h par semaine
- espace: contrat salarié
nom: quotité de travail
formule:
multiplication:
assiette: 1
variations:
- si: temps partiel
taux: heures par semaine / 35
- si: ≠ temps partiel
taux: 1

View File

@ -14,6 +14,7 @@
"transform-object-rest-spread",
"transform-class-properties",
"syntax-dynamic-import",
"react-hot-loader/babel",
["webpack-alias", { "config": "./source/webpack.config.js" }]
]
}

View File

@ -38,7 +38,7 @@ let decompose = (recurse, k, v) => {
[<li className="composante" key={JSON.stringify(c.composante)}>
<ul className="composanteAttributes">
{R.toPairs(c.composante).map(([k,v]) =>
<li>
<li key={k}>
<span>{k}: </span>
<span>{v}</span>
</li>
@ -48,7 +48,7 @@ let decompose = (recurse, k, v) => {
{makeJsx(c)}
</div>
</li>,
i < (explanation.length - 1) && <li className="composantesSymbol"><i className="fa fa-plus-circle" aria-hidden="true"></i></li>
i < (explanation.length - 1) && <li key="+" className="composantesSymbol"><i className="fa fa-plus-circle" aria-hidden="true"></i></li>
])
}
</ul>
@ -98,7 +98,7 @@ let devariate = (recurse, k, v) => {
let collectMissing = node => {
let choice = R.find(node => node.condition.nodeValue, node.explanation),
leftMissing = choice ? [] : R.chain(collectNodeMissing,R.pluck("condition",node.explanation)),
leftMissing = choice ? [] : R.uniq(R.chain(collectNodeMissing,R.pluck("condition",node.explanation))),
rightMissing = choice ? collectNodeMissing(choice) : R.chain(collectNodeMissing,node.explanation)
return R.concat(leftMissing,rightMissing)
}
@ -595,13 +595,14 @@ export let mecanismComplement = (recurse,k,v) => {
type: 'numeric',
category: 'mecanism',
name: 'complément pour atteindre',
jsx: <Node
jsx: (nodeValue, explanation) => <Node
classes="mecanism list complement"
name="complément pour atteindre"
name="complément"
value={nodeValue}
child={
<ul className="properties">
<li key="cible">
<span className="key">montant calculé: </span>
<span className="key">cible: </span>
<span className="value">{makeJsx(explanation.cible)}</span>
</li>
<li key="mini">

View File

@ -23,12 +23,9 @@ render(
// Hot react component reloading. Unstable but helpful.
if (module.hot) {
module.hot.accept('./containers/App', () => {
// If you use Webpack 2 in ES modules mode, you can
// use <App /> here rather than require() a <NextApp />.
const NextApp = require('./containers/App').default
render(
<AppContainer>
<NextApp store={store} />
<App store={store} />
</AppContainer>,
anchor
)

View File

@ -12,8 +12,8 @@ module.exports = {
] : [
'webpack-dev-server/client?http://localhost:3000/',
'webpack/hot/only-dev-server',
'react-hot-loader/patch',
'babel-polyfill',
'react-hot-loader/patch',
'./source/entry.js'
],
output: {

View File

@ -274,7 +274,7 @@ describe('buildNextSteps', function() {
result = buildNextSteps(stateSelector, rules, situation)
expect(R.path(["question","props","label"])(result[0])).to.equal("Quel est le salaire brut ?")
expect(R.path(["question","props","label"])(result[1])).to.equal("Le salarié a-t-il le statut cadre ?")
expect(R.path(["question","props","label"])(result[1])).to.equal("Le contrat est-il à temps partiel ?")
});
});