Synoptux est un logiciel de suivi et de surveillance des tâches à réaliser pour les patients intégrant un service d'urgence ou toute autre structure comparable (service d'hospitalisation, par exemple). Il est particulièrement utile lorsque les actes devant être pratiqués émanent de plusieurs prescripteurs et concernent de nombreux intervenants. Synoptux a été conçu pour éviter les pertes d'information et pour assurer une vision instantanée et permanente des tâches à réaliser et de leur priorité. L'ergonomie du logiciel assure une utilisation simple, intuitive et rapide en évitant toute saisie superflue. L'exemple ci-dessous montre ainsi très simplement que :
Toutes les actions effectuées pour un patient qui est inscrit dans synoptux sont archivées dans la base de données. Ces informations pourront si nécessaire être exploitées a postériori à des fins statistiques. On pourra, par exemple, obtenir le nombre d'actes effectués sur une période, ou le temps moyen nécessaire par tâche en période de stress, ou la durée passée par patient en salle d'attente, etc.
SynopTux doit être installé dans l'arborescence classique de MedinTux, dans le dossier « Programmes ». Le package initial doit contenir l'exécutable Sypnotux et les fichiers de paramétrage synoptux.ini, synoptux.css et synoptux.cfg. Les données utilisées par SynopTux sont stockées dans une base MySql. Ce programme étant naturellement lié à Medintux, les tables peuvent être créées dans la base « drtuxtest » ou dans une base indépendante que nous appellerons par défaut « Synoptux ». Le démarrage de SynopTux nécessite, suite à l'installation du package synoptux, un paramétrage initial de l'accès aux bases de donnnées.
Le fichier Synoptux.ini contient les paramètres suivants qui devront être adaptés avant le premier lancement du programme.
Le fonctionnement de Synoptux est très simple. Sa finalité est d'afficher en permanence les box ainsi que les patients qui les occupent. La première étape est donc de saisir dans la table « box » la liste des endroits réels (ou virtuels) ou se trouvent les patients. L'affectation d'un patient dans un box nécessite également la création de tâches correspondant aux actes qui seront prescrits ainsi que les états potentiels de chaque acte. L'accès à ces tables se fait à partir du menu « Fichiers » .
Un box est caractérisé par :
Un Un état représente une étape que l'on souhaite visualiser dans le déroulement d'une tâche. On pourra ainsi, facilement distinguer grâce à ses couleurs, une tâche pas encore commencée, une étape en cours de réalisation ou un tâche terminée. On distinguera en particulier les états tels que « Annulé » ou « terminé » à l'aide de la case à cocher, afin de mettre à jour la date et l'heure de fin de tâche quand on sélectionnera ces états. Attention, il faut tenir compte de l'ordre alphabétique des codes, car c'est ainsi qu'il apparaîtront dans le tableau et les menus.
Cette notion est également commune avec le logiciel maitre (Medintux), puisque c'est dans ce dernier que l'on va indiquer à synoptux les différentes tâches à réaliser pour un patient. Le code tâche, ainsi que les éventuelles heures de début et de fin devront être écrites dans le fichier d'entrée, ou directement dans la table « encours_taches » si l'alimentation de synoptux est directe. Pour chaque tâche on indique :
Le nom du praticien qui suit le patient apparaît dans le synoptique.
On enregistre dans cette table les destinations les plus probables pour un patient lorsqu'il quitte la clinique. Cette destination sera demandée à l'utilisateur lorsqu'il déplacera un patient d'un box de type « soins » vers un box de type « sortie ». La saisie se fait dans la zone de texte en haut de la fenêtre puis en cliquant sur valider.
Cette destination sera demandée lorsqu'un patient sera momentanément en déplacement dans un box de type « absence » pour subir un examen dans un autre service.
Cette fonction permet d'accéder directement au paramètres généraux contenus dans le fichier « synoptux.ini ». Les modifications apportées aux paramètres de connexion aux bases de données ne seront prises en compte qu'après un redémarrage du programme.
On accède ici au fichier synoptux.css qui contient les paramètres de mise en forme des objets du synoptique. (Police, taille, couleur, bordures, etc…)
Lors du premier affichage, SynopTux affiche les box en fonction des tailles indiquées dans synoptux.ini. Il est nécessaire de procéder ensuite à un positionnement des box compatible avec la taille de l'écran. Cette opération peut se faire à partir du menu « Fenêtres ». Afficher tout d'abord les box en « mode fenêtre » afin de pouvoir déplacer et redimentionner chaque box selon les besoins. Appliquer ensuite un affichage en « mode cadre », puis « enregistrer les positions » pour conserver cette disposition à l'avenir.
Par défaut SynopTux affiche tous les patients présents dans tous les box. Il est possible de limiter l'affichage aux patients d'un seul médecin. Pour cela, utiliser le menu « Responsable » pour sélectionner un nom.
Pour chaque patient présent dans un box, les actions suivantes peuvent être effectuées par un simple toucher du bouton concerné.
Permet d'afficher ou masquer le nom du patient par respect d'anonymat.
Permet d'afficher ou masquer les tâches prescrites pour un patient. Par défaut dans les box de type absence ou sortie les patients sont repliés.
Permet de lancer le programme passé en paramètre lors de la création de l'entrée pour le patient. Dans l'environnement MedinTux, le programme appelé sera « drtux » qui ouvrira automatiquement la fiche du patient concerné. Pour cela le GUID du patient aura dû être intégré également lors de la création de l'entrée (voir interface d'entrée).
Ce bouton supprime simplement la tâche concernée pour ce patient.
Cette icône représentant un oeil apparaît sur le bouton « tâche » si une information complémentaire est disponible. Pour visualiser cette information il suffit d'un toucher sur le bouton « tâche ». La fenêtre « information » sera effacée sur un simple toucher n'importe où sur l'écran.
Affiche le libellé de la tâche et éventuellement un complément d'information très court fourni lors de la création de la tâche. (voir interface entrée)
Affiche le libellé de la tâche en cours. Pour changer d'état, un toucher sur ce bouton déroule un menu contenant la liste des états disponibles. Toucher le menu pour sélectionner le nouvel état. Si on sélectionne un état de type « fin de tâche », l'heure fin de tâche est enregistrée. On considère que la tache est terminée. Le contrôle d'alerte des délais dépassés ne traitera plus cette tâche. Si on sélectionne un état de type différent, cette date est alors effacée, et la tâche repasse sous contrôle.
Dans ce cas, tous les états possibles apparaissent à l'écran. L'état en cours sera signalé par un effet graphique (selon paramètres css), comme un cadre rouge par exemple. Fonctionnement identique que ci-dessus pour la gestion des dates fin.
Permet d'afficher l'historique des tâches effectuées pour le patient. (Date d'entrée, date de début et fin de chaque tâche, changement de responsable, déplacements, …)
Permet de déplacer un patient d'un box à l'autre. Pour effectuer un déplacement, il faut toucher ce bouton pour le patient concerné dans le box d'origine, puis toucher le bouton box de destination. Lorsque le box de destination est de type « absence » ou « sortie », la liste des destinations possibles est affichée et il suffit de toucher un élément de liste pour terminer le déplacement. Si le box de destination est de type « sortie », le formulaire contenant la liste des destinations permet également de modifier l'heure de sortie.
Ce bouton qui affiche le nom du responsable en cours, permet aussi de faire apparaître la liste des médecins afin de sélectionner un nouveau responsable.
Indique la date d'entrée du patient dans le synoptique. Cette information est inchangée jusqu'à la fin du traitement.
Indique l'heure du dernier déplacement dans un box. Si ce box est de type « Sortie », cette date représente la date de sortie du patient du service.
Utilisé pour sélectionner le box de destination lors du déplacement d'un patient (voir bouton déplacer le patient).
L'alimentation de synoptux à patir du logiciel « maitre » (Medintux) peut se faire de deux manières. Soit par création d'un fichier interface de type txt, soit par l'alimentation directe des tables synoptux.
Le fichier interface contenant les éléments permettant d'enregistrer un nouveau patient dans synoptux doit être créé dans le répertoire dont le nom est paramétré dans le fichier synoptux.ini. Synoptux explore le contenu de ce dossier avec une périodicité également paramétrée dans synoptux.ini. Le nom de ce fichier texte n'a aucune importance, mais il doit avoir une extension « .txt », et le format doit être de type INI. Le fichier contient deux types d'informations.
Un exemple de fichier est présenté ci-dessous. Les informations entre parenthèses sont propres à cette documentation et ne doivent pas apparaître dans le fichier.
[Entree] (Obligatoire, Début de paragraphe)
[Tache_1] (Début de paragraphe Tache = Obligatoire)
L'alimentation directe des tables synoptux suit la même logique. Le programme synoptux teste régulièrement la création d'un nouvel enregistrement dans les tables « encours » et « encours_taches » afin de rafraîchir l'écran avec les nouvelles entrées immédiatement. Pour exemple, voici les instructions SQL permettant d'alimenter ces deux tables.
Création d'une entrée dans la table « encours » ; (La primary key et un autoincrement).
INSERT INTO encours (EC_CodeBox, EC_NomPatient, EC_PrenomPatient, EC_Medecin, EC_GUIDPatient, EC_Replier, EC_Commentaire, EC_HeureEntree, EC_ProgAnnexe, EC_ArgsAnnexe ) VALUES ('" + CodeBox + "','" + NomPatient + "','" + PrenomPatient + "','" + CodeResp + "','" + GuidPatient + "','1','" + Commentaire + "','" +QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + "','" + ProgAnnexe + "','" + ArgsAnnexe + "')";
Création d'une tâche dans la table « encours_taches ». Le numéro de tâche (n° de ligne) est un autoincrement.
INSERT INTO encours_taches (EN_PK_encours, EN_Code_tache, EN_Comment, EN_HeureDebPrevue, EN_HeureFinPrevue, EN_Priorite, EN_PrimKey_blob, EN_NomFicNote, EN_NomProgNote ) VALUES ('" + QString::number(EC_PK) + "','" + QString::number(NumTache) + "','" + CodeTache + "','" + Commentaire + "','" + QString::number(EC_PK) + "','" + CodeTache + "','" + Commentaire + "','" + DateDeb + "','" + DateFin + "','" + Priorite + "','" + PrimKey_blob + "','" + NomFicNote + "','" + NomProgNote + "')";
Il faut donc récupérer la clé de l'encours après création dans la table « encours » avant la création des tâches.
Exemple d'une macro de création de tâche à insérer dans un menu déroulant : cette macro vérifie si le patient est déjà dans la table en cours, si il n'y est pas, il le crée et crée dans la foulée la tâche.
{{\ {{REM=------------------- definir le code de la tache ---------------------- }}\ {{:: VAR_SET(CodeTache,ECG)}}\ {{REM=------------------- definir le commentaire --------------------------- }}\ {{:: VAR_SET(CommentaireTache, {{:: Extract (Observation ,Circonstances :,Heure d'Arrivée SU)}})}}\ {{REM=------------------- definir la priorite ------------------------------ }}\ {{:: VAR_SET(PrioriteTache, 3)}}\ {{REM=------------------- recuperer le code en cours pour ce patient ---------------------- }}\ {{:: VAR_SET(EN_PK_encours, {{:: SQL_SELECT ( ST_encours , EC_PK , WHERE EC_GUIDPatient='{{GUID}}', 1,%,,%0)}})}}\ {{REM=------------------- si code en cours pour ce patient vide ---------------------- }}\ {{REM= inserer le patient }}\ {{:: VAR_SET(NotToDo,{{:: SI(S,{{VAR=EN_PK_encours}},=,,SQL_EXEC,NO_)}})}}\ {{REM=------------------- recuperer le GUID de l'utilisateur en cours ---------------------- }}\ {{:: VAR_SET(GUID_User, {{:: SQL_SELECT ( Personnes , GUID , WHERE Login='{{USER LOGIN MEDECIN}}', 1,%,,%0)}})}}\ {{REM=------------------- requete d'inscription du patient dans la salle d'attente ---------------------- }}\ {{:: {{VAR=NotToDo}}(INSERT INTO ST_encours (EC_CodeBox,EC_NomPatient,EC_PrenomPatient,EC_Medecin,EC_GUIDPatient,EC_Replier,EC_Commentaire,EC_HeureEntree,EC_ProgAnnexe,EC_ArgsAnnexe) VALUES ('A1','{{NOM PATIENT}}','{{PRENOM PATIENT}}','{{VAR=GUID_User}}','{{GUID}}','1','URGENCES MARIGNANE','{{DT=yyyy-MM-dd hh:mm:ss}}','../../drtux/bin/drtux','{{USER LOGIN MEDECIN}}|{{USER LOGIN MEDECIN}}|{{GUID}}|{{SQL_GET_DOSS_PK}}'))}}\ {{:: VAR_SET(EN_PK_encours, {{:: SQL_SELECT ( ST_encours , EC_PK , WHERE EC_GUIDPatient='{{GUID}}', 1,%,,%0)}})}}\ {{REM=------------------- inscrire une tache pour ce patient ---------------------- }}\ {{:: SQL_EXEC(INSERT INTO ST_encours_taches(EN_PK_encours,EN_Code_tache,EN_Comment,EN_HeureDebPrevue,EN_HeureFinPrevue,EN_Priorite)VALUES('{{VAR=EN_PK_encours}}','{{VAR=CodeTache}}','{{VAR=CommentaireTache}}','{{DT=yyyy-MM-dd hh:mm:ss}}','{{:: DATE_CALC({{DT=dd-MM-yyyy hh:mm:ss}},600,+,S,yyyy-MM-dd hh:mm:ss)}}','{{VAR=PrioriteTache}}'))}}\ }}