[moteur] POC CDD un peu plus propre visuellement et plus fonctionnel
parent
1cd94b0716
commit
484438f4a9
|
@ -11,18 +11,19 @@
|
|||
l'une de ces conditions:
|
||||
# Evènements particuliers
|
||||
- CDD poursuivi en CDI
|
||||
- refus CDI avantageux # (emploi similaire, rémunération >=)
|
||||
- engagement employeur complément formation professionnelle
|
||||
# Evènements particuliers - Rupture
|
||||
- rupture anticipée salarié
|
||||
- rupture pour faute grave, lourde, cas de force majeure
|
||||
- rupture CDD pendant période essai
|
||||
# Différents types de CDD
|
||||
- CDD type usage # faire le calcul !!
|
||||
- contrat aidé #
|
||||
- apprentissage
|
||||
- contrat jeune vacances # (contrat conclu avec un jeune pendant ses vacances scolaires ou universitaires.)
|
||||
- CDD type saisonnier
|
||||
# - refus CDI avantageux # (emploi similaire, rémunération >=)
|
||||
# - engagement employeur complément formation professionnelle
|
||||
# # Evènements particuliers - Rupture
|
||||
# - rupture anticipée salarié
|
||||
# - rupture pour faute grave, lourde, cas de force majeure
|
||||
# - rupture CDD pendant période essai
|
||||
# # Différents types de CDD
|
||||
# - CDD type usage # faire le calcul !!
|
||||
# - contrat aidé #
|
||||
# - apprentissage
|
||||
# - contrat jeune vacances # (contrat conclu avec un jeune pendant ses vacances scolaires ou universitaires.)
|
||||
# - CDD type saisonnier
|
||||
|
||||
formule:
|
||||
linéaire:
|
||||
assiette: assiette cotisations sociales
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
# Types de CDD
|
||||
- CDD type saisonnier
|
||||
# TODO Commentés pour le développement de la démo CDD seulement
|
||||
- contrat jeune vacances
|
||||
- contrat aidé # voir la définition précise dans indemnité de fin de contrat
|
||||
- apprentissage
|
||||
# - contrat jeune vacances
|
||||
# - contrat aidé # voir la définition précise dans indemnité de fin de contrat
|
||||
# - apprentissage
|
||||
|
||||
formule:
|
||||
linéaire:
|
||||
|
|
|
@ -57,23 +57,23 @@
|
|||
# base: selon cette source, la base est l'assiette de la CSG : https://baseircantec.retraites.fr/cotisations-assurance-maladie-alsace-moselle.html
|
||||
# information non retrouvée ailleurs
|
||||
taux:
|
||||
2012: 0.015
|
||||
2008: 0.016
|
||||
2012-01: 0.015
|
||||
2008-01: 0.016
|
||||
2007-07: 0.017
|
||||
2006: 0.018
|
||||
2003: 0.017
|
||||
2006-01: 0.018
|
||||
2003-01: 0.017
|
||||
1999-07: 0.015
|
||||
1998-07: 0.0125
|
||||
1994: 0.01
|
||||
1994-01: 0.01
|
||||
1989-09: 0.0075
|
||||
|
||||
exception: # équivaut à un variations: si [exception] / si [cas normal]
|
||||
si: régime = agricole
|
||||
2014: 0.011
|
||||
2014-01: 0.011
|
||||
2011-07: 0.012
|
||||
2008-07: 0.013
|
||||
2007: 0.014
|
||||
2003: 0.015
|
||||
2007-01: 0.014
|
||||
2003-01: 0.015
|
||||
|
||||
|
||||
- si: Activité = Indépendant
|
||||
|
|
|
@ -6,6 +6,12 @@
|
|||
padding: 2em;
|
||||
}
|
||||
|
||||
#introduction {
|
||||
width: 60%;
|
||||
margin-left: 10%;
|
||||
}
|
||||
|
||||
|
||||
#conversation {
|
||||
margin: 3em auto;
|
||||
font-size: 120%;
|
||||
|
@ -21,14 +27,40 @@
|
|||
min-width: 50%;
|
||||
}
|
||||
|
||||
#help {
|
||||
background: green;
|
||||
#sim #help {
|
||||
background: #f7f7f7;
|
||||
border-radius: 3em;
|
||||
font-style: italic;
|
||||
border-left: 6px solid #ddd;
|
||||
margin-left: 6em;
|
||||
padding-left: 6em;
|
||||
min-width: 30%;
|
||||
color: #444
|
||||
}
|
||||
|
||||
|
||||
|
||||
.dependency-of {
|
||||
}
|
||||
.dependency-of ul {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.dependency-of li {
|
||||
font-size: 80%;
|
||||
background: #4A89DC;
|
||||
color: white;
|
||||
display: inline-block;
|
||||
padding: .1em .6em;
|
||||
margin: 0 .6em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#results {
|
||||
width: 90%;
|
||||
background: purple;
|
||||
border-top: 2px solid #aaa;
|
||||
}
|
||||
|
||||
#results ul {
|
||||
|
@ -37,6 +69,17 @@
|
|||
|
||||
#results li {
|
||||
display: inline-block;
|
||||
border: 1px solid;
|
||||
background: #4A89DC;
|
||||
color: white;
|
||||
margin: 0 2em;
|
||||
border-radius: 6px;
|
||||
padding: .6em 2em;
|
||||
}
|
||||
|
||||
#results li h3 {
|
||||
border-bottom: 1px solid white;
|
||||
}
|
||||
|
||||
#results .value {
|
||||
font-size: 160%;
|
||||
}
|
||||
|
|
|
@ -7,11 +7,22 @@ import {connect} from 'react-redux'
|
|||
import './conversation/conversation.css'
|
||||
import {START_CONVERSATION} from '../actions'
|
||||
|
||||
@connect(({form: {conversation}}) => ({conversationState: conversation && conversation.values}))
|
||||
@connect(({form: {conversation}, steps}) => ({conversationState: conversation && conversation.values, steps}))
|
||||
class Aide extends Component {
|
||||
render() {
|
||||
let {steps, conversationState} = this.props
|
||||
if (!steps.length) return null
|
||||
let [{dependencyOfVariables, helpText}] = steps
|
||||
return <section id="help">
|
||||
{JSON.stringify(this.props.conversationState)}
|
||||
{helpText}
|
||||
<div className="dependency-of">
|
||||
Cette question est nécessaire pour calculer :
|
||||
<ul>
|
||||
{dependencyOfVariables.map(v =>
|
||||
<li key={v}>{v}</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,10 +4,13 @@ export default () =>
|
|||
<section id="introduction">
|
||||
<p>
|
||||
Le CDD en France est un contrat d'exception au CDI. On y a donc recours sous certaines conditions seulement. Cet outil vous aidera à respecter ces conditions et à calculer le prix mensuel de l'embauche, qui en dépend, en vous proposant une suite de questions.
|
||||
|
||||
Ici, vous avez le droit de ne pas savoir : certaines questions sont complexes, elles seront toujours accompagnées d'une aide contextuelle. Si ce n'est pas le cas, engueulez-nous* !
|
||||
</p>
|
||||
<p>
|
||||
Ici, vous avez le droit de ne pas savoir : certaines questions sont complexes, elles seront toujours accompagnées d'une aide contextuelle. Si ce n'est pas le cas, engueulez-nous !
|
||||
</p>
|
||||
{/*
|
||||
<p>
|
||||
*: écrivez à contact@contact.contact (on fera mieux après). La loi française est complexe, souvent à raison. Nous ne la changerons pas, mais pouvons la rendre plus transparente.
|
||||
</p>
|
||||
*/}
|
||||
</section>
|
||||
|
|
|
@ -5,12 +5,12 @@ export default class Results extends Component {
|
|||
let {analysedSituation} = this.props
|
||||
return (
|
||||
<section id="results">
|
||||
<h2>Cotisations</h2>
|
||||
<h2>Vos obligations</h2>
|
||||
<ul>
|
||||
{analysedSituation.map(({name, type, derived: [dependencies, value]}) =>
|
||||
<li key={name}>
|
||||
<h3>{type} {name}</h3>
|
||||
<p>
|
||||
<p className="value">
|
||||
{dependencies && dependencies.length ?
|
||||
'Répondez aux questions !'
|
||||
: value != null ?
|
||||
|
|
|
@ -128,13 +128,6 @@ export var FormDecorator = formType => RenderField =>
|
|||
maxWidth: wideQuestion ? '95%' : ''
|
||||
}}
|
||||
>{this.props.question}</h1>
|
||||
{helpText &&
|
||||
<span
|
||||
className="help-button"
|
||||
onClick={() => this.setState({helpVisible: true})}>
|
||||
aide
|
||||
</span>
|
||||
}
|
||||
</span>
|
||||
|
||||
renderTitleAndAnswer(valueType, human) {
|
||||
|
|
|
@ -35,7 +35,7 @@ export default class Home extends Component {
|
|||
<ul>
|
||||
{this.state.userSearch != null &&
|
||||
searchRules(this.state.userSearch)
|
||||
.map(([type, name, rule]) =>
|
||||
.map(({type, name, rule}) =>
|
||||
// console.log(rule) ||
|
||||
<li key={name}>
|
||||
<span className="rule-type">
|
||||
|
|
|
@ -55,29 +55,33 @@ export default reduceReducers(
|
|||
|
||||
// on calcule la prochaine étape, à ajouter sur la pile
|
||||
let analysedSituation = analyseSituation(name => formValueSelector('conversation')(state, name)),
|
||||
yo = console.log('analysedSituation', analysedSituation),
|
||||
yo = console.log(analysedSituation),
|
||||
missingVariables = R.pipe(
|
||||
R.map(({derived: [missingVariables]}) => missingVariables || []),
|
||||
R.flatten
|
||||
R.map( ({name, derived: [missingVariables]}) =>
|
||||
(missingVariables || []).map(mv => [mv, name])
|
||||
),
|
||||
R.unnest,
|
||||
//groupBy but remove mv from value, it's now in the key
|
||||
R.reduce( (memo, [mv, dependencyOf]) => ({...memo, [mv]: [...(memo[mv] || []), dependencyOf] }), {})
|
||||
)(analysedSituation),
|
||||
yo2 = console.log('miss', missingVariables),
|
||||
yo2 = console.log('miss', missingVariables)
|
||||
|
||||
[firstMissingVariable] = missingVariables,
|
||||
let [firstMissingVariable, dependencyOfVariables] = R.isEmpty(missingVariables) ? [] : R.toPairs(missingVariables)[0],
|
||||
|
||||
type = variableType(firstMissingVariable),
|
||||
|
||||
stepData = Object.assign({
|
||||
name: firstMissingVariable,
|
||||
state: null,
|
||||
dependecyOfVariable: null, //TODO
|
||||
dependencyOfVariables: dependencyOfVariables,
|
||||
title: firstMissingVariable,
|
||||
question: firstMissingVariable,
|
||||
visible: true,
|
||||
helpText: <p>
|
||||
The impossible is possible, at Zombo.com
|
||||
Le contrat à durée indéterminée est une exception au CDI.
|
||||
<br/>
|
||||
<a href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F33777" target="_blank">
|
||||
Comprendre comment tout ce bordel se ficelle
|
||||
En savoir plus (service-public.fr)
|
||||
</a>
|
||||
</p>
|
||||
}, type == 'boolean' ? {
|
||||
|
|
|
@ -176,7 +176,6 @@ export let analyseSituation = situation =>
|
|||
)(selectedRules)
|
||||
|
||||
export let variableType = name => {
|
||||
console.log('Getting variable type for ', name)
|
||||
if (name == null) return null
|
||||
|
||||
let found = findRuleByName(name)
|
||||
|
|
Loading…
Reference in New Issue