المركز فيه فروع كتير، وكل محطة عليها نسخة من الـmiddleware. الكلود فيه كل الأجهزة، وكل محطة تفعّل اللي متوصّل عندها بس. ده التحليل الكامل للموديل قبل التنفيذ.
الكلود = سجل واحد لكل الأجهزة (كل الفروع). كل محطة middleware بتسحب القائمة كاملة، لكن بتفعّل محلياً الجهاز/الاتنين المتوصّلين عندها فقط. قرار «التفعيل» قرار محلي لكل محطة — مش في الكلود.
ممكن يكون في أكتر من جهاز من نفس الموديل (٢ × DH36)، وفرع واحد فيه أكتر من جهاز. فلازم كل جهاز يتميّز بهوية فريدة:
| الحقل | الدور | الحالة |
|---|---|---|
id (machine_id) | المعرّف الرقمي الفريد — يتبعت مع كل نتيجة | موجود |
code | كود فريد للجهاز (UNIQUE في DB) — مثلاً DH36-A، DH36-B | موجود + UNIQUE |
name | اسم مقروء يميّز الجهاز للمستخدم | موجود |
branch_id | الفرع التابع له الجهاز | غير موجود — يُضاف |
branch_id للأجهزةدلوقتي الأجهزة مربوطة بالشركة بس (company_id) من غير فرع. عشان تعرف كل جهاز في أي فرع (وتفلتر المزامنة لاحقاً)، نضيف branch_id على الجهاز في الكلود. مش شرط للـMVP لكنه الأنضف للتوسّع.
النسخة الأولى من المزامنة كانت بتفعّل أي جهاز active — ده غلط هنا، لأن كل الأجهزة active في الكلود، فكل محطة كانت هتحاول تفعّل الكل → تعارض بورتات + استقبال غلط.
config.json بتاع المحطة (مش في الكلود) — فكل محطة ليها مجموعتها.كل جهاز مُفعّل على محطة لازم يكون له بورت فريد على المحطة دي. بما إن المحطة بتفعّل ١–٢ بس، التفرّد مطلوب بين المُفعّلين عندها فقط.
connection_settings.port في الكلود = البورت المقترح الافتراضي.عشان نعرف أي محطة شغّالة وأي أجهزة عليها، كل نسخة middleware ليها اسم محطة:
workstation_name (مثلاً «فرع المعادي — محطة 1») يظهر في الواجهة.workstation_key على الجهاز في الكلود، المزامنة تقدر تفعّل تلقائياً أجهزة المحطة دي من غير تدخّل يدوي.| # | الخطوة |
|---|---|
| 1 | المحطة تنادي GET /lis/machines → كل أجهزة الشركة. |
| 2 | تفلتر: interface ∈ {tcp, hl7} + connection_settings.port موجود. |
| 3 | لكل جهاز (بالـmachine_id): تحدّث الاسم/البورت/الدرايفر من الكلود، وتحافظ على enabled المحلي. |
| 4 | الأجهزة الجديدة → enabled = false (المستخدم يفعّلها). |
| 5 | تحفظ config.json وتعيد تشغيل المستمعين للأجهزة المُفعّلة فقط. |
| 6 | الواجهة تعرض: كل الأجهزة (الكل)، مع توجل تفعيل + الحالة الحية لكل واحد. |
| العنصر | الحالة |
|---|---|
| تثبيت Python على المحطة + الـmiddleware شغّال | تم |
| واجهة ويب (config + حالة حية + log) | تم |
| اتصال الكلود (login admin@moonerp.com) + رفع النتائج | تم ومُختبر |
سحب الأجهزة من الكلود (sync) + connection_settings | مبني — يحتاج تصحيح التفعيل |
| تفعيل محلي (preserve enabled، جديد=OFF) | يُعدّل |
| اسم المحطة + إرساله في heartbeat | يُضاف |
| كشف تعارض البورت في الواجهة | يُحسّن |
branch_id على الجهاز (كلود + فورم LIS Machines) | قرار |
workstation_key على الجهاز في الكلود عشان كل محطة تفعّل أجهزتها أوتوماتيك؟branch_id للأجهزة دلوقتي (وفورم LIS Machines يبقى فيه اختيار الفرع)، ولا نأجّله؟dymind_hl7 بس. الأجهزة التانية (Maglumi…) محتاجة درايفرات — نبنيها دلوقتي ولا نركّز على الـCBC أول؟