From d17811399ee1249eb72b7ed093397967b3812276 Mon Sep 17 00:00:00 2001 From: Mael Date: Wed, 26 Sep 2018 09:35:29 +0000 Subject: [PATCH] =?UTF-8?q?Nettoyage=20des=20r=C3=A8gles=20de=20la=20SASU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/engine/index.js | 7 +++-- source/engine/rules.js | 52 +++++++++++++++++---------------- source/règles/sasu.yaml | 64 +++++++++++++++++++++++------------------ test/library.test.js | 5 ++-- 4 files changed, 70 insertions(+), 58 deletions(-) diff --git a/source/engine/index.js b/source/engine/index.js index 780d8ddf2..9a0fad669 100644 --- a/source/engine/index.js +++ b/source/engine/index.js @@ -17,7 +17,8 @@ let nestedSituationToStateSelector = nestedSituation => dottedName => ...nestedSituationToPathMap(nestedSituation) }[dottedName]) -let enrichYaml = string => yaml.safeLoad(string).map(enrichRule) +let enrichRules = input => + (typeof input === 'string' ? yaml.safeLoad(input) : input).map(enrichRule) export default { evaluate: (targetNames, nestedSituation, rulesConfig) => { @@ -25,8 +26,8 @@ export default { ? do { let { base, extra } = rulesConfig parseAll([ - ...(base ? enrichYaml(base) : rulesFr), - ...(extra ? enrichYaml(extra) : []) + ...(base ? enrichRules(base) : rulesFr), + ...(extra ? enrichRules(extra) : []) ]) } : defaultRules diff --git a/source/engine/rules.js b/source/engine/rules.js index d484ca1da..d2c7339b1 100644 --- a/source/engine/rules.js +++ b/source/engine/rules.js @@ -41,31 +41,35 @@ import taux_versement_transport from 'Règles/taux-versement-transport.json' // Enrichissement de la règle avec des informations évidentes pour un lecteur humain export let enrichRule = (rule, sharedData = {}) => { - let type = possibleVariableTypes.find(t => has(t, rule) || rule.type === t), - name = rule['nom'], - title = capitalise0(rule['titre'] || name), - ns = rule['espace'], - data = rule['données'] ? sharedData[rule['données']] : null, - dottedName = buildDottedName(rule), - subquestionMarkdown = rule['sous-question'], - subquestion = subquestionMarkdown && marked(subquestionMarkdown), - defaultValue = rule['par défaut'], - examples = rule['exemples'], - icon = rule['icônes'] + try { + let type = possibleVariableTypes.find(t => has(t, rule) || rule.type === t), + name = rule['nom'], + title = capitalise0(rule['titre'] || name), + ns = rule['espace'], + data = rule['données'] ? sharedData[rule['données']] : null, + dottedName = buildDottedName(rule), + subquestionMarkdown = rule['sous-question'], + subquestion = subquestionMarkdown && marked(subquestionMarkdown), + defaultValue = rule['par défaut'], + examples = rule['exemples'], + icon = rule['icônes'] - return { - ...rule, - type, - name, - title, - ns, - data, - dottedName, - subquestion, - defaultValue, - raw: rule, - examples, - icon + return { + ...rule, + type, + name, + title, + ns, + data, + dottedName, + subquestion, + defaultValue, + raw: rule, + examples, + icon + } + } catch (e) { + throw new Error('Problem enriching ' + JSON.stringify(rule)) } } diff --git a/source/règles/sasu.yaml b/source/règles/sasu.yaml index 386ee7bfd..02c717aed 100644 --- a/source/règles/sasu.yaml +++ b/source/règles/sasu.yaml @@ -1,49 +1,57 @@ -- nom: chiffre d'affaire - +- nom: chiffre affaire + format: euros - nom: charges par defaut: 0 + format: euros -- nom: repartition salaire sur dividendes - par defaut: 100% +- nom: répartition salaire sur dividendes + par defaut: 1 -- nom: impot sur les societes + +- nom: impôt sur les sociétés formule: - bareme: - assiette: benefices + barème: + assiette: dividendes . brut tranches: - en-dessous de: 38000 - taux: 15% - - au-dessus de: 38000 - taux: 28% + taux: 15% + - au-dessus de: 38000 + taux: 28% -- nom: prelevement forfaitaire unique +- espace: dividendes + nom: brut + formule: chiffre affaire - salaire total + +- espace: dividendes + nom: net + formule: brut - prélèvement forfaitaire unique + +- nom: prélèvement forfaitaire unique + espace: dividendes formule: multiplication: - assiette: dividendes + assiette: brut composantes: - - part: CSG - taux: 17.2% - - part: impot - taux: - variations: - - si: exoneration impot X - alors: 0% - - sinon: 12.8% + - taux: 17.2% + - taux: + variations: + - si: exonération impôt X + alors: 0% + - sinon: 12.8% + +- nom: exonération impôt X -?? +- nom: salaire total + formule: chiffre affaire * répartition salaire sur dividendes -salaire total = chiffre d'affaires * repartition - --> on en deduit le net car le total a une valeur - -- nom: dividendes - formule: chiffre d'affaires * repartition + #-> on en deduit le net car le total a une valeur -revenu disponible: salaire apres impot + revenus des dividendes +- nom: revenu disponible + formule: contrat salarié . salaire . net après impôt + dividendes . net diff --git a/test/library.test.js b/test/library.test.js index d6d60621d..ea50152cc 100644 --- a/test/library.test.js +++ b/test/library.test.js @@ -1,8 +1,7 @@ import { expect } from 'chai' import Syso from '../source/engine/index' import { propEq } from 'ramda' -import dedent from 'dedent-js' -import sasuYaml from 'yaml-loader!../source/règles/sasu.yaml' +import sasuRules from '../source/règles/sasu.yaml' describe('library', function() { it('should evaluate one target with no input data', function() { @@ -52,7 +51,7 @@ describe('library', function() { { 'contrat salarié . salaire . brut de base': 2300 }, - { extra: sasuYaml } + { extra: sasuRules } ) expect(evaluated.targets[0].nodeValue).to.be.closeTo(1780.41, 1)