Guide Opérationnel d'Approvisionnement Médical
دليل التجهيزات الطبية في المغرب متوافق مع معايير AMMPS والقانون 84-12.
العودة إلى الموارد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.
مخزون بوسكورة • فاتورة Proforma خلال 24 ساعة • معتمد AMMPS
تجهيز هذا التخصص الطبي وحساب الميزانية في دقيقتين
احصل فوراً على حزمة الأجهزة الموصى بها، محاكاة أقساط التأجير البنكي بالدرهم، وحساب استهلاك المستلزمات للشهر الأول.
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.
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.
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.
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.
اطرح سؤالك التقني أو السريري على قاعدة بيانات MediUnit المعتمدة
مدرب على المواصفات الرسمية، الأسعار الحقيقية بالدرهم، ومخزون بوسكورة وترخيصات وزارة الصحة بالمغرب.
الأسئلة الشائعة
ما هي آجال التوصيل والوثائق القانونية المرفقة في المغرب بخصوص: [object Object]؟▼
توصيل خلال 24 ساعة للدار البيضاء والرباط و48 ساعة لجميع مدن المغرب من مستودعنا في بوسكورة، مع فاتورة قانونية وشهادات CE وتسجيل AMMPS.
Abdelrhafar Naouri
المدير الطبي وخبير التوريدات الصحية
خبرة تزيد عن 15 عاماً في إدارة المؤسسات الصحية وتوريد المعدات الطبية في المغرب. يوجه عبد الغفور الناوري المهنيين في قطاع الصحة لتأمين المعدات المتوافقة مع معايير مديرية الأدوية والصيدلة.
الإجراءات
الخطوة التالية
انتقل من المحتوى إلى التنفيذ: افتح طلب سعر منظم أو استعرض العلامات أو فعّل بوابة العميل لتجميع الطلبات والوثائق.