From 7e58ed9414c1b3d3c62c7825d09f4a8ddad5eab1 Mon Sep 17 00:00:00 2001 From: Jalil Arfaoui Date: Wed, 13 Nov 2024 19:09:48 +0100 Subject: [PATCH] =?UTF-8?q?wip=20profession-lib=C3=A9rale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../profession-lib\303\251rale.publicodes" | 6 +- site/test/modele-social/helpers/logValue.ts | 18 ++++- .../profession-lib\303\251rale.test.ts" | 68 +++++++++++++++++++ 3 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 "site/test/modele-social/profession-lib\303\251rale.test.ts" diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes" index 809df858ab..3f44ad5c75 100644 --- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes" +++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes" @@ -1,8 +1,4 @@ -dirigeant . indépendant . PL: - titre: Profession libérale - applicable si: entreprise . activité . nature = 'libérale' - rend non applicable: entreprise . activités . revenus mixtes - formule: oui +dirigeant . indépendant . PL: oui dirigeant . indépendant . PL . métier: applicable si: entreprise . activité . nature . libérale . réglementée diff --git a/site/test/modele-social/helpers/logValue.ts b/site/test/modele-social/helpers/logValue.ts index 0104655e38..0895e79860 100644 --- a/site/test/modele-social/helpers/logValue.ts +++ b/site/test/modele-social/helpers/logValue.ts @@ -4,7 +4,23 @@ import Engine from 'publicodes' export const logValue = (e: Engine, rule: DottedName) => { const result = e.evaluate(rule) // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - const unit = `${result.unit?.numerators}/${result.unit?.denominators}` + + const unit = result.unit?.denominators + ? `${result.unit?.numerators}/-${result.unit?.denominators}` + : result.unit?.numerators + ? `${result.unit?.numerators}` + : '' + // eslint-disable-next-line no-console,@typescript-eslint/restrict-template-expressions console.log(`${rule} = ${result.nodeValue} ${unit}`) } + +export const logApplicability = (e: Engine, rule: DottedName) => { + const result = e.evaluate({ 'est applicable': rule }) + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + + // eslint-disable-next-line no-console,@typescript-eslint/restrict-template-expressions + console.log( + `${rule} ${result.nodeValue ? 'est applicable' : 'n’est pas applicable'}` + ) +} diff --git "a/site/test/modele-social/profession-lib\303\251rale.test.ts" "b/site/test/modele-social/profession-lib\303\251rale.test.ts" new file mode 100644 index 0000000000..3b7d27e8a7 --- /dev/null +++ "b/site/test/modele-social/profession-lib\303\251rale.test.ts" @@ -0,0 +1,68 @@ +import rules, { DottedName } from 'modele-social' +import Engine from 'publicodes' +import { beforeEach, describe, expect, it } from 'vitest' + +import { logApplicability, logValue } from './helpers/logValue' + +const situationProfessionLibérale = { + salarié: 'non', + 'entreprise . activité . nature': "'libérale'", + 'entreprise . catégorie juridique': "'EI'", + 'entreprise . imposition': "'IR'", + 'entreprise . catégorie juridique . EI . auto-entrepreneur': 'non', +} + +describe('Une profession libérale', () => { + let engine: Engine + beforeEach(() => { + engine = new Engine(rules) + }) + + const situationCIPAV = { + ...situationProfessionLibérale, + 'entreprise . activité . nature . libérale . réglementée': 'oui', + } + + describe('en CIPAV ACRE', () => { + const situationCIPAVACRE = { + ...situationCIPAV, + 'dirigeant . rémunération . net': '5000 €/an', + 'dirigeant . exonérations . ACRE': 'oui', + 'entreprise . date de création': '11/11/2023', + } + + it('paie une retraite de base', () => { + const e = engine.setSituation(situationCIPAVACRE) + + logValue(e, 'dirigeant . indépendant') + logValue( + e, + 'dirigeant . indépendant . cotisations et contributions . retraite de base' + ) + logValue( + e, + 'dirigeant . indépendant . cotisations et contributions . retraite de base . taux' + ) + logValue(e, 'protection sociale . retraite . base . cotisée') + + logValue( + e, + 'protection sociale . retraite . base . cotisée . indépendant' + ) + logValue(e, 'entreprise . activité . nature') + logValue(e, 'entreprise . activité . nature . libérale . réglementée') + + logApplicability(e, 'dirigeant . indépendant') + logApplicability(e, 'dirigeant . indépendant . PL') + + logValue(e, 'dirigeant . indépendant . PL . métier') + logValue(e, 'dirigeant . indépendant') + logValue(e, 'dirigeant . indépendant . PL') + logValue(e, 'dirigeant . indépendant . PL . régime général') + logValue(e, 'dirigeant . indépendant . PL . CNAVPL') + + expect(e).toEvaluate('protection sociale . retraite . base . CNAVPL', 38) + expect(e).toEvaluate('protection sociale . retraite . base', 38) + }) + }) +})