publicodes
publicodes copied to clipboard
Un parent non applicable ne devrait pas désactiver les enfants lorsqu'il les évalue dans son contexte
Un problème est apparu sur mon-entreprise suite à la réécriture des règles pour la dernière version de publicodes qui change la désactivation de branche https://github.com/betagouv/mon-entreprise/issues/2084
contrat salarié . frais professionnels . titres-restaurant:
applicable si:
nom: éligible
question: Le salarié reçoit-il des titres-restaurant ?
par défaut: non
La question de l'égibilité ne sera jamais posée car par défaut valant "non"... ce qui la rend non applicable
.
On avait évoqué l'idée que la non applicabilité des parents soit l'équivalent d'un rend non applicable
de toutes les références vers les enfants depuis l'extérieur de l'espace de nom. En revanche, lorsque ces références sont utilisées depuis l'espace de nom non applicable
elles resteraient applicables.
Ce n'est pas bloquant : il suffit de déplacer la règle de l'applicabilité dans un espace de nom frère :
contrat salarié . frais professionnels . titres-restaurant:
question: Le salarié reçoit-il des titres-restaurant ?
par défaut: non
contrat salarié . frais professionnels . titres-restaurant . montant:
..
Par contre, cela peut poser un problème dans le cas où la condition d'applicabilité fait appel à des règles enfants :
ma règle:
applicable si: montant < plafond
valeur:
nom: montant
...
Ou encore pour l'évaluation de texte dans le contexte de la règle :
ma règle:
description:
texte: |
Le plafond maximum est de {{ plafond }} ce qui donne le droit à une aide d'un montant de {{ montant }}
ma règle . plafond:
ma règle . montant:
Lorsque la ma règle
est non applicable
, la description sera :
Le plafond maximum est de Non applicable ce qui donne le droit à une aide d'un montant de Non applicable
Merci pour les exemples, j'ai essayé d'intégrer un correctif dans #203 qui concerne aussi la désactivation de branche et l'applicabilité parent-enfant, mais je suis un peu embrouillé.
Si je comprends bien il faudrait qu'on ait simultanément les 2 comportements suivants :
espace 1: non # nodeValue = false
espace 1 . enfant: non # nodeValue = null (désactivé par le parent)
espace 2: enfant # nodeValue = false
espace 2 . enfant: non # nodeValue = false
espace 2 . enfant 2: non # nodeValue = null (désactivé par le parent)
Edit: L'exemple fonctionne maintenant dans #203 (studio)
Oups, je viens de voir ton message. C'est encore autre chose que je proposais : faire que la valeur de l'enfant dépende du contexte d'évaluation.
Si on est à l'intérieur d'un espace non applicable, l'ensemble des enfants est non applicable (null) sauf dans les évaluations à l'intérieur de l'espace de nom.
espace 1: # nodeValue = null
non applicable si: enfant # nodeValue = true
espace 1 . enfant: oui
espace 2:
valeur: espace 1 . enfant # nodeValue = null
On pourrait utiliser la même implémentation que le mécanisme : rend non applicable
sauf dans
.
Ah mais oui tu as tellement raison, dire que je me suis tordu l'esprit parce que mon exemple avec les enfants qui sont applicables ou non selon qu'ils soient référencés dans la formule de calcul de leur parent me paraissait indésirable.
En fait il faut rendre non applicable les références, pas les règles. Ça montre quand même qu'on a vraiment pas l'habitude de ce paradigme de programmation par substitution — et que ça vaudrait le coup de faire un petit paragraphe sur le sujet dans la documentation, même pour moi !
aide . condition: revenu = 'supérieur'
aide . condition 2: revenu = 'supérieur'
test condition: aide . condition = oui
test condition 2: aide . condition 2 = oui
aide . montant:
non applicable si: aide . condition
valeur: 12
aide:
valeur: montant
revenu: "'supérieur'"