220 lines
8.5 KiB
YAML
220 lines
8.5 KiB
YAML
# Liste et description des différents mécanismes compris par le moteur.
|
|
# La description peut être rédigée en markdown :-)
|
|
|
|
une possibilité:
|
|
type: enum
|
|
|
|
inversion numérique:
|
|
type: numeric
|
|
description: |
|
|
La formule de calcul de cette variable n'est pas connue, souvent elle n'a même pas de sens. Mais le mécanisme `inversion` indique qu'elle peut être _estimée_ à partir de l'un des _objectifs_ listés sous l'attribut `avec`. Il faut alors renseigner une valeur cible pour cet objectif.
|
|
|
|
Voilà comment ça marche : on va donner à la variable une valeur au hasard, calculer _l'objectif_, puis grâce à des calculs savants améliorer notre choix jusqu'à ce que l'écart entre le calcul et la valeur cible devienne satisfaisant.
|
|
|
|
Concrètement, si l'on demande au moteur (même indirectement) la valeur d'une variable qui a pour formule une inversion, il va vérifier qu'une des possibilités d'inversion a bien une valeur calculée ou saisie, et procéder à l'inversion décrite plus haut à partir de celle-ci. Sinon, ces possibilités d'inversions seront listées comme manquantes.
|
|
|
|
une de ces conditions:
|
|
type: boolean
|
|
description: |
|
|
C'est un `ou` logique.
|
|
|
|
Contient une liste de conditions.
|
|
|
|
Renvoie vrai si l'une des conditions est vraie.
|
|
toutes ces conditions:
|
|
type: boolean
|
|
description: |
|
|
C'est un `et` logique.
|
|
|
|
Contient une liste de conditions.
|
|
|
|
Renvoie vrai si toutes les conditions vraies.
|
|
|
|
variations:
|
|
type: numeric
|
|
description: |
|
|
Contient une liste de conditions (`si`) et leurs conséquences associées (`alors`).
|
|
|
|
Pour la première condition vraie dans la liste, on retient la valeur qui lui est associée.
|
|
|
|
Si aucune condition n'est vraie, alors ce mécanisme renvoie implicitement `non applicable`
|
|
|
|
|
|
Exemple:
|
|
```
|
|
- si: age < 18 ans
|
|
alors: 'mineur'
|
|
- sinon: 'majeur'
|
|
```
|
|
|
|
Ce mécanisme peut aussi être utilisé au sein d'un mécanisme compatible, tel que la multiplication ou le barème.
|
|
|
|
Exemple (TVA):
|
|
```
|
|
multiplication:
|
|
assiette: total hors taxe
|
|
variations:
|
|
- si: restauration
|
|
alors:
|
|
taux: 10%
|
|
- sinon:
|
|
taux: 20%
|
|
```
|
|
|
|
multiplication:
|
|
type: numeric
|
|
description: |
|
|
C'est une multiplication un peu améliorée, très utile pour exprimer les cotisations.
|
|
|
|
Sa propriété `assiette` est multipliée par un pourcentage, `taux`, ou par un `facteur` quand ce nom est plus approprié.
|
|
|
|
La multiplication peut être plafonnée : ce plafond sépare l'assiette en deux, et la partie au-dessus du plafond est tout simplement ignorée. Dans ce cas, elle se comporte comme une barème en taux marginaux à deux tranches, la deuxième au taux nul et allant de `plafond` à l'infini.
|
|
|
|
le maximum de:
|
|
type: numeric
|
|
description: |
|
|
Renvoie la valeur numérique de la liste de propositions fournie qui est la plus grande.
|
|
|
|
Il est conseillé de renseigner une description de chaque proposition par exemple quand elles représentent des méthodes de calcul alternatives.
|
|
|
|
le minimum de:
|
|
type: numeric
|
|
description: |
|
|
Renvoie l'élément de la liste de propositions fournie qui a la plus petite valeur.
|
|
|
|
Ces propositions doivent avoir un mécanisme de calcul ou être une valeur numérique.
|
|
|
|
Il est conseillé de renseigner une description de chaque proposition par exemple quand elles représentent des méthodes de calcul alternatives parmi lesquelles il faut en choisir une.
|
|
|
|
somme:
|
|
type: numeric
|
|
description: |
|
|
C'est tout simplement la somme de chaque terme de la liste.
|
|
|
|
arrondi:
|
|
type: numeric
|
|
description: |
|
|
On arrondi à l'euro le plus proche
|
|
|
|
recalcul:
|
|
type: numeric
|
|
description: >-
|
|
Relance le calcul d'une règle dans une situation différente de la situation
|
|
courante. Permet par exemple de calculer le montant des cotisations au
|
|
niveau du SMIC, même si le salaire est plus élevé dans la situation
|
|
actuelle.
|
|
|
|
##########################################
|
|
# Ce qu'on appelle aujourd'hui des RuleProp
|
|
# Et qui deviendront des mécanismes classiques normalement par la suite #TODO
|
|
|
|
formule:
|
|
description: |
|
|
C'est la formule de calcul d'une variable. Elle renvoie une valeur numérique ou un 'non', exprimant le fait que la variable n'est pas applicable, ce qui vaut implicitement 0.
|
|
|
|
Cette doit faire appel à fera appel à des mécanismes de calcul : par exemple `multiplication`, le plus commun pour les variables de type `Cotisation`.
|
|
|
|
applicable si:
|
|
description: |
|
|
Décide si la règle est applicable pour la situation saisie.
|
|
|
|
> Une cotisation sociale peut ne concerner que les salariés au statut cadre. Elle ne sera pas à verser pour un non cadre
|
|
|
|
La formule de calcul peut donc être ignorée, quel que soit son montant.
|
|
|
|
Peut être accompagnée du mécanisme 'non applicable si'.
|
|
|
|
non applicable si:
|
|
description: |
|
|
Décide si la règle n'est applicable pour la situation saisie.
|
|
|
|
> Un contrat CDD peut entraîner une majoration spécifique. Cette majoration est 'non applicable si' le contrat est un CDI.
|
|
|
|
La formule de calcul peut donc être ignorée, quel que soit son montant.
|
|
|
|
Peut être accompagnée du mécanisme 'applicable si'.
|
|
|
|
rend non applicable:
|
|
description: |
|
|
Permet de désactiver l'application de certaines règles pour la situation saisie.
|
|
|
|
> Ce mécanisme est utile pour encoder les régimes d'exceptions (par exemple le [régime des impatriés](/documentation/contrat-salarié/régime-des-impatriés)) sans avoir à modifier la définition des règles de base.
|
|
|
|
barème:
|
|
type: numeric
|
|
description: >-
|
|
C'est un barème en taux marginaux, mécanisme de calcul connu son utilisation
|
|
dans le calcul de l'impôt sur le revenu.
|
|
|
|
L'assiette est décomposée en plusieurs tranches, qui sont multipliées par un
|
|
taux spécifique.
|
|
|
|
Les tranches sont souvent exprimées sous forme de facteurs d'une variable
|
|
que l'on appelle `multiplicateur`, par exemple `1 x le plafond de la
|
|
sécurité sociale`.
|
|
|
|
grille:
|
|
type: numeric
|
|
description: >-
|
|
C'est un barème sous la forme d'une grille de correspondance. C'est le
|
|
mécanisme de calcul de l'impôt neutre, aussi appelé impôt non personnalisé.
|
|
|
|
Il est composé de tranches qui se suivent. Il suffit de trouver l'assiette
|
|
qui correspond à la tranche, et de selectionner le montant associé à
|
|
l'assiette.
|
|
|
|
taux progressif:
|
|
type: numeric
|
|
description: >-
|
|
Ce mécanisme permet de calculer un taux progressif. On spécifie pour chaque
|
|
tranche le plafond et le taux associé. Le taux effectif renvoyé est calculé
|
|
en lissant la différence de taux entre la borne inférieure et supérieure de
|
|
l'assiette
|
|
|
|
> Par exemple, si nous nous avons les tranches suivantes :
|
|
- taux: 50% / plafond: 0
|
|
- taux: 100% / plafond: 1000
|
|
|
|
> Pour une assiette de 500, le taux retourné sera 75%, car il correspond au
|
|
taux situé à la moitié de la tranche correspondante.
|
|
|
|
composantes:
|
|
type: numeric
|
|
description: |
|
|
Beaucoup de cotisations sont composées de deux parties qui partagent la méthode de calcul mais diffèrent par des paramètres différents.
|
|
|
|
Pour ne pas définir deux variables presque redondantes, on utilise le mécanisme de composante. Il se comportera comme une somme dans les calculs, mais son affichage sur les pages /règle sera adapté.
|
|
|
|
Il est même possible, pour les mécanismes `barème` et `multiplication` de garder en commun un paramètre comme l'assiette, puis de déclarer des composantes pour le taux.
|
|
|
|
> L'exemple le plus courant de composantes, c'est la distinction part employeur, part salarié (ex. retraite AGIRC).
|
|
|
|
allègement:
|
|
type: numeric
|
|
description: |
|
|
Permet de réduire le montant d'une variable.
|
|
Très utilisé dans le contexte des impôts.
|
|
|
|
encadrement:
|
|
type: numeric
|
|
description: |
|
|
Permet d'ajouter un plafond et/ou un plancher à une valeur.
|
|
|
|
durée:
|
|
type: numeric
|
|
description: |
|
|
Permet d'obtenir le nombre de jours entre deux dates
|
|
|
|
synchronisation:
|
|
type: object
|
|
description: |
|
|
Pour éviter trop de saisies à l'utilisateur, certaines informations sont
|
|
récupérées à partir de ce que l'on appelle des API. Ce sont des services
|
|
auxquels ont fait appel pour obtenir des informations sur un sujet précis.
|
|
Par exemple, l'État français fournit gratuitement l'API géo, qui permet à
|
|
partir du nom d'une ville, d'obtenir son code postal, son département, la
|
|
population etc.
|
|
|
|
Ce mécanismes `synchronisation` permet de faire le lien entre les règles de
|
|
notre système et les réponses de ces API.
|