@@ -100,7 +103,8 @@ function SimpleField({ dottedName, initialRender }: SimpleFieldProps) {
- {unit === '€' && (
+ {/* Super hacky */}
+ {analysis.unit !== undefined ? (
- )}
- {/* Super hacky */}
- {unit !== '€' && (
+ ) : (
diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx
index aecaa3c5d..0bc0f4766 100644
--- a/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx
+++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/Salarié.tsx
@@ -1,22 +1,24 @@
+import { setSimulationConfig } from 'Actions/actions'
import { T } from 'Components'
import Banner from 'Components/Banner'
import PreviousSimulationBanner from 'Components/PreviousSimulationBanner'
import SalaryExplanation from 'Components/SalaryExplanation'
import Simulation from 'Components/Simulation'
import salariéConfig from 'Components/simulationConfigs/salarié.yaml'
-import { useSimulationConfig } from 'Components/simulationConfigs/useSimulationConfig'
import { IsEmbeddedContext } from 'Components/utils/embeddedContext'
import { Markdown } from 'Components/utils/markdown'
import { SitePathsContext } from 'Components/utils/withSitePaths'
import urlIllustrationNetBrutEn from 'Images/illustration-net-brut-en.png'
import urlIllustrationNetBrut from 'Images/illustration-net-brut.png'
-import React, { useContext } from 'react'
+import { default as React, useContext } from 'react'
import { Helmet } from 'react-helmet'
import { useTranslation } from 'react-i18next'
+import { useDispatch } from 'react-redux'
import { Link } from 'react-router-dom'
export default function Salarié() {
const { t, i18n } = useTranslation()
+
const isEmbedded = React.useContext(IsEmbeddedContext)
return (
<>
@@ -101,7 +103,8 @@ In addition to the salary, our simulator takes into account the calculation of b
There are deferred hiring aids that are not taken into account by our simulator, you can find them on the official portal.`
export let SalarySimulation = () => {
- useSimulationConfig(salariéConfig)
+ const dispatch = useDispatch()
+ dispatch(setSimulationConfig(salariéConfig))
const sitePaths = useContext(SitePathsContext)
return (
<>
diff --git a/test/bug-cotisations.test.js b/test/bug-cotisations.test.js
index 900e41115..b53472d2e 100644
--- a/test/bug-cotisations.test.js
+++ b/test/bug-cotisations.test.js
@@ -13,7 +13,7 @@ describe('bug-analyse-many', function() {
- nom: cotisations
formule:
somme:
- - cotisation a [salarié]
+ - cotisation a .salarié
- cotisation b
- nom: cotisation a
diff --git a/test/ficheDePaieSelector.test.js b/test/ficheDePaieSelector.test.js
index f6e789e49..f14c20318 100644
--- a/test/ficheDePaieSelector.test.js
+++ b/test/ficheDePaieSelector.test.js
@@ -1,4 +1,3 @@
-
import { expect } from 'chai'
// $FlowFixMe
import salariéConfig from 'Components/simulationConfigs/salarié.yaml'
diff --git a/test/generateQuestions.test.js b/test/generateQuestions.test.js
index b96d4d169..1743e3662 100644
--- a/test/generateQuestions.test.js
+++ b/test/generateQuestions.test.js
@@ -140,28 +140,6 @@ describe('collectMissingVariables', function() {
expect(result).to.be.empty
})
- it('should report missing variables in switch statements', function() {
- let rawRules = [
- { nom: 'top' },
- {
- nom: 'top . startHere',
- formule: {
- 'aiguillage numérique': {
- '11 > dix': '1000%',
- '3 > dix': '1100%',
- '1 > dix': '1200%'
- }
- }
- },
- { nom: 'top . dix' }
- ],
- rules = parseAll(rawRules.map(enrichRule)),
- analysis = analyse(rules, 'startHere')(stateSelector),
- result = collectMissingVariables(analysis.targets)
-
- expect(result).to.include('top . dix')
- })
-
// TODO : enlever ce test, depuis que l'on évalue plus les branches qui ne sont pas encore applicable
it.skip('should report missing variables in variations', function() {
let rawRules = [
@@ -217,75 +195,6 @@ describe('collectMissingVariables', function() {
// TODO
// expect(result).to.include('top . trois')
})
-
- it('should not report missing variables in switch for consequences of false conditions', function() {
- let rawRules = [
- { nom: 'top' },
- {
- nom: 'top . startHere',
- formule: {
- 'aiguillage numérique': {
- '8 > 10': '1000%',
- '1 > 2': 'dix'
- }
- }
- },
- { nom: 'top . dix' }
- ],
- rules = parseAll(rawRules.map(enrichRule)),
- analysis = analyse(rules, 'startHere')(stateSelector),
- result = collectMissingVariables(analysis.targets)
-
- expect(result).to.be.empty
- })
-
- it('should report missing variables in consequence when its condition is unresolved', function() {
- let rawRules = [
- { nom: 'top' },
- {
- nom: 'top . startHere',
- formule: {
- 'aiguillage numérique': {
- '10 > 11': '1000%',
- '3 > dix': {
- douze: '560%',
- '1 > 2': '75015%'
- }
- }
- }
- },
- { nom: 'top . douze' },
- { nom: 'top . dix' }
- ],
- rules = parseAll(rawRules.map(enrichRule)),
- analysis = analyse(rules, 'startHere')(stateSelector),
- result = collectMissingVariables(analysis.targets)
-
- expect(result).to.include('top . dix')
- expect(result).to.include('top . douze')
- })
-
- it('should not report missing variables when a switch short-circuits', function() {
- let rawRules = [
- { nom: 'top' },
- {
- nom: 'top . startHere',
- formule: {
- 'aiguillage numérique': {
- '11 > 10': '1000%',
- '3 > dix': '1100%',
- '1 > dix': '1200%'
- }
- }
- },
- { nom: 'top . dix' }
- ],
- rules = parseAll(rawRules.map(enrichRule)),
- analysis = analyse(rules, 'startHere')(stateSelector),
- result = collectMissingVariables(analysis.targets)
-
- expect(result).to.be.empty
- })
})
describe('nextSteps', function() {
@@ -368,9 +277,10 @@ describe('nextSteps', function() {
}[name])
let rules = parseAll(realRules.map(enrichRule)),
- analysis = analyse(rules, 'contrat salarié . rémunération . net')(
- stateSelector
- ),
+ analysis = analyse(
+ rules,
+ 'contrat salarié . rémunération . net'
+ )(stateSelector),
result = collectMissingVariables(analysis.targets)
expect(result).to.include('contrat salarié . CDD . motif')
diff --git a/test/inversion.test.js b/test/inversion.test.js
index 20edcd3f4..577565373 100644
--- a/test/inversion.test.js
+++ b/test/inversion.test.js
@@ -198,7 +198,7 @@ describe('inversions', () => {
taux: 50%
- nom: total
- formule: cotisation [employeur] + cotisation [salarié]
+ formule: cotisation .employeur + cotisation .salarié
- nom: brut
unité: €
diff --git a/test/library.test.js b/test/library.test.js
index 6d8b6cf09..7023ca1b7 100644
--- a/test/library.test.js
+++ b/test/library.test.js
@@ -32,7 +32,6 @@ describe('library', function() {
- nom: yo
formule: 1
- nom: ya
- période: flexible
formule: contrat salarié . rémunération . net + yo
`
diff --git a/test/mecanisms.test.js b/test/mecanisms.test.js
index 1a23be7e2..a4375beb8 100644
--- a/test/mecanisms.test.js
+++ b/test/mecanisms.test.js
@@ -5,12 +5,12 @@
*/
import { expect } from 'chai'
+import { serialiseUnit } from 'Engine/units'
+import * as R from 'ramda'
+import { collectMissingVariables } from '../source/engine/generateQuestions'
import { enrichRule } from '../source/engine/rules'
import { analyse, parseAll } from '../source/engine/traverse'
-import { collectMissingVariables } from '../source/engine/generateQuestions'
import testSuites from './load-mecanism-tests'
-import * as R from 'ramda'
-import { serialiseUnit } from 'Engine/units'
describe('Mécanismes', () =>
testSuites.map(([suiteName, suite]) =>
@@ -23,6 +23,7 @@ describe('Mécanismes', () =>
({
nom: testTexte,
situation,
+ 'unités par défaut': defaultUnits,
'valeur attendue': valeur,
'variables manquantes': expectedMissing
}) =>
@@ -38,7 +39,7 @@ describe('Mécanismes', () =>
),
state = situation || {},
stateSelector = name => state[name],
- analysis = analyse(rules, test)(stateSelector),
+ analysis = analyse(rules, test, defaultUnits)(stateSelector),
missing = collectMissingVariables(analysis.targets),
target = analysis.targets[0]
diff --git a/test/mécanismes/aiguillage-numérique.yaml b/test/mécanismes/aiguillage-numérique.yaml
deleted file mode 100644
index 9a88e18e1..000000000
--- a/test/mécanismes/aiguillage-numérique.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
-# Utiliser http://romainvaleri.online.fr/ pour se donner des idées de noms de variables originales
-
-- nom: dégradation mineure
-
-- nom: dégradation majeure
-
-- nom: retenue sur dépot de garantie
- test: Aiguillage numérique simple
- formule:
- aiguillage numérique:
- dégradation mineure: 10%
- dégradation majeure: 30%
-
- exemples:
- - nom: le premier aiguillage est activé -> sa valeur est renvoyée
- situation:
- dégradation mineure: oui
- valeur attendue: 0.1
- - nom: seul le 2ème aiguillage est activé
- situation:
- dégradation mineure: non
- dégradation majeure: oui
- valeur attendue: 0.3
- - nom: aucun aiguillage n'est activé
- situation:
- dégradation mineure: non
- dégradation majeure: non
- valeur attendue: 0
- - nom: L'ordre des termes est important
- situation:
- dégradation mineure: null
- dégradation majeure: oui
- valeur attendue: null
-
-
-- nom: montant caution
- unité: €
-
-- test: Imbrication d'aiguillages numériques
- formule:
- aiguillage numérique:
- dégradation mineure: 5%
- dégradation majeure:
- montant caution > 2000: 20%
- montant caution > 1000: 10%
-
-
- exemples:
- - nom: imbrication simple
- situation:
- dégradation mineure: oui
- dégradation majeure: non
- montant caution: 3000
- valeur attendue: 0.05
- - nom: imbrication simple 2
- situation:
- dégradation mineure: non
- dégradation majeure: oui
- montant caution: 1200
- valeur attendue: 0.10
- - nom: imbrication nulle
- valeur attendue: null
- variables manquantes:
- - montant caution
- - dégradation mineure
- - dégradation majeure
- - nom: variables manquantes même si innaccessibles
- situation:
- dégradation mineure: non
- valeur attendue: null
- variables manquantes:
- - montant caution
- - dégradation majeure
-
-
-
-# pouvoir tester les variables inconnues mais requises ?
diff --git a/test/mécanismes/allègement.yaml b/test/mécanismes/allègement.yaml
index 35e4a33a4..48ccd85f9 100644
--- a/test/mécanismes/allègement.yaml
+++ b/test/mécanismes/allègement.yaml
@@ -1,126 +1,121 @@
-- nom: montant
+- nom: montant
unité: €
- test: montant franchisé
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
franchise: 1200
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 1000
valeur attendue: 0
- - situation:
+ - situation:
valeur attendue: null
variables manquantes:
- montant
-
- test: montant décoté
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
- décote:
+ décote:
plafond: 2040
taux: 100%
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 1000
valeur attendue: 0
- test: montant franchisé et décoté
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
franchise: 1200
- décote:
+ décote:
plafond: 2040
taux: 75%
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 100
valeur attendue: 0
- - situation:
+ - situation:
montant: 1200
valeur attendue: 570
- - situation:
+ - situation:
montant: 1620
valeur attendue: 1305
- - situation:
+ - situation:
montant: 2040
valeur attendue: 2040
-
- test: montant abattu
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
abattement: 20507
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 10000
valeur attendue: 0
- - situation:
+ - situation:
montant: 80000
valeur attendue: 59493
-
- test: montant abattu en pourcentage
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
abattement: 15%
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 10000
valeur attendue: 8500
- - situation:
+ - situation:
montant: 80000
valeur attendue: 68000
- test: montant abattu avec plafond numérique
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
abattement: 15%
plafond: 12000
- exemples:
- - situation:
+ exemples:
+ - situation:
montant: 10000
valeur attendue: 8500
- - situation:
+ - situation:
montant: 100000
valeur attendue: 88000 # 85000 s'il n'y avait pas de plafond à la somme abattue
- test: montant franchisé, décote, abattu
unité: €
- formule:
- allègement:
+ formule:
+ allègement:
assiette: montant
franchise: 1200
- décote:
+ décote:
plafond: 2040
taux: 75%
- abattement: 20507
- exemples:
- - situation:
+ abattement: 20507
+ exemples:
+ - situation:
montant: 100
valeur attendue: 0
- - situation:
+ - situation:
montant: 1620
valeur attendue: 0
- - situation:
+ - situation:
montant: 3000
valeur attendue: 0
- - situation:
+ - situation:
montant: 21000
valeur attendue: 493
-
-
diff --git a/test/mécanismes/barème-continu.yaml b/test/mécanismes/barème-continu.yaml
index b204d2047..8faf67122 100644
--- a/test/mécanismes/barème-continu.yaml
+++ b/test/mécanismes/barème-continu.yaml
@@ -1,5 +1,5 @@
- nom: base
- unité: £
+ unité: £
formule: 300
- nom: assiette
@@ -7,37 +7,36 @@
- test: Simple
formule:
- barème continu:
+ barème continu:
assiette: assiette
multiplicateur: base
- points:
+ points:
0: 0%
0.4: 3.16%
1.1: 6.35%
unité attendue: £
- exemples:
+ exemples:
- nom: Premier point
- situation:
+ situation:
assiette: 10
valeur attendue: 0.026
- nom: Deuxième point
- situation:
+ situation:
assiette: 120
valeur attendue: 3.792
- - nom: Premier point
- situation:
+ - nom: Premier point
+ situation:
assiette: 150
valeur attendue: 5.423
- - nom: Troisième point
- situation:
+ - nom: Troisième point
+ situation:
assiette: 330
valeur attendue: 20.955
- - nom: Au-delà
- situation:
+ - nom: Au-delà
+ situation:
assiette: 1000
valeur attendue: 63.5
-
-
+
- nom: base deux
unité: µ
formule: 300
@@ -46,6 +45,7 @@
unité: µ
- test: Retour de taux, pas d'assiette
+ unité: '%'
formule:
barème continu:
assiette: assiette deux
@@ -56,24 +56,24 @@
1: 0%
retourne seulement le taux: oui
unité attendue: '%'
- exemples:
+ exemples:
- nom: Premier point
- situation:
+ situation:
assiette deux: 200
- valeur attendue: 1
+ valeur attendue: 100
- nom: Deuxième point
- situation:
+ situation:
assiette deux: 225
- valeur attendue: 1
+ valeur attendue: 100
- nom: Troisième point
- situation:
+ situation:
assiette deux: 262.5
- valeur attendue: 0.5
+ valeur attendue: 50
- nom: Quatrième point
- situation:
+ situation:
assiette deux: 300
valeur attendue: 0
- nom: Cinquième point
- situation:
+ situation:
assiette deux: 300
valeur attendue: 0
diff --git a/test/mécanismes/barème.yaml b/test/mécanismes/barème.yaml
index 5bc50b860..af6b7a62a 100644
--- a/test/mécanismes/barème.yaml
+++ b/test/mécanismes/barème.yaml
@@ -78,34 +78,34 @@
assiette: assiette
multiplicateur: base
tranches:
- - en-dessous de: 1
- taux: taux variable
- - au-dessus de: 1
- taux: 90%
+ - en-dessous de: 1
+ taux: taux variable
+ - au-dessus de: 1
+ taux: 90%
unité attendue: €
exemples:
- - nom: taux faible
- situation:
- assiette: 200
- base: 100
- ma condition: oui
- valeur attendue: 119
- - nom: taux fort
- situation:
- assiette: 200
- base: 100
- ma condition: non
- valeur attendue: 146
- - nom: assiette manquante
- situation:
- base: 100
- ma condition: oui
- variables manquantes:
- - assiette
- - nom: condition manquante
- situation:
- base: 100
- assiette: 400
- variables manquantes:
- - ma condition
+ - nom: taux faible
+ situation:
+ assiette: 200
+ base: 100
+ ma condition: oui
+ valeur attendue: 119
+ - nom: taux fort
+ situation:
+ assiette: 200
+ base: 100
+ ma condition: non
+ valeur attendue: 146
+ - nom: assiette manquante
+ situation:
+ base: 100
+ ma condition: oui
+ variables manquantes:
+ - assiette
+ - nom: condition manquante
+ situation:
+ assiette: 40
+ base: 100
+ variables manquantes:
+ - ma condition
diff --git a/test/mécanismes/conversion-unité.yaml b/test/mécanismes/conversion-unité.yaml
new file mode 100644
index 000000000..f25bd6d96
--- /dev/null
+++ b/test/mécanismes/conversion-unité.yaml
@@ -0,0 +1,236 @@
+# This is not a mecanism test, but we make use of the simplicity of declaring tests in YAML, only available for mecanisms for now
+
+- nom: douches par mois
+ question: Combien prenez-vous de douches par mois ?
+ unité: douche/mois
+
+- test: Conversion de reference
+ formule: douches par mois [douche/an]
+ exemples:
+ - situation:
+ douches par mois: 30
+ valeur attendue: 360
+
+- test: Conversion de reference 2
+ unité: douche/an
+ formule: douches par mois
+ exemples:
+ - situation:
+ douches par mois: 30
+ valeur attendue: 360
+ - nom: Unité de variable prioritaire devant les unités par défaut
+ situation:
+ douches par mois: 30
+ unités par défaut: [douche/mois]
+ valeur attendue: 360
+
+- test: Conversion de variable
+ formule: 1.5 kCo2/douche * douches par mois
+ exemples:
+ - situation:
+ douches par mois: 30
+ valeur attendue: 45
+ unité attendue: kCo2/mois
+ - nom: Unité cible de simulation
+ situation:
+ douches par mois: 20
+ unités par défaut: [kCo2/an]
+ unité attendue: kCo2/an
+ valeur attendue: 360
+
+- test: Conversion de variable et expressions
+ unité: kCo2/an
+ formule: 1 kCo2/douche * 10 douche/mois
+ exemples:
+ - valeur attendue: 120
+
+- test: Conversion de pourcentage
+ unité: €/an
+ formule: 1000€ * 1% /mois
+ exemples:
+ - valeur attendue: 120
+
+- test: Conversion en pourcentage
+ unité: '%'
+ formule: 28h / 35h
+ exemples:
+ - valeur attendue: 80
+
+- test: Conversion dans un mécanisme
+ unité: €/an
+ formule:
+ le minimum de:
+ - 100 €/mois
+ - 1120 €/an
+ exemples:
+ - valeur attendue: 1120
+
+- nom: assiette mensuelle
+ unité: €/mois
+
+- test: Conversion de mécanisme 1
+ unité: €/an
+ formule:
+ barème:
+ assiette: assiette mensuelle [€/an]
+ tranches:
+ - en-dessous de: 30000
+ taux: 4.65%
+ - de: 30000
+ à: 90000
+ taux: 3%
+ - au-dessus de: 90000
+ taux: 1%
+
+ exemples:
+ - situation:
+ assiette mensuelle: 3000
+ valeur attendue: 1575
+
+- nom: assiette annuelle
+ unité: €/an
+
+- test: Conversion de mécanisme 2
+ formule:
+ barème:
+ assiette: assiette annuelle [€/mois]
+ tranches:
+ - en-dessous de: 2500
+ taux: 4.65%
+ - de: 2500
+ à: 7500
+ taux: 3%
+ - au-dessus de: 7500
+ taux: 1%
+ exemples:
+ - situation:
+ assiette annuelle: 36000
+ valeur attendue: 131.25
+ unités par défaut: [€/mois]
+
+- test: Conversion dans une expression
+ unité: €/an
+ formule: 80 €/mois + 1120 €/an + 20 €/mois
+ exemples:
+ - valeur attendue: 2320
+
+- test: Conversion dans une comparaison
+ formule: 100€/mois = 1.2k€/an
+ exemples:
+ - valeur attendue: true
+
+- nom: mutuelle
+ formule: 30 €/mois
+
+- nom: retraite
+ formule:
+ multiplication:
+ assiette: assiette annuelle
+ plafond: 12 k€/an
+ taux: 10%
+
+- test: Conversion dans une somme compliquée
+ formule:
+ somme:
+ - mutuelle
+ - retraite
+ exemples:
+ - situation:
+ assiette annuelle: 20000
+ unités par défaut: [€/mois]
+ valeur attendue: 130
+
+- nom: maladie
+ formule:
+ multiplication:
+ assiette: assiette annuelle
+ composantes:
+ - attributs:
+ dû par: employeur
+ taux: 15%
+ - attributs:
+ dû par: salarié
+ taux: 5%
+ plafond: 1000 €/mois
+
+- test: Conversion avec composantes
+ unité: €/mois
+ formule:
+ somme:
+ - maladie .salarié
+ - retraite
+ - mutuelle
+ exemples:
+ - situation:
+ assiette annuelle: 20000
+ valeur attendue: 180
+
+- test: Conversion dans un allègement
+ formule:
+ allègement:
+ assiette: 1000€/an
+ abattement: 10€/mois
+ exemples:
+ - unités par défaut: [€/an]
+ valeur attendue: 880
+
+- test: Conversion dans avec un abattement en %
+ unité par défaut: €/an
+ formule:
+ allègement:
+ assiette: 1000€/an
+ abattement: 10%
+ exemples:
+ - valeur attendue: 900
+
+- nom: assiette cotisations
+ formule:
+ allègement:
+ assiette: assiette mensuelle
+ abattement: 1200 €/an
+
+- nom: prévoyance cadre
+ formule:
+ multiplication:
+ assiette: assiette cotisations
+ taux: 1.5%
+
+- test: Conversion avec plusieurs échelons
+ formule:
+ somme:
+ - prévoyance cadre
+ - 35€/mois
+ exemples:
+ - unités par défaut: [€/an]
+ situation:
+ assiette mensuelle: 1100
+ valeur attendue: 600
+
+- test: Conversion de situation
+ formule:
+ somme:
+ - retraite
+ - mutuelle
+ exemples:
+ - unités par défaut: [€/an]
+ situation:
+ retraite: 4000
+ valeur attendue: 4360
+
+- nom: rémunération brute
+ unité par défaut: €/mois
+
+- test: Conversion de situation avec unité
+ unité: €/an
+ formule:
+ multiplication:
+ assiette: rémunération brute
+ taux: 10%
+ exemples:
+ - situation:
+ rémunération brute: 1000
+ valeur attendue: 1200
+ - unités par défaut: [k€/an]
+ situation:
+ rémunération brute: 12
+ valeur attendue: 1200
diff --git a/test/mécanismes/expressions.yaml b/test/mécanismes/expressions.yaml
index 76770797e..186e1ea4c 100644
--- a/test/mécanismes/expressions.yaml
+++ b/test/mécanismes/expressions.yaml
@@ -52,12 +52,13 @@
unité: '%'
- test: soustraction
- formule: 1 - taux
+ unité: '%'
+ formule: 100% - taux
unité attendue: '%'
exemples:
- situation:
- taux: 0.89
- valeur attendue: 0.11
+ taux: 89
+ valeur attendue: 11
- test: addition
formule: salaire de base + 2000
@@ -137,6 +138,7 @@
valeur attendue: false
- nom: plafond sécurité sociale
+ unité: $
- nom: CDD
@@ -218,16 +220,14 @@
valeur attendue: false
- nom: revenu
- période: mois
- unité: €
+ unité: €/mois
-- test: variable modifiée temporellement
- formule: revenu [annuel]
- période: aucune
+- test: unité de variable modifiée
+ formule: revenu [k€/an]
exemples:
- situation:
revenu: 1000
- valeur attendue: 12000
+ valeur attendue: 12
- test: opérations multiples
formule: 4 * plafond sécurité sociale * 10%
diff --git a/test/mécanismes/multiplication.yaml b/test/mécanismes/multiplication.yaml
index 02ec7439a..26812533e 100644
--- a/test/mécanismes/multiplication.yaml
+++ b/test/mécanismes/multiplication.yaml
@@ -27,7 +27,6 @@
situation:
valeur attendue: 9.9
-
- nom: mon plafond
unité: €
@@ -66,8 +65,6 @@
mon facteur: 3
valeur attendue: 300
-
-
- test: Multiplication complète
formule:
multiplication:
@@ -76,7 +73,7 @@
plafond: mon plafond
taux: 0.5%
- unité attendue: €-patates
+ unité attendue: €.patates
exemples:
- nom:
situation:
@@ -84,8 +81,6 @@
mon facteur: 2
mon plafond: 100
valeur attendue: 1
-
-
# This should work, but with the use of objectShape & co, the short circuits are not performed
#- test: Multiplication complète
# formule:
@@ -103,4 +98,3 @@
# valeur attendue: 0
# variables manquantes: []
-
diff --git a/test/mécanismes/période.yaml b/test/mécanismes/période.yaml
deleted file mode 100644
index 1c886b387..000000000
--- a/test/mécanismes/période.yaml
+++ /dev/null
@@ -1,157 +0,0 @@
-# This is not a mecanism test, but we make use of the simplicity of declaring tests in YAML, only available for mecanisms for now
-
-- nom: nombre de douches
- période: mois
- question: Combien prenez-vous de douches par mois ?
- unité: _
- suggestions:
- - 30
-
-- test: impact des douches
- période: année
- formule: 1 * nombre de douches
-
- exemples:
- - situation:
- nombre de douches: 30
- valeur attendue: 360
-
-- nom: impact par douche
- formule: 1
- unité: kgCO2e
-
-- test: impact des douches erroné
- période: année
- formule: impact par douche * nombre de douches
- exemples:
- - situation:
- nombre de douches: 30
- valeur attendue: 360
-
-- nom: assiette mensuelle
- période: mois
- unité: €
-
-- test: Périodes, barème annuel assiette mensuelle
- période: année
- formule:
- barème:
- # cette formule appellant l'assiette est annuelle :
- # si l'assiette est aussi annuelle dans le contexte de la simulation actuelle, c'est bon
- # sinon une conversion est nécessaire et faite automatiquement par le moteur
- assiette: assiette mensuelle
- tranches:
- # ce sont ces chiffres là qui imposent à la règle d'être annuelle
- # de plus, les règles annuelles de la loi sont rarement traduites officiellement en d'autres périodes
- - en-dessous de: 30000
- taux: 4.65%
- - de: 30000
- à: 90000
- taux: 3%
- - au-dessus de: 90000
- taux: 1%
-
- exemples:
- - situation:
- assiette mensuelle: 3000
- valeur attendue: 1575
-
-
-- nom: assiette annuelle
- période: année
- unité: €
-
-- test: Périodes, barème mensuel assiette annuelle
- période: mois
- formule:
- barème:
- # cette formule appellant l'assiette est annuelle :
- # si l'assiette est aussi annuelle dans le contexte de la simulation actuelle, c'est bon
- # sinon une conversion est nécessaire et faite automatiquement par le moteur
- assiette: assiette annuelle
- tranches:
- # ce sont ces chiffres là qui imposent à la règle d'être annuelle
- # de plus, les règles annuelles de la loi sont rarement traduites officiellement en d'autres périodes
- - en-dessous de: 2500
- taux: 4.65%
- - de: 2500
- à: 7500
- taux: 3%
- - au-dessus de: 7500
- taux: 1%
-
- exemples:
- - situation:
- assiette annuelle: 36000
- valeur attendue: 131.25
-
-- nom: assiette
- période: flexible
- unité: €
-
-- test: Périodes, période dans la situation
- période: année
- formule:
- barème:
- assiette: assiette
- tranches:
- - en-dessous de: 30000
- taux: 4.65%
- - de: 30000
- à: 90000
- taux: 3%
- - au-dessus de: 90000
- taux: 1%
-
- exemples:
- - situation:
- période: mois
- assiette: 3000
- valeur attendue: 1575
- - situation:
- période: année
- assiette: 36000
- valeur attendue: 1575
-
-
-- nom: assiette deux
- période: mois
- unité: €
-
-- test: Périodes, variable neutre appelant variable mensuelle
- période: flexible
- formule:
- multiplication:
- assiette: assiette deux
- taux: 10%
-
- exemples:
- - situation:
- période: mois
- assiette deux: 3000
- valeur attendue: 300
-
-- nom: assiette trois
- période: année
- unité: €
-
-- test: Périodes, variable neutre appelant variable annuelle
- période: flexible
- formule:
- multiplication:
- assiette: assiette trois
- taux: 10%
-
- exemples:
- - situation:
- période: mois
- assiette trois: 36000
- valeur attendue: 300
-
-
-- test: Périodes, préfixe de modification temporelle
- formule: assiette trois [mensuel]
- exemples:
- - situation:
- assiette trois: 12000
- valeur attendue: 1000
diff --git a/test/mécanismes/remplace.yaml b/test/mécanismes/remplace.yaml
index 721ab1701..31287e6cf 100644
--- a/test/mécanismes/remplace.yaml
+++ b/test/mécanismes/remplace.yaml
@@ -18,7 +18,7 @@
applicable si: client enfant
remplace:
règle: prix du repas
- par: 8 €
+ par: 8 €/repas
- test: modifie une règle
formule: restaurant . prix du repas
@@ -40,8 +40,8 @@
- nom: cotisations
formule:
somme:
- - retraite [salarié]
- - retraite [employeur]
+ - retraite .salarié
+ - retraite .employeur
- chômage
- maladie
@@ -140,7 +140,7 @@
formule: cotisations
remplace:
- règle: cotisations . chômage
- par: 10
+ par: 10€
- règle: cotisations . maladie
par: 0
exemples:
diff --git a/test/real-rules.test.js b/test/real-rules.test.js
index 8274ad377..84fb5f7e4 100644
--- a/test/real-rules.test.js
+++ b/test/real-rules.test.js
@@ -1,8 +1,8 @@
import { AssertionError } from 'chai'
+import { merge } from 'ramda'
+import { exampleAnalysisSelector } from 'Selectors/analyseSelectors'
import { rules } from '../source/engine/rules'
import { parseAll } from '../source/engine/traverse'
-import { exampleAnalysisSelector } from 'Selectors/analyseSelectors'
-import { merge } from 'ramda'
// les variables dans les tests peuvent être exprimées relativement à l'espace de nom de la règle,
// comme dans sa formule
@@ -13,7 +13,8 @@ let runExamples = (examples, rule) =>
rules,
currentExample: {
situation: ex.situation,
- dottedName: rule.dottedName
+ dottedName: rule.dottedName,
+ defaultUnits: ex['unités par défaut']
}
},
{ dottedName: rule.dottedName }
diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap
index 207d753bf..c13132cbf 100644
--- a/test/regressions/__snapshots__/simulations.jest.js.snap
+++ b/test/regressions/__snapshots__/simulations.jest.js.snap
@@ -1,299 +1,265 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`calculate simulations-artiste-auteur: bnc 1`] = `"[1230]"`;
+exports[`calculate simulations-artiste-auteur: bnc 1`] = `"[1230]"`;
-exports[`calculate simulations-artiste-auteur: bnc 2`] = `"[1863]"`;
+exports[`calculate simulations-artiste-auteur: bnc 2`] = `"[1230]"`;
-exports[`calculate simulations-artiste-auteur: bnc 3`] = `"[932]"`;
+exports[`calculate simulations-artiste-auteur: bnc 3`] = `"[1230]"`;
-exports[`calculate simulations-artiste-auteur: salarié 1`] = `"[160]"`;
+exports[`calculate simulations-artiste-auteur: salarié 1`] = `"[160]"`;
-exports[`calculate simulations-artiste-auteur: salarié 2`] = `"[1603]"`;
+exports[`calculate simulations-artiste-auteur: salarié 2`] = `"[1603]"`;
-exports[`calculate simulations-artiste-auteur: salarié 3`] = `"[12372]"`;
+exports[`calculate simulations-artiste-auteur: salarié 3`] = `"[12372]"`;
-exports[`calculate simulations-auto-entrepreneur: aides 1`] = `"[5299,299,5000,0,5000]"`;
+exports[`calculate simulations-auto-entrepreneur: aides 1`] = `"[5299,299,5000,0,5000]"`;
-exports[`calculate simulations-auto-entrepreneur: aides 2`] = `"[52991,2991,50000,2314,47686]"`;
+exports[`calculate simulations-auto-entrepreneur: aides 2`] = `"[52991,2991,50000,2314,47686]"`;
-exports[`calculate simulations-auto-entrepreneur: impôt sur le revenu 1`] = `"[32092,7092,25000,706,24294]"`;
+exports[`calculate simulations-auto-entrepreneur: impôt sur le revenu 1`] = `"[32092,7092,25000,706,24294]"`;
-exports[`calculate simulations-auto-entrepreneur: périodes 1`] = `"[128,28,100,0,100]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 1`] = `"[642,142,500,0,500]"`;
-exports[`calculate simulations-auto-entrepreneur: périodes 2`] = `"[642,142,500,0,500]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 2`] = `"[1284,284,1000,0,1000]"`;
-exports[`calculate simulations-auto-entrepreneur: périodes 3`] = `"[1284,284,1000,0,1000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 3`] = `"[2569,569,2000,0,2000]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 1`] = `"[642,142,500,0,500]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 4`] = `"[6422,1422,5000,0,5000]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 2`] = `"[1284,284,1000,0,1000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 5`] = `"[12844,2844,10000,0,10000]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 3`] = `"[2569,569,2000,0,2000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 6`] = `"[25688,5688,20000,0,20000]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 4`] = `"[6422,1422,5000,0,5000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 7`] = `"[64221,14221,50000,3835,46165]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 5`] = `"[12844,2844,10000,0,10000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 8`] = `"[89910,19910,70000,7688,62312]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 6`] = `"[25688,5688,20000,0,20000]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 9`] = `"[128442,28442,100000,13468,86532]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 7`] = `"[64221,14221,50000,3835,46165]"`;
+exports[`calculate simulations-auto-entrepreneur: échelle de revenus 10`] = `"[1284423,284423,1000000,282020,717980]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 8`] = `"[89910,19910,70000,7688,62312]"`;
+exports[`calculate simulations-indépendant: acre 1`] = `"[73015,23015,50000,51980,8237,41763,null,73015]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 9`] = `"[128442,28442,100000,13468,86532]"`;
+exports[`calculate simulations-indépendant: activité 1`] = `"[29091,9091,20000,20787,947,19053,null,29091]"`;
-exports[`calculate simulations-auto-entrepreneur: échelle de revenus 10`] = `"[1284423,284423,1000000,282020,717980]"`;
+exports[`calculate simulations-indépendant: activité 2`] = `"[29108,9108,20000,20787,947,19053,null,29108]"`;
-exports[`calculate simulations-indépendant: acre 1`] = `"[73015,23015,50000,51980,8237,41763,null,73015]"`;
+exports[`calculate simulations-indépendant: impôt sur le revenu 1`] = `"[29091,9091,20000,20787,728,19272,null,29091]"`;
-exports[`calculate simulations-indépendant: activité 1`] = `"[29091,9091,20000,20787,947,19053,null,29091]"`;
+exports[`calculate simulations-indépendant: impôt sur le revenu 2`] = `"[73015,23015,50000,51980,8317,41683,null,73015]"`;
-exports[`calculate simulations-indépendant: activité 2`] = `"[29108,9108,20000,20787,947,19053,null,29108]"`;
+exports[`calculate simulations-indépendant: impôt sur le revenu 3`] = `"[29091,9091,20000,20787,2079,17921,null,29091]"`;
-exports[`calculate simulations-indépendant: impôt sur le revenu 1`] = `"[29091,9091,20000,20787,728,19272,null,29091]"`;
+exports[`calculate simulations-indépendant: inversions 1`] = `"[2000,1369,631,683,0,631,null,2000]"`;
-exports[`calculate simulations-indépendant: impôt sur le revenu 2`] = `"[73015,23015,50000,51980,8317,41683,null,73015]"`;
+exports[`calculate simulations-indépendant: inversions 2`] = `"[50000,16017,33983,35338,3743,30240,null,50000]"`;
-exports[`calculate simulations-indépendant: impôt sur le revenu 3`] = `"[29091,9091,20000,20787,2079,17921,null,29091]"`;
+exports[`calculate simulations-indépendant: inversions 3`] = `"[14592,4592,10000,10393,0,10000,null,14592]"`;
-exports[`calculate simulations-indépendant: inversions 1`] = `"[2000,1369,631,683,0,631,null,2000]"`;
+exports[`calculate simulations-indépendant: inversions 4`] = `"[88759,27318,61441,63848,11441,50000,null,88759]"`;
-exports[`calculate simulations-indépendant: inversions 2`] = `"[50000,16017,33983,35338,3743,30240,null,50000]"`;
+exports[`calculate simulations-indépendant: inversions 5`] = `"[14592,4592,10000,10393,0,10000,null,15592]"`;
-exports[`calculate simulations-indépendant: inversions 3`] = `"[14592,4592,10000,10393,0,10000,null,14592]"`;
+exports[`calculate simulations-indépendant: inversions 6`] = `"[19000,5926,13074,13588,0,13074,1000,20000]"`;
-exports[`calculate simulations-indépendant: inversions 4`] = `"[88759,27318,61441,63848,11441,50000,null,88759]"`;
+exports[`calculate simulations-indépendant: inversions 7`] = `"[18000,5623,12377,12863,0,12377,2000,20000]"`;
-exports[`calculate simulations-indépendant: inversions 5`] = `"[14592,4592,10000,10393,0,10000,null,15592]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 1`] = `"[1840,1340,500,547,0,500,null,1840]"`;
-exports[`calculate simulations-indépendant: inversions 6`] = `"[19000,5926,13074,13588,0,13074,1000,20000]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 2`] = `"[2448,1448,1000,1064,0,1000,null,2448]"`;
-exports[`calculate simulations-indépendant: inversions 7`] = `"[18000,5623,12377,12863,0,12377,2000,20000]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 3`] = `"[3056,1556,1500,1580,0,1500,null,3056]"`;
-exports[`calculate simulations-indépendant: période 1`] = `"[1455,455,1000,1039,0,1000,null,1455]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 4`] = `"[3664,1664,2000,2097,0,2000,null,3664]"`;
-exports[`calculate simulations-indépendant: période 2`] = `"[7239,2239,5000,5196,920,4080,null,7239]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 5`] = `"[7423,2423,5000,5199,0,5000,null,7423]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 1`] = `"[1840,1340,500,547,0,500,null,1840]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 6`] = `"[14592,4592,10000,10393,0,10000,null,14592]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 2`] = `"[2448,1448,1000,1064,0,1000,null,2448]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 7`] = `"[139472,39472,100000,103784,24383,75617,null,139472]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 3`] = `"[3056,1556,1500,1580,0,1500,null,3056]"`;
+exports[`calculate simulations-indépendant: échelle de revenus 8`] = `"[1239593,239593,1000000,1033657,467702,532298,null,1239593]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 4`] = `"[3664,1664,2000,2097,0,2000,null,3664]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 1`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 5`] = `"[7423,2423,5000,5199,0,5000,null,7423]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 2`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 6`] = `"[14592,4592,10000,10393,0,10000,null,14592]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 3`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 7`] = `"[139472,39472,100000,103784,24383,75617,null,139472]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 4`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-indépendant: échelle de revenus 8`] = `"[1239593,239593,1000000,1033657,467702,532298,null,1239593]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 5`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 1`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - avec charges 1`] = `"[5291,5291,5306,4,10,12]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 2`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - avec charges 2`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 3`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 1`] = `"[169,169,139,0,1,1]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 4`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 2`] = `"[738,738,323,0,2,2]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - activités 5`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 3`] = `"[2446,2446,2588,2,5,6]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - avec charges 1`] = `"[5291,5291,5306,4,10,12]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 4`] = `"[5291,5291,5306,4,10,12]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - avec charges 2`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 5`] = `"[10982,10982,10742,4,19,23]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - périodes 1`] = `"[80,80,98,1,2,3]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 6`] = `"[25686,28055,27050,4,45,59]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - périodes 2`] = `"[251,251,261,2,6,7]"`;
+exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 7`] = `"[46640,57031,52655,4,45,119]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - périodes 3`] = `"[2485,2808,2693,4,45,71]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 1`] = `"[15580,15580,6600,4,18,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 1`] = `"[169,169,139,0,1,1]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 2`] = `"[15560,15560,0,4,18,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 2`] = `"[738,738,323,0,2,2]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 3`] = `"[15444,15444,7047,4,14,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 3`] = `"[2446,2446,2588,2,5,6]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 4`] = `"[17417,17417,4093,3,8,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 4`] = `"[5291,5291,5306,4,10,12]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 5`] = `"[17417,17417,4093,3,8,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 5`] = `"[10982,10982,10742,4,19,23]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - avec charges 1`] = `"[7343,7343,4228,3,8,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 6`] = `"[25686,28055,27050,4,45,59]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - avec charges 2`] = `"[11599,12250,12332,4,24,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 7`] = `"[46640,57031,52655,4,45,119]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 1`] = `"[779,779,102,0,0,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 1`] = `"[15580,15580,6600,4,18,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 2`] = `"[1557,1557,205,0,0,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 2`] = `"[15560,15560,0,4,18,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 3`] = `"[3893,3893,1762,2,0,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 3`] = `"[15444,15444,7047,4,14,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 4`] = `"[7786,7786,3523,3,7,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 4`] = `"[17417,17417,4093,3,8,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 5`] = `"[15571,15571,7047,4,14,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - activités 5`] = `"[17417,17417,4093,3,8,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 6`] = `"[36823,38928,17617,4,34,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - avec charges 1`] = `"[7343,7343,4228,3,8,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 7`] = `"[68654,77856,30496,4,56,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - avec charges 2`] = `"[11599,12250,12332,4,24,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 1`] = `"[13772,13772,10086,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - périodes 1`] = `"[156,156,20,0,0,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 2`] = `"[14571,14571,0,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - périodes 2`] = `"[389,389,176,2,0,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 3`] = `"[13761,13761,10077,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - périodes 3`] = `"[3626,3893,1762,4,41,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 4`] = `"[13772,13772,10086,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 1`] = `"[779,779,102,0,0,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 5`] = `"[13772,13772,10086,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 2`] = `"[1557,1557,205,0,0,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec charges 1`] = `"[6797,6797,4979,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 3`] = `"[3893,3893,1762,2,0,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec charges 2`] = `"[13772,13772,10086,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 4`] = `"[7786,7786,3523,3,7,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 1`] = `"[0,0,36807,3,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 5`] = `"[15571,15571,7047,4,14,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 2`] = `"[631,631,481,3,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 6`] = `"[36823,38928,17617,4,34,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 3`] = `"[3100,3100,2278,3,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 7`] = `"[68654,77856,30496,4,56,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 4`] = `"[6797,6797,4979,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 1`] = `"[13772,13772,10085,4,21,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 5`] = `"[13772,13772,10086,4,21,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 2`] = `"[14571,14571,0,4,21,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 6`] = `"[30240,33983,24902,4,48,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 3`] = `"[13761,13761,10077,4,21,0]"`;
+exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 7`] = `"[56157,69988,36158,4,56,0]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 4`] = `"[13772,13772,10085,4,21,0]"`;
+exports[`calculate simulations-salarié: aides 1`] = `"[2302,0,0,2000,1561,1503]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - activités 5`] = `"[13772,13772,10085,4,21,0]"`;
+exports[`calculate simulations-salarié: aides 2`] = `"[12823,0,0,10000,8910,7652]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec charges 1`] = `"[6797,6797,4979,4,21,0]"`;
+exports[`calculate simulations-salarié: apprentissage 1`] = `"[1551,0,0,1500,1446,1446]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec charges 2`] = `"[13772,13772,10085,4,21,0]"`;
+exports[`calculate simulations-salarié: apprentissage 2`] = `"[1384,167,0,1500,1446,1446]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - périodes 1`] = `"[80,80,60,3,21,0]"`;
+exports[`calculate simulations-salarié: assimilé salarié 1`] = `"[7014,0,0,5000,3943,3304]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - périodes 2`] = `"[327,327,240,3,21,0]"`;
+exports[`calculate simulations-salarié: assimilé salarié 2`] = `"[1583,0,0,1500,1163,1163]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - périodes 3`] = `"[2927,3397,2422,4,56,0]"`;
+exports[`calculate simulations-salarié: assimilé salarié 3`] = `"[3742,0,0,3000,2348,2150]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 1`] = `"[0,0,36807,3,21,0]"`;
+exports[`calculate simulations-salarié: atmp 1`] = `"[2549,0,0,2000,1561,1503]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 2`] = `"[631,631,481,3,21,0]"`;
+exports[`calculate simulations-salarié: avantages 1`] = `"[2682,0,0,2000,1540,1464]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 3`] = `"[3100,3100,2278,3,21,0]"`;
+exports[`calculate simulations-salarié: avantages 2`] = `"[2692,0,0,2000,1539,1462]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 4`] = `"[6797,6797,4979,4,21,0]"`;
+exports[`calculate simulations-salarié: avantages 3`] = `"[2602,0,0,2000,1549,1481]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 5`] = `"[13772,13772,10085,4,21,0]"`;
+exports[`calculate simulations-salarié: cadre 1`] = `"[4122,0,0,3000,2348,2149]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 6`] = `"[30240,33983,24902,4,48,0]"`;
+exports[`calculate simulations-salarié: cdd 1`] = `"[2514,0,0,2000,1561,1503]"`;
-exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 7`] = `"[56157,69988,36158,4,56,0]"`;
+exports[`calculate simulations-salarié: cdd 2`] = `"[2605,0,0,2000,1599,1532]"`;
-exports[`calculate simulations-salarié: aides 1`] = `"[2302,0,0,2000,1561,1503]"`;
+exports[`calculate simulations-salarié: heures supplémentaires 1`] = `"[2599,0,0,2000,1636,1578]"`;
-exports[`calculate simulations-salarié: aides 2`] = `"[12823,0,0,10000,8910,7652]"`;
+exports[`calculate simulations-salarié: heures supplémentaires 2`] = `"[3123,0,0,2000,2009,1940]"`;
-exports[`calculate simulations-salarié: apprentissage 1`] = `"[1551,0,0,1500,1446,1446]"`;
+exports[`calculate simulations-salarié: heures supplémentaires 3`] = `"[2669,0,0,2000,1636,1578]"`;
-exports[`calculate simulations-salarié: apprentissage 2`] = `"[1384,167,0,1500,1446,1446]"`;
+exports[`calculate simulations-salarié: heures supplémentaires 4`] = `"[2580,0,0,2000,1627,1569]"`;
-exports[`calculate simulations-salarié: assimilé salarié 1`] = `"[7014,0,0,5000,3943,3304]"`;
+exports[`calculate simulations-salarié: heures supplémentaires 5`] = `"[3043,0,0,2000,1970,1911]"`;
-exports[`calculate simulations-salarié: assimilé salarié 2`] = `"[1583,0,0,1500,1163,1163]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 1`] = `"[4076,0,0,3000,2353,2168]"`;
-exports[`calculate simulations-salarié: assimilé salarié 3`] = `"[3742,0,0,3000,2348,2150]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 2`] = `"[41765,0,0,30000,24267,14611]"`;
-exports[`calculate simulations-salarié: atmp 1`] = `"[2549,0,0,2000,1561,1503]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 3`] = `"[4106,0,0,3000,2353,2172]"`;
-exports[`calculate simulations-salarié: avantages 1`] = `"[2682,0,0,2000,1540,1464]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 4`] = `"[3915,0,0,3000,2353,2205]"`;
-exports[`calculate simulations-salarié: avantages 2`] = `"[2692,0,0,2000,1539,1462]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 5`] = `"[41765,0,0,30000,24267,14611]"`;
-exports[`calculate simulations-salarié: avantages 3`] = `"[2602,0,0,2000,1549,1481]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 6`] = `"[4076,0,0,3000,2353,2242]"`;
-exports[`calculate simulations-salarié: cadre 1`] = `"[4122,0,0,3000,2348,2149]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 7`] = `"[41765,0,0,30000,24267,15869]"`;
-exports[`calculate simulations-salarié: cdd 1`] = `"[2514,0,0,2000,1561,1503]"`;
+exports[`calculate simulations-salarié: impôt sur le revenu 8`] = `"[4076,0,0,3000,2353,2107]"`;
-exports[`calculate simulations-salarié: cdd 2`] = `"[2605,0,0,2000,1599,1532]"`;
+exports[`calculate simulations-salarié: inversions 1`] = `"[2000,0,0,1738,1354,1343]"`;
-exports[`calculate simulations-salarié: heures supplémentaires 1`] = `"[2599,0,0,2000,1636,1578]"`;
+exports[`calculate simulations-salarié: inversions 2`] = `"[3474,0,0,2554,2000,1852]"`;
-exports[`calculate simulations-salarié: heures supplémentaires 2`] = `"[3123,0,0,2000,2009,1940]"`;
+exports[`calculate simulations-salarié: inversions 3`] = `"[3764,0,0,2769,2170,2000]"`;
-exports[`calculate simulations-salarié: heures supplémentaires 3`] = `"[2669,0,0,2000,1636,1578]"`;
+exports[`calculate simulations-salarié: stage 1`] = `"[507,0,0,500,500,500]"`;
-exports[`calculate simulations-salarié: heures supplémentaires 4`] = `"[2580,0,0,2000,1627,1569]"`;
+exports[`calculate simulations-salarié: stage 2`] = `"[2493,0,0,2000,1749,1749]"`;
-exports[`calculate simulations-salarié: heures supplémentaires 5`] = `"[3043,0,0,2000,1970,1911]"`;
+exports[`calculate simulations-salarié: temps partiel 1`] = `"[2605,0,2188,2000,1561,1503]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 1`] = `"[4076,0,0,3000,2353,2168]"`;
+exports[`calculate simulations-salarié: temps partiel 2`] = `"[2533,0,2500,1857,1448,1416]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 2`] = `"[41765,0,0,30000,24267,14656]"`;
+exports[`calculate simulations-salarié: échelle de salaires 1`] = `"[130,0,0,100,57,57]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 3`] = `"[4106,0,0,3000,2353,2270]"`;
+exports[`calculate simulations-salarié: échelle de salaires 2`] = `"[284,0,0,250,176,176]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 4`] = `"[3915,0,0,3000,2353,2205]"`;
+exports[`calculate simulations-salarié: échelle de salaires 3`] = `"[541,0,0,500,374,374]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 5`] = `"[41765,0,0,30000,24267,14656]"`;
+exports[`calculate simulations-salarié: échelle de salaires 4`] = `"[798,0,0,750,572,572]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 6`] = `"[4076,0,0,3000,2353,2242]"`;
+exports[`calculate simulations-salarié: échelle de salaires 5`] = `"[1055,0,0,1000,770,770]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 7`] = `"[41765,0,0,30000,24267,15913]"`;
+exports[`calculate simulations-salarié: échelle de salaires 6`] = `"[1312,0,0,1250,968,968]"`;
-exports[`calculate simulations-salarié: impôt sur le revenu 8`] = `"[4076,0,0,3000,2353,2107]"`;
+exports[`calculate simulations-salarié: échelle de salaires 7`] = `"[1569,0,0,1500,1165,1165]"`;
-exports[`calculate simulations-salarié: inversions 1`] = `"[2000,0,0,1738,1354,1343]"`;
+exports[`calculate simulations-salarié: échelle de salaires 8`] = `"[2494,0,0,2000,1561,1503]"`;
-exports[`calculate simulations-salarié: inversions 2`] = `"[3474,0,0,2554,2000,1852]"`;
+exports[`calculate simulations-salarié: échelle de salaires 9`] = `"[3401,0,0,2500,1957,1815]"`;
-exports[`calculate simulations-salarié: inversions 3`] = `"[3764,0,0,2769,2170,2000]"`;
+exports[`calculate simulations-salarié: échelle de salaires 10`] = `"[4076,0,0,3000,2353,2159]"`;
-exports[`calculate simulations-salarié: périodes 1`] = `"[3405,0,0,3000,2112,2112]"`;
+exports[`calculate simulations-salarié: échelle de salaires 11`] = `"[5674,0,0,4000,3146,2744]"`;
-exports[`calculate simulations-salarié: périodes 2`] = `"[61150,0,0,45000,35349,31190]"`;
+exports[`calculate simulations-salarié: échelle de salaires 12`] = `"[7085,0,0,5000,3948,3321]"`;
-exports[`calculate simulations-salarié: périodes 3`] = `"[674660,0,0,500000,417064,243499]"`;
+exports[`calculate simulations-salarié: échelle de salaires 13`] = `"[14319,0,0,10000,7959,6069]"`;
-exports[`calculate simulations-salarié: stage 1`] = `"[507,0,0,500,500,500]"`;
+exports[`calculate simulations-salarié: échelle de salaires 14`] = `"[28336,0,0,20000,15969,10665]"`;
-exports[`calculate simulations-salarié: stage 2`] = `"[2493,0,0,2000,1749,1749]"`;
+exports[`calculate simulations-salarié: échelle de salaires 15`] = `"[128506,0,0,100000,87197,46275]"`;
-exports[`calculate simulations-salarié: temps partiel 1`] = `"[2605,0,2188,2000,1561,1503]"`;
-
-exports[`calculate simulations-salarié: temps partiel 2`] = `"[2533,0,2500,1857,1448,1416]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 1`] = `"[130,0,0,100,57,57]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 2`] = `"[284,0,0,250,176,176]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 3`] = `"[541,0,0,500,374,374]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 4`] = `"[798,0,0,750,572,572]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 5`] = `"[1055,0,0,1000,770,770]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 6`] = `"[1312,0,0,1250,968,968]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 7`] = `"[1569,0,0,1500,1165,1165]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 8`] = `"[2494,0,0,2000,1561,1503]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 9`] = `"[3401,0,0,2500,1957,1815]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 10`] = `"[4076,0,0,3000,2353,2159]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 11`] = `"[5674,0,0,4000,3146,2744]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 12`] = `"[7085,0,0,5000,3948,3321]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 13`] = `"[14319,0,0,10000,7959,6069]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 14`] = `"[28336,0,0,20000,15969,10941]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 15`] = `"[128506,0,0,100000,87197,50180]"`;
-
-exports[`calculate simulations-salarié: échelle de salaires 16`] = `"[1243750,0,0,1000000,896297,451743]"`;
+exports[`calculate simulations-salarié: échelle de salaires 16`] = `"[1243750,0,0,1000000,896297,446127]"`;
diff --git a/test/regressions/simulations-auto-entrepreneur.yaml b/test/regressions/simulations-auto-entrepreneur.yaml
index 4976096bf..8c3b1fb20 100644
--- a/test/regressions/simulations-auto-entrepreneur.yaml
+++ b/test/regressions/simulations-auto-entrepreneur.yaml
@@ -10,14 +10,6 @@
- dirigeant . auto-entrepreneur . revenu net de cotisations: 100000
- dirigeant . auto-entrepreneur . revenu net de cotisations: 1000000
-périodes:
- - dirigeant . auto-entrepreneur . revenu net de cotisations: 100
- période: mois
- - dirigeant . auto-entrepreneur . revenu net de cotisations: 500
- période: mois
- - dirigeant . auto-entrepreneur . revenu net de cotisations: 1000
- période: mois
-
aides:
- dirigeant . auto-entrepreneur . revenu net de cotisations: 5000
entreprise . ACRE: true
diff --git a/test/regressions/simulations-indépendant.yaml b/test/regressions/simulations-indépendant.yaml
index 3ee392e23..61cc9f338 100644
--- a/test/regressions/simulations-indépendant.yaml
+++ b/test/regressions/simulations-indépendant.yaml
@@ -8,12 +8,6 @@
- dirigeant . indépendant . revenu net de cotisations: 100000
- dirigeant . indépendant . revenu net de cotisations: 1000000
-période:
- - dirigeant . indépendant . revenu net de cotisations: 1000
- période: mois
- - dirigeant . indépendant . revenu net de cotisations: 5000
- période: mois
-
inversions:
- entreprise . rémunération totale du dirigeant: 2000
- entreprise . rémunération totale du dirigeant: 50000
@@ -43,4 +37,4 @@ impôt sur le revenu:
impôt . méthode de calcul: taux neutre
- dirigeant . indépendant . revenu net de cotisations: 20000
impôt . méthode de calcul: taux personnalisé
- impôt . taux personnalisé: 0.1
+ impôt . taux personnalisé: 10
diff --git a/test/regressions/simulations-rémunération-dirigeant.yaml b/test/regressions/simulations-rémunération-dirigeant.yaml
index b1d6df864..383df9c25 100644
--- a/test/regressions/simulations-rémunération-dirigeant.yaml
+++ b/test/regressions/simulations-rémunération-dirigeant.yaml
@@ -7,14 +7,6 @@
- entreprise . rémunération totale du dirigeant: 50000
- entreprise . rémunération totale du dirigeant: 100000
-périodes:
- - entreprise . rémunération totale du dirigeant: 200
- période: mois
- - entreprise . rémunération totale du dirigeant: 500
- période: mois
- - entreprise . rémunération totale du dirigeant: 5000
- période: mois
-
avec charges:
- entreprise . rémunération totale du dirigeant: 10000
entreprise . charges: 2000
diff --git a/test/regressions/simulations-salarié.yaml b/test/regressions/simulations-salarié.yaml
index f260531a2..2ad6203b3 100644
--- a/test/regressions/simulations-salarié.yaml
+++ b/test/regressions/simulations-salarié.yaml
@@ -16,14 +16,6 @@
- contrat salarié . rémunération . brut de base: 100000
- contrat salarié . rémunération . brut de base: 1000000
-périodes:
- - contrat salarié . rémunération . brut de base: 3000
- période: année
- - contrat salarié . rémunération . brut de base: 45000
- période: année
- - contrat salarié . rémunération . brut de base: 500000
- période: année
-
inversions:
- contrat salarié . prix du travail: 2000
- contrat salarié . rémunération . net: 2000
@@ -57,7 +49,7 @@ cdd:
atmp:
- contrat salarié . rémunération . brut de base: 2000
- contrat salarié . ATMP . taux collectif ATMP: 0.05
+ contrat salarié . ATMP . taux collectif ATMP: 5
assimilé salarié:
- dirigeant: assimilé salarié
@@ -105,7 +97,7 @@ impôt sur le revenu:
établissement . localisation . département: Mayotte
- contrat salarié . rémunération . brut de base: 3000
impôt . méthode de calcul: taux personnalisé
- impôt . taux personnalisé: 0.1
+ impôt . taux personnalisé: 10
heures supplémentaires:
- contrat salarié . rémunération . brut de base: 2000
diff --git a/test/regressions/simulations.jest.js b/test/regressions/simulations.jest.js
index 6c0b135c3..bad6fbebd 100644
--- a/test/regressions/simulations.jest.js
+++ b/test/regressions/simulations.jest.js
@@ -2,7 +2,7 @@
// of simulations and persist their results in a snapshot (ie, a file commited in git). Our test runner,
// Jest, then compare the existing snapshot with the current Engine calculation and reports any difference.
//
-// We only persist goals values in the file system, in order to be resilient to rule renaming (if a rule is
+// We only persist targets values in the file system, in order to be resilient to rule renaming (if a rule is
// renamed the test configuration may be adapted but the persisted snapshot will remain unchanged).
/* eslint-disable no-undef */
@@ -19,21 +19,25 @@ import remunerationDirigeantSituations from './simulations-rémunération-dirige
import employeeSituations from './simulations-salarié.yaml'
const roundResult = arr => arr.map(x => Math.round(x))
-
+const engine = new Lib.Engine()
const runSimulations = (
situations,
- goals,
+ targets,
baseSituation = {},
+ defaultUnits,
namePrefix = ''
) =>
Object.entries(situations).map(([name, situations]) =>
situations.forEach(situation => {
- const res = Lib.evaluate(goals, { ...baseSituation, ...situation })
+ const res = engine.evaluate(targets, {
+ situation: { ...baseSituation, ...situation },
+ defaultUnits
+ })
// Stringify is not required, but allows the result to be displayed in a single
// line in the snapshot, which considerably reduce the number of lines of this snapshot
// and improve its readability.
expect(JSON.stringify(roundResult(res))).toMatchSnapshot(
- namePrefix + name
+ namePrefix + ' ' + name
)
})
)
@@ -42,23 +46,27 @@ it('calculate simulations-salarié', () => {
runSimulations(
employeeSituations,
employeeConfig.objectifs,
- employeeConfig.situation
+ employeeConfig.situation,
+ ['€/mois']
)
})
it('calculate simulations-indépendant', () => {
- const goals = independantConfig.objectifs.reduce(
+ const targets = independantConfig.objectifs.reduce(
(acc, cur) => [...acc, ...cur.objectifs],
[]
)
- runSimulations(independentSituations, goals, independantConfig.situation)
+ runSimulations(independentSituations, targets, independantConfig.situation, [
+ '€/an'
+ ])
})
it('calculate simulations-auto-entrepreneur', () => {
runSimulations(
autoEntrepreneurSituations,
autoentrepreneurConfig.objectifs,
- autoentrepreneurConfig.situation
+ autoentrepreneurConfig.situation,
+ ['€/an']
)
})
@@ -69,6 +77,7 @@ it('calculate simulations-rémunération-dirigeant', () => {
remunerationDirigeantSituations,
remunerationDirigeantConfig.objectifs,
{ ...baseSituation, ...situation },
+ ['€/an'],
`${nom} - `
)
})
@@ -78,6 +87,7 @@ it('calculate simulations-artiste-auteur', () => {
runSimulations(
artisteAuteurSituations,
artisteAuteurConfig.objectifs,
- artisteAuteurConfig.situation
+ artisteAuteurConfig.situation,
+ ['€/an']
)
})
diff --git a/test/rules.test.js b/test/rules.test.js
index 738639c1f..c4a312ff7 100644
--- a/test/rules.test.js
+++ b/test/rules.test.js
@@ -46,20 +46,6 @@ describe('rule checks', function() {
)
expect(rulesNeedingDefault).to.be.empty
})
- it('rules with a period should not have a flexible period', function() {
- let problems = rules.filter(
- ({ defaultValue, période }) => période === 'flexible' && defaultValue
- )
-
- problems.map(({ dottedName }) =>
- console.log(
- 'La valeur règle ',
- dottedName,
- " a une période flexible et une valeur par défaut. C'est un problème, car on ne sait pas pour quelle période ce défaut est défini. "
- )
- )
- expect(problems).to.be.empty
- })
})
it('rules with a formula should not have defaults', function() {
diff --git a/test/traverse.test.js b/test/traverse.test.js
index f562530bb..cd6206ad9 100644
--- a/test/traverse.test.js
+++ b/test/traverse.test.js
@@ -111,27 +111,6 @@ describe('analyse with mecanisms', function() {
).to.have.property('nodeValue', false)
})
- it('should handle switch statements', function() {
- let rawRules = [
- { nom: 'top' },
- {
- nom: 'top . startHere',
- formule: {
- 'aiguillage numérique': {
- '1 > dix': '1000%',
- '3 < dix': '1100%',
- '3 > dix': '1200%'
- }
- }
- },
- { nom: 'top . dix', formule: 10 }
- ],
- rules = parseAll(rawRules.map(enrichRule))
- expect(
- analyse(rules, 'startHere')(stateSelector).targets[0]
- ).to.have.property('nodeValue', 11)
- })
-
it('should handle percentages', function() {
let rawRules = [{ nom: 'top' }, { nom: 'top . startHere', formule: '35%' }],
rules = parseAll(rawRules.map(enrichRule))
@@ -353,7 +332,7 @@ describe('analyse with mecanisms', function() {
it('should handle filtering on components', function() {
let rawRules = [
{ nom: 'top' },
- { nom: 'top . startHere', formule: 'composed [salarié]' },
+ { nom: 'top . startHere', formule: 'composed .salarié' },
{
nom: 'top . composed',
formule: {
@@ -393,7 +372,7 @@ describe('analyse with mecanisms', function() {
{ nom: 'top' },
{
nom: 'top . startHere',
- formule: 'composed [salarié] + composed [employeur]'
+ formule: 'composed .salarié + composed .employeur'
},
{ nom: 'top . orHere', formule: 'composed' },
{
diff --git a/test/units.test.js b/test/units.test.js
index 2f73b954e..75ab82ebb 100644
--- a/test/units.test.js
+++ b/test/units.test.js
@@ -1,5 +1,11 @@
import { expect } from 'chai'
-import { removeOnce, parseUnit, inferUnit } from 'Engine/units'
+import {
+ areUnitConvertible,
+ convertUnit,
+ inferUnit,
+ parseUnit,
+ removeOnce
+} from 'Engine/units'
describe('Units', () => {
it('should remove the first element encounter in the list', () => {
@@ -11,10 +17,26 @@ describe('Units', () => {
numerators: ['m'],
denominators: []
})
+ expect(parseUnit('/an')).to.deep.equal({
+ numerators: [],
+ denominators: ['an']
+ })
expect(parseUnit('m/s')).to.deep.equal({
numerators: ['m'],
denominators: ['s']
})
+ expect(parseUnit('kg.m/s')).to.deep.equal({
+ numerators: ['kg', 'm'],
+ denominators: ['s']
+ })
+ expect(parseUnit('kg.m/s')).to.deep.equal({
+ numerators: ['kg', 'm'],
+ denominators: ['s']
+ })
+ expect(parseUnit('€/personne/mois')).to.deep.equal({
+ numerators: ['€'],
+ denominators: ['personne', 'mois']
+ })
})
it('should work with simple use case *', () => {
let unit1 = { numerators: ['m'], denominators: ['s'] }
@@ -47,3 +69,80 @@ describe('Units', () => {
})
})
})
+
+describe('convertUnit', () => {
+ it('should convert month to year in denominator', () => {
+ expect(convertUnit(parseUnit('/mois'), parseUnit('/an'), 10)).to.eq(120)
+ })
+ it('should convert year to month in denominator', () => {
+ expect(convertUnit(parseUnit('/an'), parseUnit('/mois'), 120)).to.eq(10)
+ })
+ it('should convert year to month in numerator', () => {
+ expect(convertUnit(parseUnit('mois'), parseUnit('an'), 12)).to.eq(1)
+ })
+ it('should month to year in numerator', () => {
+ expect(convertUnit(parseUnit('mois'), parseUnit('an'), 12)).to.eq(1)
+ })
+ it('should convert percentage to simple value', () => {
+ expect(convertUnit(parseUnit('%'), parseUnit(''), 83)).to.closeTo(
+ 0.83,
+ 0.0000001
+ )
+ })
+ it('should convert more difficult value', () => {
+ expect(convertUnit(parseUnit('%/an'), parseUnit('/mois'), 12)).to.closeTo(
+ 0.01,
+ 0.0000001
+ )
+ })
+ it('should convert year, month, day, k€', () => {
+ expect(
+ convertUnit(
+ parseUnit('€/personne/jour'),
+ parseUnit('k€/an/personne'),
+ '100'
+ )
+ ).to.closeTo(36.5, 0.0000001)
+ })
+ it('should handle simplification', () => {
+ expect(
+ convertUnit(parseUnit('€.an.%/mois'), parseUnit('€'), 100)
+ ).to.closeTo(12, 0.0000001)
+ })
+ it('should handle complexification', () => {
+ expect(
+ convertUnit(parseUnit('€'), parseUnit('€.an.%/mois'), 12)
+ ).to.closeTo(100, 0.0000001)
+ })
+})
+
+describe('areUnitConvertible', () => {
+ it('should be true for temporel unit', () => {
+ expect(areUnitConvertible(parseUnit('mois'), parseUnit('an'))).to.eq(true)
+ expect(areUnitConvertible(parseUnit('kg/an'), parseUnit('kg/mois'))).to.eq(
+ true
+ )
+ })
+ it('should be true for percentage', () => {
+ expect(areUnitConvertible(parseUnit('%/mois'), parseUnit('/an'))).to.eq(
+ true
+ )
+ })
+ it('should be true for more complicated cases', () => {
+ expect(
+ areUnitConvertible(
+ parseUnit('€/personne/mois'),
+ parseUnit('€/an/personne')
+ )
+ ).to.eq(true)
+ })
+ it('should be false for unit not alike', () => {
+ expect(
+ areUnitConvertible(parseUnit('mois'), parseUnit('€/an/personne'))
+ ).to.eq(false)
+ expect(areUnitConvertible(parseUnit('m.m'), parseUnit('m'))).to.eq(false)
+ expect(areUnitConvertible(parseUnit('m'), parseUnit('s'))).to.eq(false)
+ })
+})
+
+describe('simplifyUnit', () => {})