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
- 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
* 🤖 Utilisation du CI de GitHub pour le déploiement Netlify
* 🤖 Personnalise le message de déploiement
* 🤖 Renomme les variables d'environnement Netlify
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é.
L'aide est compliquée à implémenter car elle nécessite de demander le CA
mois par mois. On pourrait faire un simulateur dédié (une utilisation
pour les variables temporelles ?), mais en attendant on se contente de
référencer la page Urssaf quand on est sur le simulateur AE.
Utilisation d'un fork en attendant que React 17 soit supporté par
Enzyme.
J'ai essayé rapidement la librairie
https://testing-library.com/docs/react-testing-library/migrate-from-enzyme
vers laquelle certains utilisateurs d'Enzyme semblent maintenant se
tourner, mais la migration est non triviale (alors même que nous n'avons
qu'un seul fichier qui utilise les tests Enzyme !)
Suite à la migration vers SendInBlue.
Je n'ai pas trouvé d'API documentée sur la manière de créer son propre
formulaire, donc j'ai simplement repris l'URL POST de l'iframe proposée
(ce que l'on faisait déjà avec MailChimp me semble-t-il).
Suite à un échange avec les services compétents de l'Urssaf, il s'avère
que le plafond ACRE n'est pas appliqué pour les auto-entrepreneur en pratique
Nous l'enlevons donc du simulateur afin de coller d'avantage à la réalité
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).
- 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
Notons que l'aide à l'apprentissage est versée tant que l'apprenti n'est
pas en activité partielle à 100% -- et sans proratisation. Ce qui veut
dire que l'entreprise peut recevoir plus d'aides (en cumulant indemnité
partielle et prime à l'embauche d'apprenti) que son coût total, d'où une
valeur négative dans la case "coût total".
J'ai involontairement mergé un `it.only` dans #1136 qui désactive tous
les tests sauf un — utile en développement mais pas quelque chose que
l'on veut commiter sur `master`. La règle Eslint bloquera désormais ce
code.
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".
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
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
- Refacto la page de présentation des simulateurs
- Ajoute un objet de description des simulateurs existant (qui permet de boostraper un nouveau simulateur très rapidement)
Pour éviter les bugs comme celui corrigé dans caff99f qui était encore
présent dans la règle "contrat salarié . rémunération . brut de base .
équivalent temps plein"
La vérification de la cohérence d'unité n'est pas suffisamment stricte
pour détecter tous les problèmes, issue à venir.
Fixes#1131
L'affichage de l'unité par défaut est intrinsèquement fragile, et ne
permet pas facilement de pouvoir gérer la périodicité (afficher la
valeur pour un trimestre ou pour une année). Je pense qu'il faudrait
introduire un concept de "vue mensuelle" qui multiplie toutes les unités
par "1 mois".
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
- Change l'organisation des cotisations indépendant (toutes les cotisations sont au même niveau)
- Change l'assiette de calcul de la CSG, qui est basée sur toutes les cotisations sociales obligatoire (à vérifier)
- Change le mode de calcul de l'assiette de remboursement CPAM, qui est basée sur les revenus conventionnés (ajoute une question sur le pourcentage conventionné / non conventionné)
- Change l'organisation des PL en PL . PAMC (régime URSSAF) et PL . CAR*** (caisse de retraite) pour mieux prendre en compte le médecin non conventionné
- Désactive le subSimulateur en attendant d'améliorer sa logique