diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index fd0159cbf..a139a9c14 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -551,7 +551,7 @@ export let mecanismReduction = (recurse, k, v) => { let v_assiette = val(assiette), nulled = v_assiette == null - return nulled + let montantFranchiséDécoté = nulled ? null : val(franchise) && v_assiette < val(franchise) ? 0 @@ -560,9 +560,19 @@ export let mecanismReduction = (recurse, k, v) => { let plafond = val(décote.plafond), taux = val(décote.taux) - max(0, (1 + taux) * v_assiette - taux * plafond) + v_assiette > plafond + ? v_assiette + : max(0, (1 + taux) * v_assiette - taux * plafond) } - : abattement ? max(0, v_assiette - val(abattement)) : v_assiette + : v_assiette + + console.log(montantFranchiséDécoté) + + return abattement + ? val(abattement) == null + ? montantFranchiséDécoté === 0 ? 0 : null + : max(0, montantFranchiséDécoté - val(abattement)) + : montantFranchiséDécoté } let base = parseObject(recurse, objectShape, v), diff --git a/test/mécanismes/allègement.yaml b/test/mécanismes/allègement.yaml index d0600703e..6c5d71a9e 100644 --- a/test/mécanismes/allègement.yaml +++ b/test/mécanismes/allègement.yaml @@ -65,3 +65,28 @@ valeur attendue: 59493 +- test: montant franchisé, décote, abattu + format: € + formule: + allègement: + assiette: montant + franchise: 1200 + décote: + plafond: 2040 + taux: 75% + abattement: 20507 + exemples: + - situation: + montant: 100 + valeur attendue: 0 + - situation: + montant: 1620 + valeur attendue: 0 + - situation: + montant: 3000 + valeur attendue: 0 + - situation: + montant: 21000 + valeur attendue: 493 + +