Commit Graph

26 Commits (b2cee93d58433a191d943f9767c1ab76e562ba21)

Author SHA1 Message Date
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
Alexandre Hajjar 6ceedfea15 🔥 Rm régularisation 2020-11-17 17:57:36 +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 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 2223bd2792 🐎 rends paresseuse l'évaluation du mécanisme "toutes ces conditions" 2020-10-14 18:47:08 +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 aa0e42de78 🔥 Supprime la décote et la franchise
Le mécanisme "allègement" proposaient ces deux paramètres ajoutant
beaucoup de complexité pour une seule utilisation dans la base de règle
qui peut être remplacée par une formule littérale.

Closes #1119
2020-09-29 11:16:01 +01:00
Maxime Quandalle d43ab13942 ⚙️ Simplifie la logique de la fonction evaluateNode 2020-09-15 11:58:18 +02:00
Maxime Quandalle 2236e32674 Corrige la configuration Eslint 2020-09-12 18:40:36 +02:00
Johan Girod 7723f92e98 🐛🔨 corrige les taux acre pour les auto-entrepreneur
La réforme a été appliqué à partir du 01/04/2020 et non du 01/01/2020 comme prévu à l'origine
2020-09-04 12:06:39 +02:00
Johan Girod e60afdb3e9 🐛 corrige l'url pour le script de download des règles 2020-08-24 12:08:09 +02:00
Johan Girod b907d81e86 🔨 🐛 ajout une règle de non cumul des dispositifs de réduction de cotisations 2020-07-03 19:22:40 +02:00
Johan Girod 02f5d790b9 Ajoute un nouveau formulaire pour la demande de détachement
Donne l'occasion d'experimenter avec la génération automatique de formulaire
en publicodes. Pas mal de question à creuser, mais quelques pistes interessantes
2020-06-18 09:51:14 +02:00
Maxime Quandalle b9ac00a6e8 ⚙️ Supprime l'argument `k` en paramètre des mécanismes 2020-06-06 14:18:45 +02:00
Maxime Quandalle b9f6d8249e ⚙️ Factorise la gestion des composantes hors des mécanismes 2020-06-06 14:18:23 +02:00
Maxime Quandalle 38c2051232 ⚙️ Sépare les mécanismes dans des fichiers distincts
Refacto qui avait été commencée sans aller au bout.
Sort aussi quelques fonctions `evaluate` des fonctions de parsage
lorsque qu'elle n'utilisent pas les paramètres de `parse`.
2020-06-04 13:57:49 +02:00
Maxime Quandalle ac8f09fd16 ⚙️ Intégre les missingVariables dans le moteur 2020-06-04 12:36:58 +02:00
Johan Girod 612ea77cfc Ajoute les explications des mécanismes sur la documentation publicodes 2020-05-26 13:20:54 +02:00
Johan Girod f3c9d7c60d 🐛 corrige le montant de la CSG dans l'aide aux indépendants
note : il faudra songer sérieusement à modifier ce mécanisme de composante, source de nombreux bug (cf #874)

Ajoute des tests de non regressions pour la page d'aide
2020-05-19 18:07:19 +02:00
Johan Girod aa2525d7df 🎨 Améliore le style des règles
Et abandonne l'import de feuille de style dans le moteur pour lui préférer les styled-components
2020-05-19 16:43:18 +02:00
Johan Girod d91283cde2 🔥 Sépare le moteur dans un packet isolé 2020-05-14 15:25:22 +02:00