Opérations & Sourcing

Guide Opérationnel d'Approvisionnement Médical

Par Abdelrhafar Naouri5 min de lectureMis à jour · novembre 2026

Guide clinique et équipement médical au Maroc conforme AMMPS et Loi 84-12.

Retour aux ressources

1. Google Search Console

### Setup 1. Go to https://search.google.com/search-console 2. Prefer a Domain property for `mediunit.ma` so `https://mediunit.ma`, `https://www.mediunit.ma`, and future protocol/host variants are visible in one place. The current production API workflow uses `sc-domain:mediunit.ma`. 3. If a URL-prefix property is still needed, add `https://mediunit.ma/` and choose URL prefix verification. 4. For URL-prefix meta-tag verification, copy the meta tag verification code (just the `content` value, e.g. `abc123xyz`). 5. Set `NEXT_PUBLIC_GSC_VERIFICATION=abc123xyz` in the storefront Worker build/deploy environment. 6. Redeploy the frontend. 7. Click "Verify" in Search Console. ### App status - The frontend already supports the Search Console meta-tag path through `NEXT_PUBLIC_GSC_VERIFICATION`. - If the value is missing at storefront build/deploy time, the tag is not emitted on the live site. - The April 2026 `Not found (404)` examples for legacy product/category slugs were fixed on 2026-04-30 by canonical slug redirects and sitemap regeneration. ### Post-verification - Submit sitemap: `https://mediunit.ma/sitemap.xml` - Check "Coverage" report for crawl errors - Monitor "Performance" for impressions and clicks - Review "Enhancements" for structured data (Product, FAQ, BreadcrumbList) - Check "Mobile Usability" for mobile issues ### Programmatic API access If you want to inspect Search Console data from the repo: 1. In Google Cloud, enable the Search Console API for the project that will own the credentials. 2. Choose one auth path: - Service account: Give the service-account email access to the Search Console property in Search Console > Settings > Users and permissions. - Installed-app OAuth client: Use the Google account that already has Search Console access, then complete the local OAuth consent flow. 3. Keep the credentials outside the repo when possible, then export one of: - `GOOGLE_SERVICE_ACCOUNT_KEY_PATH=/absolute/path/to/key.json` - `GOOGLE_SERVICE_ACCOUNT_KEY_JSON='{"type":"service_account",...}'` - `GSC_OAUTH_CLIENT_SECRET_PATH=/absolute/path/to/client_secret.json` 4. For installed-app OAuth, run once to get a cached refresh token: - `npm run gsc -- oauth-start --client-secret-path /absolute/path/to/client_secret.json --redirect-uri http://127.0.0.1:53682/oauth2callback --scope https://www.googleapis.com/auth/webmasters` - Complete consent in the browser, then run: - `npm run gsc -- oauth-exchange --client-secret-path /absolute/path/to/client_secret.json --redirect-url 'http://127.0.0.1:53682/oauth2callback?code=...'` - The helper caches OAuth state and tokens under ignored `scratch/google-search-console/` by default with owner-only file permissions. 5. Use the local helper: - `npm run gsc -- sites` - `npm run gsc -- site --site-url sc-domain:mediunit.ma` - `npm run gsc -- sitemaps --site-url sc-domain:mediunit.ma` - `npm run gsc -- inspect --site-url sc-domain:mediunit.ma --inspection-url https://mediunit.ma/fr/` - `npm run gsc -- analytics --site-url sc-domain:mediunit.ma --start-date 2026-03-16 --end-date 2026-04-15 --dimensions page --row-limit 25` Use the `submit-sitemap` command only when the credentials have write access: - `npm run gsc -- submit-sitemap --site-url sc-domain:mediunit.ma --feedpath https://mediunit.ma/sitemap.xml` Search Console caveat: - The public API can submit sitemaps and inspect indexed URL state, but it cannot press the Search Console UI's "Request indexing" or "Validate fix" buttons. Use sitemap submission for broad recrawl signals, and use the UI for manual validation workflows when Google exposes them only in the product.

2. Google Analytics (GA4)

### Setup 1. Go to https://analytics.google.com 2. Create a new GA4 property for mediunit.ma 3. Copy the Measurement ID (e.g. `G-XXXXXXXXXX`) 4. Set `NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXXXXX` in the storefront Worker build/deploy environment 5. Redeploy the frontend ### How it works - Analytics only loads after the user accepts the cookie consent banner - The consent banner stores the choice in localStorage (`mediunit-cookie-consent`) - If the user rejects cookies, no analytics script is loaded - The GA4 script uses `anonymize_ip: true` for GDPR compliance - Client-side route changes are tracked after the initial page load, so pageviews continue to be recorded across App Router navigation

3. Google OAuth (one-click sign-in)

### Setup 1. Go to https://console.cloud.google.com/apis/credentials 2. Create a dedicated OAuth 2.0 Client ID for storefront login (`Web application`) 3. Add authorized JavaScript origins: - `https://mediunit.ma` - `https://mediunit-frontend.pages.dev` if preview login testing is needed - `http://localhost:3000` (for local dev) 4. Copy the Client ID (e.g. `123456789.apps.googleusercontent.com`) 5. Set in the storefront Worker build/deploy environment: - `NEXT_PUBLIC_GOOGLE_CLIENT_ID=123456789.apps.googleusercontent.com` 6. Set in Cloudflare Workers (backend) secrets: - `npx wrangler secret put GOOGLE_OAUTH_CLIENT_ID` - Paste the same Client ID 7. Redeploy both frontend and backend ### How it works - Login page shows "Continue with Google" button - User clicks, Google verifies identity, returns a JWT credential - Frontend sends the credential to `/api/v1/auth/google` - Backend verifies the Google ID token with Google, then checks issuer, audience, verified email, and expiry - If user exists: logs them in with a session cookie - If new user: creates account with `pending` verification, notifies admin - New Google users still need admin verification before they can access the dashboard ### Important note - Do not reuse the Gmail mailer OAuth client unless it is also configured with the storefront JavaScript origins above. - The login client only needs the public Client ID in the app; no client secret is used by the browser sign-in button flow.

4. Google Merchant Center

### Account setup 1. Go to https://merchants.google.com 2. Create a Merchant Center account for "MediUnit" 3. Verify and claim `mediunit.ma` (should be automatic if Search Console is verified) ### Feed configuration 1. Go to Products > Feeds > Add feed 2. Feed name: "MediUnit B2B Catalog - FR" 3. Type: "Scheduled fetch" 4. File URL: `https://mediunit.ma/api/v1/merchant-feed.xml?lang=fr` 5. Fetch schedule: Daily at 03:00 UTC 6. File format: RSS/XML ### App status - The live feed endpoint already exists at `https://mediunit.ma/api/v1/merchant-feed.xml?lang=fr` - Product pages already emit shipping and return structured data that matches the storefront policies ### Shipping settings 1. Go to Settings > Shipping and returns 2. Add shipping service for Morocco: - Service name: "Livraison Standard" - Country: Morocco (MA) - Currency: MAD - Delivery time: 1-3 business days - Free shipping threshold: 1500 MAD - Standard rate: 50 MAD 3. Add return policy: - Return window: 7 days - Return method: by mail - Return shipping: free ### Diagnostics - After the first feed fetch, review the "Diagnostics" tab - Fix any product data quality issues flagged by Google - Monitor "Item issues" weekly for the first month

5. GTIN Enrichment

### Current state Use `docs/reports/latest-merchant-readiness.json` as the live source of truth for Merchant feed identifier coverage. As of the latest checked-in report generated on 2026-04-25: - `1149` products are present in the catalog - `1123` products are present in the Merchant feed - `1148` products have a valid GTIN - `1` product does not have a GTIN yet - `1` product currently relies on brand+MPN fallback - `26` products are excluded from the feed by policy review These numbers are expected to change as catalog migrations and supplier-backed enrichment land. Re-run `npm run audit:merchant` after feed-affecting deployments instead of trusting a hard-coded count in this document. ### What to do GTIN enrichment now falls into two buckets: - Private-label / internal references: These should keep brand+MPN fallback until MediUnit owns verified GS1 identifiers for them. - Third-party supplier references: These should only receive GTINs that are confirmed by the manufacturer, supplier packaging, or an official vendor catalog. To get valid GTINs: **Option A: Register with GS1 Morocco** 1. Contact GS1 Morocco: https://www.gs1ma.org 2. Register for a company prefix (annual fee ~2000-5000 MAD) 3. With the prefix, generate valid EAN-13 barcodes for each product 4. Update product records in D1 with `UPDATE product SET gtin = ? WHERE sku = ?` **Option B: Use manufacturer GTINs** For products sourced from named manufacturers, request GTINs from the supplier. These would be the actual EAN/UPC codes printed on the packaging. **Option C: Keep brand+MPN fallback** Google Merchant Center accepts brand+MPN as an alternative identifier. This is valid and the feed already includes it correctly. The feed will work, but products with real GTINs get better placement in Shopping results. ### Products missing GTIN Do not maintain a hand-written list here anymore. Instead: 1. Run `npm run audit:merchant` 2. Open `docs/reports/latest-merchant-readiness.json` 3. Review `missingGtin`, `invalidGtin`, and `brandMpnFallback` This avoids the document drifting out of sync with the real catalog.

Stock Bouskoura • Devis Proforma ICE < 24h • Certifié AMMPS

⚡ Outil Praticien 22:00

Configurer ce plateau technique en 2 minutes

Accédez instantanément au chiffrage de l'équipement type, à la simulation de leasing bancaire en MAD et au calcul des consommables M1.

Configurer ce plateau technique→
✓ Homologation DMP / AMMPSP (Lois 84-12 & 10-22)✓ Stock Réel Casablanca (Bouskoura)✓ Livraison Nationale 24/48h✓ Devis Proforma ICE & TVA sous 2h

Mode Professionnel & Établissement de Santé : Affichage des repères en MAD HT. Émission de facture Proforma avec ICE/RC/IF sous 2h (compatible crédit bancaire, leasing médical 36–60 mois et appels d'offres), bordereau de traçabilité des lots et certificats CE MDR + AMMPSP inclus.

Option 1 — Devis Proforma Officiel (Desk Devis B2B)

Facture Proforma avec ICE & Dossier Technique AMMPSP

Recevez sous 2 heures votre facture proforma normalisée avec ICE, TVA 20%, délai et garantie pour votre comptabilité, dossier de crédit leasing ou commission d'appel d'offres.

Demander mon Devis Proforma B2B
Option 2 — Fiches Techniques & Ingénieur Biomédical

Assistance Technique & Certificats CE / AMMPSP

Besoin d'une validation technique, d'une vidéo du matériel en stock à Casablanca ou des certificats officiels ministère de la Santé ? Échangez directement avec un ingénieur.

Parler à un Ingénieur sur WhatsApp (15 min)
Option 3 — Installation, Tarifs Carton & Domicile

Stock Immédiat & Expédition 24/48h Maroc

Livraison nationale depuis Bouskoura (Casablanca, Rabat, Marrakech, Fès, Tanger, Agadir). Tarifs dégressifs grossistes pour revendeurs, ou dossier conforme CNSS/CNOPS pour particuliers.

Vérifier le stock & Délais de livraison
Ask MediUnit Clinical AI / Comparateur Express

Posez votre question clinique ou technique à notre moteur certifié

Entraîné sur les fiches techniques réelles, prix exacts en dirhams, stocks à Bouskoura et certificats DMP du Maroc.

Données Produits 100% Vérifiées

Questions fréquentes

Quels sont les délais de livraison et documents fournis au Maroc pour : Guide Opérationnel d'Approvisionnement Médical ?▼

Livraison sous 24h à Casablanca/Rabat et 48h dans tout le Maroc depuis notre entrepôt de Bouskoura. Chaque commande B2B ou B2C est accompagnée d'une facture conforme avec ICE, des certificats CE et de l'enregistrement AMMPS (ex-DMP, Loi 84-12).

Abdelrhafar Naouri

Directeur Clinique & Expert Sourcing Médical

Fort de plus de 15 ans d'expérience dans la gestion d'établissements de santé et le sourcing d'équipements médicaux au Maroc. Abdelrhafar Naouri guide les professionnels de santé dans la conformité de leurs équipements vis-à-vis des normes de la DMP et des standards de qualité internationaux.

Actions

Suite logique

Passez du contenu au flux opérationnel : ouvrez un devis structuré, explorez les marques ou activez le portail client pour centraliser vos commandes et documents.