1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-02-09 01:45:03 +00:00
mon-entreprise/source/engine/variables.js
mama 75354efdc5 🔨 ⚙️ Première version des tests (exemples) sur /règle
Les 4 éléments du CDD sont testées.
Il reste du boulot, voir le TODO des tests de majoration chômage
2017-05-11 10:41:58 +02:00

37 lines
1.2 KiB
JavaScript

import R from 'ramda'
import {parentName, nameLeaf, findRuleByDottedName, splitName, joinName} from './rules'
let evaluateBottomUp = situationGate => startingFragments => {
let rec = (parentFragments, childFragments=[]) =>
parentFragments.length == 0 ? null
: ( do {
let query = joinName(parentFragments),
expectedResult = ( R.isEmpty(childFragments) ? 'oui' : joinName(childFragments) )
situationGate(query) == null ?
rec(
R.dropLast(1)(parentFragments),
[ R.last(parentFragments), ...childFragments]
)
: situationGate(query) == expectedResult
})
return rec(startingFragments)
}
/* Evalue la valeur d'une variable
en utilisant la fonction situationGate qui donne accès à la situation courante*/
export let evaluateVariable = (situationGate, variableName, rule) => {
// test rec
let value = situationGate(variableName)
return rule.format != null ?
value
: !rule.formule ?
// c'est une variante, eg. motifs . classique . accroissement d'activité
evaluateBottomUp(situationGate)(splitName(variableName))
: rule.formule['une possibilité'] ?
evaluateBottomUp(situationGate)(splitName(variableName))
: value
}