⚙️ Ajout du mécanisme de négation de variables booléennes

Utilisation du symbole ¬ pour l'instant. Sûrement sujet à évolutions
pull/2/head
mama 2017-05-09 15:39:42 +02:00
parent c16d0fa823
commit 15776d21cb
4 changed files with 44 additions and 9 deletions

View File

@ -6,8 +6,9 @@
destinataire: AGIRC
description: |
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO, gérée par l'AGIRC (Association Générale des Institutions de Retraite des Cadres)
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
#TODO double négation en attendant d'ajouter 'applicable si'
non applicable si: ≠ statut cadre
formule:
barème:
assiette: salaire de base #TODO devrait être assiette cotisations sociales. Mais elle contient les primes CDD

View File

@ -12,7 +12,8 @@
notes: |
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
#TODO double négation en attendant d'ajouter 'applicable si'
non applicable si: ≠ statut cadre
formule:
barème:

View File

@ -1,10 +1,12 @@
# Pour éditer ou comprendre ce fichier, utilisez l'éditeur web Nearley : https://omrelli.ug/nearley-playground/
main ->
CalcExpression {% id %}
| Variable {% id %}
| ModifiedVariable {% id %}
| Comparison {% id %}
CalcExpression {% id %}
| Variable {% id %}
| NegatedVariable {% id %}
| ModifiedVariable {% id %}
| Comparison {% id %}
Comparison -> Comparable _ ComparisonOperator _ Comparable {% d => ({
category: 'comparison',
@ -17,11 +19,16 @@ Comparable -> (int | CalcExpression | Variable) {% d => d[0][0] %}
ComparisonOperator -> ">" | "<" | ">=" | "<=" | "="
NegatedVariable -> "≠" _ Variable {% d => ({category: 'negatedVariable', variable: d[2] }) %}
# Modificateurs temporels pas utilisés aujourd'hui
ModifiedVariable -> Variable _ Modifier {% d => ({category: 'modifiedVariable', modifier: d[2], variable: d[0] }) %}
Modifier -> "[" TemporalModifier "]" {% d =>d[1][0] %}
TemporalModifier -> "annuel" | "mensuel" | "jour ouvré" {% id %}
#-----
CalcExpression -> Term _ ArithmeticOperator _ Term {% d => ({
category: 'calcExpression',
@ -31,7 +38,7 @@ CalcExpression -> Term _ ArithmeticOperator _ Term {% d => ({
}) %}
Term -> Variable {% id %}
| int {% id %}
| int {% id %}
ArithmeticOperator -> "+" {% id %}
| "-" {% id %}

View File

@ -90,6 +90,28 @@ let fillVariableNode = (rule, situationGate) => (parseResult) => {
}
}
let buildNegatedVariable = variable => {
let nodeValue = variable.nodeValue == null ? null : !variable.nodeValue
return {
nodeValue,
category: 'mecanism',
name: 'négation',
type: 'boolean',
explanation: variable,
jsx: <Node
classes="inlineExpression negation"
value={nodeValue}
child={
<span className="nodeContent">
<span className="operator">¬</span>
{variable.jsx}
</span>
}
/>
}
}
let treat = (situationGate, rule) => rawNode => {
let reTreat = treat(situationGate, rule)
@ -104,11 +126,15 @@ let treat = (situationGate, rule) => rawNode => {
if (additionnalResults && additionnalResults.length > 0) throw "Attention ! L'expression <" + rawNode + '> ne peut être traitée de façon univoque'
if (!R.contains(parseResult.category)(['variable', 'calcExpression', 'modifiedVariable', 'comparison']))
if (!R.contains(parseResult.category)(['variable', 'calcExpression', 'modifiedVariable', 'comparison', 'negatedVariable']))
throw "Attention ! Erreur de traitement de l'expression : " + rawNode
if (parseResult.category == 'variable')
return fillVariableNode(rule, situationGate)(parseResult, rawNode)
return fillVariableNode(rule, situationGate)(parseResult)
if (parseResult.category == 'negatedVariable')
return buildNegatedVariable(
fillVariableNode(rule, situationGate)(parseResult.variable)
)
if (parseResult.category == 'calcExpression') {
let