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 🙏

© 2026 – Pkg Stats / Ryan Hefner

fiscalia

v1.1.2

Published

Moteur de calcul pour simulateurs fiscaux et sociaux français : simulateur de plafond Madelin, PER, indemnités journalières, TMI, capitalisation. Professions de santé, professions libérales et indépendants. Barèmes 2026.

Readme

fiscalia

CI npm licence MIT

Le moteur de calcul des simulateurs fiscaux et sociaux français pour travailleurs non salariés. Simulateur de plafond Madelin, de PER, d'indemnités journalières, de TMI, de capitalisation et d'amortissement — les formules, sans l'interface.

Couvre les professions de santé et les professions libérales affiliées à la CNAVPL — médecins, chirurgiens-dentistes, sages-femmes, infirmiers, masseurs-kinésithérapeutes, vétérinaires, pharmaciens, psychologues, ostéopathes — comme les artisans, commerçants et indépendants du régime général. Le plafond des indemnités journalières diffère du simple au triple selon la caisse.

Pures, typées, testées. Zéro dépendance.

npm install fiscalia

Pourquoi

Ces calculs sont recopiés à la main d'un projet à l'autre, et chaque copie dérive : un arrondi différent, un plafond qui n'a pas suivi le millésime, une formule qui diverge de sa voisine sans que rien ne le signale. Il n'existait pas de brique partagée. En voici une, couverte par des tests, dont les barèmes portent une date.

Les entrées sont assainies : un NaN ou une valeur négative devient 0. Un champ number vidé dans un navigateur renvoie NaN — la bibliothèque ne propage pas la panne.

Qui est concerné, et pourquoi ça change le calcul

Ces fonctions s'adressent aux travailleurs non salariés imposés au réel, en BIC ou en BNC. Mais le régime d'affiliation change le résultat, et c'est le paramètre le plus facile à se tromper :

| Régime | Professions | Effet sur le calcul | |---|---|---| | CNAVPL | médecins, chirurgiens-dentistes, sages-femmes, infirmiers, masseurs-kinésithérapeutes, vétérinaires, pharmaciens, architectes, experts-comptables, notaires, huissiers, psychologues, ostéopathes | secuIJ(revenu, true) — revenu retenu dans la limite de 3 PASS | | Régime général des indépendants | artisans, commerçants, gérants majoritaires, libéraux non réglementés (conseil, informatique, communication, coaching) | secuIJ(revenu) — revenu retenu dans la limite de 1 PASS | | CNBF | avocats | hors périmètre — ne pas appeler secuIJ, leur régime d'indemnités journalières ne relève pas de l'assurance maladie |

Le critère du plafond majoré est l'affiliation à la CNAVPL, pas le caractère « réglementé » de la profession : un avocat est une profession libérale réglementée et n'entre pourtant dans aucune des deux premières lignes.

Les plafonds de déduction de l'article 154 bis (plafondPerTns, plafondMadelin, plafondPerteEmploi) ne dépendent pas de la caisse : ils s'appliquent à tout BIC/BNC au réel.

Voir les formules à l'œuvre

Cinq outils publics s'appuient sur cette bibliothèque, utiles pour comparer un résultat à ce que donne la vôtre : comparateur mutuelle, simulateur PER, estimateur prévoyance, simulateur épargne et disponible Madelin. Chacun n'en utilise qu'une partie et applique ses propres règles de présentation.

Les barèmes sont publiés en données ouvertes, avec la source officielle de chaque valeur : baremes-2026.json — pratique pour vérifier les constantes de ce paquet sans lire le code.

Utilisation

import {
  PASS,
  plafondMadelin,
  plafondPer,
  plafondPerTns,
  plafondPerteEmploi,
  secuIJ,
  suggestedTmi,
  futureValue,
  amortissementAnnuel
} from 'fiscalia';

// Plafond de déduction Madelin prévoyance, pour 60 000 € de revenu
plafondMadelin(60_000);

// Plafond de versement PER déductible — régime général (art. 163 quatervicies)
plafondPer(60_000);

// Le même, régime TNS (art. 154 bis), nettement plus favorable pour un BIC/BNC
plafondPerTns(60_000);

// Troisième enveloppe de l'article 154 bis : la perte d'emploi subie
plafondPerteEmploi(60_000);

// Indemnité journalière de la Sécurité sociale des indépendants
secuIJ(60_000);
secuIJ(60_000, true); // affilié CNAVPL : plafond porté à 3 PASS

// Tranche marginale d'imposition
suggestedTmi(60_000);

// Capital acquis : 10 000 € initial, 300 €/mois, 4 %/an, 20 ans
futureValue(10_000, 300, 4, 20);

// Le même calcul, détaillé année par année
amortissementAnnuel(10_000, 300, 4, 20);

Des exemples exécutables sont dans examples/.

API

| Fonction | Retour | Référence | |---|---|---| | futureValue(p0, pmt, tauxPct, annees) | capital acquis | capitalisation mensuelle, versement fin de mois | | amortissementAnnuel(p0, pmt, tauxPct, annees) | AmortRow[] | même convention, détaillée par année | | secuIJ(revenu, affilieCnavpl?) | € par jour | art. D. 622-7 CSS | | plafondPer(revenu) | € déductibles | art. 163 quatervicies CGI | | plafondPerTns(benefice) | € déductibles | art. 154 bis CGI | | plafondMadelin(revenu) | € déductibles | Madelin prévoyance, art. 154 bis CGI | | plafondPerteEmploi(benefice) | € déductibles | perte d'emploi subie, art. 154 bis CGI | | suggestedTmi(revenu) | taux de 0 à 0,45 | BOFiP BOI-IR-LIQ-20-10 | | safe(n) | number | assainit NaN, Infinity, négatif | | MILLESIME, PASS, PASS_N1 | constantes | millésime, PASS courant et PASS N-1 | | PLANCHER_IJ, BAREME_IR | constantes | seuil d'ouverture des droits IJ, tranches d'imposition |

Conventions de calcul

  • Capitalisation mensuelle, versement en fin de mois.
  • La formule fermée (futureValue) et la boucle (amortissementAnnuel) donnent exactement le même résultat, et c'est vérifié par un test. L'écart entre ces deux voies de calcul est l'erreur la plus courante dans ce type de simulateur : la bibliothèque la verrouille.

⚠️ Millésime des barèmes — à lire avant usage

Cette version expose les barèmes 2026 : MILLESIME === 2026, PASS = 48 060 € (arrêté du 22 décembre 2025).

import { MILLESIME, PASS } from 'fiscalia';
console.log(MILLESIME); // 2026

Les barèmes changent chaque année — PASS, plafonds PER et Madelin, tranches d'imposition. Vérifiez MILLESIME avant tout usage, épinglez une version exacte, et ne vous servez pas de cette bibliothèque pour un calcul engageant sans confronter les valeurs aux sources officielles du moment : Légifrance, BOFiP, URSSAF, ameli.fr.

Les mises à jour annuelles paraissent en version mineure, avec le millésime en tête du changelog — parce qu'un changement de barème modifie vos résultats sans changer l'API.

⚠️ Une limite à connaître : les professions hors CPAM

secuIJ modélise le régime d'indemnités journalières de l'assurance maladie. Les professions dont le régime n'en relève pas ne sont pas couvertes, et la fonction ne doit pas être appelée pour elles — c'est notamment le cas des avocats, affiliés à la CNBF.

Le critère du plafond majoré à 3 PASS est l'affiliation à la CNAVPL, et non le caractère réglementé de la profession : les deux ensembles ne coïncident pas.

Portée, et ce que ce paquet n'est pas

Une bibliothèque de calcul, rien de plus. Elle ne constitue pas un conseil fiscal, social ou patrimonial, et ne remplace ni un expert-comptable, ni un conseiller en gestion de patrimoine, ni un courtier. Les situations réelles comportent des cas particuliers — statuts, régimes spéciaux, plafonds reportables, revenus exceptionnels — que ces formules ne modélisent pas.

Développement

npm install
npm test               # 29 tests
npm run build
npm run check:baremes  # code, README et changelog doivent concorder

L'intégration continue exécute ces trois commandes sur Node 18, 20 et 22.

Contribuer

Les corrections de barème sont les contributions les plus utiles, et elles ne demandent pas d'écrire une ligne de code. Une seule exigence : toute valeur chiffrée doit citer sa source officielle — Légifrance, BOFiP, ameli, URSSAF ou la caisse compétente. Voir CONTRIBUTING.md.

Un barème périmé est traité avec la même priorité qu'une faille : voir SECURITY.md.

Licence

MIT — voir LICENSE.