Commit Graph

122 Commits (800ade5a0a046e671f41646732dce81e48f5090c)

Author SHA1 Message Date
Maxime Quandalle 800ade5a0a Prettier s'occupe aussi des scripts 2020-12-10 12:23:16 +01:00
Johan Girod bba2371e76 🎨 Rétabli le bouton "déplier" dans les sommes...
Maintenant pour toutes les règles, y compris quand ce ne sont pas des sommes
2020-12-09 19:12:23 +01:00
Johan Girod 1a628879a2 🐛 fix la possibilité d'avoir choix obligatoire = non pour le mécanisme une possibilité 2020-12-09 17:41:29 +01:00
Johan Girod d418f2b123 💚 fix CI test 2020-12-09 17:28:26 +01:00
Johan Girod 6986e20455 🎨🐛 Simplifie l'écriture des composantes, et affiche les calculs dans les règles imbriquées 2020-12-09 17:12:55 +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
Johan Girod 546d0276c0 Corrige la page blanche sur indemnité-kilométrique-vélo 2020-12-09 15:49:47 +01:00
Maxime Quandalle c2149ac047 🐎 Ajoute un cache au niveau des nœuds 2020-12-09 13:10:19 +01:00
Maxime Quandalle a5634ab547 🐎 Nœuds remplace partagés 2020-12-09 13:10:19 +01:00
Maxime Quandalle b9b8a0c9bf 🐎 Correction de l'algo de désactivation d'espace de nom
La vérification de l'applicabilité du parent faisait un aller/retour
inutile entre la règle enfant et la règle parent, à l'origine d'une
régression de performance.
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 80282ed0fd ⚙️ meilleure implémentation de par défaut 2020-12-08 10:40:18 +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 3f449b7dbb corrige un type 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 b2cee93d58 📏 Active le mode strict de TypeScript sur la partie mon-entreprise 2020-11-24 16:22:17 +01:00
Maxime Quandalle d7f140334e 🐎 Accélère l'inversion
La fonction `uniroot` prend 2 paramètres d'amorçage "min" et "max" qui
nous définissions jusqu'alors comme des minimums et maximum absolus
-10^8 et +10^8. Vu que nous sommes obligés de calculer au moins une
première valeur à l'extérieur de `uniroot` notamment pour calculer les
variables manquantes, ce commit permet de ré-utiliser ce calcul dans
l'amorçage d' `uniroot`.

Les gains de performances sont détaillés dans la PR associée.

Par ailleurs supprime l'option "valeurs négatives possibles" rendue
obsolète.

Il y a des légers décalages d'1€ sur une dizaine de snapshots qui liés à
des arrondis à l'euro. On calcule en effet les inversions à 10 centimes
près et on peut donc tomber sur une valeur de xx,54€ là où la vraie
valeur est xx,48€ ce qui donne 1€ de différence avec l'arrondi alors que
la différence initialement calculée est inférieure à 10 centimes.

Par curiosité j'ai rejoué les tests de non-régressions en changeant les
paramètres d'`uniroot` pour avoir une précision au centime près (en
augmentant le nombre max d'itération à 50) et il se trouve que sur la
dizaine de tests différents entre ce commit et la version d'avant une
moitié des arrondis à l'euro étaient faux avant et corrects maintenant
et inversement pour l'autre moitié.
2020-11-23 15:55:17 +01:00
Maxime Quandalle f19b77a3fb 👽 Prose et traductions 2020-11-20 17:21:45 +01:00
Maxime Quandalle cc602e1a48 ⬆ MAJ TypeScript vers 4.1
Plein de nouveautés et notamment la possibilité de "programmer" les
types chaînes littérales qui nous sera utile par exemple pour vérifier
statiquement la validité d'une *expression* publicode dans
`engine.evaluate`.
https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/

⬆ MAJ ESLint-typescript pour la compatibilité
2020-11-20 12:08:21 +01:00
Mael 9009d48363 Create README.md 2020-11-18 17:55:04 +01:00
Alexandre Hajjar 6ceedfea15 🔥 Rm régularisation 2020-11-17 17:57:36 +01:00
Alexandre Hajjar 4087bdd959 📝 /\t/ / in markdown docs 2020-11-17 17:56:37 +01:00
Alexandre Hajjar 660bcf05fb
📝 Publicodes docs update (#1208)
📝 Publicodes documentation update

* composantes
* sychronisation
* Simplify inversion docs
*  Use tabs in markdown files
* API docs
* JS attribut -> propriété

Co-authored-by: Johan Girod <johan.girod@beta.gouv.fr>
2020-11-17 11:43:38 +01:00
Maxime Quandalle 69b663d132 🐎 Ajout d'un cache pour l'applicabilité
En analysant les traces d'execution, il apparaît qu'un temps conséquent
est passé dans la fonction `evaluateApplicability`. L'ajout d'un cache
simple semble améliorer significativement les performances (environ -30%
dans mes mesures non scientifiques).
2020-11-13 11:32:33 +01:00
Maxime Quandalle c216740a35 🐛 Permet le passage des tests dans la CI même avec des erreurs de type 2020-11-12 10:24:35 +01:00
Maxime Quandalle c6bd92d5f9 🐛 Supprime l'obligation de déclarer les parents dans le Publicode Studio
Et lien local local vers le publicode Studio quand on est en développement local
2020-11-12 10:24:35 +01:00
Maxime Quandalle b105933234 🐛 Ajoute les dépendances lors de l'import dans le Studio
Fixes #1157
2020-11-12 10:24:35 +01:00
Maxime Quandalle f1c810346f ⚙️ Ajoute un attribut "dependencies" sur les règles parsées 2020-11-12 10:24:35 +01:00
Maxime Quandalle fcd8306ace ⚙️ Petites simplifications du code du moteur
- évite l'indirection vers "parseReferenceTransforms" pour les
  références simples (il faut encore simplifier ce code)
- déplacement de fonctions de parsage vers les "stateless"
- typage de registerEvaluationFunction
- simplifie fragments.join()
2020-11-05 18:25:43 +01:00
Maxime Quandalle edcd1d46d1 🔨 Ajoute le plancher pour les frais pro IR
cf. https://github.com/betagouv/mon-entreprise/pull/1193#discussion_r517924266
2020-11-05 15:50:58 +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 c66e529fb7 ⚙️ Ajout d'un type de nœud serialisable
Ce commit parachève la sortie de l'ensemble des functions "evaluate" de
l'AST et ajoute un "nodeKind" sur chaque nœud afin de les associer à la
bonne function d'évaluation.

L'API pour les mécanismes pourra être améliorée afin de ne pas appeler
`registerEvaluationFunction` sur chaque mécanisme mais en standardisant
l'interface exportée par les mécanismes, par exemple

  export { name, parse, evaluate, render }

Par ailleurs il devrait être facile de sortir les fonctions `jsx` en se
basant sur les mêmes "nodeKind".

Enfin, il faudra nettoyer l'AST pour supprimer les attributs inutilisés
et ajouter du typage fort.
2020-11-05 10:22:48 +01:00
Johan Girod fcb44fc317 transforme applicable si et non applicable si en mécanisme chainée
Par la même occasion, uniformise l'écriture des mécanismes chainées
2020-11-04 11:59:03 +01:00
Johan Girod f738e64710 Utilise une version auto-hebergé des polices plutôt que celles du CDN font.google
See #606
2020-11-03 10:44:44 +01:00
Johan Girod 51e69b7220 🐛 corrige #1176 2020-11-03 10:44:44 +01:00
Maxime Quandalle dd23d8f73d ⚙️ Précision adaptative de l'inversion
Si une inversion n'est pas trouvée à 0,1 près, fallback à 1 près.

Utile pour les cotisations des avocats, et permet de réaliser certaines
inversions qui étaient impossibles jusqu'à lors (cf. snapshots).
2020-10-30 14:45:09 +01:00
Johan Girod a681df71b5 🔨 prends en compte les retours CARMF 2020-10-26 11:55:40 +01:00
Maxime Quandalle 1ce36b4305 🤩 Affichage des références sur les réponses aux questions 2020-10-21 16:54:37 +02:00
Johan Girod 2223bd2792 🐎 rends paresseuse l'évaluation du mécanisme "toutes ces conditions" 2020-10-14 18:47:08 +02:00
Maxime Quandalle a56237c2ae ⚙️ Sort les fonctions evaluate des "ruleProps" 2020-10-13 12:55:42 +02:00
Maxime Quandalle 33eb6c32db ⚙️ Sort la fonction evaluateReference de l'AST 2020-10-13 12:55:42 +02:00
Johan Girod 0e6c81278c 🖋️ maj le texte des règles sur l'impôt 2020-10-12 17:15:21 +02:00
Johan Girod 6502039b0b 🎨 petites amélioration style modale 2020-10-12 17:15:21 +02:00
Johan Girod 941f6fcdeb 🐛 Désactive la logique de règles sans page de documentation, qui souffre de limites actuelles
- On veut pouvoir afficher un lien vers la règle définissant la [ref] lorsqu'on est dans une formule avec une référence virtuelle
- Si on fait référence dans une règle à une notification sans formule (juste applicable) la règle crash

En attendant une réecriture de l'inlining qui permette d'ajouter le contexte à la référence appelée (référence ou définition),
je préfère désactiver cette logique
2020-10-12 17:15:21 +02:00
Johan Girod 5876519d75 🐛 rétabli l'affichage des règles reliées dans la documentation 2020-10-12 17:15:20 +02:00