⚙️ Implémente le mécanisme sélection, grossièrement

pull/51/head
Laurent Bossavit 2017-09-18 19:21:21 +02:00
parent 1d17b3a4fd
commit 4ba3362528
4 changed files with 23 additions and 12 deletions

View File

@ -20,10 +20,10 @@
formule:
sélection:
données: taux versement transport
c: code postal
cherche: codePostal
cherche: code postal
dans: codePostal
composantes:
- nom: aot
cible: aot
renvoie: aot
- nom: smt
cible: smt
renvoie: smt

View File

@ -5,3 +5,4 @@
description: |
Lorsqu'une entreprise dispose de plusieurs établissements, certaines cotisations sont
calculées à l'échelle de l'établissement et sont fonction de règlementations locales.
format: nombre

View File

@ -331,12 +331,22 @@ let treat = (rules, rule) => rawNode => {
}
let mecanismSelection = (recurse,k,v) => {
let data = v['données']
let explanation = recurse(v['clé'])
let dataSourceName = v['données']
let dataSearchField = v['dans']
let dataTargetName = v['renvoie']
let explanation = recurse(v['cherche'])
let evaluate = (situationGate, parsedRules, node) => {
let collectMissing = node => node.explanation.nodeValue ? [] : collectNodeMissing(node.explanation),
nodeValue = null
dataSource = findRuleByName(parsedRules, dataSourceName),
dataKey = evaluateNode(situationGate, parsedRules, explanation).nodeValue,
data = dataSource ? dataSource['data'] : null,
dataItems = (data && dataKey && dataSearchField) ? R.filter(item => item[dataSearchField] == dataKey, data) : null,
dataItemValues = dataItems ? R.values(dataItems) : null,
// TODO - over-specific! transform the JSON instead
dataItemSubValues = dataItemValues ? dataItemValues[0][dataTargetName]["taux"] : null,
sortedSubValues = dataItemSubValues ? R.sortBy(pair => pair[0], R.toPairs(dataItemSubValues)) : null,
nodeValue = sortedSubValues ? Number.parseFloat(R.last(sortedSubValues)[1]) : null
return rewriteNode(node,nodeValue,explanation,collectMissing)
}

View File

@ -248,13 +248,13 @@ describe('analyseSituation with mecanisms', function() {
nom: "startHere",
formule: {"sélection": {
données: "startHere",
c: "code postal",
cherche: "codePostal",
cible: "smt"
cherche: "code postal",
dans: "codePostal",
renvoie: "smt"
}},
données: 'taux_versement_transport'},
{espace: "top", nom: "code postal"}],
rules = rawRules.map(enrichRule)
{espace: "top", nom: "code postal", format: "nombre"}],
rules = rawRules.map(rule => enrichRule(rule,data))
expect(analyseSituation(rules,"startHere")(stateSelector)).to.have.property('nodeValue',2.0)
});