npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

exoneration-covid

v1.0.0

Published

Les règles publicodes pour le calcul de l'exonération de cotisations covid (année 2021)

Downloads

33

Readme

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

Archivé

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'))) // "2 650 €"
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)) // "3 300 €"

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