🖥️

واجهة Angular وأنماط البناء (Angular Frontend Architecture)

واجهة Moon ERP مبنية على Angular 21 بمكوّنات مستقلة (Standalone Components) مع إدارة حالة NgRx 21 ومكتبة PrimeNG 21، وبدعم كامل للغة العربية (RTL) كلغة أولى. وحدة المختبر LIS تعمل إنتاجياً داخل هذه الواجهة بنمطين: مدمج داخل النظام (/core/lis/*) ومستقل بشاشة كاملة للمختبر (/lab/*)، وهو ما يشكّل المخطط المرجعي الجاهز لبناء واجهة HIS/OBGY.

80+مجلد ميزة في src/app/features/
65+خدمة API في core/services/
60خدمة خاصة بالمختبر lis-*.service.ts
27+شريحة حالة NgRx في core/store/
7,494مفتاح ترجمة في en.json / ar.json

التنظيم العام للمشروع

يتبع المشروع في /home/moonui/public_html/moon-erp/src/app فصلاً صارماً بين الطبقات:

نمط تدفق البيانات موحّد في كل شاشات CRUD: Component → Action → Effect → Service → API → Reducer → Selector مع شكل حالة ثابت لكل شريحة (loading / saving / error / loaded / meta) باستخدام @ngrx/entity.

شاشات المختبر LIS — النموذج العملي الناضج

وحدة LIS تضم أكثر من 60 شاشة في features/lis/ وتعمل بثلاثة سياقات توجيه: مدمج، ومستقل عبر lis-standalone.routes.ts بتخطيط خاص LisLayoutComponent، وبوابة عامة للمرضى برابط رمزي (/p/:token) دون تسجيل دخول. أهم الشاشات التشغيلية:

الشاشةالملفالحجم (سطر)الدور التشغيلي
قائمة عمل الأقسامdept-worklist/dept-worklist.component.ts2,848إدخال النتائج لكل قسم (رقمي/نصي/اختياري/معادلة) مع أعلام LL/HH/L/H/N
قائمة عمل الاعتمادvalidation-worklist/validation-worklist.component.ts3,727مراجعة واعتماد وإطلاق النتائج (validate / approve / release / print)
قائمة عمل السحبcollection-worklist/collection-worklist.component.ts1,646سحب العينات بالباركود وتجميع الأنابيب — تحلّ محل شاشة العينات القديمة على مسار /lab/samples
الاستقبالreception/reception.component.ts574استلام العينات في المعمل (specimen receiving)
لوحة المتابعةboard/lis-board.component.ts315لوحة مراحل (6 مراحل) لكل طلب/قسم مع زمن الانتظار
كانبان (متقاعد)kanban/lis-kanban.component.ts1,490أُحيل للتقاعد في النمط المستقل — المسار /lab/kanban يعيد التوجيه إلى worklist
معالج الطلبات v2request-wizard-v2/معالج من 4 خطوات: المريض ← الفحوصات ← الفوترة (فرد/تأمين/معمل خارجي) ← الدفع

درس معماري مهم: المختبر تحوّل من نموذج الكانبان إلى نموذج Worklist مدفوع من الخادم عبر core/services/lis-worklist.service.ts (عقد WorklistCard / WorklistRow مع علم تشغيل USE_SERVER_WORKLIST) — أي أن منطق ترتيب العمل انتقل للباك-إند وبقيت الواجهة عارضاً ومنفّذاً للإجراءات.

الصلاحيات والحماية

  1. authGuard — يتحقق من الجلسة ويعيد تحميل الملف الشخصي من /auth/me قبل السماح بأي مسار (مع معالجة الجلسات الملغاة).
  2. permissionGuard — يقرأ بادئات الصلاحيات من بيانات المسار مثل data: { permissions: ['lis.results'] } بمطابقة على حدود النقطة، مع تجاوز كامل لدور super-admin.
  3. moduleGuard — يمنع الوصول لمسارات الوحدات المعطّلة من شاشة module-activation.
  4. على مستوى الأزرار: التوجيه الهيكلي *appCan في shared/directives/can.directive.ts يخفي أي زر لا يملك المستخدم صلاحيته — حماية دفاعية والباك-إند يظل الحكم النهائي.

الترجمة والطباعة

ما يجب أن تلتزم به واجهة HIS/OBGY الجديدة