prestashop module

Module PrestaShop — Téléversement sécurisé d'ordonnances médicales

Module PrestaShop — Téléversement sécurisé d'ordonnances médicales

Contexte

Un site e-commerce PrestaShop spécialisé dans le matériel médical (bas de contention) propose des produits remboursables par l'Assurance Maladie. Pour obtenir ce remboursement, le client doit transmettre son ordonnance, idéalement au moment de la commande, depuis le front de la boutique. Pas possible nativement dans PrestaShop.

La particularité du projet : les données manipulées (ordonnances, numéros de sécurité sociale) sont des données de santé, particulièrement sensibles. Un simple upload vers un dossier serveur n'était pas envisageable. Il fallait construire un module robuste, sécurisé par défaut, et conforme aux recommandations SÉGUR du numérique en santé.

Démo : upload d'ordonnance depuis le front-office et suivi back-office

Réalisations

  • Upload depuis le front-office : modale d'upload intégrée sur les pages panier et checkout via les hooks PrestaShop (JPEG, PNG, PDF acceptés)
  • Chiffrement AES-256 du numéro de sécurité sociale avant stockage en base : la clé de chiffrement est stockée dans un fichier séparé (var/modules/), jamais en base. Un leak de la base ne compromet pas les numéros de sécu
  • Compression SÉGUR : les images sont automatiquement converties en niveaux de gris et compressées sous 200 Ko via PHP GD (natif PrestaShop), sans dépendance externe
  • Nommage aléatoire des fichiers sur le serveur, répertoire protégé par .htaccess : aucun accès direct possible par URL
  • Liste back-office (Clients > Ordonnances) : composant Grid PrestaShop avec filtres, pagination, actions unitaires (voir le N° de sécu, télécharger, supprimer) et suppression groupée
  • Envoi d'e-mail de confirmation : template de mail natif PrestaShop, déclenchable à l'unité ou en bulk depuis la liste des ordonnances, pour informer le client que son ordonnance a bien été transmise au service
  • Panneau ordonnance sur chaque fiche commande, avec lien vers le client et téléchargement direct
  • Journal d'accès dédié dans var/modules/ : chaque consultation de numéro de sécu, téléchargement ou suppression est tracé, avec rotation automatique à 5 Mo
  • Commande de purge Symfony (awprescription:purge --days=1095 --dry-run) pour la suppression automatique des ordonnances selon la durée de conservation RGPD (3 à 5 ans recommandés)

Difficultés techniques

La compression d'images avec PHP GD devait respecter deux contraintes simultanément : atteindre une taille cible variable (configurable en back-office) tout en convertissant en niveaux de gris. La solution retenue compresse en itérant sur la qualité JPEG jusqu'à passer sous le seuil, ce qui fonctionne pour les JPEG et PNG mais ne s'applique pas aux PDF, stockés tels quels.

Le composant Grid de PrestaShop 8 (basé sur Symfony) est puissant mais un peu complexe : la définition des colonnes, filtres, actions de ligne et bulk actions suit une architecture stricte (Definition, Factory, Data Provider) qui demande de bien connaître l'API interne de PrestaShop pour ne pas sortir du cadre natif.

Résultats

  • Module opérationnel en production, données de santé sécurisées par chiffrement et isolation de la clé
  • Conformité aux recommandations SÉGUR (format, poids, niveaux de gris)
  • Suivi complet des ordonnances depuis le back-office, associées aux commandes correspondantes
  • Notification client par e-mail, déclenchable unitairement ou en masse depuis la liste des ordonnances
  • Piste d'audit complète des accès aux données sensibles, transmissible au DPO en cas d'audit