تحليل الصلاحيات واعتمادياتها المنطقية — وحدة المختبر (LIS)

Moon ERP · تاريخ: 2026-06-02 · مرجع لبناء الأدوار + مواصفة خريطة الاعتماديات
36مجموعة صلاحيات
155صلاحية
111صلاحية لها اعتماديات
8سلاسل عمل (workflows)

الفلسفة: 3 طبقات حماية

  1. الباك-إند يفرض (Enforce): كل endpoint محمي بصلاحيته — الطبقة الأمنية الحقيقية. لو يوزر نادى API من غير صلاحية ⟶ 403.
  2. الفرونت-إند يُخفي (Hide): توجيه *appCan بيخفي الأزرار اللي المستخدم مالوش صلاحيتها (تجربة استخدام نظيفة — مش بس تعطيل).
  3. الاعتماديات تتوسّع (Expand): لما تدي صلاحية، النظام بيجرّ معاها متطلباتها تلقائياً (في الواجهة بعلامة 🔒، وعند الحفظ في الباك-إند كمصدر موثوق). فمحتاجش تحفظ القايمة بنفسك.
أساسية (base) مُطبّقة في الكود حالياً مقترحة (نضيفها)

0 القاعدة العامة + كيف تُقرأ الجداول

القاعدة العامة (مُطبّقة): أي صلاحية lis.<مورد>.<فعل> غير view ⟵ بتتطلّب تلقائياً lis.<مورد>.view.
«ماينفعش تعدّل/تحذف/تضيف من غير ما تقدر تشوف». فمثلاً patients.updatepatients.view — مش محتاج نكتبها صراحة.

الجداول تحت بتعرض الاعتماديات بين الموارد المختلفة (cross-resource) — اللي القاعدة العامة ماتغطيهاش، ومنظّمة حسب سلسلة العمل.

A الاستقبال + الفوترة + التحصيل (Order-to-Cash)

منطق: إنشاء الطلب = اختيار/إضافة مريض + اختيار تحاليل + طبيب + تسعير + فاتورة + تحصيل. صلاحية الطلب لوحدها بتكسر — لازم تجرّ السلسلة كلها.
الصلاحيةتتطلّب (cross-resource)السببالحالة
requests.viewأساس كل شغل الطلباتbase
requests.create patients.view patients.create investigations.view doctors.view price-lists.view packages.view invoices.view invoices.create payments.view payments.create الويزارد بيضيف مريض، يختار تحاليل/باقات وطبيب، يسعّر من قائمة، يعمل فاتورة ويحصّل مُطبّقة
requests.updatepatients.view investigations.viewتعديل الطلب يلمس المريض والتحاليلمُطبّقة
requests.cancel / delete / invalidate / force_deleterequests.view (القاعدة العامة)عامة
invoices.createrequests.viewالفاتورة بتتبني على طلبمُطبّقة
invoices.post / cancelinvoices.view (عامة) — الترحيل للحساباتعامة
payments.createinvoices.viewالتحصيل على فاتورة (وبيفتح وردية الكاشير)مُطبّقة
payments.voidpayments.view (عامة)عامة

B سحب العينات (Collection / Phlebotomy)

الصلاحيةتتطلّبالسببالحالة
samples.viewأساس شاشة التجميعbase
samples.collectrequests.viewالتجميع يبدأ من طلبات اليوممُطبّقة
samples.create / rejectrequests.viewمرتبطة بطلبمُطبّقة
samples.receive / accept / process / ready-for-resultsamples.view (عامة)عامة
samples.send-externalreferrals.view referrals.create external-labs.viewإرسال عينة لمعمل خارجي = إنشاء إحالةمقترحة
samples.receive-externalreferrals.viewاستلام عينة واردة من إحالةمقترحة

C المعالجة + النتائج (Kanban → Results)

الصلاحيةتتطلّبالسببالحالة
results.view · kanban.viewأساس عمل الفنيbase
kanban.managekanban.view samples.view results.viewتحريك الكروت + إدخال نتيجة من الكانبانمقترحة
results.enterrequests.view samples.viewإدخال نتيجة على طلب/عينةجزئياً (نضيف samples.view)
results.validate / approve / retract / correct / retest / return / invalidateresults.view (عامة)عامة
results.release / release_unpaidrequests.view invoices.viewالإفراج يربط بحالة الطلب والدفعمقترحة
result-reports.generateresults.view requests.viewتوليد تقرير نتيجة لطلبمقترحة
machine-results.match / approve / rejectresults.view machines.viewمطابقة نتيجة جهاز بنتيجة تحليلمقترحة

D الإحالات + المعامل الخارجية (Outsourcing)

الصلاحيةتتطلّبالسببالحالة
referrals.viewأساس شاشة الإحالاتbase
referrals.createrequests.view external-labs.viewإنشاء إحالة لمعمل خارجيجزئياً (نضيف external-labs.view)
referrals.receive-resultsresults.viewاستلام نتيجة من المعمل الخارجي تتزامن مع النتائجمقترحة
referrals.generate-invoiceinvoices.view invoices.createتوليد فاتورة الإحالةمقترحة
external-lab-pricing.* · external-lab-normal-ranges.*external-labs.view investigations.viewتسعير/مديات المعمل الخارجي لكل تحليلمقترحة

E البيانات الأساسية / الكتالوج (Master Data)

الصلاحيةتتطلّبالسببالحالة
investigations.createsections.view specimen-types.view investigation-categories.viewالتحليل بيختار قسم + نوع عينة + تصنيفمقترحة
investigations.approve / publish / transitioninvestigations.view (عامة)عامة
packages.createinvestigations.view price-lists.viewالباقة = تحاليل + تسعيرمقترحة
price-lists.createinvestigations.viewقائمة الأسعار = أسعار لكل تحليلمقترحة
insurance-contracts.createprice-lists.view investigations.viewالعقد = تسعير معتمد لكل تحليلمقترحة
doctors.createcommission-rules.viewالطبيب له قواعد عمولةاختياري
sections / specimen-types / categories / visits / machines .create<own>.view (عامة)عامة

F الجودة + المخزون + التأمين (QC / Inventory / Insurance)

الصلاحيةتتطلّبالسببالحالة
qc-results.create / deleteqc-lots.viewنتيجة الجودة مرتبطة بـ Lotمقترحة
reagents.consume / managereagents.view (عامة)عامة
machine-results.create / approvemachines.viewنتائج الأجهزةمقترحة
insurance-invoices.generate / monthly.generateinsurance-contracts.view invoices.viewفواتير التأمين الشهرية تتجمّع من المطالباتمقترحة
ملاحظة بنية: مجموعتا compliance وinsurance-invoices بتستخدموا أسماء بأربع نقاط (مثل lis.compliance.checklists.create)، فالقاعدة العامة (اللي بتشتغل على 3 نقاط) ماتغطّيهاش — محتاجة معالجة خاصة في الكود لو هنطبّق عليها deps.

أدوار جاهزة (Presets) — باقات صلاحيات بضغطة

بدل ما تبني كل دور من الصفر، دي 7 باقات منطقية. كل باقة لما تتفعّل بتجرّ اعتمادياتها تلقائياً (فالمكتوب هنا هو «نقطة البداية» اللي تختارها).

1) موظف استقبال / إدخال طلبات

يفتح طلبات، يضيف مرضى، يحصّل.
requests.createrequests.cancelvisits.createpatients.updatedashboard.view
⟵ بيجرّ تلقائياً: patients.*, investigations.view, doctors.view, price-lists.view, packages.view, invoices.create, payments.create…

2) كاشير

تحصيل وإدارة المدفوعات + وردية الكاشير.
payments.createpayments.voidrequests.viewdashboard.view
⟵ بيجرّ: payments.view, invoices.view · زرّار الوردية بيظهر بـ payments.create.

3) فني سحب عينات (Phlebotomist)

تجميع واستلام ورفض العينات.
samples.collectsamples.receivesamples.acceptsamples.rejectdashboard.view
⟵ بيجرّ: samples.view, requests.view.

4) فني مختبر (إدخال نتائج)

يدخّل النتائج ويشتغل على الكانبان.
results.enterkanban.managesamples.processmachine-results.match
⟵ بيجرّ: results.view, requests.view, samples.view, kanban.view, machines.view.

5) أخصائي / مُعتمِد (Validator)

يراجع ويعتمد النتائج.
results.validateresults.approveresults.correctresults.retest
+ باقة الفني (4). ⟵ بيجرّ: results.view.

6) استشاري / إصدار التقارير (Pathologist)

يفرج عن النتائج ويصدر التقارير.
results.releaseresults.release_unpaidresult-reports.generateresult-reports.publish
⟵ بيجرّ: results.view, requests.view, invoices.view.

7) مدير معمل / أدمن

بيانات أساسية + تقارير + إعدادات + خزن + أدوار.
investigations.createpackages.createprice-lists.createsections.createsettings.managereports.view
⟵ بيجرّ: sections/specimen-types/categories.view, investigations.view…

الحالة الحالية vs المقترح (خطة التنفيذ)

المُطبّق فعلاً في الكود (LisPermissionDependencies.php)

المقترح إضافته (الصفوف مقترحة فوق)

الترتيب المنطقي للعرض في شاشة الأدوار: نرتّب المجموعات حسب سلسلة العمل (استقبال ← تجميع ← معالجة ← اعتماد ← إصدار ← إحالات ← كتالوج ← جودة ← تقارير ← إعدادات) بدل الترتيب الأبجدي — أوضح للأدمن.

إزاي بتظهر في الواجهة (شغّالة دلوقتي)

جاهز أطبّق «المقترح» (توسيع خريطة الاعتماديات + الأدوار الجاهزة + إعادة ترتيب المجموعات) — قول لي «طبّق».