Conditions
Sommaire
Les conditions : visible if
Introduction
La colonne Visible If permet de définir les conditions d’apparition d’une question, de contenu d’un document, d’une section, ou même d’un document dans son entièreté.
Si le champ Visible if est laissé vide, l’entité concernée apparaîtra en toute circonstance.
Les règles conditionnelles permettent donc de rendre dynamiques des interfaces ou des documents sans avoir besoin de maîtriser un langage de programmation
Le système des Visible Ifs se paramètre en utilisant des SmartExpressions
L'objectif de cet article est uniquement de présenter les principales SmartExpressions utiles dans la gestion de documents juridiques. Pour avoir plus de détails sur les SmartExpressions ainsi que leur usage, se reporter à l'article correspondant.
Les conditions basiques
Contexte
La condition basée sur un choix
C'est la forme de logique la plus basique, l'entité concernée sera visible si une condition est remplie. Si la condition n'est pas remplie, l'entité concernée ne s'affichera pas.
C'est aussi la forme de logique la plus intuitive : on prévoira généralement de laisser plusieurs choix à l'utilisateur final, et on adaptera un questionnaire ou un document en conséquence
MAVARIABLE1 = "oui"
A noter : dans la mesure où la valeur de la variable est une chaîne de caractères, il ne faut pas oublier de mettre la valeur entre guillemets" "
La condition basée sur un nombre
Ici, le but va être d'afficher ou non une entité en fonction d'un chiffre stocké dans une variable
PRIX_HT > 100
La condition basée sur une date
Enfin, on peut choisir d'afficher ou non une entité en fonction d'une date. On pourra afficher une phrase ou un paragraphe en fonction de la date de signature, pour adapter le document par rapport à une réforme ou une autre.
DATE_SIGNATURE > "02/10/2016"
--> afficher une entité si le contrat est signé après le 10 février 2016.
Exemples
De la même manière, le document généré prendra une apparence différente en fonction de la signature ou non du contrat :
Les conditions composées
Contexte
Exemples
De plus, la colonne “Visible IF” permet d’utiliser des conditions composées, en utilisant les connecteurs “OU” ainsi que “ET”.
Pour utiliser l’opérateur “or”, la syntaxe à suivre est la suivante : MA_VARIABLE1 = ‘VALEUR2’ or MA_VARIABLE2 = ‘VALEUR1’
Pour utiliser l’opérateur “and”, la syntaxe à suivre, très similaire, est la suivante : MA_VARIABLE1 = ‘VALEUR2’ and MA_VARIABLE2 = ‘VALEUR1’
Les différents opérateurs
Au-delà des conditions simples & composées, qui sont les plus courantes pour produire des documents juridiques, on peut aussi utiliser :
- des opérateurs de comparaison ( ≤, ≥ , <, >, ==, != etc.)
- des opérateurs arithmétiques : + , - (moins) , / (divisé par) , * (multiplié par)
- des primitives ; càd des nombres (12, 3.5, -123 …), des chaînes de caractères (“abcde” toujours contenues entre deux guillemets), ou des booléens (true ou false).
- des variables, préalablement référencées dans le datastore courant, et dans le même format (uniquement des majuscules et des tirets-bas). Ex: AGE, FIRSTNAME…
- des fonctions de traitement, faciles à repérer car leur format est spécifique : elles sont en minuscules et se terminent par une paire de parenthèses permettant de spécifier des paramètres séparées par des virgules.
Exemple : now() , contains("damien", "dam") , etc... Remarquez que même si la fonction ne nécessite aucun paramètre, la paire de parenthèses reste visible.
Important : une règle est évaluée à chaque fois qu’une des variables qui la compose vient à changer.
Exemples
Exemples de règles conditionnelles :
- AGE >= 18 (VRAI si la variable AGE est supérieure ou égale à 18 ; une erreur est remontée si la variable AGE n’est pas de type “numeric” car on ne peut comparer avec ≥ que des nombres).
- NAME matches /dam/ (VRAI si la variable NAME correspond à la regExp /dam/, autrement dit, si NAME contient la chaine “dam”. La condition est validée pour les valeurs de NAME telles que “damien”, “adam”, ou “amsterdam” ; une erreur est remontée si la variable NAME n’est pas du type ‘string’ car une regExp ne s’applique que sur des chaînes de caractères).
- date_before(EVENTDATE, now()) vaut VRAI si la variable EVENTDATE est antérieure à la date actuelle ; une erreur est remontée si la variable EVENTDATE n’est pas du type ‘date’. Nb: la fonction now() renvoie automatiquement le “datetime” actuel.
- ACCEPT_RULES = true and AGE > 18 : VRAI si la variable ACCEPT_RULES vaut “true” ET que la variable AGE est strictement supérieure au nombre 18 ; si la variable AGE n’est pas de type “numeric”, une erreur sera remontée comme dans le premier exemple. Cette règle peut aussi s’écrire avec des parenthèses (facultatives) afin de rendre plus lisibles les sous-conditions autour de l’opérateur “and”. Exemple : (ACCEPT_RULES = true) and (AGE > 18) Aussi, il est bon de noter que l’écriture
- ACCEPT_RULES and AGE > 18 aurait le même résultat. En effet, le "= true" peut s’avérer facultatif puisque par défaut une variable valide une condition si sa valeur ne vaut pas NULL, 0 (zero) ou “false”.
La syntaxe de ces conditions est améliorée avec des fonctions :
- la fonction contains(string, needle) pour lequel string et needle sont obligatoirement deux chaînes de caractères et qui vaudra VRAI si needle est contenu dans la chaîne string, peu importe la casse (majuscule ou minuscule) des deux chaînes.
- la fonction begins_with(string, needle), pour lequel string et needle sont obligatoirement deux chaînes de caractères, et qui vaut VRAI si la chaîne string commence par la chaîne needle peu importe la casse (majuscule ou minuscule) des deux chaines.
- la fonction ends_with(string, needle), avec string et needle obligatoirement des chaînes de caractères, qui vaut VRAI si la chaîne string se termine par la chaîne needle peu importe la casse (majuscule ou minuscule) des deux chaines.
- la fonction now() qui est de type “date” et qui a toujours pour valeur la date actuelle.
- la fonction date_before(date1, date2), avec date1 et date2 obligatoirement des variables de type “date”, qui vaut VRAI si date2 correspond à une date future à date1.
- la fonction date_year(date), avec date obligatoirement une variable de type “date”, qui retourne simplement l’année de cette date (ex: 2017). Idem pour date_month(date) avec le mois correspondant, pour date_day(date) le jour du mois, pour date_weekday(date) le jour de la semaine, pour date_hour(date) l’heure, et pour date_minute(date) les minutes correspondantes.
- la fonction date_sum(date, num, what num) avec date étant obligatoirement une variable de type “date”, num un nombre entier (positif ou négatif) et what une chaine de caractère parmi “year”, “month”, “day”, “hour”, “minute” ou “second”. Cette fonction retourne une date après lui avoir appliqué une somme d’un nombre num de temps what. Par exemple, si la date est le 20/08/2017 12:20:09, que num vaut 3 et que what vaut ‘day’, la date sera avancée de 3 jours, et la valeur retournée sera le 23/08/2017 12:20:09. Si what vaut “year”, et num vaut 10, la date retournée sera le 20/08/2027 12:20:09. La valeur de num peut-être négative afin d’obtenir une date inférieure à la date passée en paramètre. Cette fonction s’avère intéressante dans de nombreux cas. Par exemple, pour calculer à partir d’une date de naissance si la personne est majeure :
- date_sum(BIRTHDATE, 18, 'year') ≤ now() ou vu autrement,
- date_sum(now(), -18, 'year') ≥ BIRTHDATE