1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-02-09 00:35:00 +00:00
mon-entreprise/test/library.test.js
Johan Girod e4131eee28 ⚙️ 🔥 grosse modification des barèmes
- Il n'y a plus qu'un mécanisme barème dorénavant : c'est le barème marginal de l'impôt
- On peut utiliser des variables publicode pour chaque argument des tranches
- Le mécanisme barème linéaire est remplacé par le mécanisme "grille"
- Le mécanisme barème continu est remplacé par le mécanisme "taux progressif"
- Les vues sont unifiées et simplifiées
- Seule les tranches nécessaires sont évaluée
- Les unités fonctionnent dans les barèmes
- On précise les tranches d'un barème par leur plafond et non plus par leur plafond et seuil

fix #827
2020-02-25 11:16:36 +01:00

139 lines
3.2 KiB
JavaScript

import { expect } from 'chai'
import Lib from '../source/engine/index'
import co2 from './rules/co2.yaml'
import sasuRules from './rules/sasu.yaml'
describe('library', function() {
it('should evaluate one target with no input data', function() {
let target = 'contrat salarié . rémunération . net'
let value = Lib.evaluate(target, {
'contrat salarié . rémunération . brut de base': 2300
})
expect(value).to.be.within(1798, 1800)
})
it('should let the user replace the default rules', function() {
let rules = `
- nom: yo
formule: 200
- nom: ya
formule: yo + 1
- nom: yi
formule: yo + 2
`
let values = Lib.evaluate(['ya', 'yi'], {}, { base: rules })
expect(values[0]).to.equal(201)
expect(values[1]).to.equal(202)
})
it('should let the user add rules to the default ones', function() {
let rules = `
yo:
formule: 1
ya:
formule: contrat salarié . rémunération . net + yo
`
let value = Lib.evaluate(
'ya',
{
'contrat salarié . rémunération . brut de base': 2300
},
{ extra: rules }
)
expect(value).to.be.closeTo(1799, 1)
})
it('should let the user extend the rules constellation in a serious manner', function() {
let CA = 550 * 16
let salaireTotal = Lib.evaluate(
'salaire total',
{
'chiffre affaires': CA
},
{ extra: sasuRules }
)
let salaireNetAprèsImpôt = Lib.evaluate(
'contrat salarié . rémunération . net après impôt',
{
'contrat salarié . prix du travail': salaireTotal
}
)
let [revenuDisponible, dividendes] = Lib.evaluate(
['contrat salarié . rémunération . net après impôt', 'dividendes . net'],
{
'contrat salarié . rémunération . net après impôt': salaireNetAprèsImpôt,
'chiffre affaires': CA
},
{ extra: sasuRules }
)
expect(revenuDisponible).to.be.closeTo(2324, 1)
expect(dividendes).to.be.closeTo(2507, 1)
}).timeout(5000)
it('should let the user define a simplified revenue tax system', function() {
let règles = `
- nom: revenu imposable
question: Quel est votre revenu imposable ?
unité: €
- nom: revenu abattu
formule:
allègement:
assiette: revenu imposable
abattement: 10%
- nom: impôt sur le revenu
formule:
barème:
assiette: revenu abattu
tranches:
- taux: 0%
plafond: 9807
- taux: 14%
plafond: 27086
- taux: 30%
plafond: 72617
- taux: 41%
plafond: 153783
- taux: 45%
- nom: impôt sur le revenu à payer
formule:
allègement:
assiette: impôt sur le revenu
décote:
taux: 75%
plafond: 1177
`
let target = 'impôt sur le revenu à payer'
let value = Lib.evaluate(
target,
{ 'revenu imposable': '48000' },
{ base: règles }
)
expect(value).to.equal(7253.26)
})
it('should let let user define a rule base on a completely different subject', function() {
let targets = 'impact'
let value = Lib.evaluate(
targets,
{
'nombre de douches': 30,
'chauffage . type': 'gaz',
'durée de la douche': 10
},
{ base: co2, debug: false }
)
//console.log(JSON.stringify(value.targets[0], null, 4))
expect(value).to.be.within(20, 21)
})
})