From 7c935544cb9bb36f244e3c4df61a016a8981e4db Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Tue, 5 Jun 2018 18:55:34 +0200 Subject: [PATCH] :gear: ajoute la gestion des questions conditionnelles Une variable question peut maintenant avoir un champ applicable si ou non applicable si. --- source/engine/traverse.js | 22 ++++++++++----------- test/mécanismes/question-conditionelle.yaml | 21 ++++++++++++++++++++ test/mécanismes/une-de-ces-conditions.yaml | 2 +- 3 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 test/mécanismes/question-conditionelle.yaml diff --git a/source/engine/traverse.js b/source/engine/traverse.js index 9bafec0bf..721d2d330 100644 --- a/source/engine/traverse.js +++ b/source/engine/traverse.js @@ -133,27 +133,27 @@ let fillVariableNode = (rules, rule, filter) => parseResult => { } let variable = findRuleByDottedName(parsedRules, dottedName), - variableIsCalculable = variable.formule != null, + variableHasFormula = variable.formule != null, + variableHasCond = variable['applicable si'] != null || variable['non applicable si'] != null, situationValue = evaluateVariable(situation, dottedName, variable), - needsEvaluation = variableIsCalculable && situationValue == null, + needsEvaluation = (variableHasCond || variableHasFormula) && situationValue == null, parsedRule = needsEvaluation ? evaluateNode(cache, situation, parsedRules, variable) : variable, // evaluateVariable renvoit la valeur déduite de la situation courante renseignée par l'utilisateur explanation = parsedRule, nodeValue = - situationValue != null + situationValue != null ? situationValue // cette variable a été directement renseignée - : variableIsCalculable + : variableHasCond || variableHasFormula ? parsedRule.nodeValue // la valeur du calcul fait foi : null, // elle restera donc nulle - missingVariables = - nodeValue != null // notamment si situationValue != null - ? {} - : variableIsCalculable - ? parsedRule.missingVariables - : { [dottedName]: 1 } - + missingVariables = nodeValue != null ? {} : + { + ...(needsEvaluation ? parsedRule.missingVariables : {}), + ...(!situationValue ? { [dottedName]: 1 } : {}), + } + cache[cacheName] = rewriteNode( node, nodeValue, diff --git a/test/mécanismes/question-conditionelle.yaml b/test/mécanismes/question-conditionelle.yaml new file mode 100644 index 000000000..b702a623e --- /dev/null +++ b/test/mécanismes/question-conditionelle.yaml @@ -0,0 +1,21 @@ +- nom: enfants + +- nom: nombre enfants + applicable si: enfants + question: Combien d'enfants avez vous ? + par défaut: 4 + +- nom: famille nombreuse + test: question conditionnelle + formule: nombre enfants > 3 + exemples: + - nom: question posée + situation: + enfants: oui + variables manquantes: ['nombre enfants'] + valeur attendue: null + - nom: question non posée + situation: + enfants: non + variables manquantes: [] + valeur attendue: false \ No newline at end of file diff --git a/test/mécanismes/une-de-ces-conditions.yaml b/test/mécanismes/une-de-ces-conditions.yaml index 7f88a5a22..8a80414de 100644 --- a/test/mécanismes/une-de-ces-conditions.yaml +++ b/test/mécanismes/une-de-ces-conditions.yaml @@ -29,4 +29,4 @@ dégradation mineure: non dégradation majeure: non valeur attendue: 3000 - variables manquantes: [] + variables manquantes: [] \ No newline at end of file