1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-02-08 19:55:00 +00:00
mon-entreprise/source/engine/variables.js
mama e030ed1e44 Refonte conceptuelle de l'écriture des règles
Changements majeurs : espaces de noms, variantes imbriquées.
Des notes en .md expliquent les changements, ou les changements à venir
même si l'implémentation est en retard.
Un peu plus d'ordre dans le dossier /règles : les 'entités' et règles
calculatoires se rapprochent...
2017-04-27 18:45:36 +02:00

30 lines
894 B
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)
}
export let evaluateVariable = (situationGate, variableName, format) => {
// test rec
let value = situationGate(variableName)
return R.contains(format)(['nombre positif', 'période'])
? value
: evaluateBottomUp(situationGate)(splitName(variableName))
}