From 76b60afed7a16237c7a8eae7adc997eba74747cf Mon Sep 17 00:00:00 2001 From: Mael Date: Wed, 19 Jun 2019 11:54:47 +0200 Subject: [PATCH] =?UTF-8?q?1er=20affichage=20des=20unit=C3=A9s=20:=20indem?= =?UTF-8?q?nit=C3=A9=20km=20v=C3=A9lo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/components/Value.js | 2 +- source/components/rule/Rule.js | 2 +- source/engine/evaluateRule.js | 1 - source/engine/mecanisms.js | 3 ++- source/engine/parse.js | 10 +++++++++- source/engine/parseReference.js | 8 +++++--- source/engine/parseRule.js | 5 ++++- source/engine/traverse.js | 1 - source/règles/base.yaml | 30 ++++++++++++++++++------------ 9 files changed, 40 insertions(+), 22 deletions(-) diff --git a/source/components/Value.js b/source/components/Value.js index ee27fbefb..3c3cabba2 100644 --- a/source/components/Value.js +++ b/source/components/Value.js @@ -35,7 +35,7 @@ export default ({ nodeValue, unit }) => { {(formats[valueType !== 'number' ? valueType : unitText] || numberFormatter('decimal'))(nodeValue)}   - {unit && unitText} + {unit && unitText !== '€' && unitText} ) } diff --git a/source/components/rule/Rule.js b/source/components/rule/Rule.js index 9b296d4a1..5f18ac3c1 100644 --- a/source/components/rule/Rule.js +++ b/source/components/rule/Rule.js @@ -64,7 +64,7 @@ export default compose( namespaceRules = findRuleByNamespace(flatRules, dottedName) let displayedRule = analysedExample || analysedRule - console.log(displayedRule) + console.log('dr', displayedRule) return ( <> {this.state.viewSource ? ( diff --git a/source/engine/evaluateRule.js b/source/engine/evaluateRule.js index 9ab7b4bf8..9670b7592 100644 --- a/source/engine/evaluateRule.js +++ b/source/engine/evaluateRule.js @@ -74,7 +74,6 @@ export default (cache, situationGate, parsedRules, node) => { ...node, ...evaluatedAttributes, ...{ formule: evaluatedFormula }, - unit: evaluatedFormula?.explanation?.unit, nodeValue, isApplicable, missingVariables, diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index ef0767f24..0b91bed74 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -745,7 +745,8 @@ export let mecanismMin = (recurse, k, v) => { explanation, type: 'numeric', category: 'mecanism', - name: 'le minimum de' + name: 'le minimum de', + unit: explanation[0].unit } } diff --git a/source/engine/parse.js b/source/engine/parse.js index 90e5ee45c..92ed57c24 100644 --- a/source/engine/parse.js +++ b/source/engine/parse.js @@ -51,6 +51,7 @@ import { parseReference, parseReferenceTransforms } from './parseReference' +import { inferUnit } from 'Engine/units' export let parse = (rules, rule, parsedRules) => rawNode => { let onNodeType = cond([ @@ -201,6 +202,12 @@ let mecanismOperation = (k, operatorFunction, symbol) => (recurse, k, v) => { let explanation = v.explanation.map(recurse) + let unit = inferUnit( + k, + explanation[0].unit || undefined, + explanation[1].unit || undefined + ) + let jsx = (nodeValue, explanation) => ( (recurse, k, v) => { jsx, operator: symbol || k, // is this useful ? text: rawNode, - explanation + explanation, + unit } } diff --git a/source/engine/parseReference.js b/source/engine/parseReference.js index bdb9b9b90..3042ac9fd 100644 --- a/source/engine/parseReference.js +++ b/source/engine/parseReference.js @@ -1,3 +1,4 @@ +// Reference to a variable import React from 'react' import { Trans } from 'react-i18next' import { evaluateNode, makeJsx, rewriteNode } from './evaluation' @@ -18,8 +19,8 @@ export let parseReference = (rules, rule, parsedRules, filter) => ({ let parsedRule = parsedRules[dottedName] || - (console.log('uncached : from `', rule.dottedName, '` to `', dottedName) || - parseRule(rules, findRuleByDottedName(rules, dottedName), parsedRules)) + parseRule(rules, findRuleByDottedName(rules, dottedName), parsedRules) + let evaluate = (cache, situation, parsedRules, node) => { let dottedName = node.dottedName, // On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée @@ -98,7 +99,8 @@ export let parseReference = (rules, rule, parsedRules, filter) => ({ name: partialReference, category: 'variable', fragments, - dottedName + dottedName, + unit: parsedRule.unit } } diff --git a/source/engine/parseRule.js b/source/engine/parseRule.js index 15344aa1a..318d2d700 100644 --- a/source/engine/parseRule.js +++ b/source/engine/parseRule.js @@ -8,6 +8,8 @@ import { evaluateNode, makeJsx, rewriteNode } from './evaluation' import { parse } from 'Engine/parse' export default (rules, rule, parsedRules) => { + if (rule.dottedName.includes('distance journalière')) + console.log('trr', rule, parsedRules) if (parsedRules[rule.dottedName]) return parsedRules[rule.dottedName] parsedRules[rule.dottedName] = 'being parsed' @@ -116,7 +118,8 @@ export default (rules, rule, parsedRules) => { // Pas de propriété explanation et jsx ici car on est parti du (mauvais) principe que 'non applicable si' et 'formule' sont particuliers, alors qu'ils pourraient être rangé avec les autres mécanismes ...parsedRoot, evaluate, - parsed: true + parsed: true, + unit: rule.unit || parsedRoot.formule?.explanation?.unit } return parsedRules[rule.dottedName] } diff --git a/source/engine/traverse.js b/source/engine/traverse.js index 39b878ab0..2cb161097 100644 --- a/source/engine/traverse.js +++ b/source/engine/traverse.js @@ -82,7 +82,6 @@ export let analyseMany = (parsedRules, targetNames) => situationGate => { // TODO: we should really make use of namespaces at this level, in particular // setRule in Rule.js needs to get smarter and pass dottedName let cache = { parseLevel: 0 } - console.log('orang', parsedRules) let parsedTargets = targetNames.map(t => { let parsedTarget = findRule(parsedRules, t) diff --git a/source/règles/base.yaml b/source/règles/base.yaml index c2e92b3f7..f7fce49b3 100644 --- a/source/règles/base.yaml +++ b/source/règles/base.yaml @@ -4,6 +4,17 @@ - mois - année +- nom: contrat salarié + icônes: 📄 + question: Activité salariée ? + par défaut: oui + description: | + Le contrat qui lie une entreprise (via son établissement) à un individu, qui est alors son salarié. + + Le contrat n'est en fait pas nécessaire dans le droit français, il est possible d'employer quelqu'un sans contrat par exemple dans les cas suivants: + - Particuliers employeurs : Plus de 8 heures par semaine ou de plus de 4 semaines consécutives dans l'année. + - CDI : La signature d’un contrat de travail n’est pas obligatoire dans certains cas. C’est le cas du Contrat de travail à Durée Indéterminée, considéré comme la forme normale et générale de la relation de travail entre un salarié et un employeur (Art. L1221-2 du Code du travail). + - espace: contrat salarié . indemnité kilométrique vélo nom: yoyo formule: distance annuelle * indemnité kilométrique @@ -22,7 +33,7 @@ formule: le minimum de: - distance annuelle * indemnité kilométrique - - 200 + - plafond d'exonération références: fiche URSSAF: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-elements-a-prendre-en-compte/les-frais-professionnels/les-frais-de-transport/trajet-domicilelieu-de-travail/prise-en-charge-facultative-des/indemnites-kilometriques-velo.html fiche service-public: https://www.service-public.fr/professionnels-entreprises/vosdroits/F33808 @@ -32,6 +43,12 @@ active: oui valeur attendue: 200 + +- espace: contrat salarié . indemnité kilométrique vélo + nom: plafond d'exonération + unité: € + formule: 200 + - espace: contrat salarié . indemnité kilométrique vélo nom: indemnité kilométrique unité: €/km @@ -675,17 +692,6 @@ compensation pour congés non pris: 39.6 valeur attendue: 290 -- nom: contrat salarié - icônes: 📄 - question: Activité salariée ? - par défaut: oui - description: | - Le contrat qui lie une entreprise (via son établissement) à un individu, qui est alors son salarié. - - Le contrat n'est en fait pas nécessaire dans le droit français, il est possible d'employer quelqu'un sans contrat par exemple dans les cas suivants: - - Particuliers employeurs : Plus de 8 heures par semaine ou de plus de 4 semaines consécutives dans l'année. - - CDI : La signature d’un contrat de travail n’est pas obligatoire dans certains cas. C’est le cas du Contrat de travail à Durée Indéterminée, considéré comme la forme normale et générale de la relation de travail entre un salarié et un employeur (Art. L1221-2 du Code du travail). - - espace: contrat salarié nom: assimilé salarié description: |