Module Ordonnance PrestaShop et validation pharmacien : documentation
Installer le module, définir les produits réglementés, configurer le workflow et traiter les ordonnances, messages et QR codes dans le back-office.
Principe de fonctionnement
Vous définissez quels produits sont réglementés. Quand un client en met un dans son panier, un bloc « Ordonnance et validation pharmacien » apparaît sous le panier. Le client y dépose son ordonnance, puis commande. La commande reste au statut En attente de validation pharmacien jusqu’à la décision du pharmacien dans le back-office. Les documents sont chiffrés sur votre serveur et ne sont jamais servis directement par le serveur web.
- Ordonnance obligatoire : un document doit être déposé avant de commander.
- Contrôle pharmacien : pas de document exigé, mais la commande est vérifiée avant expédition.
- Vente libre : aucune validation, seule la quantité maximale par commande s’applique. Sur un produit, ce mode l’exclut aussi de la règle de sa catégorie.
En France, la vente en ligne de médicaments soumis à prescription est interdite, et une ordonnance contient des données de santé qui doivent être hébergées chez un hébergeur certifié HDS. Le module fournit les outils techniques, l’autorisation de vente et l’hébergement restent sous votre responsabilité.
Prérequis
- PrestaShop 8.0 à 9.x.
- Extension PHP
openssl(vérifiée à l’installation). - Une tâche cron horaire, recommandée pour les relances, alertes et la purge.
- HTTPS sur la boutique.
Installation
- Dans Modules > Gestionnaire de modules, cliquez sur Installer un module et envoyez le ZIP.
- Le module crée le statut de commande En attente de validation pharmacien, le dossier de stockage chiffré et deux menus : Commandes > Ordonnances et Commandes > Règles d’ordonnance.
- Ouvrez la configuration du module : le panneau État indique si le dossier de stockage est prêt et s’il est protégé contre l’accès direct.
Définir les produits réglementés
Menu Commandes > Règles d’ordonnance, bouton Ajouter une règle :
- S’applique à : un produit (recherche par nom, référence, EAN ou ID) ou une catégorie avec ses sous-catégories.
- Mode : ordonnance obligatoire, contrôle pharmacien ou vente libre.
- Quantité maximale par commande : par produit, toutes déclinaisons confondues. Au-delà, le passage en caisse est bloqué. 0 signifie sans limite.
Une règle produit l’emporte toujours sur les règles de catégorie. Si un produit appartient à plusieurs catégories réglementées, « Ordonnance obligatoire » l’emporte sur « Contrôle pharmacien », et la plus petite quantité maximale s’applique.
La règle d’un produit se règle aussi depuis l’onglet Modules de sa fiche produit. Elle est enregistrée immédiatement, sans enregistrer le produit.
Réglages du module
Workflow de validation
- Après la commande (par défaut) : le client paie, puis la commande attend la validation. Un refus implique de rembourser le client depuis la page de la commande.
- Avant le paiement : le client connecté envoie son panier au pharmacien et ne peut payer qu’après validation. Si le panier change après la validation, il doit être renvoyé.
Documents
- Types acceptés : PDF, JPEG, PNG, WebP. Le type réel est contrôlé par la signature du fichier, et les PDF contenant du JavaScript, des actions de lancement ou des pièces jointes sont refusés.
- Taille maximale (8 Mo par défaut) et nombre maximal de fichiers par demande (5 par défaut).
- Réutilisation des ordonnances validées : un client connecté peut joindre une ordonnance déjà validée à un nouveau panier jusqu’à sa date de validité.
- Validité par défaut (90 jours) : préremplie dans le formulaire de validation.
- Texte de consentement, par langue : le client doit cocher la case avant chaque envoi.
Questionnaire de santé
Activé, il demande le patient (soi ou une autre personne), l’âge, le poids, la taille, le sexe, la grossesse ou l’allaitement, les allergies, les traitements en cours et les antécédents. Le passage en caisse attend les réponses. Elles sont chiffrées et préremplies à la commande suivante pour un client connecté.
Relances et délais
- Relance du client (2 jours) : email de rappel quand le client n’a pas répondu à une demande d’informations.
- Annulation automatique (10 jours) : la demande est refusée avec le motif « Pas de réponse du client ».
- Alerte pharmacien (24 heures) : récapitulatif des demandes et des messages clients qui attendent au-delà du délai.
0 désactive chaque fonction.
Notifications et statuts
- Emails de notification du pharmacien : une ou plusieurs adresses séparées par des virgules.
- Statut des commandes refusées : Annulé par défaut, ce qui remet les produits en stock.
- Réponses enregistrées : une par ligne et par langue, insérables en un clic dans un message ou une décision.
Stockage et conservation
- Dossier de stockage :
var/dfprescription/par défaut. Un chemin absolu hors de la racine web est recommandé. Il ne peut plus être changé une fois des documents stockés. - Conservation des documents (365 jours) : les fichiers sont supprimés après ce délai, sauf pour les demandes encore en cours et les ordonnances encore valides. Les métadonnées et le journal d’audit sont conservés.
Parcours client
- La fiche produit affiche un badge : ordonnance obligatoire, contrôle pharmacien ou limite par commande.
- Dans le panier, le client dépose ses documents par glisser-déposer ou prend une photo avec son téléphone, coche le consentement, remplit le questionnaire si besoin et peut laisser une note au pharmacien.
- Tant qu’il manque un élément, les liens vers la commande sont désactivés et l’accès direct à la page de commande renvoie au panier avec un message.
- Après la commande, la page de confirmation, le détail de commande et la page Mes ordonnances du compte affichent le statut de la demande. Les invités suivent leur demande par un lien privé envoyé par email.
Traiter une demande
Menu Commandes > Ordonnances. La liste affiche le statut, le nombre de documents et les messages non lus, avec des compteurs en haut de page. La fiche d’une demande regroupe :
- les documents dans une visionneuse (PDF intégré, images avec rotation et zoom), avec ouverture et téléchargement ;
- le client, la ou les commandes, les produits concernés et leur règle ;
- les réponses au questionnaire de santé, les points à risque étant mis en évidence ;
- le fil de messages avec le client ;
- le formulaire de décision et le journal d’audit.
Décider
- Valider : fixez la date de validité de l’ordonnance. La commande reprend le statut qu’elle avait avant la mise en attente, par exemple Paiement accepté.
- Demander des informations : le message est obligatoire. Le client reçoit un email et répond depuis son compte ou le lien privé.
- Refuser : choisissez un motif. La commande passe au statut configuré pour les refus.
Le nom du pharmacien et son numéro RPPS sont enregistrés avec chaque décision et mémorisés pour l’employé. Une note interne, jamais visible du client, peut être ajoutée à chaque demande.
Si un module de paiement change le statut d’une commande en attente (webhook de paiement par exemple), le module mémorise ce statut et remet la commande en attente. Un changement fait à la main par un employé est respecté et tracé dans le journal.
Messagerie client ↔ pharmacien
Chaque demande a son fil de messages, chiffré comme les documents. Le pharmacien répond depuis la fiche de la demande, en insérant au besoin une réponse enregistrée. Le client reçoit le texte par email et répond depuis Mes ordonnances. Le pharmacien est prévenu par un email qui ne contient pas le message, seulement un lien vers la demande. Le client est limité à 20 messages par jour et par demande.
QR code des ordonnances numériques
À l’ouverture d’une demande, le QR code de chaque document est lu dans votre navigateur, sur les images et sur les 3 premières pages des PDF. Le bloc QR code de l’ordonnance numérique affiche :
- l’identifiant détecté et le contenu complet du QR code ;
- une alerte si la même ordonnance a déjà été envoyée dans une autre demande de la boutique, avec la mention « autre client » le cas échéant ;
- un champ pour saisir le numéro à la main si le QR code est illisible, et un bouton pour relancer la lecture.
Seul un logiciel d’officine certifié, utilisé avec la carte CPS, peut interroger le téléservice de l’Assurance Maladie. Le module prépare la vérification et détecte les réutilisations, le pharmacien contrôle ensuite l’identifiant dans son logiciel.
Tâche planifiée
La configuration du module affiche l’URL du cron. Appelez-la toutes les heures :
0 * * * * curl -s "https://votre-boutique.com/module/dfprescription/cron?key=VOTRE_CLE" >/dev/null
Elle envoie les relances et les alertes, annule les demandes sans réponse et purge les fichiers expirés. Sans cron, ces tâches s’exécutent au plus une fois par heure à l’ouverture de la page Ordonnances.
Sécurité et conformité
- Chiffrement AES-256-GCM des documents, des réponses au questionnaire, des messages et du contenu des QR codes. La clé est dérivée d’un secret propre au module et du
_COOKIE_KEY_de la boutique. - Journal d’audit de chaque dépôt, consultation, téléchargement, message et décision, avec l’adresse IP.
- Export CSV du registre depuis Commandes > Ordonnances (bouton Exporter le registre), sans documents ni réponses de santé.
- Compatible avec le module RGPD officiel : l’export des données client inclut les demandes, et la suppression d’un client efface ses documents et messages.
Lors d’une migration, conservez le _COOKIE_KEY_ de la boutique et la valeur de configuration DFPRESCRIPTION_KEY. Sans l’un des deux, les documents stockés ne peuvent plus être déchiffrés.
Dépannage
Le panneau État indique que le dossier est accessible depuis le web
Les fichiers restent chiffrés, mais sur nginx le fichier .htaccess est ignoré. Ajoutez une règle deny all sur le dossier ou choisissez un dossier hors de la racine web.
Le client ne voit pas le bloc ordonnance
Vérifiez qu’une règle couvre le produit ou l’une de ses catégories, et que votre thème affiche le hook displayShoppingCartFooter sur la page panier.
Le QR code n’est pas lu
Le QR code doit être net et entièrement visible. Utilisez Relire après avoir reçu une meilleure photo, ou saisissez le numéro d’ordonnance à la main.
Désinstallation
La désinstallation supprime définitivement tous les documents stockés et les tables du module. Le statut de commande dédié est masqué mais conservé pour l’historique des commandes. Exportez le registre avant de désinstaller si vous devez en garder une trace.