diff --git a/source/engine/known-mecanisms.yaml b/source/engine/known-mecanisms.yaml index a53b92d80..2bacde10f 100644 --- a/source/engine/known-mecanisms.yaml +++ b/source/engine/known-mecanisms.yaml @@ -134,6 +134,7 @@ barème linéaire: description: | C'est un barème en taux non marginaux, très simple. 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 multiplier le taux associé avec l'assiette. + Un montant fixe pour chaque tranche peut aussi remplacer le taux, rendant le barème encore plus simple, mais moins "juste", car moins continu. complément: type: numeric diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index 2cc219385..e55a871cb 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -712,7 +712,9 @@ export let mecanismLinearScale = (recurse, k, v) => { ) if (!matchedTranche) return 0 - return matchedTranche.taux.nodeValue * val(assiette) + if (matchedTranche.taux) + return matchedTranche.taux.nodeValue * val(assiette) + return matchedTranche.montant } let explanation = { diff --git a/test/mécanismes/barème-linéaire.yaml b/test/mécanismes/barème-linéaire.yaml index 9de2cbf81..1051d3fed 100644 --- a/test/mécanismes/barème-linéaire.yaml +++ b/test/mécanismes/barème-linéaire.yaml @@ -37,3 +37,39 @@ assiette: 999.6 valeur attendue: 99.96 +- test: Barème linéaire en montant + formule: + barème linéaire: + assiette: assiette + tranches: + - de: 0 + à: 999 + montant: 50 + - de: 1000 + à: 1999 + montant: 170 + - au-dessus de: 2000 + montant: 400 + + exemples: + - nom: "petite assiette" + situation: + assiette: 200 + valeur attendue: 50 + - nom: "moyenne assiette" + situation: + assiette: 1500 + valeur attendue: 170 + - nom: "grande assiette" + situation: + assiette: 10000 + valeur attendue: 400 + - nom: "pour choisir la tranche, l'assiette est arrondie au préalable" + situation: + assiette: 999.3 + valeur attendue: 50 + - nom: "pour choisir la tranche, l'assiette est arrondie au préalable (2)" + situation: + assiette: 999.6 + valeur attendue: 170 +