Base, modules et plugins : principes et fonctionnement

Principes généraux

Le logiciel MedShakeEHR est conçu pour être modulaire : sur une base commune de codes et de fonctionnalités, on vient déposer les fichiers composant un module spécifique à un type d’exercice ou de profession.

La base de MedShakeEHR peut aussi (à partir de la v6.6.0) se voir greffer sous forme de plugins des fonctionnalités transverses, communes à l’ensemble des modules installés.
Il s’agit le plus souvent de fonctionnalités techniques, par exemple d’une méthode complémentaire d’envoi de message ou d’une tâche planifiée spécifique.

Base

La base de MedShakeEHR est disponible dans le repository Github MedShake/MedShakeEHR-base

Depuis la version 2.0.0, la base est capable de fonctionner seule. Elle offre un point de départ commun pour le développement de modules spécifiques.
Sa mise en oeuvre sera possible en consultant les articles suivants de la rubrique Documentation technique.

Modules

Les différents modules existants sont répertoriés dans le menu déroulant du même nom accessible en haut de cette page. Ils sont, sauf mention contraire, eux aussi disponibles sur Github.

Un module est complémentaire de la base. Il vient amender ou étendre le comportement des scripts pour adapter les actions et la mise en page.
Il apporte également un modèle de données qui vient compléter celui de la base via un dump MySQL.

Depuis la version 3.0.0, il est possible d’installer plusieurs modules sur la même base patients sans conflit entre fichiers. Le module utilisé est spécifique à la configuration de l’utilisateur.

Plugins

Le système de plugins est introduit depuis la version 6.6.0 de MedShakeEHR.
Son but est double :
 ne plus distribuer systématiquement des fonctionnalités qui ne seraient pas utiles à tous
 versionner ces composants spécifiques

Ce système encore jeune a vocation à se déployer le plus possible dans les versions futures. Des évolutions techniques sont donc à prévoir.

Fonctionnement conjoint base / module

La mécanique qui gouverne le fonctionnement conjoint de la base et du module se fait sur les principes suivants :

  1. les templates d’affichage fonctionnent sur le mode de la cohabitation et de la substitution. En d’autres termes : si un fichier de template existe dans le répertoire des templates du module, il est utilisé. Sinon c’est le template de la base qui produit le résultat.
  2. Le code PHP doit cohabiter préférentiellement : le module place ses scripts dans /controlers/module/ puis dans une arborescence comparable à celle de controlers. Par exemple, s’il faut amender /controlers/patient/patient.php, il convient de créer /controlers/module/patient/patient.php. NB : les instructions du fichier de module sont exécutées après celles du fichier de la base.
  3. La mécanique de gestion des formulaires de consultation peut échapper à ces règles. Voir l’article Conception d’un formulaire

En conséquence des règles énoncées ici, l’installation de MedShakeEHR doit commencer par celle de la base puis il convient ensuite d’installer les modules.

Hiérarchie des templates

Comme il a été dit plus haut, les templates servant à générer les pages vues par l’utilisateur fonctionnent en mode cohabitation / substitution.
À nom identique, les templates du module sont utilisés prioritairement à ceux de la base.
On peut définir (version MedShakeEHR > 2.3.1) un niveau supplémentaire se trouvant en tête des priorités : les templates spécifiques à l’utilisateur identifié. Ces templates sont à stocker aux côtés de ceux de la base et des modules dans un dossier dont le nom contient l’identifiant numérique de l’utilisateur templates/templatesUser*ID*/.

La liste des priorités finales s’établit ainsi à : template utilisateur > template module > template base

NB : cette hiérarchie ne concerne en rien les templates nécessaires à l’impression de PDF dont l’emplacement est lui géré par une variable de configuration qui peut être surchargée utilisateur par utilisateur.

Conception d’un module

L’article Création d’un nouveau module indique les bases pour la conception d’un module à partir de zéro.

Conception d’un plugin

L’article Création d’un nouveau plugin indique les bases pour la conception d’un plugin à partir de zéro.

 

Article précédent