⚙️ Implémentation des périodes
parent
9390baa53b
commit
44f01bd82b
|
@ -241,7 +241,7 @@ export let treatOther = rawNode => {
|
|||
'Cette donnée : ' + rawNode + ' doit être un Number, String ou Object'
|
||||
)
|
||||
}
|
||||
export let treatObject = (rules, rule) => rawNode => {
|
||||
export let treatObject = (rules, rule, treatOptions) => rawNode => {
|
||||
let mecanisms = intersection(keys(rawNode), keys(knownMecanisms))
|
||||
|
||||
if (mecanisms.length != 1) {
|
||||
|
@ -280,5 +280,5 @@ export let treatObject = (rules, rule) => rawNode => {
|
|||
},
|
||||
action = propOr(mecanismError, k, dispatch)
|
||||
|
||||
return action(treat(rules, rule), k, v)
|
||||
return action(treat(rules, rule, treatOptions), k, v)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,54 @@ import { getSituationValue } from './variables'
|
|||
import { Trans } from 'react-i18next'
|
||||
|
||||
export let treatVariable = (rules, rule, filter) => parseResult => {
|
||||
let variable = treatVariableTimeless(rules, rule, filter)(parseResult)
|
||||
let evaluate = (cache, situation, parsedRules, node) => {
|
||||
let explanation = evaluateNode(
|
||||
cache,
|
||||
situation,
|
||||
parsedRules,
|
||||
node.explanation
|
||||
)
|
||||
let nodeValue = explanation.nodeValue
|
||||
if (nodeValue == null)
|
||||
return rewriteNode(
|
||||
node,
|
||||
nodeValue,
|
||||
explanation,
|
||||
explanation.missingVariables
|
||||
)
|
||||
|
||||
let ruleToTransform = findRuleByDottedName(
|
||||
rules,
|
||||
node.explanation.dottedName
|
||||
)
|
||||
|
||||
let variablePeriod = ruleToTransform['période'] || situation('période')
|
||||
|
||||
let newNodeValue =
|
||||
rule['période'] === 'mois' && variablePeriod === 'année'
|
||||
? nodeValue / 12
|
||||
: rule['période'] === 'année' && variablePeriod === 'mois'
|
||||
? nodeValue * 12
|
||||
: nodeValue
|
||||
|
||||
return rewriteNode(
|
||||
node,
|
||||
newNodeValue,
|
||||
explanation,
|
||||
explanation.missingVariables
|
||||
)
|
||||
}
|
||||
|
||||
return {
|
||||
type: 'periodTransform',
|
||||
jsx: () => null,
|
||||
explanation: variable,
|
||||
evaluate
|
||||
}
|
||||
}
|
||||
|
||||
export let treatVariableTimeless = (rules, rule, filter) => parseResult => {
|
||||
let evaluate = (cache, situation, parsedRules, node) => {
|
||||
let dottedName = node.dottedName,
|
||||
// On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée
|
||||
|
|
|
@ -1,39 +1,21 @@
|
|||
# This is not a mecanism test, but we make use of the simplicity of declaring tests in YAML, only available for mecanisms for now
|
||||
|
||||
- test: Barème mensuel
|
||||
formule:
|
||||
barème:
|
||||
assiette: 3000
|
||||
tranches:
|
||||
- en-dessous de: 5000
|
||||
taux: 4.65%
|
||||
- de: 5000
|
||||
à: 15000
|
||||
taux: 3%
|
||||
- au-dessus de: 15000
|
||||
taux: 1%
|
||||
|
||||
exemples:
|
||||
- nom: "petite assiette"
|
||||
situation:
|
||||
assiette: 3000
|
||||
base: 5000
|
||||
valeur attendue: 139.5
|
||||
|
||||
|
||||
|
||||
|
||||
- nom: assiette
|
||||
- nom: assiette mensuelle
|
||||
période: mois
|
||||
format: €
|
||||
|
||||
- test: Barème annuel
|
||||
- test: Périodes, barème annuel assiette mensuelle
|
||||
période: année
|
||||
formule:
|
||||
barème:
|
||||
# cette formule appellant l'assiette est annuelle :
|
||||
# si l'assiette est aussi annuelle dans le contexte de la simulation actuelle, c'est bon
|
||||
# sinon une conversion est nécessaire et faite automatiquement par le moteur
|
||||
assiette: assiette
|
||||
assiette: assiette mensuelle
|
||||
tranches:
|
||||
# ce sont ces chiffres là qui imposent à la règle d'être annuelle
|
||||
# de plus, les règles annuelles de la loi sont rarement traduites officiellement en d'autres périodes
|
||||
|
@ -46,9 +28,80 @@
|
|||
taux: 1%
|
||||
|
||||
exemples:
|
||||
- nom: "petite assiette"
|
||||
situation:
|
||||
- situation:
|
||||
assiette mensuelle: 3000
|
||||
valeur attendue: 1575
|
||||
|
||||
|
||||
- nom: assiette annuelle
|
||||
période: année
|
||||
format: €
|
||||
|
||||
- test: Périodes, barème mensuel assiette annuelle
|
||||
période: mois
|
||||
formule:
|
||||
barème:
|
||||
# cette formule appellant l'assiette est annuelle :
|
||||
# si l'assiette est aussi annuelle dans le contexte de la simulation actuelle, c'est bon
|
||||
# sinon une conversion est nécessaire et faite automatiquement par le moteur
|
||||
assiette: assiette annuelle
|
||||
tranches:
|
||||
# ce sont ces chiffres là qui imposent à la règle d'être annuelle
|
||||
# de plus, les règles annuelles de la loi sont rarement traduites officiellement en d'autres périodes
|
||||
- en-dessous de: 2500
|
||||
taux: 4.65%
|
||||
- de: 2500
|
||||
à: 7500
|
||||
taux: 3%
|
||||
- au-dessus de: 7500
|
||||
taux: 1%
|
||||
|
||||
exemples:
|
||||
- situation:
|
||||
assiette annuelle: 36000
|
||||
valeur attendue: 131.25
|
||||
|
||||
- nom: assiette
|
||||
format: €
|
||||
|
||||
- test: Périodes, période dans la situation
|
||||
période: année
|
||||
formule:
|
||||
barème:
|
||||
assiette: assiette
|
||||
tranches:
|
||||
- en-dessous de: 30000
|
||||
taux: 4.65%
|
||||
- de: 30000
|
||||
à: 90000
|
||||
taux: 3%
|
||||
- au-dessus de: 90000
|
||||
taux: 1%
|
||||
|
||||
exemples:
|
||||
- situation:
|
||||
période: mois
|
||||
assiette: 3000
|
||||
valeur attendue: 1575
|
||||
- situation:
|
||||
période: année
|
||||
assiette: 36000
|
||||
valeur attendue: 1575
|
||||
|
||||
|
||||
- nom: assiette deux
|
||||
période: mois
|
||||
format: €
|
||||
|
||||
- test: Périodes, variable neutre appelant variable mensuelle
|
||||
formule:
|
||||
multiplication:
|
||||
assiette: assiette deux
|
||||
taux: 10%
|
||||
|
||||
exemples:
|
||||
- situation:
|
||||
période: mois
|
||||
assiette deux: 3000
|
||||
valeur attendue: 300
|
||||
|
||||
|
|
Loading…
Reference in New Issue