mon-entreprise/exoneration-covid
Johan Girod 454fbe4c80 Désactive le watch des règles en attendant de trouver une meilleure façon de faire 2022-02-14 18:19:57 +01:00
..
règles Change l'architecture des règles de l'exonération 2022-02-14 18:19:57 +01:00
.yarnrc Désactive le watch des règles en attendant de trouver une meilleure façon de faire 2022-02-14 18:19:57 +01:00
CHANGELOG.md Change l'architecture des règles de l'exonération 2022-02-14 18:19:57 +01:00
README.md Change l'architecture des règles de l'exonération 2022-02-14 18:19:57 +01:00
index.d.ts Crée un nouveau paquet npm contenant les règles publicodes de l'exonération covid 2022-02-14 18:19:57 +01:00
package.json Change l'architecture des règles de l'exonération 2022-02-14 18:19:57 +01:00
tsconfig.json Crée un nouveau paquet npm contenant les règles publicodes de l'exonération covid 2022-02-14 18:19:57 +01:00

README.md

Modèle social français en publicodes

Ce paquet contient les règles publicodes utilisées sur https://mon-entreprise.urssaf.fr pour le calcul de l'exonération covid 2021.

Installation

npm install publicodes exoneration-covid

Exemple

import Engine, { formatValue } from 'publicodes'
import rules from 'exoneration-covid'

const engine = new Engine(rules)
engine.setSituation({
    "lieu d'exercice": "'métropole'",
    "début d'activité": "'mai 2021'",
    secteur: "'S1'",

    'mois . avril 2021': 'LFSS 600',
    'mois . mai 2021': 'non',
    'mois . juin 2021': 'LFSS 600',
    'mois . décembre 2021': 'LFSS 300',
})

console.log(formatValue(engine.evaluate('montant total')))

👉 Voir l'exemple complet

Utilisation

1. Récuperer la liste des mois à afficher

La première étape est de savoir quels sont les mois à afficher en fonction des données d'entrée (secteur, lieu et date de début d'activité). Pour cela, il suffit de récuperer la liste de toutes les variables manquantes à l'évaluation du montant dans la situation. Voici comment procéder :

import Engine from 'publicodes'
import rules from 'exoneration-covid'

const engine = new Engine(rules)

// 1. On met à jour les valeurs de la première étape du formulaire
const step1Situation = {
    "lieu d'exercice": "'métropole'",
    "début d'activité": "'mai 2021'",
    secteur: "'S1'",
}
engine.setSituation(step1Situation)

// 2. On lance le calcul pour le montant exonéré
const evaluation = engine.evaluate('montant total')

// 3. On récupère la liste des mois manquants
const missingVariables = Object.keys(evaluation.missingVariables)

Ci-dessus, missingVariable contiendra la liste des règles publicodes dont la valeur est manquante pour l'évaluation.

[
    "mois . mai 2021",
    "mois . juin 2021",
    "mois . juillet 2021",
    "mois . août 2021",
    "mois . décembre 2021",
    "mois . janvier 2022",
    "mois . février 2022"
]

2. Obtenir les exonérations possibles pour un mois en particulier

Par défaut, on souhaite qu'aucune exonération ne soit selectionnée pour aucun des mois. On va donc mettre à jour la situation initiale en conséquence :

import Engine, { formatValue } from 'publicodes'
import rules from 'exoneration-covid'

const engine = new Engine(rules)

const step1Situation = {
    "lieu d'exercice": "'métropole'",
    "début d'activité": "'mai 2021'",
    secteur: "'S1'",
}

const monthToFill = Object.keys(
    engine.evaluate('montant total').missingVariables
)
const currentSituation = Object.fromEntries(
    monthToFill.map((month) => [month, 'non'])
)
engine.setSituation({ ...step1Situation, ...currentSituation })

Pour connaître la liste des éléments possibles pour un mois, il faut lister les possibilités :

const currentMonth = 'mois . juillet 2022'
const options = Object.keys(engine.getParsedRules()).filter((name) =>
    name.startsWith(currentMonth + ' . ')
) // Retourne ['mois . juillet . LFSS 600', 'mois . juillet . LFR 1' ]

Puis enlever les options qui ne sont pas applicables dans la situation actuelle. Pour cela, on utilise la situation courante en réinitialisant le mois selectionné.

const situationWithoutCurrentMonth = {
    ...step1Situation,
    ...currentSituation,
}
delete situationWithoutCurrentMonth[currentMonth]
engine.setSituation(situationWithoutCurrentMonth)

const applicableOptions = options.filter(
    (name) => engine.evaluate(name).nodeValue !== false
)

3. Calculer le montant de l'exonération en temps réel

Pour calculer l'exonération en fonction des entrées de l'utilisateur, il suffit de mettre à jour la situation avec les informations saisies par ce dernier.

import Engine, { formatValue } from 'publicodes'
import rules from 'exoneration-covid'

const engine = new Engine(rules)

const step1Situation = {
    "lieu d'exercice": "'métropole'",
    "début d'activité": "'mai 2021'",
    secteur: "'S1'",
}
const currentSituation = {
    'mois éligibles . mai 2021': "'LFSS 600'",
    'mois éligibles . juin 2021': "'LFR1'",
    'mois éligibles . juillet 2021': "'LFSS 600'",
    'mois éligibles . août 2021': "'LFR1'",
    'mois éligibles . décembre 2021': "'LFSS 300'",
    'mois éligibles . janvier 2022': "'non'",
    'mois éligibles . février 2022': "'LFSS 300'",
}

const montantTotal = engine
    .setSituation({
        ...step1situation,
        ...currentSituation,
    })
    .evaluate('montant total')

console.log(montantTotal.nodeValue) // 3300
console.log(formatValue(montantTotal)) // "3300 €"