- Découvrir le surcoût employeur du CDD par rapport au CDI
-
-
-
- En France, le contrat à durée déterminée est un contrat d'exception au CDI
- qui apporte à l'employeur plus de souplesse dans un cadre législatif précis, comportant en particulier des contreparties financières.
-
-
- Ce simulateur calcule pour vous les 4 éléments de ce surcoût :
-
-
l'indemnité de fin de contrat
-
le CIF
-
la majoration chômage
-
l'indemnité compensatrice de congés payés
-
-
-
Par simplification, ces éléments sont tous calculés par mois de contrat.
-
- Tout au long de la simulation, cliquez sur les chaque résultat pour obtenir une explication du calcul. Aussi, vous avez le droit de ne pas savoir: certains termes utilisés dans la simulation ne sont pas évidents : cliquez simplement sur le symbôle • qui les suit pour ouvrir une aide contextuelle.
-
-
-
- Et n'hésitez pas à nous écrire ! La loi française est complexe, car très ciblée. Nous ne la changerons pas, mais pouvons la rendre plus transparente.
-
-
-
-)
diff --git a/source/components/References.css b/source/components/References.css
index 060d36168..e7dff70c6 100644
--- a/source/components/References.css
+++ b/source/components/References.css
@@ -8,6 +8,7 @@
color: inherit;
/*text-decoration: none;*/
}
+
.references li {
margin-bottom: .15em;
}
diff --git a/source/components/References.js b/source/components/References.js
index 0795f828e..108b9d81a 100644
--- a/source/components/References.js
+++ b/source/components/References.js
@@ -22,7 +22,7 @@ export default ({refs}) => (
- {name}
+ {R.head(name).toUpperCase() + R.tail(name)}
})}
diff --git a/source/components/Results.css b/source/components/Results.css
index a0a3845f6..5d3e20a92 100644
--- a/source/components/Results.css
+++ b/source/components/Results.css
@@ -64,7 +64,7 @@
min-width: 15em;
}
#results li.irrelevant .rule-box {
- background: rgba(255, 255, 255, 0.65);
+ background: rgba(255, 255, 255, 0.5);
}
#results li .pointer {
font-size: 300%;
diff --git a/source/components/Rule.css b/source/components/Rule.css
index 009f48c62..af4ce13b8 100644
--- a/source/components/Rule.css
+++ b/source/components/Rule.css
@@ -106,7 +106,7 @@
display: none;
padding-left: 1em;
font-weight: 600;
- color: #333350;
+ color: #4A89DC;
}
#rule-rules.showValues .situationValue {
diff --git a/source/components/Rule.js b/source/components/Rule.js
index fab2d1d1a..9017d4696 100644
--- a/source/components/Rule.js
+++ b/source/components/Rule.js
@@ -14,6 +14,7 @@ import {capitalise0} from '../utils'
import knownMecanisms from '../engine/known-mecanisms.yaml'
import marked from '../engine/marked'
import References from './References'
+import {AttachDictionary} from './AttachDictionary'
// situationGate function useful for testing :
let testingSituationGate = v => // eslint-disable-line no-unused-vars
@@ -105,45 +106,6 @@ export default class Rule extends Component {
}
}
-// On ajoute à la section la possibilité d'ouvrir à droite un panneau d'explication des termes.
-// Il suffit à la section d'appeler une fonction fournie en lui donnant du JSX
-// Ne pas oublier de réduire la largeur de la section pour laisser de la place au dictionnaire.
-let AttachDictionary = dictionary => Decorated =>
- class extends React.Component {
- state = {
- term: null,
- explanation: null
- }
- componentDidMount() {
- let decoratedNode = ReactDOM.findDOMNode(this.decorated)
- decoratedNode.addEventListener('click', e => {
- let term = e.target.dataset['termDefinition'],
- explanation = R.path([term, 'description'], dictionary)
- this.setState({explanation, term})
- })
- }
- renderExplanationMarkdown(explanation, term) {
- return marked(`### Mécanisme: ${term}\n\n${explanation}`)
- }
- render(){
- let {explanation, term} = this.state
- return (
-
- )
- }
- }
-
@AttachDictionary(knownMecanisms)
class Algorithm extends React.Component {
state = {
diff --git a/source/components/Simulateur.js b/source/components/Simulateur.js
index 9801a1097..d311e5aa1 100644
--- a/source/components/Simulateur.js
+++ b/source/components/Simulateur.js
@@ -84,7 +84,7 @@ export default class extends React.Component {
Pour simplifier, les résultats sont calculés par mois de contrat.
- N'hésitez pas à nous écrire ! La loi française est complexe, car très ciblée. Nous pouvons la rendre plus transparente.
+ N'hésitez pas à nous écrire ! La loi française est très ciblée, et donc complexe. Nous pouvons la rendre plus transparente.
diff --git a/source/components/conversation/Explicable.js b/source/components/conversation/Explicable.js
index 5d8dc4268..dc6ba00b3 100644
--- a/source/components/conversation/Explicable.js
+++ b/source/components/conversation/Explicable.js
@@ -4,7 +4,7 @@ import './Explicable.css'
import HoverDecorator from '../HoverDecorator'
import {connect} from 'react-redux'
import {EXPLAIN_VARIABLE} from '../../actions'
-import {findRuleByName} from '../../engine/rules'
+import {findRuleByDottedName} from '../../engine/rules'
@connect(state => ({explained: state.explainedVariable}), dispatch => ({
@@ -14,27 +14,31 @@ import {findRuleByName} from '../../engine/rules'
export default class Explicable extends React.Component {
render(){
let {
- name, hover, label,
+ dottedName, hover, label,
explain, explained,
lightBackground
} = this.props,
- rule = findRuleByName(name)
+ rule = findRuleByDottedName(dottedName)
// Rien à expliquer ici, ce n'est pas une règle
if (!rule) return {label}
let ruleLabel = label || rule.titre || rule.name
+
// Rien à expliquer ici, il n'y a pas de champ description dans la règle
- if (!rule.description && !rule['une possibilité']) return {ruleLabel}
+ if (!rule.description)
+ return {ruleLabel}
+
+ //TODO montrer les variables de type 'une possibilité'
return (
- {ruleLabel}
+ className={classNames('explicable', {explained: dottedName === explained, dark: lightBackground})} >
+ {ruleLabel}
{e.preventDefault(); e.stopPropagation(); explain(name)}}>
+ onClick={e => {e.preventDefault(); e.stopPropagation(); explain(dottedName)}}>
diff --git a/source/components/conversation/Question.js b/source/components/conversation/Question.js
index 6b7b2ebeb..3af1ce573 100644
--- a/source/components/conversation/Question.js
+++ b/source/components/conversation/Question.js
@@ -80,11 +80,11 @@ export default class Question extends Component {
{this.renderChildren({children})}
:
Prix global de l'embauche
diff --git a/source/engine/generateQuestions.js b/source/engine/generateQuestions.js
index e051b2414..72ef1149d 100644
--- a/source/engine/generateQuestions.js
+++ b/source/engine/generateQuestions.js
@@ -134,7 +134,7 @@ export let constructStepMeta = ({
name: dottedName,
// question: question || name,
question: (
-
+
),
title: titre || name,
subquestion,
diff --git a/source/engine/known-mecanisms.yaml b/source/engine/known-mecanisms.yaml
index c7e723a8a..617f3acc4 100644
--- a/source/engine/known-mecanisms.yaml
+++ b/source/engine/known-mecanisms.yaml
@@ -68,7 +68,7 @@ non applicable si:
> Pour une cotisation sociale, cela signifie qu'elle ne me concerne pas, que je n'ai pas à la verser.
- La formule est donc à ignorer.
+ La formule de calcul peut donc être ignorée, quel que soit son montant.
barème:
description: |
diff --git a/source/engine/traverse.js b/source/engine/traverse.js
index 235f09dda..3d0ab7c32 100644
--- a/source/engine/traverse.js
+++ b/source/engine/traverse.js
@@ -456,7 +456,6 @@ let treat = (situationGate, rule) => rawNode => {
: anyNull([taux, assiette, facteur, plafond]) ?
null
: mult(val(assiette), val(taux), val(facteur), val(plafond))
-
return {
nodeValue,
category: 'mecanism',
diff --git a/source/engine/variables.js b/source/engine/variables.js
index ba7690eee..999acaf69 100644
--- a/source/engine/variables.js
+++ b/source/engine/variables.js
@@ -23,8 +23,7 @@ let evaluateBottomUp = situationGate => startingFragments => {
export let evaluateVariable = (situationGate, variableName, format) => {
// test rec
let value = situationGate(variableName)
-
return R.contains(format)(['nombre positif', 'période'])
- ? value
+ ? (value == undefined ? null : value)
: evaluateBottomUp(situationGate)(splitName(variableName))
}