⚙️ 📝 Meilleure explication de l'inversion
parent
3f528cbd40
commit
e59217308d
|
@ -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.
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
.inversionNumérique #inversionsPossibles {
|
||||
list-style-type: disc;
|
||||
margin-left: 1em
|
||||
}
|
|
@ -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 :
|
||||
</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 }} />
|
||||
)
|
|
@ -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'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue