DEV PREVIEW — fm461
قائمة عملية بما لم يكتمل بعد لكي ننتقل من "صيدلية واحدة" إلى منصّة متعددة الصيدليات. هذه الصفحة للتطوير فقط، وسيُعاد توزيع محتواها على لوحات المالك/المنصّة عند الإطلاق.
pharmacyId على أي مستند.warehouse, pharmacist, admin, owner.pharmacyId).driver.html لكنها لا تفلتر حسب driverId.warehouse / pharmacist / admin / owner.platform_owner (فوق owner)، pharmacy_manager، driver، cashier.pharmacyId (المنتجات، الدفعات، الطلبات، السائقين، الموظفين، الإعدادات).req.access.pharmacyId وكل قراءة/كتابة تتحقق من المساواة.platform/
pharmacies/{pharmacyId} ← السجل الرئيسي للصيدلية
name, brandLogo, sfdaLicenseNumber, address,
status: 'trial'|'active'|'suspended'|'cancelled',
subscription: { plan, renewsAt, billingEmail },
ownerUid, createdAt, createdBy, settings.{...}
pharmacy_users/{uid} ← ربط مستخدم بصيدلية + دور
pharmacyId, role, email, displayName, status,
grantedAt, grantedBy
pharmacy_invites/{inviteId} ← دعوات قيد القبول
pharmacyId, email, role, token, expiresAt
platform_admins/{uid} ← Platform Owner allowlist
email, addedAt
per-pharmacy collections (every doc carries pharmacyId at top level):
pharmacy_warehouse_products/{sku} ← pharmacyId
pharmacy_warehouse_batches/{batchId} ← pharmacyId
pharmacy_orders/{orderId} ← pharmacyId
pharmacy_drivers/{driverId} ← pharmacyId
pharmacy_delivery_zones/{zoneId} ← pharmacyId
pharmacy_payment_configs/{pharmacyId} ← single doc per pharmacy
pharmacy_storefront_settings/{pharmacyId} ← single doc per pharmacy
pharmacy_audit_log/{eventId} ← pharmacyId
| الدور | إنشاء صيدلية | إدارة موظفي صيدلية | تعديل المنتجات/الدفعات | اعتماد للسوق | إسناد سائق | عرض طلبات السائق نفسه | الوصول لصيدليات أخرى |
|---|---|---|---|---|---|---|---|
| platform_owner | ✓ | ✓ (دعم) | ✓ (دعم) | ✓ (دعم) | ✓ | — | ✓ كل الصيدليات |
| pharmacy_owner | — | ✓ صيدليته فقط | ✓ | ✓ | ✓ | — | ✗ |
| pharmacy_manager | — | قراءة فقط | ✓ | ✓ | ✓ | — | ✗ |
| pharmacist | — | — | ✓ (سعر/كمية) | — | — | — | ✗ |
| warehouse | — | — | ✓ (دفعات) | — | ✓ | — | ✗ |
| cashier | — | — | — | — | — | — | ✗ |
| driver | — | — | — | — | — | ✓ المسنَدة فقط | ✗ |
POST /api/v2/platform/pharmacies — create pharmacyGET /api/v2/platform/pharmacies — listPATCH /api/v2/platform/pharmacies/{id} — enable/disable, subscriptionPOST /api/v2/platform/pharmacies/{id}/owner — assign owner by email/inviteGET /api/v2/platform/health — global KPIsGET/POST/PATCH/DELETE /api/v2/pharmacy/staffGET/POST/PATCH/DELETE /api/v2/pharmacy/driversPOST /api/v2/pharmacy/drivers/{id}/portal-link — mint signed linkGET/PUT /api/v2/pharmacy/delivery-zonesGET/PUT /api/v2/pharmacy/payment-configPOST /api/v2/pharmacy/storefront/open / /closeGET /api/v2/driver/orders — filter by driverIdPOST /api/v2/driver/orders/{id}/status — accepted / picked_up / on_the_way / delivered / failedPOST /api/v2/pharmacy/orders/{id}/assign-driver — body: { driverId, channel: 'portal'|'whatsapp'|'copy' }/v2/platform/dashboard.html — لوحة مالك المنصّة/v2/platform/pharmacies.html — قائمة الصيدليات + بطاقات اشتراك/v2/platform/pharmacy-edit.html — تفاصيل صيدلية واحدة/v2/pharmacy/owner-dashboard.html — لوحة مالك الصيدلية (موجودة لكن لكلينيك، نحتاج نسخة pharmacy)/v2/pharmacy/staff.html — إدارة الموظفين/v2/pharmacy/drivers.html — إدارة السائقين + إنشاء روابط واتساب/v2/pharmacy/delivery-zones.html — مناطق التوصيل/v2/pharmacy/payment-config.html — إعدادات Moyasar/كاش/تحويل لكل صيدلية/v2/pharmacy/driver.html — موجودة، تحتاج فلتر driverId + شاشة تحديث الحالةPHM-MAKKAH-01) كمستند في platform/pharmacies بنفس البيانات الحالية.pharmacyId='PHM-MAKKAH-01' لكل مستند موجود في:
pharmacy_warehouse_products, pharmacy_warehouse_batches, pharmacy_orders, pharmacy_audit_log.pharmacy/warehouse-images/... تظل كما هي (يضاف pharmacyId ضمن metadata).req.access.pharmacyId من pharmacy_users/{uid} أو من claim مخصّص.where('pharmacyId', '==', req.access.pharmacyId). Platform owner يتجاوز الفلتر.pharmacy_users, pharmacy_drivers, pharmacy_delivery_zones, pharmacy_payment_configs, pharmacy_storefront_settings, platform_admins.platform/pharmacies + pharmacy_users.requirePharmacyContext().pharmacyId='PHM-MAKKAH-01'.platform_owner./v2/platform/pharmacies.html./v2/pharmacy/staff.html ودعوات الموظفين بالإيميل.pharmacy_drivers + صفحة إدارة.driver.html: فلتر driverId + شاشة الحالة.pharmacyId على كل مستند.platform_owner فقط أو إزالتها.pharmacy_payment_configs/{pharmacyId} يحتفظ بمراجع لـ Moyasar keys؛ مفاتيح Vercel العامّة تبقى كاحتياط للصيدلية الأم.platform_owner.pharmacyId يُضاف كحقل اختياري أولاً ثم يصبح إجبارياً بعد ترحيل البيانات.DEV PREVIEW · fm461 · سيتم تعديل/إزالة هذه الصفحة بعد اكتمال المرحلة D.