Commit Graph

24 Commits (800ade5a0a046e671f41646732dce81e48f5090c)

Author SHA1 Message Date
Johan Girod d418f2b123 💚 fix CI test 2020-12-09 17:28:26 +01:00
Johan Girod 9b208e967a 🐛 Réimplémente une version hacky de isApplicable : isNotApplicable
En attendant d'avoir un type propre pour la valeur Non Applicable
2020-12-09 17:07:10 +01:00
Maxime Quandalle c2149ac047 🐎 Ajoute un cache au niveau des nœuds 2020-12-09 13:10:19 +01:00
Maxime Quandalle e1941078c0
Sort les fonctions jsx de l'AST (#1275)
* ⚙️ Sort les fonctions JSX de l'AST

Remplace la fonction makeJsx par un composant React <Explanation />

Déplace presque tout le code React dans le répertoire components/ en
prévision de sa séparation dans un paquet dédié.

* ⚙️ Renomme le nœud "replacement" en "replacementRule"

* ⚙️ Ajout d'un attribut visualisationKind pour les mécanismes transformées

* ⚙️ Retours PR 1275
2020-12-08 12:40:54 +01:00
Johan Girod 8d3d6560af Change pour suivre les conventions de nommage 2020-12-07 14:40:59 +01:00
Johan Girod 87de1210ee Corrige le linting 2020-12-07 14:40:59 +01:00
Johan Girod 16743800df Renomme updateAST en transformAST et ajoute des commentaires explicatifs 2020-12-07 14:40:59 +01:00
Johan Girod 9ce1791ff2 ⬆️ Update prettier for supporting =?? syntax 2020-12-07 14:40:59 +01:00
Johan Girod fae2efa9bb 💚 corrige pour faire passer les tests de non regression 2020-12-07 14:40:58 +01:00
Johan Girod ab02bbb5f5 🔥 Mise à jour du site mon-entreprise suite aux refacto de evaluateRule 2020-12-07 14:39:53 +01:00
Johan Girod ba01ae2d4f ⚙️🔥 Ajoute un AST bien typé pour publicodes
- Introduction de nouveaux mécanismes
- Réecriture de l'evaluation et du parsing des règles.
- Les règles peuvent apparaître dans les formules de calcul
- Introduction d'un AST en bonne et due forme
- Réecriture de buildRuleDependancies.
- Ajout d'une passe pour la désambiguation des références
- Réecriture de rendNonApplicable et de remplace
- Réimplémentation de parentDependancy

Voir #1191
2020-12-07 14:39:53 +01:00
Maxime Quandalle bc8c4d823a ⚙️ Nouvelle API d'évaluation
Modifie l'API de la fonction `evaluate` pour transmettre le contexte
avec `this`, ce qui simplifie l'interface de ces fonctions.

L'objet `this` (qui contient `this.parsedRules`, `this.situation`,
`this.evaluate`, etc.) est un interpréteur Publicodes, mais nous n'avons
pas besoin de créer une nouvelle abstraction car cet objet présente
exactement la même interface que l'objet public exposé dans
`publicodes/index.ts` et c'est donc l'interface publique qui est
utilisée dans les appels internes.
2020-11-05 10:22:48 +01:00
Maxime Quandalle 973f12ab46 ⚙️ Évalue la situation dans l'ordre topologique
Nous utilisions jusqu'à présent le code suivant pour évaluer la situation:

> mapObjIndexed(value => evaluateExpression(value), situation)

c'est à dire une évaluation ligne par ligne. Or si certaines valeurs de
la situation contiennent des références, il faut les évaluer dans le bon
ordre.

Avec cette modification, seul le parsage est fait lorsqu'on appelle
`setSituation` et l'évaluation est faite ultérieurement lorsque c'est
nécessaire avec la même logique que pour les règles.

L'implémentation a pour effet de bord de ne plus supprimer l'utilisation
de true / false dans la situation qui doivent être remplacés par "oui"
et "non".
2020-10-11 16:51:19 +02:00
Maxime Quandalle 4789dfce04 🐛 Corrige la saisie du SMIC à temps partiel
Grâce aux récentes évolutions de Publicode, ce retour utilisateur
fréquent trouve une solution particulièrement simple et élégante en
remplaçant la valeur littérale du SMIC par une référence vers le SMIC
contractuel. Cela procure les avantages suivants :
- Le montant du SMIC est défini une seule fois dans la base de règles,
  et on y fait référence partout où on l'utilise
- Vu que c'est la référence qui est stockée dans la "situation" on peut
  répondre à la question "temps partiel" après avoir cliqué sur "SMIC"
  dans la case "salaire brut" et le montant correspondant va
  automatiquement se recalculer.

A nécessité quelques menues modifications du code qui gère les
références dans la situation pour corriger des bugs.

Fixes #649
2020-10-11 16:51:19 +02:00
Alexandre Hajjar 343ca00a27 ⚙️ Detect cycles in parsed rules
Build a dependencies graph and detect cycles:
* Types and guards for nodes of the ParsedRules AST
* Simple visitor framework for the nodes and their `formule` sub-nodes
* Build a directed graph for dependencies using @dagrejs/graphlib
2020-10-09 13:30:39 +02:00
Maxime Quandalle 847b4eeb4c 🔥 Refacto des contrôles
Ce commit supprime le concept de "contrôle" au sein du moteur, en les
remplaçant par des règles publicodes classiques. Cela permet notamment
d'uniformiser les règles d'applicabilité (désactivation via espace de
nom ou "rend non applicable" par exemple) ainsi que d'accéder à la
valeur d'un contrôle donné avec le nom de la règle correspondante.

Par ailleurs renomme le concept de "contrôle" en "notifcation" dans la
partie mon-entreprise/.
2020-09-22 19:21:58 +01:00
Maxime Quandalle 2236e32674 Corrige la configuration Eslint 2020-09-12 18:40:36 +02:00
Maxime Quandalle eaf0ae38ae Corrige une erreur de type 2020-09-07 17:55:35 +02:00
Maxime Quandalle 8dbae98785 Landing pages dédiées par profession médicale 2020-09-07 17:55:35 +02:00
Maxime Quandalle d42504f47a 🐛 Corrige un bug de navigation dans les questions
Ainsi qu'un problème avec la saisie des suggestions avec unités.
cf. https://github.com/betagouv/mon-entreprise/pull/1076#issuecomment-644135851
2020-06-16 14:09:23 +02:00
Maxime Quandalle ac8f09fd16 ⚙️ Intégre les missingVariables dans le moteur 2020-06-04 12:36:58 +02:00
Johan Girod 3e978a6986 rajoute le bouton 'voir source' sur la documentation publicode 2020-05-27 11:45:01 +02:00
Johan Girod b175945d78 ajoute un prototype d'interface pour les warnings du moteur 2020-05-26 16:40:22 +02:00
Johan Girod d91283cde2 🔥 Sépare le moteur dans un packet isolé 2020-05-14 15:25:22 +02:00