Comme pendant l'évaluation et son objet cache, parsedRules est construit
au fur et à mesure du parsing sous la forme [dottedName]: parsedRule
Cela nous permet pendant le parsing de faire l'annotation de type et de
faire moins de boulot lors de l'évaluation
Problème :
- (presque fixé) dans l'inversion on produisait des références de variables pour le JSX
=> boucle infinie
- dans chiffre d'affaire, notre implé un peu bizarre fait une référence
de variables a priori circulaire, mais gérée par les variations. Or
pendant le parsing on parcourt évidemment toutes les branches sans les
évaluer. Sachant qu'on implémente ce cache parsedRules surtout pour les
unités, peut on garder la formule ainsi et simplement stocker 'chiffre
d'affaires': 'currently being parsed' pour éviter la boucle infinie ?
Car quand on parse et qu'on tombe sur une variable, on ne rentre pas
dans cette variable. Elle sera traitée par la suite dans le parseAll.
Ainsi on ne peut pas connaître son unité si elle a une formule
A = B * C
B = D / E
C unité km
D unité €
E unité km
Quand on tombe sur B dans A, B n'est pas encore parsée, et donc on ne
peut pas savoir que B est en € / km.
Il faudrait parser B, ce qui serait trop couteux. On pourrait
implémenter un cache au parsing, implémenter les unités comme des fonctions, ou encore gérer les unités lors de l'éval (ce qui est bête, car on n'a pas besoin des valeurs pour inférer les unités)
Evidememnt, ça pose problème : on n'a pas encore retourné la valeur d'un
noeud (ex. cotisation X) qu'on demande son évaluation dans le contrôle
(cotisation X > 450)
Plus simple que be7b2b8ac4e747b6a7cb4d56e2edc8544875f4c4
This feature was at first designed to work not only with boolean questions, but also applicability conditions and formulas. But lots of numeric formulas are also namespaces, with children in the computations themselves. Which, in the previous implementations, lead to lots of irrelevant checks. To be reintroduced better if needed
4 * plus rapide
- moins d'itérations max
- précision à 0.1€, n'est plus relative à l'objectif
- partage du cache entre les contrôles et les évaluations
- on évite de recalculer brut de base s'il a déjà été calculé par
inversion
C'est un hack pour palier à nos problèmes de performance lors de
l'inversion sur des petites valeurs, ex. salaire total = 2. Donc on le
limite à une valeur supérieure à 400.
Atttention, 0 🎨 pour l'instant.
On garde les contrôles bloquants déjà implémentés.
On ajoute les contrôles de type avertissement qui peuvent faire appel à
des calculs.