diff --git a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap index b5b148954..602f305db 100644 --- a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap @@ -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]"`; diff --git a/mon-entreprise/test/regressions/aide-déclaration-indépendants.yaml b/mon-entreprise/test/regressions/aide-déclaration-indépendants.yaml new file mode 100644 index 000000000..648595592 --- /dev/null +++ b/mon-entreprise/test/regressions/aide-déclaration-indépendants.yaml @@ -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 diff --git a/mon-entreprise/test/regressions/simulations.jest.js b/mon-entreprise/test/regressions/simulations.jest.js index dd9a1784f..99a59f46e 100644 --- a/mon-entreprise/test/regressions/simulations.jest.js +++ b/mon-entreprise/test/regressions/simulations.jest.js @@ -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 + ) +}) diff --git a/publicodes/source/evaluation.tsx b/publicodes/source/evaluation.tsx index 261d4da1e..7d830a91c 100644 --- a/publicodes/source/evaluation.tsx +++ b/publicodes/source/evaluation.tsx @@ -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']) => ({ diff --git a/publicodes/source/mecanisms/utils.js b/publicodes/source/mecanisms/utils.js index e7f695e58..4f03ada1c 100644 --- a/publicodes/source/mecanisms/utils.js +++ b/publicodes/source/mecanisms/utils.js @@ -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, diff --git a/publicodes/source/parseReference.js b/publicodes/source/parseReference.js index f017a77b8..15f151fa3 100644 --- a/publicodes/source/parseReference.js +++ b/publicodes/source/parseReference.js @@ -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,