Commit Graph

196 Commits (82197d0344854912df9ef687cbb572b2444346ec)

Author SHA1 Message Date
Johan Girod b2d0d4624a
🐎 améliore la performance du parsing
A peu près ~50% de gagné lors du parsing
Problème : long temps de blocage de l'UI lors du premier parsing des règles

Il reste encore quelques bugs
2019-09-13 10:23:55 +02:00
Johan Girod a60d86a6d5
remove unecessary abstraction: rewriteNode 2019-09-13 10:23:55 +02:00
Maxime Quandalle 1ffb97c2f6
Renomme "désactive" en "rend non applicable"
Ajout de tests, amélioration de la doc
2019-09-03 22:45:54 +02:00
Maxime Quandalle 89f370b182
Ajout d'une ruleProp "désactive" 2019-09-03 22:45:48 +02:00
Mael 76b60afed7 1er affichage des unités : indemnité km vélo 2019-07-12 10:33:02 +02:00
Mael 9b4a3b9e57 ⚙️ parsedRules passe d'une liste à un object
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 ?
2019-07-12 10:33:02 +02:00
Mael 00e920d00f ⚙️ Renommage de treat en parse; reorg
Ce commit n'est pas complet, mais l'idée est lisible
2019-07-12 10:33:02 +02:00
Mael f75f70314a 📝 Implémentation des unités via une nouvelle passe 2019-07-12 10:33:02 +02:00
Mael 6154419250 Changement de programme : tentative d'implé de l'unité dans l'eval
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)
2019-07-12 10:33:02 +02:00
Mael a7c6cb25fa Première unité affichée sur la page règle 2019-07-12 10:33:02 +02:00
Mael a75b22d083 Début de l'implémentation des unités 2019-07-12 10:33:02 +02:00
Mael 76ddaaf8fb 🐛 Ajout d'un test qui casse
Est-ce le tryptique inversion + double filtre ??
2019-04-12 10:48:21 +02:00
Johan Girod 512be9c9f5 Enlève l'erreur dans la console 2019-04-10 15:56:40 +02:00
Mael 71f624c1a4 Gestion d'une inversion non convergente 2019-04-10 15:10:03 +02:00
Mael 0d1e809e3a Rétablissement de contrôles 2019-03-19 16:55:38 +01:00
Mael 05845db5e6 ⚙️ Implémentation des contrôles a posteriori 2019-03-19 16:55:38 +01:00
Mael f9580f15b5 Tentative d'implémentation des contrôles à l'évaluation
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)
2019-03-19 16:55:38 +01:00
Mael c36462bd41 Déplacement des contrôles et abandon des contrôles bloquants 2019-03-19 16:55:38 +01:00
Johan Girod f518adc2b5 💚 répare les tests de la library 2019-02-04 12:44:41 +01:00
Johan Girod de2f41ecd4 💚 Répare les tests unitaire, les erreurs flow et les erreurs eslint 2019-02-01 17:21:41 +01:00
Johan Girod 3f528cbd40 Rétabli les contrôles pour tous les simulateurs 2019-01-29 18:41:44 +01:00
Mael 314cbcd8c7 🐛 ⚙️ Correction de l'évaluation passive de la formule 2019-01-21 16:41:41 +01:00
Mael 5f9d80c23a ⚙️ Court-circuitage de la formule en cas de non applicabilité 2019-01-07 11:35:11 +01:00
Mael 948f71af30 Réécriture d'un bloc de traverse.js
Et 🐛 mergeAll, pas merge
2019-01-07 11:35:10 +01:00
Mael 3bb93a462e 🐛 ⚙️ Erreur d'évaluation des variables manquantes 2019-01-07 11:35:10 +01:00
Mael 81340b4510 ⚙️ Implémentation plus simple des dépendants implicites aux parents
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
2019-01-07 11:35:10 +01:00
Mael 66b69a3f35 Clarification de code 2019-01-07 11:35:10 +01:00
Mael 0c094a96e6 🐛 Conciliation des périodes et des aplicabilités implicites 2019-01-07 11:35:10 +01:00
Mael 23f3ed1d1a Correction des tests cassés 2019-01-07 11:35:10 +01:00
Mael c58a7449d0 Implémentation plus puissante de la dépendance parent
Elle est applicable à tous les parents calculables, et on fait attention
à ne pas produire de boucles infinies.
2019-01-07 11:35:10 +01:00
Mael d1ee3db743 Explication sur /règle de la dépendance au parent 2019-01-07 11:35:10 +01:00
Mael 7a362e7e30 Implémentation des dépendances parent
un parent question booléenne rend automatiquement non applicable ses
enfants.
2019-01-07 11:35:10 +01:00
Mael c366808777 :doc: Commentaires 2019-01-07 11:35:10 +01:00
Mael 2af373376f Optimisation du code
js-yaml est très lourd, utiliser react suspense
tree shaking sur ramda
react suspence pour le choix de couleur
2018-11-23 16:01:46 +00:00
Mael 3bdf1cfd28 🐎 Inversion plus rapide
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
2018-11-23 16:01:13 +00:00
Mael 9e70fee390 :doc: Message d'erreur quand objectif de calcul inconnu 2018-11-23 16:01:13 +00:00
Mael 6225820c7d 🐛 Un contrôle bloquant ne se fait que sur une variable saisie
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.
2018-10-05 15:48:54 +00:00
Mael 6e09444861 Possibilité de cacher les contrôles 2018-10-03 14:58:18 +00:00
Mael c2043df80c Contrôles aussi sur des valeurs calculées 2018-10-03 14:58:18 +00:00
Mael 651232dc7e Un contrôle de saisie pur n'apparaît que pendant la saisie 2018-10-03 14:58:18 +00:00
Mael 180fdc097c Explication du contrôle, 🎨 2018-10-03 14:58:17 +00:00
Mael 5ac5adba76 Meilleure implémentation du contrôle, animé
1 contrôle affiché à la fois.
Contrôle -> résolution -> contrôle ...
2018-10-03 14:58:17 +00:00
Mael 758e5ec235 Evolution des contrôles pour gérer le SMIC
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.
2018-10-03 14:58:17 +00:00
Mael 03d950cca7 ⚙️ Retour explicite de true ou false pour les valeurs booléennes
oui | non
2018-09-05 17:40:19 +02:00
Mael b1bbb53370 :sparkling: Ajout d'un sélecteur pour les contrôles bloquants 2018-07-03 12:30:42 +00:00
Mael 6512b04b7a Première intégration des contrôles
Un contrôle sur chaque salaire, pour éviter de lancer le moteur sur des
inversions qui n'ont pas de sens.
2018-07-02 10:06:13 +00:00
Mael d8591a14ba Evaluation des contrôles 2018-06-29 13:46:42 +00:00
Mael 94db43c0bf Test des controles bloquants 2018-06-29 13:46:36 +00:00
Mael 323ae72bf0 Séparation du fichier traverse 2018-06-29 09:30:25 +00:00
Mael 1552feb47e Déplacement du code fillVariable en treatVariable 2018-06-19 10:25:53 +02:00