Onglet Scripting et plus - Formule

html
  • Si vous avez sélectionné la formule comme type de question, vous saisirez votre formule dans le champ "Formule", situé dans l'onglet Scripting and More de l'Éditeur de formulaire électronique.
  • Les formules sont particulièrement utiles dans les dossiers de score, où le score final du formulaire est la somme, la moyenne, etc. des points accumulés pendant que le patient remplit le formulaire.

Générer un score total :

Par exemple, si vous utilisiez le questionnaire PHQ-9, vous pourriez mettre toutes vos questions dans une section appelée "phq9q" et ensuite utiliser la formule suivante pour calculer la somme de tous les scores dans cette section :

ScriptUtil.sum(phq9Q)
Copier la règle

Afficher un résultat de formule :

Si vous souhaitez afficher la valeur calculée par votre formule, vous pouvez le faire en ajoutant "$$" dans le champ "Légende" (dans l'onglet Général). Vous pouvez également utiliser "$$" dans le champ "Note personnalisée" (dans l'onglet Note) si vous ne souhaitez pas afficher la valeur au patient mais que vous souhaitez la capturer dans le dossier du patient.

Plus de ressources :

Pour apprendre comment arrondir les réponses de votre formule au chiffre le plus proche, veuillez consulter : "Limite du nombre de décimales dans les calculs de formules".

Pour plus d'exemples de calculs de score possibles et d'articles de script plus avancés, veuillez vous référer à :


Onglet Scripting et plus - Afficher ce champ si

  • Le champ "Afficher ce champ si" dans l'onglet Scripting and More de l'éditeur de formulaire électronique peut être utilisé pour afficher ou masquer des éléments (ou faire une note clinique), en fonction des réponses aux questions précédentes ou d'autres informations sur le patient.
  • Vous trouverez ci-dessous quelques exemples de types de scripts pouvant être utilisés dans ce champ.

Masquer un élément :

Pour masquer des éléments (par exemple des formules) afin qu'ils n'apparaissent pas aux patients, sélectionnez l'élément dans l'éditeur de formulaire électronique et dans l'onglet Scripting & More, dans le champ "Afficher ce champ si :", saisissez false.

Afficher une question, basée sur la démographie :

Si vous créez un formulaire d'évaluation de santé générale et que vous souhaitez poser une question sur la possibilité de grossesse, vous pouvez choisir de ne montrer ce champ que si le patient est de sexe féminin en saisissant ce qui suit dans le champ "Afficher ce champ si" :

pt.isFemale()
Copier la règle

Pour une liste complète des fonctions liées au patient disponibles, veuillez vous référer à : "Fonctions du patient ("Pt") dans les scripts".

Afficher une question, basée sur la réponse du patient à un type d'élément Oui/Non :

  1. Créez votre première question

    • Tout d'abord, créez un élément pour la première question posée au patient. Dans l'onglet Scripting & More, assurez-vous de lui donner une Référence d'élément.

      Dans notre exemple, nous demandons d'abord au patient s'il fume, afin de déterminer s'il convient de proposer un accompagnement pour l'arrêt du tabac. Notre première question "Fumez-vous ?" sera de type Oui/Non et aura la référence d'élément : "fumer".

  2. Créez une question masquée

    • Ensuite, créez un deuxième élément. Cette question sera masquée, en fonction de la réponse du patient à la question initiale. Dans l'onglet Scripting & More, utilisez le champ "Afficher ce champ si" pour faire référence à la réponse qui devrait faire apparaître la deuxième question. L'élément apparaîtra en gris foncé avec (masqué) en dessous pour montrer qu'il est caché aux patients jusqu'à ce que la réponse appropriée soit fournie.

      Dans notre exemple, si le patient répond oui, nous voulons lui montrer une deuxième question Oui/Non "Seriez-vous intéressé par un accompagnement pour l'arrêt du tabac ?".

      fumer.r == 'Y'
      Copier la règle

Note : .r fait référence au choix de réponse de cet élément (par exemple, "N" pour non, "Y" pour oui).

Afficher une question basée sur la réponse textuelle d'un patient :

  1. Créez votre première question

    • Commencez par créer un élément pour la première question posée au patient. Dans l'onglet Scripting & More, assurez-vous de lui donner une Référence d'élément.

       

      Dans notre exemple, notre première question est un type d'élément de menu avec une légende : "Quelle est votre langue maternelle ?" Nous fournissons un menu avec les options Anglais, Français ou Autre. Nous avons donné à cet élément la référence : "langue".

  2. Créez une question cachée

    • Ensuite, créez un deuxième élément. Cette question sera cachée, en fonction de la réponse du patient à la question initiale. Dans l'onglet Scripting & More, utilisez le champ "Afficher ce champ si" pour faire référence à la réponse qui devrait faire apparaître la deuxième question. L'élément apparaîtra en gris foncé avec (caché) en dessous pour montrer qu'il est caché aux patients jusqu'à ce que la réponse appropriée soit fournie.

       

      Dans notre exemple, si le patient répond "Autre", nous voulons lui montrer une question supplémentaire "Veuillez préciser :" et recueillir sa réponse en utilisant un type d'élément Champ de texte. Comme notre choix de menu pour "Autre" a une valeur de point de 3, nous pouvons utiliser l'expression JavaScript suivante dans le champ "Afficher ce champ si" :

      langue.p == 3
      Copier la règle
    • Si votre première question est un choix de menu permettant des sélections multiples, utilisez la valeur ".r" en combinaison avec la fonction String.indexOf() de Javascript dans le champ "Afficher ce champ si" :

      Dans notre exemple, si le patient répond "Autre", nous voulons lui montrer une question supplémentaire "Veuillez préciser :" et recueillir sa réponse en utilisant un type d'élément Champ de texte. Comme notre première question est un choix de menu permettant des sélections multiples, nous pouvons utiliser l'expression JavaScript suivante dans le champ "Afficher ce champ si" :

      langue.r.indexOf("Autre") >= 0
      Copier la règle

      Note : Dans l'exemple ci-dessus, "Autre" est le choix de menu spécifique que vous souhaitez afficher pour la deuxième question.


Fondamentaux de JavaScript

Code de base

Symbol Sens
== égal à
!= différent de
|| ou
&& et
> supérieur à
>= supérieur ou égal à
< inférieur à
<= inférieur ou égal à
() parenthèses contrôlent l'ordre d'exécution
. un point indique une propriété de quelque chose
Case JavaScript est sensible à la casse (c.-à-d. la capitalisation est importante!)

Variable de réponse

Tout élément complété par un patient a 2 propriétés utiles :

  1. Réponse ("r")
  2. Point ("p")

Accéder à la valeur de réponse d'un élément

La valeur de réponse d'un élément peut être insérée dans la légende ou la note personnalisée d'un élément en utilisant la chaîne "$$". Cela est particulièrement utile lors de travailler avec des champs de formule.

Exemples :

myPainScale, une échelle numérique avec des valeurs de point de 0 à 5.

myPainScale.r
Renvoie la valeur associée au choix du patient (toujours dans la langue standard, c.-à-d. l'anglais)
myPainScale.p
Renvoie la valeur de point en tant que nombre
$$
Renvoie la valeur de réponse de cet élément lorsqu'il est utilisé dans ses champs "Légende" ou "Note personnalisée" (exemple de champ de légende : "Mon score d'échelle de douleur : $$")

Variables de script

Variable Description Expressions d'exemple
pt L'objet ScriptPatient avec l'âge, le sexe, etc.
pt.isMale() && pt.getAge() >= 55

Référez-vous aux "Fonctions ScriptPatient" pour plus de détails sur d'autres expressions "pt.".

daysSinceLastCompleted Le nombre de jours depuis que le patient a complété ce formulaire pour la dernière fois
daysSinceLastCompleted > 365
firstTime Si le patient a déjà complété ce formulaire ou non
firstTime
lastCompletedTag Une chaîne "mémorisée" par le formulaire la dernière fois qu'il a été complété
lastCompletedTag.indexOf('myString') != -1

Fonctions ScriptUtil

ScriptUtil fournit des fonctions diverses qui vous permettent de simplifier vos scripts et de prendre en charge des cas d'utilisation spéciaux. ScriptUtil est lié à tous les contextes de session de script, vous pouvez donc utiliser ces fonctions dans les règles de tablette ou au sein des eFormulaires (afficher si, faire une note si, etc.)

Veuillez vous référer aux "Fonctions ScriptUtil" pour des exemples de fonctions ScriptUtil courantes.


Fonctions du script Patient ("pt")

Les fonctions ScriptPatient sont disponibles sur l'objet "pt" dans n'importe quel contexte de script, tel qu'une règle de tablette ou dans un script d'Action de formulaire électronique.

Fonction Description Expression d'exemple (Booléen)
getAge() Renvoie l'âge en années
pt.getAge() > 40
getAgeInMonths() Renvoie l'âge en mois
pt.getAgeInMonths() > 18
getAgeInWeeks() Renvoie l'âge en semaines
pt.getAgeInWeeks() > 6
isFemale() Renvoie vrai si féminin, faux sinon
pt.isFemale()
isMale() Renvoie vrai si masculin, faux sinon
pt.isMale()
getReasonForVisit() Renvoie la raison de la visite du patient (non pris en charge par tous les DMÉ)
pt.getReasonForVisit() == 'PHE'
getCppItemKeys(cppListKey) Renvoie un tableau de chaînes des éléments du profil du patient. Les clés disponibles varieront selon le DMÉ. Voir le formulaire électronique de conciliation des médicaments pour un exemple d'élément de profil Rx.
pt.getCppItemKeys('rx').length > 0
getCppItemData(cppListKey) Renvoie un tableau clé-valeur pour un élément CPP avec une clé de liste spécifiée et une clé d'élément.
pt.getCppItemData("immu", "vaccin contre le virus de la grippe")


Fonctions ScriptUtil

ScriptUtil fournit des fonctions diverses qui vous permettent de simplifier vos scripts et de prendre en charge des cas d'utilisation spéciaux. ScriptUtil est lié à tous les contextes de session de script, vous pouvez donc utiliser ces fonctions dans les règles de tablette ou au sein des eFormulaires (afficher si, faire une note si, etc.).

Variable(s) Description & Exemple d'expression

sum, max, min

Retourne la somme/le max/le min des valeurs de points dans la section

ScriptUtil.sum(section1Ref) > 10
Copier l'exemple

countAnswersMatching, countAnswersWithPointsEqualTo

Le nombre de réponses correspondant à la valeur ou à la valeur de point dans la section spécifiée

ScriptUtil.countAnswersMatching(mySection,'other') > 0
Copier l'exemple

percentComplete

Retourne un nombre entre 0 et 100 représentant le nombre d'éléments terminés dans une section (y compris les sections imbriquées)

ScriptUtil.percentComplete('nutriSTEPQs') == 100
Copier l'exemple

getKeyword

Fournit un accès à n'importe quel mot-clé. Utilisé pour l'accès CPP et comme 'attrape-tout' pour accéder aux informations du patient.

ScriptUtil.getKeyword('@providerName') == 'John Smith'
Copier l'exemple

getResponse

Fournit un accès à une réponse fournie dans un eFormulaire précédent au cours de la même session.

ScriptUtil.getResponse('mySmokingScreenForm','isCurrentSmoker') == 'Y'
Copier l'exemple

queueContains

(pris en charge uniquement sur la tablette Ocean)

Renvoie vrai si la file d'attente du formulaire (ou les formulaires terminés) contient la référence passée en paramètre.

ScriptUtil.queueContains('phq9')
Copier l'exemple

queueSize

(pris en charge uniquement sur la tablette Ocean)

Renvoie le nombre de formulaires dans la file d'attente plus les formulaires qui ont déjà été complétés.

ScriptUtil.queueSize() == 0
Copier l'exemple

parseDate

Accepte une chaîne de date au format "aaaa-mm-jj" et renvoie une date JavaScript (tablette v127+)

ScriptUtil.parseDate("2015-3-5")
Copier l'exemple

webQ

Affiche des sections ou des éléments pour les questionnaires web uniquement, pas pour les tablettes.

ScriptUtil.isWebQ()
Copier l'exemple

walkIn

Renvoie vrai pour les patients sans rendez-vous (tablette v178+).

ScriptUtil.isWalkIn()
Copier l'exemple

 


Orientation des drapeaux de note Ocean

La fonction de signalement de note d'Ocean permet à un eFormulaire d'étiqueter la réponse d'un patient avec un "drapeau" coloré. Ces drapeaux sont destinés à aider les cliniciens et leurs administrateurs à trier rapidement les réponses.

Les drapeaux apparaissent dans les trois zones suivantes :

  • 1. Le sujet de l'e-mail de notification du fournisseur en tant que suffixe (par exemple, "Questionnaire en ligne Ocean Complété - Rouge"),
  • 2. Le corps de l'e-mail de notification du fournisseur (par exemple, "La réponse a été signalée comme étant  Rouge ."),
  • 3. La colonne d'état dans l'onglet Patients sous forme d'icône d'astérisque colorée (*)

Types de Drapeaux

Les significations des drapeaux sont intentionnellement laissées aux utilisateurs finaux pour les définir. Voici une liste des types de drapeaux pris en charge et leurs significations générales (conformément aux directives de documentation clinique) :

Types de Drapeaux Significations générales (conformément aux directives de documentation clinique)
ROUGE Le rouge indique une préoccupation urgente ou sérieuse (par exemple, idéation suicidaire)
ORANGE L'orange indique une préoccupation potentiellement urgente ou sérieuse (par exemple, fièvre dans un contexte par ailleurs à faible risque)
JAUNE Le jaune indique quelque chose ou une préoccupation sans urgence spécifique
VERT Le vert indique quelque chose de rassurant (comme un test COVID-19 négatif)
BLEU Le bleu indique quelque chose d'intérêt général
VIOLET Le violet indique également quelque chose d'intérêt général

Configuration

Pour créer un drapeau de note dans un formulaire spécifique et le faire apparaître dans une notification par e-mail :

  1. Modifier le eFormulaire

    • Localisez le eFormulaire que vous souhaitez générer le drapeau dans l'onglet eFormulaires et ouvrez l'éditeur.
    •  
    • Recherchez un élément "noteFlag" inactif existant au cas où il en existe déjà un (par exemple, le PHQ-9 en a un mais il est inactif).
    •  
    • S'il n'y a pas d'élément "noteFlag", ajoutez un nouvel élément de type "Formule".
    •  
    • Définissez la légende sur "noteFlag: $$" (ce n'est pas strictement nécessaire, mais cela facilite le dépannage).
    • Dans l'onglet Format de la note de l'élément, définissez "Créer une note pour cet élément" sur "jamais" et définissez "Remplir la réponse pour le champ DMÉ" sur "noteFlag".
    • Dans l'onglet Script et plus de l'élément, définissez "Afficher ce champ si :" sur "false" (pour masquer le champ aux patients). Définissez la formule sur un script qui reflète comment vous souhaitez que le drapeau de note se comporte.
      • Par exemple, dans ce formulaire PHQ-9, le drapeau est 'ROUGE' si la question sur l'idéation suicidaire est 'O' et blanc ('') sinon. La formule doit évaluer à blanc ou à l'une des options de couleur listées ci-dessus.
      • L'expression exacte pour une copie pratique de cet exemple est fournie ci-dessous :
  2. Définir "Me notifier lors de la consultation" lors de l'envoi du formulaire par e-mail

    • Si vous souhaitez des drapeaux de note avec les e-mails de notification, assurez-vous que votre modèle d'e-mail est configuré pour envoyer cet e-mail de notification en cochant la case "Me notifier lorsque complété"
    • Les drapeaux de note peuvent toujours être utiles sans notifications par e-mail. Par exemple, les formulaires de dépistage en kiosque et sur tablette ou les rappels Ocean généreront également des drapeaux de note et les afficheront dans l'onglet Patients et le Résumé journalier comme indiqué ci-dessus.

Considérations cliniques lors de l'utilisation des drapeaux de note pour le triage des réponses urgentes

Avis de non-responsabilité :

Étant donné que la fonction de signalement de note repose sur des e-mails ordinaires pour les notifications, elle ne peut pas être considérée comme le seul moyen de fournir une réponse sécuritaire aux patients présentant des symptômes inquiétants. Elle NE doit PAS être considérée comme un substitut au triage en personne, ni comme des instructions directes pour les patients. Un jugement clinique est nécessaire pour garantir la sécurité lors de la conception d'un protocole de triage et de son formulaire électronique associé.

Par exemple, un formulaire déclenchant un signalement de note "ROUGE" pour un risque aigu d'idéation suicidaire doit également diriger clairement et de manière non équivoque le patient vers le service des urgences.

Néanmoins, malgré cette contrainte importante, la fonction de signalement de note peut être un complément utile pour améliorer la rapidité et la qualité des soins aux patients lorsqu'elle est utilisée de manière appropriée.

Gestion des notifications par e-mail

Grâce au filtrage intelligent, à l'évaluation des règles et aux capacités de déclenchement des plateformes de messagerie électronique basées sur le web modernes comme Gmail, il peut être utile de configurer une règle pour aider aux notifications avancées impliquant des signalements de note.

Par exemple, en utilisant Gmail, vous pouvez créer un filtre pour rechercher l'objet de l'e-mail " - ROUGE" et déclencher ensuite une sonnerie unique sur le téléphone intelligent d'un clinicien pour de tels événements. Veuillez consulter la documentation de votre client de messagerie électronique et de votre téléphone intelligent pour savoir comment procéder. Voici quelques articles d'exemple décrivant ce processus :

 


Utilisation du script de formule pour calculer une moyenne

Un élément de formule caché peut être ajouté à un formulaire électronique pour calculer la moyenne de certaines valeurs collectées à partir des questions du formulaire électronique.

Moyennes simples

Générer une moyenne simple est simple si vous pouvez toujours supposer un nombre fixe de questions répondues (c'est-à-dire si vous exigez une réponse à toutes les questions).

Moyenne Simple = Valeur Totale des Réponses / Nombre de Questions
Exemple :

Si vous avez cinq questions avec les références 'q1', 'q2', 'q3', 'q4', et 'q5', votre formule ressemblerait à ceci :

(q1.p + q2.p + q3.p + q4.p + q5.p) / 5
Copier la règle

Moyennes des questions répondues

Cependant, cela devient un peu plus compliqué si vous voulez seulement compter une question lorsqu'elle est répondue. La principale différence est que vous devez calculer le nombre de questions auxquelles des réponses ont été apportées pour le dénominateur.

Moyenne Réponse = Valeur Totale des Réponses / Nombre de Questions Répondues

Vous pouvez vérifier si une question a été répondue en regardant sa réponse littérale (.r).

q1.r == ''
signifie que la réponse est vide
q1.r == 'N'
signifie que la réponse est "Non"
q1.r == 'Y'
signifie que la réponse est "Oui"

Le suivant est une abréviation JavaScript pour dire "utilisez 1 si q1.r n'est pas vide ; sinon utilisez 0"

(q1.r != '' ? 1 : 0)
Copier la règle
Exemple :

En utilisant l'exemple précédent, si "q3" était laissée en blanc, vous voudriez diviser par 4 lors de la génération de la moyenne. Cela signifie que vous devez calculer le dénominateur en ajoutant 1 pour chaque question répondue.

Voici à quoi ressemblerait votre nouvelle formule :

(q1.p + q2.p + q3.p + q4.p + q5.p) / ((q1.r != '' ? 1 : 0) + (q2.r != '' ? 1 : 0) + (q3.r != '' ? 1 : 0) + (q4.r != '' ? 1 : 0) + (q5.r != '' ? 1 : 0))
Copier la règle

Limite du nombre de décimales dans les calculs de formules

Lors du développement de formules complexes dans les eFormulaires Ocean, vous pourriez vous retrouver avec un grand nombre de décimales (par exemple, 2.342456677543). Pour limiter le nombre de décimales, il suffit d'ajouter ".toFixed(#)" à la fin de votre formule, où # représente le nombre de décimales souhaité.

Par exemple :

Formule d'origine :
(( (6 - q1.p) + (6 - q2.p) + (q3.p) ) / 3)
Copier la formule

Cette formule donnerait une réponse telle que 2.666667

Formule révisée :
(( (6 - q1.p) + (6 - q2.p) + (q3.p) ) / 3).toFixed(2)
Copier la formule

Cette formule donnerait une réponse telle que 2.67


JavaScript avancé dans les formulaires ("Choses sophistiquées")

html

Fonctions en ligne

Parfois, vous voulez qu'une expression "formule" ou "afficher si" fasse des choses vraiment complexes. Peut-être voulez-vous faire une expression de type "si/alors/sinon" pour décider si une section de questions se résout au niveau 1 ou au niveau 2. Cela pourrait être beaucoup plus compliqué que cela (voir le score de probabilité de réadmission pour un exemple).

Vous constaterez qu'ajouter un simple if (x) { return y; } ne fonctionnera pas. Par exemple, ce qui suit ne fonctionnera pas :

(ScriptUtil.sum(mySection) > 5) return 2; else return 1;

Le truc est que vous devez définir et exécuter une fonction en ligne, comme ceci :

(function() { if (ScriptUtil.sum(mySection) > 5) return 2; else return 1; })() 
Copier la règle

Détails techniques

Pour décomposer cela, cette partie définit la fonction : (function() { if (ScriptUtil.sum(mySection) > 5) return 2; else return 1;}) et les () à la fin exécutent simplement la fonction nouvellement définie.

Manipulations de date

Vous pouvez créer une nouvelle date en Javascript en utilisant l'appel new Date(), qui renvoie la date/heure actuelle. Vous pouvez utiliser new Date(2020,2,10) pour créer une date pour le 10 mars 2020 (oui, mars ; le mois est déroutant car il est indexé à partir de 0, donc janvier est le mois 0).

Vous pouvez appeler new Date().getMonth() pour obtenir le mois actuel (indexé à partir de 0 à nouveau, donc mars est le mois 2).

Pour comparer des dates, soustrayez-les simplement pour obtenir le nombre de millisecondes entre elles, puis divisez cette différence par 1000*60*60*24 pour obtenir la différence en jours.

Consultez "Référence des dates en Javascript" pour plus d'informations.

Javascript avancé

Tant que votre script s'évalue en une seule expression, vous pouvez faire à peu près tout ce que vous pouvez faire avec Javascript. Certaines fonctionnalités de script avancées utilisent une fonction en ligne comme décrit ci-dessus pour avoir un algorithme multi-lignes compliqué enveloppé dans une seule expression.

Vous pouvez en apprendre davantage sur Javascript en utilisant Google (par exemple "comment comparer des dates en Javascript ?") ou en lisant un bon livre de référence (par exemple "Javascript : Les bonnes parties").


Codage inversé dans les eFormulaires Ocean

De temps en temps, lors du développement d'échelles à l'aide de questions de type Likert, vous vous retrouverez à devoir inverser le codage de certains éléments.

Par exemple, un élément tel que "Je n'aime pas travailler avec les ordinateurs" noté de 1 à 5 (où 1 signifie "tout à fait en désaccord" et 5 signifie "tout à fait d'accord"), devrait être recodé de sorte que la réponse négative soit associée au score le plus bas. Le recodage est particulièrement important si l'élément est utilisé dans une formule pour calculer un score d'échelle.

À partir du, votre formule d'inversion de codage serait la suivante :

Nouveau score = (max + min) - réponse
Exemple :

Vous avez fourni à votre patient un sondage de 3 questions noté sur une échelle de 5 points. Les questions 1 et 2 sont inversées. Vous souhaitez calculer un score moyen pour le sondage.

Réponses au sondage :
  • Question 1 (q1.p) = 5
  • Question 2 (q2.p) = 4
  • Question 3 (q3.p) = 1
Formule Ocean :
((6 - q1.p) + (6 - q2.p) + (q3.p)) / 3
Copier la règle
Score moyen :
( ( 6 - 5 ) + ( 6 - 4 ) + 1 ) / 3 = 1.33
Copier la règle