fr:manuals:freemedforms:xmlforms:widgets
Keywords: fr:freemedforms,fr:usermanual,needupdate
Date: 2012-01-17T23:10:07+0100

freemedforms, usermanual, needupdate

# Items disponibles pour les formulaires patient

- Les formulaires sont constitués d'items.
- Les items de formulaires peuvent correspondre à :
  - des éléments graphiques de présentation (item formulaires ou regroupement d'items)
  - des éléments graphiques de saisie (cases à cocher, zones de texte…)
- Les formulaires sont codés dans un ou plusieurs fichiers XML dont la structure doit répondre à des règle précises.
- Il est nécessaire de définir au moins un item formulaire (cf infra).
- Les valeurs de ces items sont automatiquement sauvegardés en base de données pour les restituer sans code supplémentaire.

## Créer des formulaire : présentation du code XML

- Les items de formulaire peuvent être déclarés avec ou l'utilisation des attributs XML.
- La déclaration du type form n'est pas obligatoire.
- Vous pouvez inclure des sous-formulaires au sein de vos formulaires en utilisant l'inclusion de fichier (tag file).
- Il est possible d'associer des scripts aux formulaires.

      <!-- Déclaration d'un formulaire sans utilisation des attributs -->
      <MedForm>
        <type>form</type>
        <name>Unique::Identifiant</name>
        [...]
      </MedForm>

      <!-- Déclaration d'un formulaire avec utilisation des attributs -->
      <MedForm type="form" name="Unique::Identifiant">
        [...]
      </MedForm>

      <!-- Inclusion de fichier XML -->
      <file>__subforms__/machin/truc/central.xml</file>

      <!-- Inclusion de fichier de script -->
      <file type="script" name="onload">./scripts/xx/script.js</file>

      <!-- Déclaration d'items sans utilisation des attributs -->
      <Item>
        <type>check</type>
        <name>Unique::Identifiant</name>
        [...]
      </Item>

      <!-- Déclaration d'items avec utilisation des attributs -->
      <Item type="check" name="Unique::Identifiant">
        [...]
      </Item>

## Attribuer les identifiants aux items

- Tous les formulaires et items de formulaires doivent être identifiés par un identifiant unique.
- Ces identifiants doivent être persistants dans le temps (dans le cas de mise à jour du formulaire). Ils sont utilisés pour le stockage des données dans la base de données.
- Il est préférable, pour éviter les conflits de nommage, d'utiliser des espace de nommage. Les espaces de nommage peuvent être séparés par : '::', ':', '.', '__'.

## Créer des formulaire : utiliser le designer de Qt

- Vous pouvez utiliser le designer de Qt pour créer des formulaires de présentation complexe.
- Il vous faudra alors deux fichiers (au moins), le descripteur XML pour FreeMedForms et l'interface (fichier *.ui créé par le designer).
- Pour plus d'information sur cette fonctionnalité, reportez-vous à la création d'item formulaire.

## Les options génériques

### Code XML

- Tag: <options></options>
- Les options doivent être séparées par un point-virgule ;

### Options communes

- labelonleft : le libellé de l'item sera intégré à gauche de l'item dans le formulaire (valeur par défaut)
- labelontop : le libellé de l'item sera intégré au-dessus de l'item dans le formulaire
- compact : vues compactes (limite l'espace utilisé par l'item)
- notprintable : par défaut tous les items seront inclus lors d'une demande d'impression. Utilisez cette option pour faire disparaître de l'impression un item (ou plusieurs si il s'agit d'un conteneur).

## Les regroupements (formulaires, pages et groupes)

### Les items formulaire

- Les items formulaire définissent les différents formulaires patient.
- Ils peuvent contenir plusieurs items voire même des items formulaires (formulaires imbriqués).
- Il est indispensable de définir au moins un item formulaire.

      <MedForm name="GP::Basic::IdentityForm" uifilename="v0.6.2+">
        <label lang="xx">Identity</label>
        <label lang="fr">Identité</label>
        <options>unique</options>
       <icon>__theme__/identity.png</icon>
      </MedForm>

- Options disponibles :
  - Vous pouvez définir le nombre de colonnes à l'aide du tag column

        <column>2</column>

  - unique : un seul enregistrement dans la base de données. Il n'est pas possible de créer plusieurs épisodes pour ce formulaire (identité par exemple).
  - noepisode : aucun enregistrement ne sera créé dans la base de données pour les items contenus dans cet item formulaire. Les items formulaires contenus enfants pourront eux bénéficier des mêmes louons de sauvegarde que tout autre item formulaire. Vous pouvez utiliser cet option pour regrouper dans l'arborescence plusieurs items formulaire (exemple page médicaments du formulaire médecine générale).
  - UseFormNameAsNameSpace (0.6.2), vous pouvez simplifier l'écriture de vos formulaires en attribuant à tous les items du formulaire un espace de nommage correspondant au nom du formulaire. Par exemple, le nom complet de l'item One sera Form::Test::BlaBla::One et non One.

          <MedForm name="Form::Test::BlaBla">
           <options>UseFormNameAsNameSpace</options>
           <Item name="One>...</Item>
         </MedForm>

### Les pages

code en cours

### Les groupes

- Vous pouvez regrouper des items pour améliorer la lisibilité de vos formulaires.
- Les groupes possèdent une entête et un encadrement pour ses sous-items.
- Vous pouvez définir des groupes spécifiques aux pays à l'aide du tag country suivi de la liste des codes ISO des pays séparés par un point-virgule. Par exemple, pour créer un groupe spécifique à la France, le code serait <country>FR</country>.
- Options (non implémenté) :
  - Vous pouvez définir le nombre de colonnes à l'aide du tag column

        <column>2</column>

  - Grid : utilise une grille pour ranger les éléments
  - FormGrid : utilise une grille formulaire pour ranger les éléments (non disponible)
  - NoGrid : les éléments sont affichés tel quel les uns à la suite des autres (non disponible)
  - DontPrintTitle : n'ajoute pas le titre du groupe au moment de l'impression (à partir de la v0.6.2)
  - DontPrintEmptyValues : n'imprime pas si le contenu du groupe est vide
  - checkable : ajoute une case à cocher au groupe
  - collapsible : le group devient alors 'pliant'/'dépliant'
- Exemple complet sur le SVN du projet

      <Item type="group" name="sampleGroup">
        <country>FR</country>
        <option>compact</option>
        <label>Intitulé</label>
        [... Sous-items ...]
      </Item>

## Les items simples

### Les textes d'aide

- Les textes d'aide sont des zones de texte inherte du point de vue de la saisie.
- Il peuvent être intégrés à l'impression ou non grâce à l'utilisation des options :
  - printable pour l'intégrer à l'impression (valeur par défaut)
  - notprintable pour ne pas l'intégrer à l'impression

        <Item name="HelpText" type="helptext">
          <label lang="xx">This a simple help text</label>
          <label lang="fr">Ceci est texte d'aide</label>
          <options>printable</options>
          <value>
            <default>The default value</default>
          </value>
       </Item>

### Les zones de saisie textuelle

#### Lignes de texte

- Options disponibles :
  - DontPrintEmptyValues : n'imprime pas si l'éditeur de texte est vide

        <Item name="ShortText" type="shorttext">
          <label lang="xx">This a sample of a line edit</label>
          <label lang="fr">Exemple de zone de saisie sur une ligne</label>
          <value>
            <default lang="xx">The default value</default>
            <default lang="fr">La valeur par défaut</default>
          </value>
       </Item>

#### Bloc de texte brute

- Options disponibles :
  - DontPrintEmptyValues : n'imprime pas si l'éditeur de texte est vide

        <Item name="LongText" type="longtext">
          <label lang="xx">This a simple text edit without complex formatting</label>
          <label lang="fr">Exemple de zone de saisie textuelle brute et multi-ligne</label>
          <value>
            <default lang="xx">The default value</default>
            <default lang="fr">La valeur par défaut</default>
          </value>
       </Item>

#### Bloc de texte enrichi

- Correspond à une zone de saisie multi-ligne avec possibilité de mise en forme des caractères, ajout de tableau, ajout d'images, sauvegarde et lecture de fichier html…
- Options disponibles :
  - FullEditor : éditeur complet (avec impression, tableaux, fichiers…)
  - WithTable : éditeur basique avec manipulation de tableaux activée
  - WithIO : éditeur basique avec manipulation de fichiers activée
  - DontPrintEmptyValues : n'imprime pas si l'éditeur de texte est vide
  - Expanded : Étend la zone de texte en hauteur à 1000 pixels

        <Item name="GP::Basic::SOAP::S" type="texteditor>
          <label lang="xx">Subjective</label>
          <label lang="fr">Subjectif</label>
          <options>FullEditor</options>
        </Item>

### Les valeurs numériques

#### Les spins

- Options disponibles :
  - min : borne inférieure
  - max : borne supérieure
  - step : pas

         <Item name="Spin1" type="spin">
           <label lang="xx">Spin</label>
         </Item>

         <Item name="doublespin1" type="doublespin">
           <label lang="xx">Double Spin</label>
           <min>2</min>
           <max>1324</max>
           <step>0.1</step>
         </Item>

### Les cases à cocher

#### Les cases à cocher simples

- Peuvent être liées à une QCheckBox de la vue (définir le widget)
- Options disponibles :
  - printonlychecked : ajoute à l'impression uniquement si cochée
  - onright : dispose la case à cocher à droite du texte (par défaut la case à cocher se trouve à gauche)
  - labelastooltip : utilise le libellé comme texte de bulle d'aide

      <Item name="CheckBox" type="check">
        <label lang="xx">This is a simple scripted checkbox sample</label>
        <label lang="fr">Exemple de case à cocher simple</label>
        <tooltip lang="xx">My tootip</tooltip>
        <options>printonlychecked</options>
        <value>
          <numerical id="0">1</numerical>
          <numerical id="1">2</numerical>
        </value>
      </Item>

#### Les cases à cocher exclusives

      <Item name="RadioBoxes" type="radio">
        <label lang="xx">There are the radio buttons</label>
        <label lang="fr">Exemple de cases à cocher multiples auto-exclusives</label>
        <value>
          <uuid id="0">first</uuid>
          <uuid id="1">second</uuid>
          <uuid id="2">third</uuid>

          <possible id="0" lang="xx">The first value</possible>
          <possible id="1" lang="xx">The second value</possible>
          <possible id="2" lang="xx">The third value</possible>

          <possible id="0" lang="fr">Première valeur</possible>
          <possible id="1" lang="fr">Seconde valeur</possible>
          <possible id="2" lang="fr">Troisième valeur</possible>

          <numerical id="0">1</numerical>
          <numerical id="1">2</numerical>
          <numerical id="2">4</numerical>
        </value>
      </Item>

### Les dates

- Vous pouvez définir le format d'affichage à l'aide de la balise XML DateFormat
- Options disponibles :
  - now : défini la valeur par défaut au jour de la création de l'éditeur
  - patientLimits : utilise les données patient (date de naissance et date de décès) pour définir les bornes de l'éditeur (date minimale, date maximale)

       <Item name="SampleDateEdit" type="date">
         <dateformat>dd MM yyyy</dateformat>
         <label lang="xx">This a date editor</label>
         <label lang="fr">Exemple d'éditeur de date et heure</label>
         <options>now;patientLimits</options>
      </Item>

### Les listes et sélecteur de liste

#### Les sélecteurs déroulants

- (0.6.2) Vous pouvez spécifier une valeur par défaut qui sera activée lors de chaque création de formulaire grâce à la valeur default. Spécifiez le nom de l'uuid par défaut.

       <Item>
         <name>sampleCombo</name>
         <type>combo</type>
         <label>This a simple combo from the BaseWidgetsForm plugins</label>
         <value>
           <uuid id="0">firstcombo</uuid>
           <uuid id="1">secondcombo</uuid>
           <uuid id="2">thirdcombo</uuid>
           <possible id="0" lang="xx">First Combo's Element</possible>
           <possible id="1" lang="xx">Second Combo's Element</possible>
           <possible id="2" lang="xx">Third Combo's Element</possible>
           <possible id="0" lang="fr">Premier élément</possible>
           <possible id="1" lang="fr">Deuxième élément</possible>
           <possible id="2" lang="fr">Troisième élément</possible>
           <default>secondcombo</default>
         </value>
      </Item>

#### Les listes à sélectionner

- Listes à choix multiple : multilist
- Listes à choix simple : uniquelist

       <Item name="sampleCombo" type="multilist">
         <label>This a simple MutliList Selector from the BaseWidgetsForm plugins</label>
         <value>
           <uuid id="0">firstitem</uuid>
           <uuid id="1">seconditem</uuid>
           <uuid id="2">thirditem</uuid>
           <possible id="0">First Element</possible>
           <possible id="1">Second Element</possible>
           <possible id="2">Third Element</possible>
         </value>
      </Item>

## Les items complexes

### Le gestionnaire d'identité

        <Item name="GP::Basic::IdentityItem" type="identity">
          <label lang="xx">Full Identity</label>
          <label lang="fr">Identité</label>
        </Item>

### Les médications

- L'item médication ajoute au formulaire une vue ressemblant à celle de FreeDiams. Il est possible de définir plusieurs type :
  - sélecteur uniquement : drugselector
  - prescription complète : prescriptor, prescription
- Options disponibles :
  - NoInteractionChecking : Annule les moteurs d'interaction pour cet item seulement
  - WithPrescribing : Ajoute aux fonctionnalités de l'item la prescription complète
  - HideSelector : Cache par défaut le sélecteur de médicaments
  - AddChronicTherapyButton : ajoute un bouton cliquable qui ajoute le traitement chronique à l'item

- L'item médication vous permet
  - d'éditer une liste de thérapeutiques, ou une prescription complète
  - de l'imprimer
  - de la sauvegarder et/ou de la charger
- Une documentation plus complète se trouve dans la rubrique prescrire avec FreeMedForms

          <Item name="GP::Basic::Prescr::Drugs::Content" type="prescriptor">
            <label lang="xx">Therapeutic prescription</label>
            <label lang="fr">Prescription médicamenteuse</label>
          </Item>

### L'assistant CIM10

- L'item CIM10 est un assistant de codage utilisant la classification internationale des maladies version 10 publiée par l'OMS.
- Cet item vous permet :
  - de créer des “collections de codages” avec gestion des inclusions et exclusions de codes ainsi qu'avec gestion du système dague/étoile
  - de définir des “collections de codages” avec diagnostic principal et associés
  - de définir une liste de codes sans interaction de codage (pour les antécédents par exemple)
  - d'imprimer la “collection”
- Options disponibles :
  - DontPrintEmptyValues : n'imprime pas l'assistant si aucun code n'est saisi

        <Item name="GP::Basic::ICD10::Content" type="icd">
          <label lang="xx">ICD10 coding</label>
          <label lang="fr">Codes CIM10</label>
        </Item>

### La grille d'autonomie AGGIR

- La grille AGGIR est une grille utilisée pour mesurer l'autonomie générale d'un sujet âgé. Est elle spécifique à la France.
- Le modèle est celui de 2008.
- L'item AGGIR vous permet :
  - de coder un état d'autonomie selon les dernières recommandations
  - de calculer de façon automatique le Groupe Iso-Ressources
  - d'imprimer la grille ainsi que son résultat
- Ses données sont stockées en format XML dans la base de données de FreeMedForms
- Options à venir
  - Gir moyen pondéré
  - répartition des patients selon le score AGGIR
  - diverses statistiques

        <Item name="girSample" type="gir">
          <label lang="xx">Gir sample</label>
          <label lang="fr">Exemple de grille AGGIR</label>
        </Item>

## Les auto-calculateurs

### Les additionneurs

        <Item name="fagerstromScore" type="sum">
          <label lang="fr">Score</label>
          <label lang="xx">Score</label>
          <sumof>cig_reveil;fum_interdit;cig_indispensable;cig_par_jour;premiere_heure;maladie</sumof>
          <option>changeepisodelabel</option>
        </Item>

- options disponibles :
  - changeepisodelabel : ajoute au libellé de l'épisode le libellé de l'item suivi du score calculé. Ex : Épisode (Score = 5)
- précisez les items à inclure dans le calcul dans le tag sumof en les séparant par un ;
- le calcul se fait en temps réel à chaque modification des items spécifiés
- les valeurs utilisées pour le calcul sont les numerical.
- (0.6.2) Vous pouvez utiliser une interface UI, pour ce faire spécifier la QLineEdit dans le code xml

      <uilink label="myQLabelFromUi" widget="myQLineEditFromUi"/>

- exemple d'utilisation :
  - addictology/Fagerström
  - geriatrics/iadl

- Variante, à partir de la version 0.6.2 de FreeMedForms, avec utilisation des regexp et wildcards

        <Item name="fagerstromScore" type="sum">
          <label lang="fr">Score</label>
          <label lang="xx">Score</label>
          <sumof_regexp>Subs:Psychiatry::Depression::Hamilton::*</sumof_regexp>
          <option>changeepisodelabel</option>
        </Item>

### Le script calculator

        <Item name="Total" type="scriptcalculation">
          <label lang="xx">Result</label>
          <options>vertical;labelontop;changeepisodelabel;DontPrintEmptyValues</options>
          <connect_regexp>Test::Calculation::Script::*</connect_regexp>
          <calcScript>
            var s = "Script test: ";
            forms.namespaceInUse = "Test::Calculation::Script";
            var first = forms.item("First").currentValue;
            var second = forms.item("Second").currentValue;
            var calc = forms.item("Formula").currentText;
            var tmp = calc;
            tmp = tmp.replace(/first/g, first.toString());
            tmp = tmp.replace(/second/g, second.toString());
            s += "(Formula:"+calc+"="+tmp+") = " + eval(calc);
            s;  // Result to show in the lineedit: "Script test: (Formula:first*second=2*3) = 6"
          </calcScript>
        </Item>

- options disponibles :
  - changeepisodelabel : ajoute au libellé de l'épisode le libellé de l'item suivi du score calculé. Ex : Épisode (Score = 5)
  - showintexteditor : affiche le résultat dans un éditeur de texte enrichi (sinon affiche dans une line edit)
- Précisez les items à inclure dans le calcul dans le tag connect en les séparant par un ; ou dans le tag connect_regexp en utilisant une expression.
- Le script sera exécuté en temps réel à chaque modification des items spécifiés.