⚙️ Implémente le mécanisme sélection, grossièrement
parent
1d17b3a4fd
commit
4ba3362528
|
@ -20,10 +20,10 @@
|
|||
formule:
|
||||
sélection:
|
||||
données: taux versement transport
|
||||
clé: code postal
|
||||
cherche: codePostal
|
||||
cherche: code postal
|
||||
dans: codePostal
|
||||
composantes:
|
||||
- nom: aot
|
||||
cible: aot
|
||||
renvoie: aot
|
||||
- nom: smt
|
||||
cible: smt
|
||||
renvoie: smt
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -248,13 +248,13 @@ describe('analyseSituation with mecanisms', function() {
|
|||
nom: "startHere",
|
||||
formule: {"sélection": {
|
||||
données: "startHere",
|
||||
clé: "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)
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue