mon-entreprise/test/bug-cotisations.test.js

96 lines
3.1 KiB
JavaScript

import { expect } from 'chai'
import dedent from 'dedent-js'
import { enrichRule } from 'Engine/rules'
import { safeLoad } from 'js-yaml'
import { rules as realRules } from '../source/engine/rules'
import { analyse, analyseMany, parseAll } from '../source/engine/traverse'
describe('bug-analyse-many', function() {
it('complex inversion with composantes', () => {
let rawRules = dedent`
- nom: net
formule: brut - cotisations
- nom: cotisations
formule:
somme:
- cotisation a .salarié
- cotisation b
- nom: cotisation a
formule:
multiplication:
assiette: brut
composantes:
- attributs:
dû par: employeur
taux: 10%
- attributs:
dû par: salarié
taux: 10%
- nom: cotisation b
formule:
multiplication:
assiette: brut
composantes:
- attributs:
impôt sur le revenu: x
taux: 10%
- attributs:
impôt sur le revenu: y
taux: 10%
- nom: brut
unité: €
formule:
inversion numérique:
avec:
- net
`,
rules = parseAll(safeLoad(rawRules).map(enrichRule)),
stateSelector = name => ({ net: 700 }[name])
const targets = ['brut', 'cotisations']
const many = analyseMany(rules, targets)(stateSelector).targets
const one = analyse(rules, 'cotisations')(stateSelector).targets[0]
//console.log(many[0].nodeValue, many[1].nodeValue, one.nodeValue)
expect(many[1].nodeValue).to.be.closeTo(one.nodeValue, 0.1)
})
it('should compute the same contributions if asked with analyseMany or analyse', function() {
const situationSelector = dottedName =>
({
'contrat salarié . rémunération . net de cotisations': 3500,
'auto-entrepreneur': 'non',
'contrat salarié': 'oui',
dirigeant: 'assimilé salarié',
'contrat salarié . ATMP . taux réduit': 'oui',
'contrat salarié . CDD': 'non',
'contrat salarié . indemnité kilométrique vélo . indemnité vélo active':
'non',
'contrat salarié . rémunération . avantages en nature . montant': 0,
'contrat salarié . temps partiel': 'non',
'établissement . localisation': {},
'contrat salarié . complémentaire santé . part employeur': 50,
'contrat salarié . complémentaire santé . forfait . en france': 50,
'entreprise . effectif': 1,
'entreprise . association non lucrative': 'non'
}[dottedName])
const rules = parseAll(realRules.map(enrichRule))
const targets = [
'contrat salarié . rémunération . brut de base',
'contrat salarié . cotisations . salariales'
]
const analyseManyValue = analyseMany(rules, targets)(situationSelector)
.targets[1]
const analyseValue = analyse(
rules,
'contrat salarié . cotisations . salariales'
)(situationSelector).targets[0]
console.log(analyseManyValue.nodeValue, analyseValue.nodeValue)
expect(analyseManyValue.nodeValue).to.equal(analyseValue.nodeValue)
})
})