⚙️ 📝 Meilleure explication de l'inversion

pull/439/head
Mael 2019-01-30 18:53:57 +01:00
parent 3f528cbd40
commit e59217308d
6 changed files with 87 additions and 26 deletions

View File

@ -9,7 +9,7 @@ sélection:
une possibilité:
type: enum
inversion:
inversion numérique:
type: numeric
description: |
La formule de calcul de cette variable n'est pas connue, souvent elle n'a même pas de sens. Mais le mécanisme `inversion` indique qu'elle peut être _estimée_ à partir de l'un des _objectifs_ listés sous l'attribut `avec`. Il faut alors renseigner une valeur cible pour cet objectif.

View File

@ -0,0 +1,4 @@
.inversionNumérique #inversionsPossibles {
list-style-type: disc;
margin-left: 1em
}

View File

@ -0,0 +1,60 @@
import React from 'react'
import { Node } from './common'
import { Trans } from 'react-i18next'
import './InversionNumérique.css'
import { ShowValuesConsumer } from 'Components/rule/ShowValuesContext'
import withLanguage from 'Components/utils/withLanguage'
import { toPairs } from 'ramda'
import { makeJsx } from 'Engine/evaluation'
import { Leaf } from 'Engine/mecanismViews/common'
let Comp = withLanguage(function InversionNumérique({
nodeValue,
explanation
}) {
return (
<ShowValuesConsumer>
{showValues => (
<Node
classes="mecanism inversionNumérique"
name="inversion numérique"
value={nodeValue}
child={
!showValues || explanation.inversedWith?.value == null ? (
<>
<p>
Cette formule de calcul n'existe pas ! Mais on peut faire une
estimation à partir de&nbsp;:
</p>
<ul id="inversionsPossibles">
{explanation.avec.map(el => (
<li key={el.name}>{makeJsx(el)}</li>
))}
</ul>
</>
) : (
<>
{' '}
<p>
Cette valeur a été estimée à partir d'une autre variable qui
possède une formule de calcul et dont la valeur a été fixée
dans la simulation :
</p>
<Leaf
classes="variable"
dottedName={explanation.inversedWith.rule.dottedName}
value={explanation.inversedWith.value}
/>
</>
)
}
/>
)}
</ShowValuesConsumer>
)
})
//eslint-disable-next-line
export default (nodeValue, explanation) => (
<Comp {...{ nodeValue, explanation }} />
)

View File

@ -60,6 +60,7 @@ import 'react-virtualized/styles.css'
import Somme from './mecanismViews/Somme'
import Barème from './mecanismViews/Barème'
import BarèmeContinu from './mecanismViews/BarèmeContinu'
import InversionNumérique from './mecanismViews/InversionNumérique'
import Variations from './mecanismViews/Variations'
import Allègement from './mecanismViews/Allègement'
import Composantes from './mecanismViews/Composantes'
@ -516,7 +517,11 @@ let doInversion = (oldCache, situationGate, parsedRules, v, dottedName) => {
return {
nodeValue,
missingVariables: {},
inversionCache
inversionCache,
inversedWith: {
rule: fixedObjectiveRule,
value: fixedObjectiveValue
}
}
}
@ -531,7 +536,15 @@ export let mecanismInversion = dottedName => (recurse, k, v) => {
? Number.parseFloat(situationGate(dottedName))
: inversion.nodeValue,
missingVariables = inversion.missingVariables
let evaluatedNode = rewriteNode(node, nodeValue, null, missingVariables)
let evaluatedNode = rewriteNode(
node,
nodeValue,
{
...evolve({ avec: map(recurse) }, v),
inversedWith: inversion?.inversedWith
},
missingVariables
)
// TODO - we need this so that ResultsGrid will work, but it's
// just not right
toPairs(inversion.inversionCache).map(([k, v]) => (cache[k] = v))
@ -541,26 +554,10 @@ export let mecanismInversion = dottedName => (recurse, k, v) => {
return {
...v,
evaluate,
// eslint-disable-next-line
jsx: nodeValue => (
<Node
classes="mecanism inversion"
name="inversion"
value={nodeValue}
child={
<div>
<div>avec</div>
<ul>
{v.avec.map(recurse).map(el => (
<li key={el.name}>{makeJsx(el)}</li>
))}
</ul>
</div>
}
/>
),
explanation: evolve({ avec: map(recurse) }, v),
jsx: InversionNumérique,
category: 'mecanism',
name: 'inversion',
name: 'inversion numérique',
type: 'numeric'
}
}

View File

@ -263,7 +263,7 @@ export let treatObject = (rules, rule, treatOptions) => rawNode => {
'une possibilité': 'oui',
missingVariables: { [rule.dottedName]: 1 }
}),
inversion: mecanismInversion(rule.dottedName),
'inversion numérique': mecanismInversion(rule.dottedName),
allègement: mecanismReduction,
variations: mecanismVariations,
synchronisation: mecanismSynchronisation

View File

@ -747,7 +747,7 @@
message: |
Le salaire saisi est élevé. Ne vous êtes-vous pas trompé de période de calcul ?
formule:
inversion:
inversion numérique:
question: Quel est le salaire ?
titre: salaire
avec:
@ -2575,7 +2575,7 @@
variations:
- si: micro entreprise
alors:
inversion:
inversion numérique:
avec:
- revenu disponible
- sinon: rémunération totale du dirigeant + charges
@ -2634,7 +2634,7 @@
Il faut donc voir ce calcul comme *le montant qui devra de toute façon être payé* à court terme après 2 ans d'exercice.
formule:
inversion:
inversion numérique:
avec:
- revenu brut
- revenu disponible