⚙️ Périodes en préfixe

publicodes
Mael 2018-11-13 15:14:57 +00:00
parent a6c7bfee3d
commit ce3d63ab65
5 changed files with 34 additions and 20 deletions

View File

@ -6,7 +6,7 @@ main ->
| Boolean {% id %}
| Variable {% id %}
| NegatedVariable {% id %}
| ModifiedVariable {% id %}
| TemporalVariable {% id %}
| FilteredVariable {% id %}
| percentage {% id %}
| Comparison {% id %}
@ -18,7 +18,7 @@ Comparison -> Comparable _ ComparisonOperator _ Comparable {% d => ({
explanation: [d[0], d[4]]
}) %}
Comparable -> (number | percentage | CalcExpression | Variable | Constant) {% d => d[0][0] %}
Comparable -> (number | percentage | CalcExpression | Variable | TemporalVariable | Constant) {% d => d[0][0] %}
ComparisonOperator -> ">" | "<" | ">=" | "<=" | "=" | "!="
@ -28,12 +28,11 @@ FilteredVariable -> Variable _ Filter {% d => ({category: 'variable', filter: d[
Filter -> "(" VariableFragment ")" {% d =>d[1] %}
# Modificateurs temporels pas utilisés aujourd'hui
ModifiedVariable -> Variable _ Modifier {% d => ({category: 'modifiedVariable', modifier: d[2], variable: d[0] }) %}
TemporalVariable -> Variable _ TemporalTransform {% d => ({...d[0], temporalTransform: d[2] }) %}
Modifier -> "[" TemporalModifier "]" {% d =>d[1][0] %}
TemporalTransform -> "[" Temporalities "]" {% d =>d[1] %}
TemporalModifier -> "annuel" | "mensuel" | "jour ouvré" {% id %}
Temporalities -> "annuel" | "mensuel" {% id %}
#-----

View File

@ -55,7 +55,7 @@ let nearley = () => new Parser(Grammar.ParserRules, Grammar.ParserStart)
export let treatString = (rules, rule) => rawNode => {
/* On a affaire à un string, donc à une expression infixe.
Elle sera traité avec le parser obtenu grâce à NearleyJs et notre grammaire `grammar.ne`.
On obtient un objet de type Variable (avec potentiellement un 'modifier', par exemple temporel (TODO)), CalcExpression ou Comparison.
On obtient un objet de type Variable (avec potentiellement un 'modifier', par exemple temporel), CalcExpression ou Comparison.
Cet objet est alors rebalancé à 'treat'.
*/

View File

@ -123,7 +123,12 @@ export let treatVariableTransforms = (rules, rule) => parseResult => {
rules,
filteredNode.explanation.dottedName
)
if (!rule.période) {
let inlinePeriodTransform = { mensuel: 'mois', annuel: 'année' }[
parseResult.temporalTransform
]
if (!rule.période && !inlinePeriodTransform) {
if (ruleToTransform.période == 'flexible')
throw new Error(
`Attention, une variable sans période, ${
@ -140,7 +145,8 @@ export let treatVariableTransforms = (rules, rule) => parseResult => {
let environmentPeriod = situation('période') || 'mois'
let callingPeriod =
rule.période == 'flexible' ? environmentPeriod : rule.période
inlinePeriodTransform ||
(rule.période == 'flexible' ? environmentPeriod : rule.période)
let calledPeriod =
ruleToTransform.période == 'flexible'
? environmentPeriod
@ -150,9 +156,11 @@ export let treatVariableTransforms = (rules, rule) => parseResult => {
callingPeriod === 'mois' && calledPeriod === 'année'
? nodeValue / 12
: callingPeriod === 'année' && calledPeriod === 'mois'
? nodeValue * 12
: nodeValue,
? nodeValue * 12
: nodeValue,
periodTransform = nodeValue !== transformedNodeValue
if (inlinePeriodTransform)
console.log(situation('période'), transformedNodeValue)
let result = rewriteNode(
{

View File

@ -741,18 +741,18 @@
salaire médian: 2300
SMIC: 1500
contrôles:
- si: brut de base < 300
- si: brut de base [mensuel] < 300
message: Entrez un salaire raisonnable
niveau: bloquant
- si: brut de base < SMIC
- si: brut de base [mensuel] < SMIC [mensuel]
niveau: avertissement
solution:
cible: contrat salarié . temps partiel
texte: Est-ce un temps partiel ?
- si: brut de base > 10000
- si: brut de base [mensuel] > 10000
niveau: information
message: |
Le salaire saisi est élevé. Pour rappel, le simulateur ne fonctionne qu'avec des salaires mensuels.
Le salaire saisi est élevé. Ne vous êtes-vous pas trompé de période de calcul ?
formule:
inversion:
question: Quel est le salaire ?
@ -963,7 +963,7 @@
période: flexible
formule: rémunération . net de cotisations - avantages en nature . montant
contrôles:
- si: net < 200
- si: net [mensuel] < 200
période: mois
message: Entrez un salaire raisonnable
niveau: bloquant
@ -989,7 +989,7 @@
formule: net - impôt . neutre
contrôles:
- si: net après impôt < 200
- si: net après impôt [mensuel] < 200
message: Entrez un salaire raisonnable
niveau: bloquant
@ -1330,7 +1330,7 @@
formule: rémunération . total sans réduction - réductions de cotisations
contrôles:
- si: total < 400
- si: total [mensuel] < 400
message: Entrez un salaire raisonnable
niveau: bloquant
@ -1366,7 +1366,7 @@
type: salaire
formule: rémunération . total - aides employeur
contrôles:
- si: coût d'embauche < 400
- si: coût d'embauche [mensuel] < 400
message: Entrez un salaire raisonnable
niveau: bloquant
@ -2118,7 +2118,7 @@
basique: 40
élevé: 100
contrôles:
- si: forfait complémentaire santé < 15
- si: forfait complémentaire santé [mensuel] < 15
niveau: avertissement
message: Vérifiez bien qu'une complémentaire santé si peu chère couvre le panier de soin minimal défini dans la loi.

View File

@ -148,3 +148,10 @@
assiette trois: 36000
valeur attendue: 300
- test: Périodes, préfixe de modification temporelle
formule: assiette trois [mensuel]
exemples:
- situation:
assiette trois: 12000
valeur attendue: 1000