Commit Graph

232 Commits (830bdd72c58d243d6e67510ac071fa140d6ed1f5)

Author SHA1 Message Date
Maxime Quandalle a3fb60e348 🐛 Corrige les arrondis de valeur calculées avec des pourcentages 2021-01-13 11:45:24 +01:00
Maxime Quandalle 771ddaaa66 🎨 Corrige un problème d'affichage dans la documentation 2021-01-13 11:45:24 +01:00
Maxime Quandalle 625a5c1359 🐛 Corrige l'affichage du bouton vers Publicodes 2021-01-12 14:53:20 +01:00
Maxime Quandalle 4a3a5b3f23 📦 Publicodes v1.0.0-beta.8 2021-01-12 10:28:43 +01:00
Mael e81c0a41b8 export de parseUnit pour le mécanisme Barème de publicodes-ui
fixes #1354
2021-01-12 10:25:44 +01:00
Maxime Quandalle 9cbbac6861
Simulateur d'impôt sur les sociétés (#1230) 2021-01-08 14:34:37 +01:00
Alexandre Hajjar 40fbb99026
Partage de la situation via URL (#1241)
*  Simplifie la lecture de l’action SET_SIMULATION - “return early”

*  Make automatic translation more fail-safe

* 🎨 Fix visuals for Overlay component

*  Make Banner component more versatile

* Share simulation banner

* Ajout des identifiants courts pour les objectifs
* Dé/sérialisation search params <-> situation & targetUnit, basée sur
  une logique générique (typeof)
* Suppression dans l'URL des search params correspondant à des
  noms de règles ou identifiant courts
* Banner de partage, avec modale ou Navigator.share si disponible.

Co-authored-by: Alexandre Hajjar <alexandre.hajjar@gmail.com>

* URL with state: remove targetUnit

* serializeEvaluation for url sharing

* serializeEvaluation for number, boolean, string
* use this serialization in url search params
* for now, no support for Objects (like localisation)

Co-authored-by: Johan Girod <dev@johangirod.com>

* 🖋️ Quelques légères modifications de nom pour les identifiants courts

Co-authored-by: Paul Chavard <github@paul.chavard.net>
Co-authored-by: Johan Girod <dev@johangirod.com>

close #552
2021-01-07 18:08:19 +01:00
Johan Girod 4a5c47ad22 Merge branch 'master' into api-publicodes-getParsedRule 2021-01-07 16:53:22 +01:00
Johan Girod ae6f3605b2 Merge remote-tracking branch 'origin/master' into api-publicodes-getParsedRule 2021-01-07 13:21:49 +01:00
Johan Girod e69eae462a 🐛 Fixe la modale non scrollable en production 2021-01-06 18:20:32 +01:00
Johan Girod 706987375d 🎨 Répare la transparence de la modale lorsque qu'un mécanisme est atténué (non applicable ou autre) 2021-01-06 11:33:38 +01:00
Johan Girod af7b2f87fc 🎨 Améliore la modale (répare le bug sur iframe)
fix #1217 et #1326
2021-01-06 11:20:16 +01:00
Johan Girod e2bba04249 Ajoute un script clean aux paquets qui n'en avaient pas 2021-01-05 10:15:38 +01:00
Maxime Quandalle 94a3714b79 🔥 Supprime Ramda du moteur 2021-01-04 12:35:03 +01:00
Maxime Quandalle 1f28ebdefa Revert d'un commit poussé sur master sans faire exprès...
C'est parfois pratique de pousser sur master, mais il faudrait ajouter
une étape de confirmation pour éviter ce type d'erreur...

---

Revert "🔥 Supprime Ramda du moteur"

This reverts commit 269027a6a1.
2020-12-31 12:27:37 +01:00
Maxime Quandalle 269027a6a1 🔥 Supprime Ramda du moteur 2020-12-31 12:26:26 +01:00
Maxime Quandalle cb495b23d3 📦 Publicodes v1.0.0-beta.7 2020-12-19 15:57:19 +01:00
Maxime Quandalle f53fd7ff45 🐛 Corrige l'affichage de la doc sur publi.codes 2020-12-22 11:36:27 +01:00
Maxime Quandalle 92ce23ac0e 🛹 Renomme le dossier "react" en "ui-react"
Plus clair, le paquet continue de s'appeler `publicodes-react`
Ajout d'un lien vers les README.
2020-12-22 11:36:27 +01:00
Maxime Quandalle cb84990182 ⚙️ Sort la traduction des règles du moteur 2020-12-22 11:36:27 +01:00
Maxime Quandalle fabce3d97c ⚙️ Sort la traduction d'unité du moteur 2020-12-22 11:36:27 +01:00
Maxime Quandalle b32e8f67b2 ⚙️ Dérive les compatibilités d'unités des ratios 2020-12-22 11:36:27 +01:00
Johan Girod 83aa50810e 🔥 renomme getRules en getParsedRules
Autant ne pas introduire de breaking pour une fonction qui fait la même chose.
2020-12-18 13:52:47 +01:00
Johan Girod 3a8c201d44 🔥 Supprime UNSAFE_evaluateRule 2020-12-18 10:44:48 +01:00
Johan Girod adcbd330bd 🔥 Remplace UNSAFE_evaluateNode par de meilleurs abstractions 2020-12-18 10:44:48 +01:00
Johan Girod 8c0b925956 🔥 Ajoute une fonction UNSAFE_isNotApplicable 2020-12-18 10:44:48 +01:00
Johan Girod 5d564cbf90 🔥 Ajoute la possibilité de définir un logger pour l'engine
Au lieu du monkeypatching de console.log
2020-12-18 10:44:48 +01:00
Johan Girod a1fb75a285 🔥 Renomme evaluateRule en UNSAFE_evaluateRule pour pointer le risque de breaking 2020-12-18 10:44:47 +01:00
Johan Girod 9eccc54239 💚 typescript & lint 2020-12-18 10:44:47 +01:00
Johan Girod 945bffa8e2 🔥 fusionne `evaluateNode` et `evaluate`
On en profite pour ajouter un cache sur les valeurs en argument de evaluate
pour encore plus de perfs.
2020-12-18 10:44:47 +01:00
Johan Girod 687cf173f9 🔥 Ajoute une fonction getRule et remplace getParsedRules par getRules 2020-12-18 10:44:47 +01:00
Maxime Quandalle feaff6d585 📦 Publicodes v1.0.0-beta.6 2020-12-17 15:54:08 +01:00
Maxime Quandalle 803e49f787 🚚 Déplace le site publicodes dans le bon répertoire
Déplace:
mon-entreprise/source/sites/publi.codes → publicodes/site
mon-entreprise/source/sites/mon-entreprise.fr → mon-entreprise/source/site

La config Webpack du site publicodes reste encore liée à celle de
mon-entreprise.fr, il faudra la dissocier quand nous déplacerons le
projet publicodes dans son propre dépôt.
2020-12-16 18:14:45 +01:00
Maxime Quandalle 5543532337 🖊 MAJ de la documentation pour le paquet publicodes-react 2020-12-16 18:14:45 +01:00
Maxime Quandalle c43d132f86 💄 Supprime l'utilisation de la prop css dans le paquet publicodes-react
Afin de résoudre rapidement un problème lié au build de ce paquet. Il
faudrait faire un travail plus approfondi pour :
- séparer les styles de mon-entreprise des styles de publicodes-react
- choisir une convention unique pour la gestion du CSS de
  publicodes-react, en y intégrant la possibilité de personnaliser les
  styles pour un intégrateur (actuellement on fait un mixte de classes
  CSS "classiques", de styled-component, et de prop `style={{}}`).
2020-12-16 18:14:45 +01:00
Maxime Quandalle 50df2b3f34 🌴 Regroupe les paquets core et react dans un dossier publicodes/ 2020-12-16 18:14:45 +01:00
Maxime Quandalle 3857b274be 🌗 Sépare les paquets publicodes core et react 2020-12-16 18:14:45 +01:00
Maxime Quandalle cc55d6b3b8 🔥 Supprime le fichier utils.js de publicodes 2020-12-16 18:14:45 +01:00
Johan Girod 5b6181783b typescript 2020-12-15 12:52:23 +01:00
Johan Girod d19408ee67 Meilleure organisation et renommage des chapitres 2020-12-15 12:52:23 +01:00
Johan Girod 98eede6c60 Reécrit le README du projet 2020-12-15 12:52:23 +01:00
Johan Girod 82ba0cc073 Petites améliorations sur la structure de publi.codes 2020-12-15 12:52:23 +01:00
Mael 907123f898 Introduction plus succinte 2020-12-15 12:52:23 +01:00
Mael 2baff28de3 Sous-pages langage/documentation et /installation 2020-12-15 12:52:23 +01:00
Mael 0b5c4a93f7 Réorganisation de publi.codes; double menu; contenu en + 2020-12-15 12:52:23 +01:00
Johan Girod 0d285e82fe ⚙️ Utilise des uuid pour cacher l'evaluation dans une structure à part
Plutôt que directement sur le noeud, ce qui aboutissait à des references cycliques (non serialisables)
2020-12-14 15:39:25 +01:00
Johan Girod a3fdb4640b Enlève l'explanation des noeuds AST references évalués pour éviter des reference cycliques dans l'arbre. 2020-12-14 15:39:25 +01:00
Johan Girod 339c534183 Désactive les warnings en prod 2020-12-14 15:39:25 +01:00
Maxime Quandalle 96e512f2f2 📦 Publicodes v1.0.0-beta.5 2020-12-11 12:48:10 +01:00
Johan Girod fd2b5999c4 💚 fix linting 2020-12-11 13:39:42 +01:00
Johan Girod 83b9e55d6e Ajoute une version CDN de la lib (avec toutes les dépendances, pour utiliser directement dans le navigateur)
fix #1211
2020-12-11 13:39:42 +01:00
Johan Girod 0d50e03777 Ajoute la possibilité d'importer publicodes en ESModule natif
Pour cela, la solution la plus simple est de faire un wrapper autour de l'api exposée.
Il ne faudra pas oublier de le mettre à jour.

[A lire pour en savoir plus](https://redfin.engineering/node-modules-at-war-why-commonjs-and-es-modules-cant-get-along-9617135eeca1)

fix #1239
2020-12-11 13:39:42 +01:00
Johan Girod 41d80b980a Apply suggestions from code review
Co-authored-by: Maxime Quandalle <maxime.quandalle@gmail.com>
2020-12-10 17:16:43 +01:00
Johan Girod 6ed470ca1a Enlève les attributs formules aux exemples des mécanismes 2020-12-10 17:16:43 +01:00
Johan Girod 1ea7722aa5 🖋️ tri les mécanismes par ordre alphabétique 2020-12-10 17:16:43 +01:00
Johan Girod b3be527ae2 🖋️ ajoute des descriptions pour les nouveaux mécanismes 2020-12-10 17:16:43 +01:00
Johan Girod 7630a24475 🖋️ améliore la documentation pour refleter les changements récents de publicode 2020-12-10 17:16:43 +01:00
Johan Girod f68e886b78 🎨 Améliore l'affichage des noms des règles imbriquées 2020-12-10 16:54:21 +01:00
Johan Girod 2c930a3877 🎨 Petites améliorations graphique pour la doc 2020-12-10 16:31:09 +01:00
Johan Girod 08e5b734ba ⚙️ améliore la résolution des noms dans les règles
Lorsque l'on cherche un nom de règle, on laisse la possibilité à
une règle de se référencer elle même, mais alors cette résolution
est la dernière à être envisagée.

Dans l'exemple :
```yaml
b: 5
a . b: b
```
`a . b` référence bien `b` qui vaut `5`

Et dans celui ci :
```
a: 0
a . b:
  remplace:a
  par: b * 5
  valeur: 2
```
`a . b` remplace `a` en la multipliant par sa propre valeur (ici 2)

fix #1081, fix #1083
2020-12-10 16:31:09 +01:00
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