⚙️ Première implémentation du mécanisme de composantes

Seulement au sein de barèmes.
TODO:
A ajouter dans les multiplications, directement dans la formule.
Doivent pouvoir être imbriqués
pull/6/head
Mael Thomas 2017-04-11 17:44:53 +02:00
parent e182ccde72
commit fa1e2c0107
17 changed files with 396 additions and 211 deletions

View File

@ -17,7 +17,7 @@ formule:
2016: 2%
```
Etant donné que le statut cadre est une exception, on pourrait aussi utiliser cette syntaxe bien plus succinte.
Etant donné que le statut cadre est une exception, on pourrait aussi utiliser cette syntaxe bien plus succincte.
```yaml
formule:
@ -33,6 +33,8 @@ formule:
Dans le cas d'une variable de type énumération, il peut être commode de factoriser le sujet comparé et de parler de 'cas'.
> Mais la variable devient alors une clé, alors qu'elles sont normalement des valeurs, ça peut être perturbant
```yaml
formule:
assiette: assiette cotisations sociales
@ -46,9 +48,8 @@ formule:
2016: 2%
```
Celle-ci est identique à la précédente, mais ne contient pas de 'si' et est donc plus brève.
On peut la voit comme une alternative adaptée à certains endroits (?).
Celle-ci est similaire à `variations` mais ne contient pas de `si` et est donc plus brève.
On peut la voir comme une alternative adaptée à certains endroits (?).
```yaml
formule:

View File

@ -80,7 +80,8 @@
C'est, en gros, le salaire brut moins les cotisations sociales. Ce salaire est plus important que le brut car c'est ce que le salrié reçoit sur son compte bancaire, et pourtant, le brut est très utilisé lors des négociations salariales.
formule:
somme: #TODO à l'avenir, exprimer une somme sous forme de requête
- AGIRC simple
- APEC
- AGIRC

View File

@ -0,0 +1,65 @@
- Cotisation: AGIRC
attache: Salariat
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: AGIRC
description: |
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO, gérée par l'AGIRC (Association Générale des Institutions de Retraite des Cadres)
références:
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
formule:
barème:
assiette: salaire de base #TODO assiette cotisations sociales
multiplicateur des tranches: plafond sécurité sociale
composantes:
- attributs:
dû par: employeur
tranches:
- en-dessous de: 1
taux: 0%
- de: 1
à: 8
taux: 12.75%
# 2016: 12.75%
# 2015: 12.75%
# 2014: 12.68%
# 2006: 12.6%
# 1999: 12.5%
# 1998: 11.875%
# 1997: 11.25%
# 1996: 10.625%
# 1995: 10.%
# 1994: 8.47%
# 1993: 7.02%
- au-dessus de: 8
taux: 0%
- attributs:
dû par: salarié
tranches:
- en-dessous de: 1
taux: 0%
- de: 1
à: 8
taux: 7.8%
# 2016: 7.8%
# 2015: 7.8%
# 2014: 7.75%
# 2006: 7.7%
# 1999: 7.5%
# 1998: 6.875%
# 1997: 6.25%
# 1996: 5.625%
# 1995: 5%
# 1994: 3.63%
# 1993-07: 2.34%
- au-dessus de: 8
taux: 0%
notes: |
Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de lentreprise jusquà 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour lemployeur.

View File

@ -0,0 +1,42 @@
- Cotisation: APEC
attache: Salariat
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: APEC
description: |
Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC
(Association Pour lEmploi des Cadres)
références:
chiffres clés: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
notes: |
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
formule:
barème:
assiette: salaire de base #TODO assiette cotisations sociales
multiplicateur des tranches: plafond sécurité sociale
composantes:
- attributs:
dû par: employeur
tranches:
- en-dessous de: 4
taux: 0.036%
# 2016-01: 0.036%
# 2011-01: 0.036%
# 1993-07: 0%
- au-dessus de: 4
taux: 0%
- attributs:
dû par: salarié
tranches:
- en-dessous de: 4
taux: 0.024%
# 2016-01: 0.024%
# 2011-01: 0.024%
# 1993-07: 0%
- au-dessus de: 4
taux: 0%

View File

@ -1,42 +0,0 @@
- Cotisation: AGIRC simple
attache: Salariat
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: AGIRC
description: |
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO
(Association Générale des Institutions de Retraite des Cadres)
références:
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
# concerne:
# - statut cadre = oui
formule:
barème:
assiette: salaire de base
multiplicateur des tranches: plafond sécurité sociale
tranches:
- en-dessous de: 1
taux: 0%
- de: 1
à: 8
taux: 7.8%
# 2016: 7.8%
# 2015: 7.8%
# 2014: 7.75%
# 2006: 7.7%
# 1999: 7.5%
# 1998: 6.875%
# 1997: 6.25%
# 1996: 5.625%
# 1995: 5%
# 1994: 3.63%
# 1993-07: 2.34%
- au-dessus de: 8
taux: 0%
notes: |
Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de lentreprise jusquà 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour lemployeur.

View File

@ -1,16 +1,16 @@
- Cotisation: AGIRC
attache: Salariat
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: AGIRC
description: |
Cotisation de retraite complémentaire cadre, complémentant le régime ARRCO
(pour l'Association Générale des Institutions de Retraite des Cadres)
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO
(Association Générale des Institutions de Retraite des Cadres)
références:
- http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
- http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
concerne:
- statut cadre = oui
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
formule:
barème:
@ -19,44 +19,46 @@
- attributs:
dû par: employeur
tranches:
- taux: 0%
- seuil: 1 * plafond sécurité sociale
taux:
2016: 12.75%
2015: 12.75%
2014: 12.68%
2006: 12.6%
1999: 12.5%
1998: 11.875%
1997: 11.25%
1996: 10.625%
1995: 10.%
1994: 8.47%
1993: 7.02%
- seuil: 8 * plafond sécurité sociale
- en-dessous de: 1
taux: 0%
- de: 1
à: 8
taux: 12.75%
# 2016: 12.75%
# 2015: 12.75%
# 2014: 12.68%
# 2006: 12.6%
# 1999: 12.5%
# 1998: 11.875%
# 1997: 11.25%
# 1996: 10.625%
# 1995: 10.%
# 1994: 8.47%
# 1993: 7.02%
- au-dessus de: 8
taux: 0%
- attributs:
dû par: salarié
tranches:
- taux: 0%
- seuil: 1 * plafond sécurité sociale
taux:
2016: 7.8%
2015: 7.8%
2014: 7.75%
2006: 7.7%
1999: 7.5%
1998: 6.875%
1997: 6.25%
1996: 5.625%
1995: 5%
1994: 3.63%
1993-07: 2.34%
- seuil: 8 * plafond sécurité sociale
- en-dessous de: 1
taux: 0%
- de: 1
à: 8
taux: 7.8%
# 2016: 7.8%
# 2015: 7.8%
# 2014: 7.75%
# 2006: 7.7%
# 1999: 7.5%
# 1998: 6.875%
# 1997: 6.25%
# 1996: 5.625%
# 1995: 5%
# 1994: 3.63%
# 1993-07: 2.34%
- au-dessus de: 8
taux: 0%
notes: |

View File

@ -1,47 +0,0 @@
- Cotisation: APEC
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: APEC
description: |
Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC
(Association Pour lEmploi des Cadres)
référence: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
notes: |
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
formule:
barème:
assiette: assiette cotisations sociales
multiplicateur: plafond sécurité sociale
composantes:
- attributs:
dû par: employeur
tranches:
- taux:
2016-01: 0.036%
2011-01: 0.036%
1993-07: 0%
- seuil: 0 #TODO erreur ?
taux:
2016-01: 0.036%
1993-07: 0.036%
- seuil: 4
taux: 0%
- attributs:
dû par: salarié
tranches:
- taux:
historique:
2016-01: 0.024%
2011-01: 0.024%
1993-07: 0
- seuil: 0 #TODO erreur ?
taux:
historique:
2016-01: 0.024%
1993-07: 0.024%
- seuil: 4
taux: 0

View File

@ -1,63 +1,68 @@
- Cotisation: ARRCO
attache: Salariat
attributs:
branche: retraite
type de retraite: complémentaire
destinataire: ARRCO
description: >
Cotisation de retraite complémentaire pour tous les salariés du secteur privé,
(pour l'Association pour le Régime de Retraite Complémentaire des salariés)
référence: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
Cotisation de retraite complémentaire pour tous les salariés du secteur privé, gérée par l'Association pour le Régime de Retraite Complémentaire des salariés
références:
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
formule:
barème:
assiette: assiette cotisations sociales
multiplicateur: plafond sécurité sociale
assiette: salaire de base #TODO assiette cotisations sociales
multiplicateur des tranches: plafond sécurité sociale
composantes:
- attributs:
dû par: employeur
variations:
- si: categorie salarié = privé cadre
tranches:
- taux:
2016: 4.65%
2015: 4.65%
2014: 4.58%
1999: 4.5%
1998: 4.125%
1997: 3.75%
1996: 3.375%
1993: 2.952%
- seuil: 1
taux: 0%
- si: categorie salarié = privé non cadre
tranches:
- taux:
2016-01: 4.65%
2015-01: 4.65%
2014-01: 4.58%
1999-01: 4.5%
1998-01: 4.125%
1997-01: 3.75%
1996-01: 3.375%
1993-07: 2.952%
- seuil: 1
taux:
2016: 12.15%
2015: 12.15%
2014: 12.08%
2005: 12.%
2004: 10.5%
2002: 9%
2000: 7.5%
- seuil: 3
taux: 0%
variations:
- si: categorie salarié = privé cadre
tranches:
- en-dessous de: 1
taux:
2016: 4.65%
2015: 4.65%
2014: 4.58%
1999: 4.5%
1998: 4.125%
1997: 3.75%
1996: 3.375%
1993: 2.952%
- au-dessus de: 1
taux: 0%
- si: categorie salarié = privé non cadre
tranches:
- en-dessous de: 1
taux:
2016-01: 4.65%
2015-01: 4.65%
2014-01: 4.58%
1999-01: 4.5%
1998-01: 4.125%
1997-01: 3.75%
1996-01: 3.375%
1993-07: 2.952%
- de: 1
à: 3
taux:
2016: 12.15%
2015: 12.15%
2014: 12.08%
2005: 12.%
2004: 10.5%
2002: 9%
2000: 7.5%
- au-dessus de: 3
taux: 0%
- Cotisation:
dû par: salarié
variations:
- si: categorie salarié = privé cadre
tranches:
- taux:
- en-dessous de: 1
taux:
2016: 3.1%
2015: 3.1%
2014: 3.05%
@ -66,11 +71,12 @@
1997: 2.5%
1996: 2.25%
1993: 1.968%
- seuil: 1
- au-dessus de: 1
taux: 0%
- si: catégorie salarié = privé non cadre
tranches:
- taux:
- en-dessous de: 1
taux:
2016: 3.1%
2015: 3.1%
2014: 3.05%
@ -79,7 +85,8 @@
1997: 2.5%
1996: 2.25%
1993: 1.968%
- seuil: 1
- de: 1
à: 3
taux:
2016: 8.1%
2015: 8.1%
@ -88,5 +95,5 @@
2004: 7%
2002: 6%
1993: 5%
- seuil: 3
- au-dessus de: 3
taux: 0%

View File

@ -24,3 +24,33 @@
- si: Salariat . exposition pénibilité multiple
2017: 0.4%
2015: 0.2%
- Cotisation: pénibilité
attributs:
branche: santé # ou vieillesse car ouvrant droit à une retraite anticipée ?
description: Les dépenses liées à l'utilisation du compte pénibilité par le salarié sont prises en charge par un fonds financé par l'employeur
références:
- https://www.service-public.fr/professionnels-entreprises/vosdroits/F33777
- https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/les-cotisations-patronales-au-ti/cotisations-dues.html
- Code du travail - Article L4162-19
formule:
composantes:
- nom: base
multiplication:
assiette: assiette cotisations sociales
taux:
2017: 0.01%
- nom: additionnelle
applicable si: Activité . durée >= 1 mois
multiplication:
assiette: assiette cotisations sociales
taux:
variations:
- si: Salariat . exposition pénibilité simple
2017: 0.2%
2015: 0.1%
- si: Salariat . exposition pénibilité multiple
2017: 0.4%
2015: 0.2%

View File

@ -1,5 +1,5 @@
#rule {
font-size: 120%;
font-size: 110%;
}
#rule pre {
@ -35,6 +35,10 @@
padding-right: .6em;
}
#rule ul {
margin: 0;
}
#rule .rule-type {
font-size: 35%;
}
@ -130,7 +134,6 @@
display: inline-flex;
justify-content: start;
min-height: 5em;
width: 80%;
}
#rule-rules .situationValue {
@ -156,7 +159,7 @@
#algorithm {
margin-top: 3em;
width: 60%;
width: 100%;
}
.dictionaryWrapper {
@ -192,7 +195,7 @@
}
#rule-rules section {
margin: 1em 3em;
margin: 1em 0 1em 3em;
font-weight: 500;
font-size: 90%;
color: #444
@ -205,7 +208,7 @@
color: #4B4B66
}
.nodeHead {
.mecanism > .nodeHead {
margin-bottom: 1em;
}
@ -223,24 +226,27 @@
opacity: .8
}
.ruleProp > .nodeHead .name {
background: #df5320
background: #9b59b6;
}
.mecanism li {
}
.mecanism ul {
.mecanism .properties, .mecanism.list ul {
margin-top: 0;
padding-left: 1em;
list-style-type: none;
border-left: 1px dashed #ccc;
}
.mecanism ul .key {
color: #d5911a;
.mecanism .properties .key {
font-weight: 600;
display: inline-block;
margin-bottom: 1em;
margin-bottom: .6em;
margin-right: 0.8em;
}
.multiplication > .nodeHead .name {
background: #2ecc71;
}
.multiplication li .key {
margin-right: .6em;
}
@ -292,7 +298,7 @@
color: #5B5B73;
text-align: center;
margin-top: 1em;
padding: .05em 1em;
padding: .05em .6em;
line-height: 1.8em;
border-radius: .4em;
font-weight: 600;
@ -318,7 +324,16 @@
font-size: 60%;
}
.barème > .nodeHead .name {
background: #1abc9c;
}
.barème .key {
color: #1abc9c
}
.barème table {
margin-top: 1em;
width: 80%;
text-align: left;
}
@ -329,3 +344,32 @@
.barème table tr:nth-child(2n) {
background: #f1f1f1
}
.composantes > .nodeHead .name {
background: #3498db;
}
.composantes > ul > li {
display: inline-block;
}
.composantes .composante {
width: 45%;
}
.composantes .composante .content {
border-top: 1px solid #3498db;
padding: 1em;
margin-right: 2em;
}
.composantes .composanteAttributes {
list-style-type: none;
padding: .2em;
color: #3498db;
}
.composantes .composanteAttributes span:last-child {
font-weight: 600;
}
.composantes .composantesSymbol {
font-size: 160%;
color: #3498db;
}

View File

@ -26,13 +26,13 @@ let testingSituationGate = v => // eslint-disable-line no-unused-vars
form: state.form
}),
dispatch => ({
startConversation: () => dispatch({type: START_CONVERSATION}),
startConversation: rootVariable => dispatch({type: START_CONVERSATION, rootVariable}),
})
)
export default class Rule extends Component {
componentDidMount() {
// C'est ici que la génération du formulaire, et donc la traversée des variables commence
this.props.startConversation()
this.props.startConversation('salaire net')
}
render() {
let {

View File

@ -2,7 +2,7 @@ import React, {Component} from 'react'
import { Provider } from 'react-redux'
import routes from '../routes'
import Router from 'react-router'
import {Router} from 'react-router'
export default class App extends Component {
render() {

View File

@ -75,3 +75,15 @@ barème:
C'est un barème en taux marginaux, mécanisme de calcul connu son utilisation dans le calcul de l'impôt sur le revenu.
L'assiette est décomposée en plusieurs tranches, qui sont multipliées par un taux spécifique.
Les tranches sont très souvent exprimées sous forme de facteurs (par exemple [1, 2, 4]) d'une variable que l'on appelle multiplicateur, par exemple le plafond de la sécurité sociale.
composantes:
description: |
Beaucoup de cotisations sont composées de deux parties qui partage la méthode de calcul mais diffèrent par des paramètres différents.
Pour ne pas définir deux variables presque redondantes, on utilise le mécanisme de composante. Il se comportera comme une somme dans les calculs, mais son affichage sur les pages /règle sera adapté.
Il est même possible, pour les mécanismes `barème` et `multiplication` de garder en commun un paramètre comme l'assiette, puis de déclarer des composantes pour le taux.
> L'example le plus courant de composantes, c'est la distinction part employeur, part salarié (ex. retraite AGIRC).
> On peut aussi citer la composante de base de la cotisation pénibilité, et la composante additionnelle.

View File

@ -101,21 +101,25 @@ export let findGroup = R.pipe(
/*********************************
Autres */
let collectNodeMissingVariables = target => (root, source=root, results=[]) => {
let collectNodeMissingVariables = (root, source=root, results=[]) => {
if (
source.nodeValue != null ||
source.shortCircuit && source.shortCircuit(root)
) return []
) {
// console.log('nodev or shortcircuit root, source', root, source)
return []
}
if (source[target]) {
results.push(source[target])
if (source['missingVariables']) {
// console.log('root, source', root, source)
results.push(source['missingVariables'])
}
for (var prop in source) {
if (R.is(Object)(source[prop]))
collectNodeMissingVariables(target)(root, source[prop], results)
if (R.is(Object)(source[prop])) {
collectNodeMissingVariables(root, source[prop], results)
}
}
return results
}
@ -125,7 +129,7 @@ export let collectMissingVariables = (groupMethod='groupByMissingVariable') => a
R.unless(R.is(Array), R.of),
R.chain( v =>
R.pipe(
collectNodeMissingVariables('missingVariables'),
collectNodeMissingVariables,
R.flatten,
R.map(mv => [v.variableName, mv])
)(v)

View File

@ -0,0 +1,5 @@
import R from 'ramda'
export let val = node => node.nodeValue
export let anyNull = R.any(R.pipe(val, R.equals(null)))

View File

@ -6,7 +6,7 @@ import knownMecanisms from './known-mecanisms.yaml'
import { Parser } from 'nearley'
import Grammar from './grammar.ne'
import {Node, Leaf} from './traverse-common-jsx'
import {anyNull, val} from './traverse-common-functions'
let nearley = () => new Parser(Grammar.ParserRules, Grammar.ParserStart)
@ -215,8 +215,8 @@ let treat = (situationGate, rule) => rawNode => {
if (!R.is(Object)(rawNode)) {
console.log('Cette donnée : ', rawNode) // eslint-disable-line no-console
throw ' doit être un Number, String ou Object'
console.log() // eslint-disable-line no-console
throw 'Cette donnée : ' + rawNode + ' doit être un Number, String ou Object'
}
let mecanisms = R.intersection(R.keys(rawNode), R.keys(knownMecanisms))
@ -437,11 +437,9 @@ let treat = (situationGate, rule) => rawNode => {
if (k === 'multiplication') {
let
val = node => node.nodeValue,
mult = (base, rate, facteur, plafond) =>
Math.min(base, plafond) * rate * facteur,
constantNode = constant => ({nodeValue: constant}),
anyNull = R.any(R.pipe(val, R.equals(null))),
assiette = reTreat(v['assiette']),
//TODO parser le taux dans le parser ?
taux = v['taux'] ? reTreat({taux: v['taux']}) : constantNode(1),
@ -498,9 +496,68 @@ let treat = (situationGate, rule) => rawNode => {
}
if (k === 'barème') {
// Sous entendu : barème en taux marginaux. A étendre (avec une propriété type ?) quand les règles en contiendront d'autres.
// Sous entendu : barème en taux marginaux.
// A étendre (avec une propriété type ?) quand les règles en contiendront d'autres.
if (v.composantes) { //mécanisme de composantes. Voir known-mecanisms.md/composantes
let
baremeProps = R.dissoc('composantes')(v),
composantes = v.composantes.map(c =>
({
... reTreat(
{
barème: {
... baremeProps,
... R.dissoc('attributs')(c)
}
}
),
composante: c.nom ? {nom: c.nom} : c.attributs
})
),
l = console.log('composantes', composantes.map(val)),
nodeValue = anyNull(composantes) ? null
: R.reduce(R.add, 0, composantes.map(val))
return {
nodeValue,
category: 'mecanism',
name: 'composantes',
type: 'numeric',
explanation: composantes,
jsx: <Node
classes="mecanism composantes"
name="composantes"
value={nodeValue}
child={
<ul>
{ composantes.map((c, i) =>
[<li className="composante" key={JSON.stringify(c.composante)}>
<ul className="composanteAttributes">
{R.toPairs(c.composante).map(([k,v]) =>
<li>
<span>{k}: </span>
<span>{v}</span>
</li>
)}
</ul>
<div className="content">
{c.jsx}
</div>
</li>,
i < (composantes.length - 1) && <li className="composantesSymbol"><i className="fa fa-plus-circle" aria-hidden="true"></i></li>
]
)
}
</ul>
}
/>
}
}
if (v['multiplicateur des tranches'] == null)
throw "un barème nécessite pour l'instant une propriété 'multiplicateur des tranches'"
let
val = node => node.nodeValue,
assiette = reTreat(v['assiette']),
multiplicateur = reTreat(v['multiplicateur des tranches']),
@ -555,7 +612,7 @@ let treat = (situationGate, rule) => rawNode => {
name="barème"
value={nodeValue}
child={
<ul>
<ul className="properties">
<li key="assiette">
<span className="key">assiette: </span>
<span className="value">{assiette.jsx}</span>
@ -567,7 +624,7 @@ let treat = (situationGate, rule) => rawNode => {
<table className="tranches">
<thead>
<tr>
<th>Tranche de l'assiette</th>
<th>Tranches de l'assiette</th>
<th>Taux</th>
</tr>
{v['tranches'].map(({'en-dessous de': maxOnly, 'au-dessus de': minOnly, de: min, 'à': max, taux}) =>
@ -619,7 +676,7 @@ let treat = (situationGate, rule) => rawNode => {
}
}
throw "Le mécanisme qui vient d'être loggué est inconnu !"
throw "Le mécanisme est inconnu !"
}
@ -633,6 +690,7 @@ let treatRuleRoot = (situationGate, rule) => R.pipe(
let
child = treat(situationGate, rule)(value),
nodeValue = child.nodeValue
return {
category: 'ruleProp',
rulePropType: 'cond',
@ -645,7 +703,8 @@ let treatRuleRoot = (situationGate, rule) => R.pipe(
name="non applicable si"
value={nodeValue}
child={
child.jsx
child.category === 'variable' ? <div className="node">{child.jsx}</div>
: child.jsx
}
/>
}

View File

@ -105,10 +105,12 @@ let buildNextSteps = R.pipe(
*/
R.path(['formule', 'explanation', 'explanation']),
analysedSituation => {
// console.log('analysedSituation', analysedSituation)
//TODO temporary fix
missingVariables = collectMissingVariables('groupByMissingVariable')(analysedSituation)
return missingVariables
},
// mv => console.log('l', mv),
R.keys,
/*
Certaines variables manquantes peuvent être factorisées dans des groupes.