# Module Ordonnance PrestaShop et validation pharmacien : documentation

> 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.…

- Page: <https://www.datafirefly.com/documentation/prescription-upload-pharmacist-validation-prestashop/>
- Langue: fr
- Mis à jour le: 2026-10-07
- Autres langues: [en](https://www.datafirefly.com/en/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [es](https://www.datafirefly.com/es/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/prescription-upload-pharmacist-validation-prestashop/index.md)
- Index: <https://www.datafirefly.com/documentation/llms.txt>

## 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

1. Dans _Modules > Gestionnaire de modules_, cliquez sur _Installer un module_ et envoyez le ZIP.
2. 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_.
3. 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

1. La fiche produit affiche un badge : ordonnance obligatoire, contrôle pharmacien ou limite par commande.
2. 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.
3. 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.
4. 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.
