mon-entreprise/exoneration-covid
Johan Girod 5947b60870 Update publicodes to v1.0.0-beta.47 2022-07-25 17:04:56 +02:00
..
règles Répare les conditions d'affichage LFR1 dans exo covid 2022-04-14 16:57:45 +02:00
.yarnrc.yaml * Ajout de storybook 2022-03-03 15:10:10 +01:00
CHANGELOG.md Met à jour les paquets des règles à la dernière version de publicodes 2022-06-02 11:29:06 +02:00
README.md Rétabli le mois de février 2022-04-01 17:15:25 +02:00
index.d.ts Répare la signature typescript du package exoneration-covid 2022-03-30 15:19:06 +02:00
package.json Update publicodes to v1.0.0-beta.47 2022-07-25 17:04:56 +02:00
tsconfig.json

README.md

Covid : exonération de cotisation sociale pour les indépendants

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: "'S1bis'",

    'mois . mai 2021': "'LFSS 600'",
    'mois . juin 2021': "'LFR1'",
    'mois . juillet 2021': "'LFSS 600'",
    'mois . août 2021': 'non',
    'mois . décembre 2021': "'LFSS 300'",
    'mois . janvier 2022': "'LFSS 600'",
    'mois . février 2022': "'LFSS 300'",
})

console.log(formatValue(engine.evaluate('montant total'))) // "2650 €"
console.log(engine.evaluate('code').nodeValue) // "S1B;O;3;2;O;1"

👉 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 tous les mois applicables :

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'", // peut prendre les valeurs "<mois> <année>" ou "avant 2021"
    secteur: "'S1'",
}
engine.setSituation(step1Situation)

// 2. On récupère la liste des mois applicables

const montantTotal = engine.evaluate('montant total')
const months = Object.keys(engine.getParsedRules()).filter(
    (name) =>
        // On veut les règles mois (de la forme `mois . janvier 2021`)...
        name.match(/^mois \. [^.]*$/) &&
        // ... qui sont applicables dans la situation donnée en entrée
        engine.evaluate(name).nodeValue !== null
)

Ci-dessus, months contiendra la liste des mois qui sont applicables par rapport à la situation en entrée.

[
    "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

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

const engine = new Engine(rules)

// 1. On met à jour les valeurs avec la situation courante
const step1Situation = {
    "lieu d'exercice": "'métropole'",
    "début d'activité": "'mai 2021'",
    secteur: "'S1'",
}
const currentFormSituation = {
    'mois . mai 2021': 'non',
}

engine.setSituation({
    ...step1Situation,
    ...currentFormSituation,
})

// Fonction pour obtenir la liste des options disponibles pour chaque mois (`mois . janvier 2021`)
function getValidOptions(month) {
    // On liste les options possibles pour ce mois (règles de la forme `mois . janvier 2021 . LFSS600`)
    const options = Object.keys(engine.getParsedRules()).filter((name) =>
        name.startsWith(month + ' . ')
    )
    // On elimine les options non applicables dans la situation présente
    const validOptions = options.filter(
        (name) => engine.evaluate(name).nodeValue !== null
    )
    return validOptions
}

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 €"

A noter : on peut mettre à jour la situation pour enlever certains mois qui deviennent non applicables