Conditions : Différence entre versions

De YoWiki
Sauter à la navigation Sauter à la recherche
 
(28 révisions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
 
<h2 id="Contexte">Introduction</h2>
 
<h2 id="Contexte">Introduction</h2>
 
<p>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é.</p>
 
<p>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é.</p>
<p>Si le champ Visible if est laissé vide, l’entité concernée apparaîtra en toute circonstance.</p>
+
<p>Si le champ Visible if est laissé vide, l’[[élément de contenu]] concernée apparaîtra en toute circonstance.</p>
 
<hr>
 
<hr>
 
<p>Les règles conditionnelles permettent donc de rendre dynamiques des interfaces ou des documents sans avoir besoin de maîtriser un langage de programmation</p>
 
<p>Les règles conditionnelles permettent donc de rendre dynamiques des interfaces ou des documents sans avoir besoin de maîtriser un langage de programmation</p>
Ligne 10 : Ligne 10 :
 
<h2 id="Les conditions basiques">Les conditions basiques</h2>
 
<h2 id="Les conditions basiques">Les conditions basiques</h2>
 
<h3 id="Contexte">Contexte</h3>
 
<h3 id="Contexte">Contexte</h3>
<h4 id="La condition basée sur un choix">La condition basée sur un choix</h3>
+
<h4 id="La condition basée sur un choix">La condition basée sur un choix</h4>
<p>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.</p>
+
<h5 id="Principe">Principe</h5>
 +
<p>C'est le Visible If le plus basique, l'[[élément de contenu]] concernée sera visible si un certain choix est fait par l'utilisateur. C'est la réalisation de cet évènement ou non qui détermine l'apparition de l'élément de contenu concernée. Si la condition n'est pas remplie, l'[[élément de contenu]] concernée ne s'affichera pas.</p>
 
<p>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</p>
 
<p>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</p>
 
<p><code>MAVARIABLE1 = "oui"</code></p>
 
<p><code>MAVARIABLE1 = "oui"</code></p>
 
<p>''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" " ''</p>
 
<p>''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" " ''</p>
 +
<h5 id="Spe">Le cas spécifique des questions multi-choix</h5>
 +
<p>[[Fichier:Exemple question multi choix.png|200px|thumb|droite|Une question multi choix : l'utilisateur peut avoir plusieurs centres d'intérêts]]
 +
</p>
 +
<p> Il est possible de laisser la possibilité à l'utilisateur de [[Fields-Form#Multiple-choices|choisir plusieurs valeurs]] pour une même variable. Autrement dit, permettre à l'utilisateur de cocher "plusieurs cases"</p>
 +
<p> Dans ce cas, il n'est pas possible d'utiliser l'opérateur <code>=</code> pour mettre au point une condition</p>
 +
<p> Pour vérifier si une case a été cochée, il convient d'utiliser la syntaxe suivante : <code>contains(VARIABLE,"valeur")</code></p>
 +
<p> Pour vérifier si une case n'a pas été cochée, il convient d'utiliser la syntaxe suivante : <code>contains(VARIABLE,"valeur") = false</code>
 
<h4 id="La condition basée sur un nombre">La condition basée sur un nombre</h3>
 
<h4 id="La condition basée sur un nombre">La condition basée sur un nombre</h3>
<p> Ici, l'idée va être d'afficher ou non une entité en fonction d'un chiffre stocké dans une variable </p>
+
<p> Ici, le but va être d'afficher ou non un [[élément de contenu]] en fonction d'un chiffre stocké dans une variable </p>
 +
<p>Par exemple : </p>
 
<p><code> PRIX_HT > 100</code></p>
 
<p><code> PRIX_HT > 100</code></p>
<h3 id="Exemples">Exemples</h3>
+
<p><code> PRIX_TTC < 5250</code></p>
[[Fichier:Condition très basique.png|cadre|néant|Une condition simple : c'est uniquement si CONTRAT_SIGNATURE = "oui" que la question relative à l'intitulé du contrat sera posée. Autrement dit, c'est uniquement si le contrat est signé que la machine demandera son intitulé.]]
+
<p><code> AGE >= 100</code></p>
 +
<p><code> AGE <= 100</code></p>
 +
<h4 id="La condition basée sur une date">La condition basée sur une date</h3>
 +
<p> Enfin, on peut choisir d'afficher ou non un [[élément de contenu]] 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.
 +
<p><code>DATE_SIGNATURE > "02/10/2016"</code> --> afficher une [[élément de contenu]] si le contrat est signé après le 10 février 2016.
 +
<h3 id="Exemples">Exemples dans un fichier de configuration</h3>
 +
[[Fichier:Condition très basique.png|1200px|néant|thumb|Une condition simple : c'est uniquement si CONTRAT_SIGNATURE = "oui" que la question relative à l'intitulé du contrat sera posée. Autrement dit, c'est uniquement si le contrat est signé que la machine demandera son intitulé.]]
 
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 :  
 
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 :  
[[Fichier:Contrat Signature.png|1px|cadre|néant|Si CONTRAT_SIGNATURE = "oui"]]
+
[[Fichier:Contrat Signature.png|1200px|néant|thumb|Si CONTRAT_SIGNATURE = "oui"]]
 
<h2 id="Les conditions composées">Les conditions composées</h2>
 
<h2 id="Les conditions composées">Les conditions composées</h2>
 +
Les conditions basiques sont capables de gérer une grande partie des cas.
 +
Néanmoins, il faut parfois vérifier plusieurs conditions avant de faire apparaître une question ou un document.
 
<h3 id="Contexte">Contexte</h3>
 
<h3 id="Contexte">Contexte</h3>
<h3 id="Exemples">Exemples</h3>
+
<p>Il est aussi possible de vouloir vérifier la valeur de plusieurs variables pour conditionner un [[élément de contenu]].</p>
<p>De plus, la colonne “Visible IF” permet d’utiliser des conditions composées, en utilisant les connecteurs “OU” ainsi que “ET”.</p>
+
<h4 id="And">And</h3>
<p>Pour utiliser l’opérateur “or”, la syntaxe à suivre est la suivante :
+
<p>On peut vouloir vérifier si plusieurs conditions sont remplies pour afficher un élément de contenu, grâce à <strong>AND</strong>
MA_VARIABLE1 = ‘VALEUR2’ or
+
<p>Le paramétrage pourra alors ressembler à ceci :</p>
MA_VARIABLE2 = ‘VALEUR1’</p>
+
<code> MAVARIABLE = "oui" and PRIX_HT > 100</code>
<p>Pour utiliser l’opérateur “and”, la syntaxe à suivre, très similaire, est la suivante :
+
<p>Ici, l'élément de contenu concerné ne s'affichera que si <code>MAVARIABLE</code> vaut oui, et <code>PRIX_HT</code> vaut 100.
MA_VARIABLE1 = ‘VALEUR2’ and
+
<p>Il est possible d'enchaîner autant de "AND" que voulu.</p>
MA_VARIABLE2 = ‘VALEUR1’</p>
+
<p><code>SURETÉ = "non" and CREDIT_BAIL = "non" and PRET = "non"</code>
<h2 id="les-diff-rents-op-rateurs">Les différents opérateurs</h2>
+
<h4 id="Or">Or</h3>
<p>Au-delà des conditions simples &amp; composées, qui sont les plus courantes pour produire des documents juridiques, on peut aussi utiliser :</p>
+
<p> De la même manière, on peut vérifier les valeurs de plusieurs variables et afficher un [[élément de contenu]] si AU MOINS une de ces conditions est remplie, grâce à <strong>OR</strong>
<ul>
+
<p><code>FORMEJURIDIQUE = "sarl" or FORMEJURIDIQUE = "snc" or FORMEJURIDIQUE = "scs" or FORMEJURIDIQUE = "sc"</code>
<li>des opérateurs de comparaison ( ≤, ≥ , &lt;, &gt;, ==, != etc.) </li>
+
<h3 id="Exemples">Exemples dans un fichier de configuration</h3>
<li>des opérateurs arithmétiques : + , - (moins) , / (divisé par) , * (multiplié par)</li>
+
[[Fichier:VisibleIFOR.png|1200px|thumb|néant|Un visible if utilisé avec "OR"]]
<li>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). </li>
+
[[Fichier:Visibleifavecand.png|1200px|vignette|néant|Un visible if avec des AND]]
<li>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… </li>
 
<li>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. </li>
 
</ul>
 
<p>Exemple : now()  ,  contains(&quot;damien&quot;, &quot;dam&quot;) , etc...
 
Remarquez que même si la fonction ne nécessite aucun paramètre, la paire de parenthèses reste visible.</p>
 
<p><strong>Important :</strong> une règle est évaluée à chaque fois qu’une des variables qui la compose vient à changer.</p>
 
<h2 id="exemples">Exemples</h2>
 
<p><strong>Exemples de règles conditionnelles :</strong></p>
 
<ul>
 
<li>AGE &gt;= 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).</li>
 
<li>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).</li>
 
<li>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.</li>
 
<li>ACCEPT_RULES = true and AGE &gt; 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 &gt; 18)
 
Aussi, il est bon de noter que l’écriture</li>
 
<li>ACCEPT_RULES and AGE &gt; 18 aurait le même résultat. En effet, le &quot;= true&quot; 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”. </li>
 
</ul>
 
<p><strong>La syntaxe de ces conditions est améliorée avec des fonctions :</strong></p>
 
<ul>
 
<li>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.</li>
 
<li>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.</li>
 
<li>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.</li>
 
<li>la fonction now() qui est de type “date” et qui a toujours pour valeur la date actuelle.</li>
 
<li>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.</li>
 
<li>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.</li>
 
<li>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 : </li>
 
<li>date_sum(BIRTHDATE, 18, &#39;year&#39;) ≤ now()
 
ou vu autrement, </li>
 
<li>date_sum(now(), -18, &#39;year&#39;) ≥ BIRTHDATE</li>
 
</ul>
 

Version actuelle datée du 26 août 2020 à 14:36

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’élément de contenu 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

Principe

C'est le Visible If le plus basique, l'élément de contenu concernée sera visible si un certain choix est fait par l'utilisateur. C'est la réalisation de cet évènement ou non qui détermine l'apparition de l'élément de contenu concernée. Si la condition n'est pas remplie, l'élément de contenu 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" "

Le cas spécifique des questions multi-choix

Une question multi choix : l'utilisateur peut avoir plusieurs centres d'intérêts

Il est possible de laisser la possibilité à l'utilisateur de choisir plusieurs valeurs pour une même variable. Autrement dit, permettre à l'utilisateur de cocher "plusieurs cases"

Dans ce cas, il n'est pas possible d'utiliser l'opérateur = pour mettre au point une condition

Pour vérifier si une case a été cochée, il convient d'utiliser la syntaxe suivante : contains(VARIABLE,"valeur")

Pour vérifier si une case n'a pas été cochée, il convient d'utiliser la syntaxe suivante : contains(VARIABLE,"valeur") = false

La condition basée sur un nombre

Ici, le but va être d'afficher ou non un élément de contenu en fonction d'un chiffre stocké dans une variable

Par exemple :

PRIX_HT > 100

PRIX_TTC < 5250

AGE >= 100

AGE <= 100

La condition basée sur une date

Enfin, on peut choisir d'afficher ou non un élément de contenu 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 élément de contenu si le contrat est signé après le 10 février 2016.

Exemples dans un fichier de configuration

Une condition simple : c'est uniquement si CONTRAT_SIGNATURE = "oui" que la question relative à l'intitulé du contrat sera posée. Autrement dit, c'est uniquement si le contrat est signé que la machine demandera son intitulé.

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 :

Si CONTRAT_SIGNATURE = "oui"

Les conditions composées

Les conditions basiques sont capables de gérer une grande partie des cas. Néanmoins, il faut parfois vérifier plusieurs conditions avant de faire apparaître une question ou un document.

Contexte

Il est aussi possible de vouloir vérifier la valeur de plusieurs variables pour conditionner un élément de contenu.

And

On peut vouloir vérifier si plusieurs conditions sont remplies pour afficher un élément de contenu, grâce à AND

Le paramétrage pourra alors ressembler à ceci :

MAVARIABLE = "oui" and PRIX_HT > 100

Ici, l'élément de contenu concerné ne s'affichera que si MAVARIABLE vaut oui, et PRIX_HT vaut 100.

Il est possible d'enchaîner autant de "AND" que voulu.

SURETÉ = "non" and CREDIT_BAIL = "non" and PRET = "non"

Or

De la même manière, on peut vérifier les valeurs de plusieurs variables et afficher un élément de contenu si AU MOINS une de ces conditions est remplie, grâce à OR

FORMEJURIDIQUE = "sarl" or FORMEJURIDIQUE = "snc" or FORMEJURIDIQUE = "scs" or FORMEJURIDIQUE = "sc"

Exemples dans un fichier de configuration

Un visible if utilisé avec "OR"
Un visible if avec des AND