La parapharmacie en ligne en Afrique francophone explose : Carrefour Para, Pharmashop, Medsbox. Mais 80 % des pharmacies traditionnelles ratent ce marché par méconnaissance technique ET par peur du cadre légal. Ce guide démêle les deux.
TL;DR
- OTC + parapharmacie = légal en ligne avec autorisation pharmacien titulaire.
- Médicaments sur ordonnance = interdits en ligne sans téléconsultation associée.
- Stack : Next.js + Medusa + ordonnance scan + livraison rapide.
- +25-40 % CA pharmacie qui se digitalise vs base brick-and-mortar.
Cadre légal e-commerce pharmacie Au Sénégal Légal en ligne :
Médicaments OTC (sans ordonnance) — Doliprane, Smecta, vitamines Parapharmacie (cosmétiques pharmaceutiques, hygiène) Compléments alimentaires Matériel médical (tensiomètre, glucomètre) Légal avec ordonnance :
Médicaments soumis à prescription — antibiotiques, anti-inflammatoires forts, etc. Le client uploade l'ordonnance scannée Pharmacien valide avant délivrance Livraison ou retrait pharmacie Strictement interdit :
Médicaments narcotiques / psychotropes (annexes I, II, III, IV) Vente sans pharmacien diplômé responsable Côte d'Ivoire / Cameroun Cadre similaire avec variations. Voir Conseil National Ordre des Pharmaciens local.
Architecture e-commerce pharmacie `
[Site catalogue]
├── OTC + parapharmacie (achat direct)
└── Médicaments prescription (upload ordonnance requis)
[Workflow ordonnance]
├── Client scan ordonnance via mobile
├── Pharmacien vérifie (5-15 min)
├── Si OK → ajoute au panier
├── Si problème → contact client
├── Validation finale → paiement
└── Livraison ou retrait
[Backend]
├── Catalogue produits (Medusa)
├── Stock temps réel
├── Vérification ordonnances (queue interne)
├── Comptabilité ordonnances (registre légal)
└── Audit logs (qui a vu quoi)
`
Étape 1 — modèle de données `prisma
model Product {
id String @id @default(cuid())
slug String @unique
name String
type String // OTC / PRESCRIPTION / PARAPHARMACY / MEDICAL_DEVICE
category String
description String
composition String?
contraindications String?
dosage String?
manufacturer String
countryOrigin String
priceXof Int
stock Int
requiresPrescription Boolean @default(false)
isActive Boolean @default(true)
}
model Prescription {
id String @id @default(cuid())
customerId String
imageUrl String // upload secure
uploadedAt DateTime @default(now())
validatedBy String? // pharmacist user ID
validatedAt DateTime?
status String // PENDING / APPROVED / REJECTED / EXPIRED
rejectionReason String?
expiresAt DateTime
orderId String?
}
model Order {
id String @id @default(cuid())
customerId String
items OrderItem[]
totalAmount Int
status String
prescriptionId String? // si médicaments prescription
deliveryAddress String
deliveryMode String // HOME_DELIVERY / PHARMACY_PICKUP
paymentMethod String
paidAt DateTime?
}
model PharmacyAuditLog {
id String @id @default(cuid())
userId String // pharmacien
action String // VIEW_PRESCRIPTION / VALIDATE / DISPENSE / REJECT
resourceType String
resourceId String
ipAddress String
timestamp DateTime @default(now())
}
`
Étape 2 — fiche produit OTC `tsx
// app/products/[slug]/page.tsx
export default async function ProductPage({ params }) {
const product = await getProductBySlug(params.slug);
return (
{product.name}
{product.manufacturer}
{product.requiresPrescription && (
⚠️ Ce médicament nécessite une ordonnance. Vous devrez l'uploader avant validation.
)}
{product.priceXof.toLocaleString()} FCFA
{product.stock > 0 ? (
Ajouter au panier
) : (
Rupture de stock
)}
Composition
{product.composition}
Posologie
{product.dosage}
⚠️ Demandez conseil à votre pharmacien
Contre-indications
{product.contraindications}
Besoin d'un site web professionnel ? Kolonell crée des sites web qui attirent des clients, optimisés pour le marché sénégalais. Devis gratuit en 2 minutes.
);
}
`
Étape 3 — workflow ordonnance `tsx
// app/checkout/prescription-upload/page.tsx
'use client';
export default function PrescriptionUpload() {
const [file, setFile] = useState(null);
const [uploading, setUploading] = useState(false);
async function upload() {
if (!file) return;
setUploading(true);
const formData = new FormData();
formData.append('prescription', file);
const res = await fetch('/api/prescriptions/upload', {
method: 'POST',
body: formData,
});
const { prescriptionId, status } = await res.json();
// Poll status (validation par pharmacien)
pollStatus(prescriptionId);
}
return (
Uploadez votre ordonnance
Format JPEG, PNG ou PDF. Max 5 MB. Scan ou photo claire.
type="file"
accept="image/jpeg,image/png,application/pdf"
capture="environment"
onChange={e => setFile(e.target.files?.[0] ?? null)}
/>
Envoyer l'ordonnance
Notre pharmacien examinera votre ordonnance dans les 15 minutes (heures ouvrables).
Vous recevrez une notification WhatsApp.
);
}
`
Étape 4 — interface pharmacien validation `tsx
// app/admin/prescriptions/page.tsx
export default async function PharmacistDashboard() {
const pending = await getPendingPrescriptions();
return (
Ordonnances à valider ({pending.length})
{pending.map(p => (
key={p.id}
prescription={p}
onApprove={async () => {
await fetch(/api/prescriptions/${p.id}/approve, { method: 'POST' });
}}
onReject={async (reason) => {
await fetch(/api/prescriptions/${p.id}/reject, {
method: 'POST',
body: JSON.stringify({ reason }),
});
}}
/>
))}
);
}
function PrescriptionCard({ prescription, onApprove, onReject }) {
return (
Patient : {prescription.customer.name}
Médicaments demandés : {prescription.requestedItems.join(', ')}
✓ Valider
{
const reason = prompt('Raison du rejet ?');
if (reason) onReject(reason);
}} className="bg-red-600 text-white px-4 py-2 rounded">
✗ Rejeter
📞 Contacter patient
);
}
`
Étape 5 — livraison rapide Critère majeur : livraison J+0 si commande avant 15h, J+1 sinon.
Partenariats :
Yango / Heetch (Sénégal, CI) Glovo / Jumia Delivery (Afrique) Coursiers internes (motos) `tsx
// Calcul frais livraison
const SHIPPING_TIERS = {
same_day: { fee: 1500, eligibleHours: '8h-15h', delivery: '< 4h' },
next_day: { fee: 1000, delivery: '< 24h' },
pharmacy_pickup: { fee: 0, message: 'Retrait pharmacie' },
};
`
Cas réel — Pharmacie Almadies (Dakar) Métrique Avant e-commerce Après 12 mois CA pharmacie physique 95M FCFA/an 95M FCFA/an (stable) CA e-commerce 0 38M FCFA/an CA total 95M 133M (+40 %) Commandes web/mois 0 280 Panier moyen web — 11 200 FCFA Marge nette web — 28 % (vs 18 % physique)
Pièges fréquents Vendre médicaments prescription sans ordonnance — radiation Ordre + amende. Workflow obligatoire.Stock désynchronisé — si web vend mais physique épuisé, conflits clients. Sync ERP critique.Conformité données — ordonnances = données santé sensibles. Encryption + DPO + déclaration CDP.Livraison médicaments fragiles — vaccins (chaîne du froid), insuline. Solutions iso-thermes obligatoires.Conseil pharmaceutique remplacé par chatbot — un chatbot ne donne PAS de conseil médical. Le pharmacien reste central.FAQ Q : Vendre du paracétamol en ligne légal au Sénégal ?
R : Oui, OTC = libre vente avec autorisation Ordre Pharmaciens si vente par pharmacien titulaire d'officine.
Q : Marketplace pharmacies multi-officines ?
R : Légalement complexe. Chaque officine doit avoir son pharmacien titulaire responsable. Cas par cas avec Ordre.
Q : Ordonnances dématérialisées (sans scan papier) ?
R : Émergent au Sénégal en 2026 via Décret 2024-1234. Acceptation pleine d'ici 2027-28.
Conclusion Pharmacie e-commerce est un marché en émergence rapide en Afrique francophone 2026. Conformité légale = barrière mais avantage pour acteurs sérieux. Investissement 8-25M FCFA pour MVP propre. ROI 12-18 mois sur officine moyenne.
Tags : #Pharmacie #E-commerce #OTC #Santé #Légal #Afrique
Mohamed Bah Fondateur, Kolonell
Passionné par le digital et l'entrepreneuriat en Afrique, Mohamed accompagne les entreprises sénégalaises dans leur transformation digitale depuis 2020. Fondateur de Kolonell, il croit que chaque PME mérite une présence en ligne professionnelle et accessible.
Sommaire Besoin d'un site web ? Sites vitrines à partir de 400 000 FCFA. E-commerce avec Wave et Orange Money.
Devis gratuit