diff --git a/mon-entreprise/source/components/Notifications.tsx b/mon-entreprise/source/components/Notifications.tsx index a627304ae..bb2ae9b74 100644 --- a/mon-entreprise/source/components/Notifications.tsx +++ b/mon-entreprise/source/components/Notifications.tsx @@ -31,8 +31,6 @@ export default function Notifications() { engine.evaluate(notification.dottedName).isApplicable ) ) - console.log(notifications.map(n => engine.evaluate(n.dottedName))) - const inversionFail = useInversionFail() const hiddenNotifications = useSelector( (state: RootState) => state.simulation?.hiddenNotifications diff --git a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml index 72cd2ceb6..1f66bde2e 100644 --- a/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml +++ b/mon-entreprise/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml @@ -8,5 +8,5 @@ objectifs: situation: dirigeant: "'indépendant'" - aide déclaration revenu indépendant 2019: true + aide déclaration revenu indépendant 2019: oui unité par défaut: '€/an' diff --git a/mon-entreprise/test/regressions/simulations-indépendant.yaml b/mon-entreprise/test/regressions/simulations-indépendant.yaml index a86272b2e..e6b9d083c 100644 --- a/mon-entreprise/test/regressions/simulations-indépendant.yaml +++ b/mon-entreprise/test/regressions/simulations-indépendant.yaml @@ -33,7 +33,7 @@ activité: acre: - dirigeant . indépendant . revenu net de cotisations: 50000 €/an - entreprise . ACRE: true + entreprise . ACRE: oui impôt sur le revenu: - dirigeant . indépendant . revenu net de cotisations: 20000 €/an diff --git a/publicodes/source/components/rule/Rule.tsx b/publicodes/source/components/rule/Rule.tsx index c5f02e80f..ebfc48545 100644 --- a/publicodes/source/components/rule/Rule.tsx +++ b/publicodes/source/components/rule/Rule.tsx @@ -17,7 +17,7 @@ export default function Rule({ dottedName, engine, language }) { } const rule = engine.evaluate(dottedName) - const isSetInStituation = engine.situation[dottedName] !== undefined + const isSetInStituation = engine.parsedSituation[dottedName] !== undefined const { description, question } = rule return ( diff --git a/publicodes/source/index.ts b/publicodes/source/index.ts index 061df2921..372c19122 100644 --- a/publicodes/source/index.ts +++ b/publicodes/source/index.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/ban-types */ -import { mapObjIndexed } from 'ramda' +import { map } from 'ramda' import { evaluationError, warning } from './error' import { evaluateNode } from './evaluation' import { convertNodeToUnit, simplifyNodeUnit } from './nodeUnits' @@ -23,9 +23,7 @@ type Cache = { } } -type EvaluatedSituation = Partial< - Record> -> +type ParsedSituation = Partial> export type EvaluationOptions = Partial<{ unit: string @@ -41,7 +39,7 @@ export { utils } export default class Engine { parsedRules: ParsedRules - situation: EvaluatedSituation = {} + parsedSituation: ParsedSituation = {} private cache: Cache private warnings: Array = [] @@ -71,7 +69,7 @@ export default class Engine { const result = simplifyNodeUnit( evaluateNode( this.cache, - this.situation, + this.parsedSituation, this.parsedRules, parse( this.parsedRules, @@ -95,14 +93,17 @@ export default class Engine { situation: Partial> = {} ) { this.resetCache() - this.situation = mapObjIndexed( - (value, name) => - typeof value === 'string' - ? this.evaluateExpression(value, `[situation] ${name}`) - : value, + this.parsedSituation = map( + value => + typeof value === 'object' + ? value + : parse( + this.parsedRules, + { dottedName: '' }, + this.parsedRules + )(value), situation - ) as EvaluatedSituation - this.resetCache() + ) return this } diff --git a/publicodes/source/parseReference.ts b/publicodes/source/parseReference.ts index 9ca7784c7..b988f9f11 100644 --- a/publicodes/source/parseReference.ts +++ b/publicodes/source/parseReference.ts @@ -192,10 +192,12 @@ Par défaut, seul le premier s'applique. Si vous voulez un autre comportement, v applicabilityEvaluation ) } - const situationValue = situation[dottedName]?.evaluate - ? evaluateNode(cache, situation, rules, situation[dottedName]) - : situation[dottedName] - if (situationValue != null) { + if (situation[dottedName]) { + // Conditional evaluation is required because some mecanisms like + // "synchronisation" store raw JS objects in the situation. + const situationValue = situation[dottedName]?.evaluate + ? evaluateNode(cache, situation, rules, situation[dottedName]) + : situation[dottedName] const unit = !situationValue.unit || serializeUnit(situationValue.unit) === '' ? rule.unit diff --git a/publicodes/test/mécanismes/variable-temporelle.yaml b/publicodes/test/mécanismes/variable-temporelle.yaml index e8519bf34..a94f54bff 100644 --- a/publicodes/test/mécanismes/variable-temporelle.yaml +++ b/publicodes/test/mécanismes/variable-temporelle.yaml @@ -76,7 +76,7 @@ variable temporelle numérique . test addition: exemples: - situation: date: 01/01/2019 - valeur attendue: false + valeur attendue: non - situation: date: 15/12/2019 valeur attendue: 20