دليل السوبر أدمن — الإصدار 2.0

تنصيب Hub لصيدلية جديدة

كل الخطوات اللازمة لإيصال صيدلية جديدة إلى مرحلة العمل أوفلاين، مع شرح تفصيلي من توليد Token إلى أول فاتورة تتزامن مع السحابة.

📖 نظرة عامة

Hub هو نسخة محلية من نظام sudanIPS تعمل على جهاز الصيدلية. يتيح:

  • عمل أوفلاين كامل — الإنترنت قطع لأيام؟ لا مشكلة
  • سرعة فائقة — كل البيانات على نفس الجهاز
  • مزامنة تلقائية — كل 30 ثانية مع السحابة
  • أجهزة الصيدلية الأخرى تتصل عبر LAN

🔄 آلية العمل المُختصرة

السوبر أدمن (السحابة)              الصيدلية                       جهاز الصيدلية
       |                              |                                  |
   1. ينشئ صيدلية         →         |                                  |
   2. يولّد token                    |                                  |
   3. ينشئ اشتراك                   |                                  |
   4. ينشئ حساب مدير      →    5. مدير الصيدلية يدخل                   |
                                  6. يضغط "تنزيل الحزمة"                |
                                  7. يستلم ZIP مُخصص    →           8. يفك الضغط
                                                                   9. يشغّل install.bat
                                                                   10. Hub يعمل ✓
الوقت الكلي للتنصيب الكامل: ~30-45 دقيقة • السحابة: 5 دقائق • الصيدلية (تنزيل): 2 دقيقة • PC (تنصيب): 20-30 دقيقة (أبطؤها: تثبيت requirements + sync_bootstrap)

🧰 الاستعدادات

على السحابة (سوبر أدمن)

المتطلبالتفاصيل
حساب superadminعلى https://sudanips.com
بيانات الصيدلية الجديدةالاسم، المدير، الهاتف، المدينة، العنوان
قيمة الاشتراك المتفق عليهاالباقة + المدة + المبلغ + رقم الإيصال

على جهاز الصيدلية (PC)

المتطلبالتفاصيل
Windows 10 / 11 (64-bit)OS قديم لن يعمل
Python 3.8+مع تفعيل "Add to PATH" أثناء التنصيب
صلاحية Administratorللحساب الذي سيُنصِّب
10 GB مساحة فارغةعلى D: (مفضل) أو C:
nssm.exeأداة Windows Services (سيُنزَّل في الخطوات)
اتصال إنترنتوقت التنصيب الأول فقط لجلب البيانات المرجعية
تحذير قبل البدء أبلِغ صيدلية فيرديل (أو أي صيدلية تختبر فيها): سيكون هناك انقطاع قصير (~5 دقائق) أثناء أول تنصيب لـ Hub. اختر وقت هادئ.
المرحلة 1 — على السحابة

1 الإعداد على https://sudanips.com

هذه الخطوات تُنفّذها أنت كسوبر أدمن قبل أن يتمكّن مدير الصيدلية من تنزيل الحزمة.

1.1 إنشاء بيانات الصيدلية

  1. سجّل دخول كـ superadmin على https://sudanips.com/admin-panel/
  2. من الشايدبار اختر "الصيدليات"
  3. اضغط "➕ إضافة صيدلية"
  4. عبّئ البيانات: الاسم، المدير، الهاتف، المدينة، العنوان
  5. اضغط حفظ → سترى الصيدلية في القائمة بـ ID رقمي (مثل #5)
احفظ كود الصيدلية (phcode) ستحتاجه لاحقاً للتأكد من المزامنة. مثلاً: phcode = 5

1.2 توليد Token خاص بالصيدلية

  1. من الشايدبار اختر "صحة المزامنة" (أو افتح /sync/admin/)
  2. ابحث عن الصيدلية الجديدة في الجدول
  3. في عمود "Token" اضغط "توليد Token"
  4. سيظهر Modal فيه Token طويل (64 حرف)
  5. انسخ Token فوراً — لن يظهر مرة أخرى!
  6. أغلق الـ Modal
هذا Token سرّي جداً
  • لا تشاركه عبر واتساب عام، Facebook، إيميل غير مشفّر
  • إن سُرّب: ادخل /sync/admin/ → اضغط "إبطال" → ولّد جديد
  • الصيدلية تحصل عليه تلقائياً عند التنزيل (لا تحتاج إرساله يدوياً!)

1.3 إنشاء اشتراك للصيدلية

  1. من الشايدبار اختر "الاشتراكات والتجديدات" (/admin-panel/subscriptions/)
  2. ابحث عن الصيدلية الجديدة
  3. اضغط "تجديد"
  4. في النافذة المنبثقة:
    • الباقة: أساسي / قياسي / مميّز
    • المدة: 12 شهر (افتراضي)
    • المبلغ: المتفق عليه (مثلاً 500,000 ج.س)
    • مرجع الدفع: رقم الإيصال أو رمز التحويل
    • ملاحظات: اختياري
  5. اضغط "تأكيد التجديد"
الآن الصيدلية: عندها token + اشتراك ساري + JWT مُولَّد. زر التنزيل سيظهر تلقائياً في dashboardها.

1.4 إنشاء حساب مدير الصيدلية

  1. من الشايدبار اختر "المستخدمون"
  2. اضغط "➕ إضافة مستخدم"
  3. عبّئ:
    • اسم المستخدم: مختصر (مثل fairdeal_admin)
    • الاسم الكامل: للعرض
    • المستوى: admin (مدير صيدلية)
    • الصيدلية: اختر الصيدلية من القائمة
    • كلمة المرور: قوية + سهلة عليه يحفظها
  4. اضغط حفظ
أرسل لمدير الصيدلية:
  • اسم المستخدم
  • كلمة المرور (مؤقتة — يُنصح بتغييرها)
  • رابط دخول: https://sudanips.com/login/
لا ترسل Token — سيحصل عليه تلقائياً من dashboardه عند التنزيل.
المرحلة 2 — مدير الصيدلية

2 تنزيل الحزمة من dashboard

هذه الخطوات يُنفّذها مدير الصيدلية من حساب أنشأته له.

2.1 تسجيل الدخول

  1. افتح المتصفح على https://sudanips.com/login/
  2. أدخل اسم المستخدم + كلمة المرور التي أرسلها السوبر أدمن
  3. اضغط دخول → سيتوجه لداش بورد الصيدلية

2.2 تنزيل حزمة التنصيب

في أعلى داش بورد الصيدلية ستظهر بطاقة ذهبية كبيرة:

ما يراه مدير الصيدلية

🎉 جهازك جاهز لتنصيب Hub المحلي!

مدير النظام ولّد Token خاص لصيدليتك. نزّل حزمة التنصيب المُخصصة (Token + كود الصيدلية مُعبّأَين تلقائياً) — كل ما عليك تشغيلها على جهاز الصيدلية.

  1. اضغط زر "تنزيل حزمة التنصيب"
  2. سيُنزَّل ZIP باسم sudanips-hub-{اسم_الصيدلية}-{رقم}.zip (~1 MB)
  3. احفظه في مجلد مؤقت على جهازه
محتوى ZIP • كل ملفات النظام جاهزة • .env مُعبَّأ تلقائياً (Token + رقم الصيدلية) • README.txt بالتعليمات • لا يحتوي مفاتيح حساسة

2.3 ملاحظة: متى يختفي الزر؟

بعد أن يعمل Hub بنجاح ويرسل أول heartbeat (خلال 30-60 ثانية من تشغيله):

  • 🟢 يختفي زر التنزيل من الداش بورد
  • 🟢 يظهر بدلاً منه: "✓ Hub المحلي شغّال (آخر مزامنة قبل X دقيقة)"
  • 🔴 لو Hub توقف لأكثر من 10 دقائق → الزر يعود ليعيد المحاولة
المرحلة 3 — على جهاز الصيدلية

3 التنصيب على PC

هذه أهم مرحلة. يُنفّذها الفنّي/مدير الصيدلية على الجهاز المخصّص لـ Hub.

3.1 المتطلبات قبل البدء

أ) Python 3.8 أو أحدث

  1. افتح https://www.python.org/downloads/
  2. نزّل Python 3.8+ (Windows 64-bit)
  3. شغّل المُنصِّب
  4. ⚠ مهم جداً: ضع علامة على ✓ Add Python to PATH في أول شاشة
  5. اضغط Install Now
  6. للتحقق: افتح Command Prompt واكتب: python --version → يظهر الإصدار

3.2 فك ضغط حزمة الصيدلية

  1. اختر مكان دائم — مفضّل D:\SudanIPSHub\ لأن:
    • D: ينجو من إعادة تثبيت Windows
    • بعيد عن OneDrive (التداخل مع المزامنة)
  2. إذا D: غير متاح، استخدم C:\SudanIPSHub\
  3. افتح ZIP المُنزَّل (sudanips-hub-...zip)
  4. فك الضغط في المسار المختار

3.3 تنزيل nssm.exe

NSSM أداة Windows تحوّل أي برنامج لخدمة. مطلوبة لتشغيل Hub تلقائياً:

  1. افتح https://nssm.cc/download
  2. نزّل "nssm 2.24" (الأحدث)
  3. فك ضغط ZIP الذي نُزِّل
  4. من المجلد win64/ انسخ nssm.exe
  5. الصقه في: D:\SudanIPSHub\hub_windows\ (بجانب install.bat)

3.4 تشغيل install.bat

  1. افتح المجلد D:\SudanIPSHub\hub_windows\
  2. انقر بالزر الأيمن على install.bat
  3. اختر "Run as administrator"
  4. سيظهر مربع UAC → اضغط نعم
  5. سيُفتح Console يطبع 20 خطوة:
    ====== Step 1 ======   التحقق من Administrator
    ====== Step 2 ======   اكتشاف ملفات المشروع
    ====== Step 3 ======   التحقق من Python
    ====== Step 4 ======   التحقق من NSSM
    ====== Step 5 ======   تحديد مسار التنصيب
    ...
    ====== Step 20 ======  عرض ملخص
  6. اتبع الأسئلة:
    • Install path: اضغط Enter للمسار الافتراضي
    • Pharmacy code: مُعبَّأ تلقائياً من .env
    • Sync token: مُعبَّأ تلقائياً من .env
  7. انتظر 5-10 دقائق (الأطول: pip install + sync_bootstrap)
  8. عند الانتهاء سيظهر:
    =============================================
                  INSTALLATION COMPLETED SUCCESSFULLY
    =============================================
      Install path:   D:\SudanIPSHub
      Pharmacy code:  5
      Local URL:      http://localhost:8000
      Network URL:    http://192.168.1.10:8000
    
      Services running:
        * SudanIPSHub
        * SudanIPSHubSync
        * SudanIPSHubWatcher
        * SudanIPS_Hourly_Backup
إذا فشل في خطوة معينة
  • اقرأ رسالة الخطأ — الـ Console واضح
  • أكثر الأسباب: Python غير مُضاف لـ PATH، أو nssm.exe ليس في المكان
  • راجع قسم استكشاف الأخطاء أدناه

4 التحقق من النجاح

على جهاز الصيدلية

  1. افتح المتصفح على http://localhost:8000/ — يظهر الموقع
  2. افتح http://localhost:8000/sync/health/ — يجب أن ترى:
    {"ok": true, "checks": {"db_local": {"ok": true}, "cloud": {"ok": true, ...}, "pending_total": 0}}
  3. سجّل دخول بحساب مدير الصيدلية
  4. افتح صفحة المخزون — يجب أن ترى الأصناف (مستوردة من السحابة)

على السحابة (سوبر أدمن)

  1. افتح https://sudanips.com/sync/admin/
  2. ابحث عن الصيدلية في الجدول
  3. الحالة يجب تكون 🟢 healthy
  4. عمود "آخر heartbeat": أقل من 5 دقائق

على dashboard الصيدلية

عُد لـ dashboard الصيدلية على السحابة. زر التنزيل اختفى وظهر بدلاً منه:

✓ Hub المحلي شغّال
(آخر مزامنة قبل X دقيقة)
مبروك! التنصيب تم بنجاح. الصيدلية الآن جاهزة للعمل. تستطيع البدء بإصدار فواتير، والمزامنة ستعمل تلقائياً في الخلفية كل 30 ثانية.

5 ربط أجهزة الصيدلية الأخرى

إذا كان للصيدلية أجهزة أخرى (كاونتر إضافي، تابلت، جوال) — كلهم على نفس WiFi — يمكنهم استخدام Hub:

  1. على جهاز Hub: افتح Command Prompt واكتب ipconfig
  2. ابحث عن "IPv4 Address" — مثلاً 192.168.1.10
  3. على الجهاز الآخر: افتح المتصفح على http://192.168.1.10:8000/
  4. سجّل دخول بحساب موظف
  5. اذهب لصفحة /sync/status/
  6. في قسم "اتصال المتصفح بـ Hub محلي": أدخل http://192.168.1.10:8000
  7. اضغط حفظ

الآن المتصفح يعتمد على Hub المحلي. حتى لو الإنترنت قطع، سيستمر العمل.

إذا لم تظهر الصفحة من جهاز آخر افتح Windows Firewall على جهاز Hub:
netsh advfirewall firewall add rule name="SudanIPS Hub" dir=in action=allow protocol=TCP localport=8000
(الـ installer يفعل هذا تلقائياً، لكن قد تحتاج تأكيداً يدوياً.)

🛠️ استكشاف الأخطاء

المشكلةالحل
install.bat لا يفتح كـ Admin اضغط Win+R → اكتب cmd → Ctrl+Shift+Enter → cd إلى المجلد → نفّذ install.bat
"Python not installed" تحقق من تنصيب Python مع تفعيل "Add to PATH" — أو أعد التنصيب
"nssm.exe not found" تحقق أن nssm.exe في D:\SudanIPSHub\hub_windows\nssm.exe
الخدمات لا تشتغل افتح Services.msc → ابحث عن SudanIPSHub → ابدأها يدوياً
راجع D:\SudanIPSHub\logs\hub-err.log
cloud.ok = false في /sync/health/ الإنترنت مقطوع، أو Token خاطئ — تحقق من .env
"رمز مزامنة موقوف" (401) السوبر أدمن أبطل Token — يجب توليد جديد + إعادة تنزيل الحزمة
جهاز آخر لا يفتح Hub افتح منفذ 8000 في Windows Firewall (الأمر في الفصل 5)
"اشتراك منتهي — وضع القراءة فقط" افتح dashboard السوبر أدمن → الاشتراكات → "تجديد"
الترخيص لم يصل Hub بعد التجديد انتظر 30-60 ثانية. أو أعد تشغيل خدمة SudanIPSHubSync

سجلات للمراجعة

  • D:\SudanIPSHub\logs\hub.log — السيرفر
  • D:\SudanIPSHub\logs\hub-err.log — أخطاء السيرفر
  • D:\SudanIPSHub\logs\sync.log — المزامنة
  • D:\SudanIPSHub\logs\sync-err.log — أخطاء المزامنة
  • D:\SudanIPSHub\logs\watcher.log — التحديث التلقائي
  • D:\SudanIPSHub\logs\update_watcher.log — تفاصيل التحديث

🔧 الصيانة الدورية

عند تجديد اشتراك صيدلية

  1. افتح /admin-panel/subscriptions/
  2. ابحث عن الصيدلية
  3. اضغط "تجديد"
  4. عبّئ المبلغ + المرجع
  5. اضغط حفظ → JWT جديد يصل Hub خلال 30 ثانية

عند سرقة/تسريب Token

  1. افتح /sync/admin/
  2. اضغط "إبطال" على Token الصيدلية المتأثرة
  3. اضغط "توليد Token" — يُولَّد جديد فوراً
  4. أبلِغ مدير الصيدلية: ادخل dashboard وأعد تنزيل الحزمة
  5. الفنّي يفك ضغط الـ ZIP الجديد على نفس مكان Hub القديم → استبدال .env
  6. أعد تشغيل الخدمات: net stop SudanIPSHubSync & net start SudanIPSHubSync

عند ترقية النظام (تحديث الإصدار)

Hub يفحص update.flag كل 10 دقائق. عندما تضع ZIP جديد في releases/ على السحابة وتُنشئ update.flag، الـ SudanIPSHubWatcher سيقوم تلقائياً بـ:

  1. إيقاف الخدمات
  2. أخذ snapshot من DB (للأمان)
  3. تنزيل وفك الضغط
  4. تشغيل migrate + collectstatic
  5. إعادة تشغيل الخدمات
  6. فحص health — لو فشل، استرجاع snapshot تلقائياً

الجدولة اليومية

  • تنبيهات الاشتراكات: subscription_alerts (cron 9 صباحاً يومياً)
  • تنبيهات Hub الميتة: sync_alerts (cron يومياً)
  • نسخ احتياطية: كل ساعة على Hub (Task Scheduler)

عند مغادرة المُختبَر

قبل أن تُسلِّم الصيدلية للموظفين:

الفحصالمتوقع
الخدمات الـ 3 شغّالةSudanIPSHub, SudanIPSHubSync, SudanIPSHubWatcher = Running
الجدولة الذهبيةSudanIPS_Hourly_Backup = Ready
الاتصال بالسحابة/sync/health/ → cloud.ok = true
البيانات محلياًقائمة الأصناف ~6000 صنف
فاتورة تجريبيةتُحفَظ + تُزامَن خلال 30 ث
لوحة المراقبة/sync/admin/ → الصيدلية healthy 🟢
JWT الترخيصlicense.jwt موجود + sub_end صحيح
أجهزة LANالكاونتر/التابلت يفتح http://<IP>:8000

التنصيب اكتمل

احفظ هذا الدليل (طباعة → PDF) في ملفات الصيدلية. لأي مساعدة: +201555257895 | info@sudanips.com