[moteur] POC CDD un peu plus propre visuellement et plus fonctionnel

pull/6/head
Mael Thomas 2017-01-18 09:48:46 +01:00
parent 1cd94b0716
commit 484438f4a9
11 changed files with 104 additions and 50 deletions

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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%;
}

View File

@ -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>
}
}

View File

@ -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>

View File

@ -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 ?

View File

@ -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) {

View File

@ -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">

View File

@ -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' ? {

View File

@ -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)