Suite à un retour demandant quel était le type de dépense à mettre dans la case 'dépense'.
C'est ce qu'on veut éviter à tout prix : faire planner le doute sur les dépenses déductible
Par ailleurs, cela rajoute une charge cognitive (combien je vais dépenser), pas forcément necessaire.
On préfère clarifier qu'il faut bien penser à déduire les dépenses liée à l'activité pour avoir le revenu disponible
Dans #719 nous changions la structure de données Yaml de premier niveau
d'une liste vers un objet (indexé sur le nom des règles) pour les
fichiers Publicode. Ce commit réplique ce changement pour les fichiers
de tests de mécanismes qui n'avaient pas encore été migré vers le
nouveau format.
L'attribut "test" qui servait à définir le nom du test est supprimé et
on utilise maintenant directement le nom de la règle (ou son titre s'il
est défini) comme nom du test.
La mises à jour de valeurs précises calculées dans les tests unitaires
n'est pas une solution satisfaisante. Je le fait dans ce commit mais à
terme je pense qu'il faudra déléguer intégralité de ces tests sur des
valeurs précises aux tests de régressions `yarn run test-regressions`
qui peuvent être mis à jour facilement et conserver les tests unitaires
pour des cas où la valeur précise calculée n'importe pas.
Cela permet l'inférence de type à partir des fichiers js qui ne sont pas
encore convertis en TypeScript.
Par ailleurs suppression des dernières traces de Flow.
Ajout d'options plus strictes pour dans la config tsconfig.js
Gros changements en perspective :
- Supprime la notion de période, au bénéfice de celle d'unité
(`période : mensuelle` devient `unité: €/mois`)
- Améliore les rapports d'erreur avec des messages plus clair
- Ajoute un avertissement lorsque des types ne sont pas compatible
- Ajoute la conversion automatique d'unité dans le moteur
- Ajoute une notion d'unité par défaut de la simulation,
c'est l'unité vers laquelle les règles qui ne spécifient pas
d'unité seront converties
- Ajoute une notion d'unité par défaut des règles, qui spécifie
l'unité de la règle qui prévaut lorsque qu'il n'y a pas
d'unité par défaut de la simulation (utile pour les question ou
pour s'assurer du bon type d'une règle)
Et pour faire passer les tests jest au passage.
A noter : il faudra vraiment se pencher sur la notion d'applicable / non applicable
Une variable non applicable a une valeur '0' / 'false', mais une variable
à false n'est pas considérée comme non applicable. Je pense qu'il serait avantageux
de simplifier le modèle en introduisant une symetrie entre applicable si et la valeur
d'une variable.
Dans 16ae29bdc, j'avais supprimé la cotisation de 1% sur les CDD pour
financer le CIF. Cette cotisation n'avait en fait pas été supprimée mais
remplacée par une cotisation pour financer le CPF...
This reverts commit 16ae29bdcc.
Outils
======
Ce commit retire le tooling de Flow, et ajoute le support de TypeScript
pour les fichiers .ts et .tsx. Il n'est pas nécessaire de tout migrer
d'un coup ce qui facilite la transition. On garde en effet le
compilateur Babel avec un preset TypeScript (ce qui permet donc de
retirer à la fois les types Flow et TypeScript) plutôt que d'utiliser le
compilateur standard pour la conversion du code. Cela permet aussi de
mieux s'intégrer avec d'autres outils, notamment les test-runners.
Ajout d'une nouvelle commande `yarn run type-check`, intégrée dans
CircleCI.
Par ailleurs ajout du support de l'opérateur ?? pour donner des valeurs
par défaut (nullish-coalescing-operator).
Typage des libraires tierces
============================
Les principales libraires que nous utilisons ont un typage TypeScript de
bon niveau, ce qui facilite l'intégration. J'ai mis à jour react-i18next
et i18next afin de corriger un problème de typage.
Typage du code
==============
Le typage est loin d'être complet dans ce commit, en particulier il
manque les types relatifs au state Redux, ainsi qu'au moteur (règle,
explication). Néanmoins le typage des contextes fonctionne, en
particulier sitePaths (avec un type récursif non trivial !) qui a déjà
permis de détecter un lien mort.
Le typage des "paths" (Components/, Règles/, etc.) fonctionne bien, y
compris avec l'auto-complétion automatique des import par Typescript.
TypeScript se révèle déjà bien agréable dans VSCode (auto-complétion,
refacto, etc.) ! Reste à migrer progressivement le reste du code !
Le paramètre SMIC utilisé dans le calcul des réductions, en particulier
de la réduction générale, doit prendre en compte les heures supplémentaires.
Cette non prise en compte nous conduisait à sur-estimer le montant des
cotisations sociales sur les heures supplémentaires.
Ajout de tests de non-regressions des calculs afin d'éviter de déployer
silencieusement des effets de bord non-désirés dans les règles de calculs.
J'ai ajouté Jest pour sa fonction de snapshot testing qui est
particulièrement adaptée pour ce type de cas (voir #717). J'ai essayé
avec mocha-snapshot sans succès.
J'ai eu un petit peu de mal à configurer Jest, car il n'est pas possible
de ré-utiliser la configuration Webpack, qu'il faut alors dupliquer. C'est
pourquoi j'ai limité l'utilisation de Jest aux seuls tests de snapshot.
À voir s'il y a un intérêt à migrer les tests Mocha vers Jest ultérieurement.
Fixes#717
Ces fonctions n'étaient utilisées qu'une fois ou deux et constituent des
indirections inutiles : getIframeOption, parseDataAttributes,
setToSessionStorage, getFromSessionStorage et isNumeric.
Préférer les fonctions de la "bibliothèque standard": sessionStorage et
URLSearchParams.