🐛 corrige le montant de la CSG dans l'aide aux indépendants

note : il faudra songer sérieusement à modifier ce mécanisme de composante, source de nombreux bug (cf #874)

Ajoute des tests de non regressions pour la page d'aide
pull/1051/head
Johan Girod 2020-05-19 18:01:16 +02:00
parent 872f966f2b
commit f3c9d7c60d
6 changed files with 171 additions and 15 deletions

View File

@ -1,5 +1,65 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`calculate aide-déclaration-indépendant: ACRE 1`] = `"[50000,3366,9163,8,12630,37370]"`;
exports[`calculate aide-déclaration-indépendant: ACRE 2`] = `"[15000,1139,900,8,2141,12859]"`;
exports[`calculate aide-déclaration-indépendant: ACRE 3`] = `"[5000,386,295,8,782,4218]"`;
exports[`calculate aide-déclaration-indépendant: ACRE 4`] = `"[10000,630,2202,8,2934,7066]"`;
exports[`calculate aide-déclaration-indépendant: IJSS (indemnité sécurité sociale) 1`] = `"[50000,3024,11424,8,14549,35451]"`;
exports[`calculate aide-déclaration-indépendant: RSA 1`] = `"[500,25,82,8,209,291]"`;
exports[`calculate aide-déclaration-indépendant: RSA 2`] = `"[5000,312,1021,8,1435,3565]"`;
exports[`calculate aide-déclaration-indépendant: conjoint collaborateur 1`] = `"[50000,3175,14066,11,17378,32622]"`;
exports[`calculate aide-déclaration-indépendant: conjoint collaborateur 2`] = `"[50000,3175,13590,11,16903,33097]"`;
exports[`calculate aide-déclaration-indépendant: conjoint collaborateur 3`] = `"[50000,3175,11476,11,14788,35212]"`;
exports[`calculate aide-déclaration-indépendant: conjoint collaborateur 4`] = `"[50000,3176,14071,10,17364,32636]"`;
exports[`calculate aide-déclaration-indépendant: conjoint collaborateur 5`] = `"[50000,3175,11476,11,14788,35212]"`;
exports[`calculate aide-déclaration-indépendant: débit de tabac 1`] = `"[50000,3177,5672,8,8950,41050]"`;
exports[`calculate aide-déclaration-indépendant: international 1`] = `"[50000,0,14610,8,14711,35289]"`;
exports[`calculate aide-déclaration-indépendant: international 2`] = `"[50000,1267,11893,8,13261,36739]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 1`] = `"[50000,3176,11380,10,14673,35327]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 2`] = `"[5000,311,1353,10,1781,3219]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 3`] = `"[50000,3177,11384,8,14662,35338]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 4`] = `"[5000,312,1354,8,1767,3233]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 5`] = `"[50000,3177,11201,8,14480,35520]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 6`] = `"[5000,312,1189,8,1603,3397]"`;
exports[`calculate aide-déclaration-indépendant: nature de l'activité 7`] = `"[50000,3177,9270,8,12548,37452]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 1`] = `"[500,25,1026,8,1152,0]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 2`] = `"[1000,57,1026,8,1184,0]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 3`] = `"[1500,89,1052,8,1242,258]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 4`] = `"[2000,121,1095,8,1317,683]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 5`] = `"[5000,312,1354,8,1767,3233]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 6`] = `"[10000,630,2202,8,2934,7066]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 7`] = `"[100000,6361,20834,8,27296,72704]"`;
exports[`calculate aide-déclaration-indépendant: échelle de revenus 8`] = `"[1000000,63664,106148,8,169913,830087]"`;
exports[`calculate simulations-artiste-auteur: bnc 1`] = `"[1230]"`;
exports[`calculate simulations-artiste-auteur: bnc 2`] = `"[1863]"`;

View File

@ -0,0 +1,80 @@
échelle de revenus:
- dirigeant . rémunération totale: 500 €/an
- dirigeant . rémunération totale: 1000 €/an
- dirigeant . rémunération totale: 1500 €/an
- dirigeant . rémunération totale: 2000 €/an
- dirigeant . rémunération totale: 5000 €/an
- dirigeant . rémunération totale: 10000 €/an
- dirigeant . rémunération totale: 100000 €/an
- dirigeant . rémunération totale: 1000000 €/an
nature de l'activité:
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'artisanale'"
dirigeant . rémunération totale: 50000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'artisanale'"
dirigeant . rémunération totale: 5000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'commerciale ou industrielle'"
dirigeant . rémunération totale: 50000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'commerciale ou industrielle'"
dirigeant . rémunération totale: 5000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'libérale'"
dirigeant . rémunération totale: 50000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'libérale'"
dirigeant . rémunération totale: 5000 €/an
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'libérale'"
entreprise . date de création: 06/04/2019
dirigeant . rémunération totale: 50000 €/an
dirigeant . indépendant . cotisations et contributions . cotisations . retraite complémentaire . taux spécifique PLNR: oui
débit de tabac:
- aide déclaration revenu indépendant 2019 . nature de l'activité: "'commerciale ou industrielle'"
dirigeant . rémunération totale: 50000 €/an
entreprise . catégorie d'activité . débit de tabac: oui
dirigeant . indépendant . cotisations et contributions . cotisations . déduction tabac: 30000 €/an
RSA:
- situation personnelle . RSA: oui
dirigeant . rémunération totale: 500 €/an
- situation personnelle . RSA: oui
dirigeant . rémunération totale: 5000 €/an
conjoint collaborateur:
- dirigeant . indépendant . conjoint collaborateur: oui
dirigeant . rémunération totale: 50000 €/an
- dirigeant . indépendant . conjoint collaborateur: oui
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
dirigeant . rémunération totale: 50000 €/an
- dirigeant . indépendant . conjoint collaborateur: oui
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
dirigeant . rémunération totale: 50000 €/an
- dirigeant . indépendant . conjoint collaborateur: oui
aide déclaration revenu indépendant 2019 . nature de l'activité: "'artisanale'"
dirigeant . rémunération totale: 50000 €/an
- dirigeant . indépendant . conjoint collaborateur: oui
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
dirigeant . rémunération totale: 50000 €/an
dirigeant . indépendant . conjoint collaborateur . assiette . pourcentage: "'moitié'"
IJSS (indemnité sécurité sociale):
- dirigeant . indépendant . IJSS: oui
dirigeant . indépendant . IJSS . total: 10000 €/an
dirigeant . indépendant . IJSS . imposable: 8000 €/an
dirigeant . rémunération totale: 50000 €/an
ACRE:
- entreprise . ACRE: oui
dirigeant . rémunération totale: 50000 €/an
- entreprise . ACRE: oui
dirigeant . rémunération totale: 15000 €/an
- entreprise . ACRE: oui
dirigeant . rémunération totale: 5000 €/an
- entreprise . ACRE: oui
entreprise . date de création: 01/07/2018
dirigeant . rémunération totale: 10000 €/an
international:
- situation personnelle . domiciliation fiscale à l'étranger: oui
dirigeant . rémunération totale: 50000 €/an
- dirigeant . indépendant . revenus étrangers: oui
dirigeant . indépendant . revenus étrangers . montant: 30000€/an
dirigeant . rémunération totale: 50000 €/an

View File

@ -13,11 +13,13 @@ import autoentrepreneurConfig from '../../source/components/simulationConfigs/au
import independantConfig from '../../source/components/simulationConfigs/indépendant.yaml'
import remunerationDirigeantConfig from '../../source/components/simulationConfigs/rémunération-dirigeant.yaml'
import employeeConfig from '../../source/components/simulationConfigs/salarié.yaml'
import aideDéclarationConfig from '../../source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml'
import artisteAuteurSituations from './simulations-artiste-auteur.yaml'
import autoEntrepreneurSituations from './simulations-auto-entrepreneur.yaml'
import independentSituations from './simulations-indépendant.yaml'
import remunerationDirigeantSituations from './simulations-rémunération-dirigeant.yaml'
import employeeSituations from './simulations-salarié.yaml'
import aideDéclarationIndépendantsSituations from './aide-déclaration-indépendants.yaml'
const roundResult = arr => arr.map(x => Math.round(x))
const engine = new Engine(rules)
@ -100,3 +102,11 @@ it('calculate simulations-artiste-auteur', () => {
artisteAuteurConfig.situation
)
})
it('calculate aide-déclaration-indépendant', () => {
runSimulations(
aideDéclarationIndépendantsSituations,
aideDéclarationConfig.objectifs,
aideDéclarationConfig.situation
)
})

View File

@ -6,7 +6,8 @@ import {
keys,
map,
mergeWith,
reduce
reduce,
dissoc
} from 'ramda'
import React from 'react'
import { typeWarning } from './error'
@ -114,10 +115,15 @@ export const evaluateArrayWithFilter = (evaluationFilter, reducer, start) => (
parsedRules,
node
) => {
return evaluateArray(reducer, start)(cache, situation, parsedRules, {
...node,
explanation: filter(evaluationFilter(situation), node.explanation)
})
return evaluateArray(reducer, start)(
cache,
dissoc('_meta.filter', situation),
parsedRules,
{
...node,
explanation: filter(evaluationFilter(situation), node.explanation)
}
)
}
export const defaultNode = (nodeValue: EvaluatedNode['nodeValue']) => ({

View File

@ -16,14 +16,14 @@ export let decompose = (recurse, k, v) => {
}))
let filter = situation => c =>
!situation['sys.filter'] ||
!situation['_meta.filter'] ||
!c.composante ||
((!c.composante['dû par'] ||
!['employeur', 'salarié'].includes(situation['sys.filter']) ||
c.composante['dû par'] == situation['sys.filter']) &&
!['employeur', 'salarié'].includes(situation['_meta.filter']) ||
c.composante['dû par'] == situation['_meta.filter']) &&
(!c.composante['impôt sur le revenu'] ||
!['déductible', 'non déductible'].includes(situation['sys.filter']) ||
c.composante['impôt sur le revenu'] == situation['sys.filter']))
!['déductible', 'non déductible'].includes(situation['_meta.filter']) ||
c.composante['impôt sur le revenu'] == situation['_meta.filter']))
return {
explanation,

View File

@ -123,10 +123,10 @@ let evaluateReference = (filter, contextRuleName) => (
if (applicableReplacements.length) {
if (applicableReplacements.length > 1) {
console.warn(`
Règle ${rule.dottedName}: plusieurs remplacements valides ont été trouvés :
\n\t${applicableReplacements.map(node => node.rawNode).join('\n\t')}
Règle ${rule.dottedName}: plusieurs remplacements valides ont été trouvés :
\n\t${applicableReplacements.map(node => node.rawNode).join('\n\t')}
Par défaut, seul le premier s'applique. Si vous voulez un autre comportement, vous pouvez :
Par défaut, seul le premier s'applique. Si vous voulez un autre comportement, vous pouvez :
- Restreindre son applicabilité via "applicable si" sur la règle de définition
- Restreindre sa portée en ajoutant une liste blanche (via le mot clé "dans") ou une liste noire (via le mot clé "sauf dans")
`)
@ -252,14 +252,14 @@ export let parseReference = (
// See the unité-temporelle.yaml test suite for details
// - filters on the variable to select one part of the variable's 'composantes'
const evaluateTransforms = (originalEval, rule, parseResult) => (
const evaluateTransforms = (originalEval, _, parseResult) => (
cache,
situation,
parsedRules,
node
) => {
// Filter transformation
let filteringSituation = { ...situation, 'sys.filter': parseResult.filter }
let filteringSituation = { ...situation, '_meta.filter': parseResult.filter }
let filteredNode = originalEval(
cache,
parseResult.filter ? filteringSituation : situation,