diff --git a/modele-social/règles/salarié.yaml b/modele-social/règles/salarié.yaml index 43a56268a..a2e218e91 100644 --- a/modele-social/règles/salarié.yaml +++ b/modele-social/règles/salarié.yaml @@ -1595,13 +1595,12 @@ contrat salarié . plafond sécurité sociale . renonciation proratisation: du plafond de la sécurité sociale (applicable pour les salariés à temps partiel), notamment afin d'augmenter le montant des cotisations vieillesse. par défaut: non - -contrat salarié . plafond sécurité sociale . renonciation proratisation . plafond sécurité sociale: applicable si: temps de travail . quotité de travail < 100% remplace: - règle: plafond sécurité sociale par: plafond sécurité sociale temps plein + contrat salarié . SMIC contractuel: description: > Valeur du SMIC pro-ratisé pour prendre en compte le temps partiel et utilisé pour la détermination du salaire minimum diff --git a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap index cce0a6e8f..89a5b8208 100644 --- a/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/mon-entreprise/test/regressions/__snapshots__/simulations.jest.js.snap @@ -451,7 +451,7 @@ Notifications affichées : contrat salarié . convention collective . contrôle `; exports[`calculate simulations-salarié: CCN spectacle vivant 1`] = ` -"[3834,0,2500,1938,1856] +"[3923,0,2500,1938,1856] Notifications affichées : contrat salarié . CDD . information, contrat salarié . convention collective . contrôle décharge" `; diff --git a/publicodes/source/ruleUtils.ts b/publicodes/source/ruleUtils.ts index 4aeded760..8049e661c 100644 --- a/publicodes/source/ruleUtils.ts +++ b/publicodes/source/ruleUtils.ts @@ -30,11 +30,11 @@ export function disambiguateRuleReference>( contextName = '', partialName: string ): keyof R { - const possibleDottedName = [ - contextName, - ...ruleParents(contextName), - '', - ].map((x) => (x ? x + ' . ' + partialName : partialName)) + const possibleDottedName = [contextName, ...ruleParents(contextName), ''] + .map((x) => (x ? x + ' . ' + partialName : partialName)) + // Rules can reference themselves, but it should be the last thing to check + .sort((a, b) => (a === contextName ? 1 : b === contextName ? -1 : 0)) + const dottedName = possibleDottedName.find((name) => name in rules) if (!dottedName) { syntaxError( diff --git a/publicodes/test/mécanismes/expressions.yaml b/publicodes/test/mécanismes/expressions.yaml index 1955f19be..5fa31be95 100644 --- a/publicodes/test/mécanismes/expressions.yaml +++ b/publicodes/test/mécanismes/expressions.yaml @@ -305,13 +305,18 @@ chaine de charactère: - situation: chaine de charactère: "'je t'y vois'" valeur attendue: je t'y vois -# TODO -# expression sur plusieurs lignes: -# formule: > -# salaire de base -# + 2000 -# = 3000 -# exemples: -# - situation: -# salaire de base: 1000 -# - valeur attendue: true + + +a: oui +b: 5 +a . b: b + 5 +a . c: b + 5 +désambiguation du nom de règle 1: + formule: a . b + exemples: + - valeur attendue: 10 + +désambiguation du nom de règle 2: + formule: a . c + exemples: + - valeur attendue: 15 \ No newline at end of file diff --git a/publicodes/test/mécanismes/remplace.yaml b/publicodes/test/mécanismes/remplace.yaml index 8d5eb12ca..7b2b8f000 100644 --- a/publicodes/test/mécanismes/remplace.yaml +++ b/publicodes/test/mécanismes/remplace.yaml @@ -204,30 +204,7 @@ convention hôtels cafés restaurants . frais de repas: remplace: frais de repas formule: 6 €/repas -frais de repas non remplacé: +remplacement d'un nom de variable identique: formule: frais de repas - exemples: - - valeur attendue: 5 - -# Note: this would produce an infinite loop -# frais de repas remplacé: -# formule: convention hôtels cafés restaurants . frais de repas -# exemples: -# - nom: par défaut -# valeur attendue: 5 - - -frais de repas2: - formule: 5 €/repas - -convention hôtels cafés restaurants2: - formule: oui - -convention hôtels cafés restaurants2 . remplaçeur: - remplace: frais de repas2 - formule: 6 €/repas - -frais de repas2 remplacé: - formule: frais de repas2 exemples: - valeur attendue: 6