🧭 دليل عملي: إيه اللي اتغيّر في التصنيع وتعمل إيه

إجابة سؤالك «مش فاهم الفرق إيه» — كل ميزة جديدة: كانت إيه المشكلة، بقت إزاي، وتعمل إيه بالظبط عشان تشوفها.

الخطوة صفر (مهمة): افتح صفحة /app/factory واضغط Ctrl + Shift + R مرة واحدة — ده بيمسح الكاش ويحمّل النسخة الجديدة. من غيره هتفضل شايف الواجهة القديمة وكل اللي تحت ده مش هيبان.
1

1) لوحة قيادة الأمر (Order Cockpit) — شاشة الأمر الواحدة

📍 المسار: /factory/orders/:id (تفتح من قائمة الأوامر /factory/orders بالضغط على رقم أي أمر). الملفات: order-cockpit.component.ts / .html — تستهلك ProductionOrderService (getById, readiness, getCosting, journalEntries, pegging) و BatchService.
قبل: كان أمر الإنتاج مجرد سطر في جدول. علشان تعرف إيه الخطوة اللي بعدها كنت بتلف على شاشات متفرقة (المواد، الإصدار، الصرف، التأكيدات) ومش واضح هو واقف فين ولا ناقصه إيه. بعد: كل أمر بقى له شاشة قيادة كاملة فيها كل حاجة في مكان واحد. الخطوات العملية: (1) ادخل /factory/orders واضغط على رقم الأمر. (2) فوق هتلاقي الـ Stepper — 5 محطات: مخطط ← مُصدَر ← قيد التشغيل ← مكتمل ← مقفول، والمحطة الحالية مميزة والمحطات اللي عدت عليها عليها علامة صح. (3) تحت الـ Stepper في زر واحد كبير «الخطوة التالية» بيتغير حسب حالة الأمر: لو مخطط يبقى «إصدار»، لو مُصدَر يبقى «صرف المواد»، لو قيد التشغيل يبقى «تسجيل تشغيلة» (+ «استلام منتج تام»)، لو مكتمل يبقى «إقفال». انت بس اضغط الزر الكبير ومتفكرش في الحالة. (4) تبويب «المواد» بيوريك إشارات مرور جاهزية كل مادة: أخضر = متاح، أصفر = منتظر توريد، أحمر = ناقص — ومع الناقص بيظهر «تلميح التوريد» (chips) بأرقام أوامر شراء/إنتاج تغطّي النقص تقدر تضغط عليها وتفتحها. (5) لو ضغطت «إصدار» والمواد فيها ناقص، بوابة الإصدار الذكية بتفتح ديالوج بقائمة الناقص وتسألك «تصدر برغم النقص؟» — يعني مش هتصدر أمر مش جاهز بالغلط. (6) تبويب «شجرة التغذية (Pegging)» بيوريك مين بيغذّي الأمر (موردين المكونات) ومين بيستهلك ناتجه (الأوامر الأب) + طلبات البيع المرتبطة، وكل بطاقة تنقلك لقمرة الأمر التاني. باقي التبويبات: نظرة عامة، العمليات، التكلفة (مخطط/فعلي/انحراف)، القيود المحاسبية، التشغيلات (Batches).
✅ النتيجة: النتيجة المتوقعة: تفتح أي أمر وتعرف فورًا هو واقف فين، إيه الزر الواحد اللي تضغطه دلوقتي، وإيه المواد الناقصة قبل ما تصدّر. نصيحة: اعتمد على الزر الكبير الواحد كـ «المرجع» لكل أمر، وقبل أي إصدار افتح تبويب المواد بُص على إشارات المرور — لو فيه أحمر استخدم تلميح التوريد بدل ما تصدّر وتقف بعدين.
2

2) قمرة التخطيط (MRP Cockpit)

📍 المسار: /factory/mrp. الملفات: mrp/mrp-cockpit.component.ts / .html — تستهلك MrpService (getKpis, listRuns, getRun, run, firmPlannedOrder, convertPlannedOrder, convertAll, listMissingParts).
قبل: تخطيط الاحتياجات كان عملية يدوية مبعثرة؛ بتطلّع المقترحات وتحوّل كل واحد لوحده ومش واضح إيه الأهم ولا الترتيب الصح. بعد: شاشة تخطيط واحدة فيها KPIs + مقترحات مرتّبة + تحويل جماعي. الخطوات العملية: (1) ادخل /factory/mrp. فوق هتلاقي 4 بطاقات KPI: الطلب المفتوح من المبيعات، الأوامر المتأخرة (بتولّع أحمر لو فيه)، أوامر ناقصها مواد (بتولّع أحمر)، وأعلى حِمل على مركز شغل خلال 7 أيام. (2) اضغط زر «تشغيل MRP» فوق يمين، اختار مصدر الطلب (مبيعات / MPS / الاثنين معًا) وأفق التخطيط بالأيام، واضغط «تشغيل». التشغيلة الجديدة هتتفتح أوتوماتيك. (3) في تبويب «المقترحات (Planned)» المقترحات مجمّعة بمستوى البوم — الأعمق الأول (Level 2 فوق Level 1 فوق Level 0) لأن المكونات لازم تتعمل/تتشترى قبل المنتج الأب. كل صف فيه نوعه (إنتاج/شراء)، كمية، تاريخ إطلاق، تاريخ استحقاق، حالة. (4) لكل صف زرّين: «تثبيت (Firm)» علشان تثبّت المقترح، و«تحويل (Convert)» علشان يتحوّل لأمر إنتاج فعلي أو طلب شراء. (5) أهم زر: «تحويل الكل» فوق الجدول — بيحوّل كل المقترحات المرشّحة دفعة واحدة وبالترتيب الصح (الأعمق أولًا) ويوريك كام نجح وكام فشل ورسالة كل فشل. (6) تبويب «النواقص (Missing)» بيوريك المواد اللي ناقصة فعليًا، الكمية الناقصة، متى محتاجينها، والمقترح المناسب لتغطيتها، ومربوطة بأي طلب بيع. في كمان تبويب «الاستثناءات» (متأخر/إعادة جدولة) و«شجرة التغذية».
✅ النتيجة: النتيجة المتوقعة: بضغطة واحدة على «تشغيل» تطلّع كل احتياجاتك مرتّبة جاهزة، وبضغطة «تحويل الكل» تحوّلها كلها لأوامر/طلبات بالترتيب السليم من غير ما تعمل حاجة يدوي. نصيحة: ابدأ يومك من بطاقات الـ KPI — لو «أوامر ناقصها مواد» مولّعة أحمر روح تبويب النواقص قبل ما تحوّل، وخلّي «تحويل الكل» عادتك بدل التحويل الفردي إلا لو عايز تستثني صف معيّن.
3

3) الترمينال (شاشة لمس المشغّل) — الهوية + الحالة الفارغة الذكية

📍 المسار: /factory/terminal (صلاحية production.shopfloor.operate). الملفات: terminal/terminal.component.ts / .html — تستهلك ShopFloorService (queue, start, hold, resume, done) + selectUser من الـ store + ProductionCenterService.
قبل: شاشة المشغّل كانت قائمة عمليات بدون هوية واضحة، ولو اخترت مركز شغل مفيهوش شغل كانت بتطلّع فاضية كده وخلاص بدون ما تعرف هل في غلط ولا فعلًا مفيش. بعد: (1) فوق الشاشة على اليمين ظهرت «بطاقة هوية المشغّل» باسم المستخدم اللي عامل دخول — علشان كل واحد يبان شغّال على أنهي ترمينال. (2) تختار مركز الشغل من القائمة (اختيارك بيتحفظ في المتصفح فبيفضل محفوظ بعد إعادة الفتح). (3) كل عملية بتظهر ككارت كبير لمس بأزرار ضخمة: «بدء» (Start) → «تم» (Done) / «إيقاف مؤقت» (Hold) → «استئناف» (Resume). الكروت ملوّنة بحالتها. (4) زر «تم» بيفتح ديالوج كيباد كبير: الكمية لكل درجة (Grade)، الهالك + سببه، وساعات العمالة/الماكينة اختياري. لما تأكّد، الأمر بيتقدّم أوتوماتيك للعملية التالية (وبيقولك «العملية التالية جاهزة») أو يكمّل الأمر. (5) الحالة الفارغة الذكية: لو اخترت مركز شغل مفيهوش طابور، بدل رسالة فاضية بتظهر رسالة «لا يوجد عمل في مركز كذا» + زر «عرض كل المراكز» يشيل الفلتر فورًا، فمتفضلش حاير. الشاشة كمان بتعمل تحديث أوتوماتيك كل 30 ثانية وفيه علامة «آخر تحديث» / «بيانات قديمة» علشان تعرف الطابور حديث.
✅ النتيجة: النتيجة المتوقعة: المشغّل يعرف هو مين وشغّال على أنهي مركز، ولو الطابور فاضي يعرف إنها مفيش شغل (مش عطل) ويرجع لكل المراكز بضغطة. نصيحة: درّب المشغّلين يستخدموا أزرار بدء/تم/إيقاف فقط ويسجّلوا الهالك وسببه في ديالوج «تم» — ده اللي بيغذّي شاشة الانحرافات صح. لو الكارت ظهر «منتظر» معناه العملية اللي قبلها لسه ماخلصتش.
4

4) الانحرافات (Variances) — مسار الإقرار ← التحقيق ← الإغلاق

📍 المسار: /factory/variances (صلاحية production.costing). الملفات: variances/variances.component.ts / .html — تستهلك VarianceService (listAll, updateStatus) + UserService لأسماء المالكين.
قبل: انحرافات التكلفة كانت أرقام بتتعرض من غير ما حد يتابعها — تشوف إن في فرق وخلاص، مفيش مين مسؤول ولا إثبات إن اتعالج. بعد: الانحراف بقى له دورة عمل واضحة بحالات: مفتوح ← تم الإقرار (acknowledged) ← قيد التحقيق (investigating) ← مغلق (closed). الخطوات العملية: (1) ادخل /factory/variances. فوق 4 بطاقات: إجمالي غير الموات (خسارة)، إجمالي الموات (وفر)، الصافي، وعدد المطلوب التحقيق فيه. (2) تحتها رسم Pareto بيرتّب أنواع الانحراف (MPV/MUV/LRV...) بالأكبر خسارة الأول — علشان تعرف مين أكبر مسبّب تكلفة (قاعدة 80/20). (3) فلاتر تصنيف (الكل/طبيعي/مراقبة/تحقيق) فوق الجدول. (4) في الجدول لكل صف عمود «إجراءات» بزر قائمة: حسب حالة الصف بيوريك الانتقالات المسموحة بس — «إقرار» لو مفتوح، «بدء تحقيق»، أو «إغلاق». (5) لما تختار «إغلاق» بيفتح ديالوج لازم تكتب فيه «ملاحظة المعالجة» (إجباري) وتقدر تعيّن «المالك» (موظف مسؤول) — ومن غير الملاحظة الزر مقفول. الصف بيتحدّث فورًا بالحالة الجديدة واسم المالك.
✅ النتيجة: النتيجة المتوقعة: كل انحراف مهم بيمشي في مسار محاسبة واضح بمسؤول وملاحظة معالجة، فمفيش انحراف بيضيع. نصيحة: ابدأ من رسم الـ Pareto — اشتغل على أول 1-2 نوع لأنهم بيمثّلوا معظم الخسارة، عيّن مالك واكتب ملاحظة معالجة حقيقية عند الإغلاق علشان يبقى عندك سجل تدقيق. ركّز على المصنّفة «تحقيق» أولًا.
5

5) الأدوار — كل موظف يرى شاشاته فقط

📍 التحكم في: factory-layout/factory-layout.component.ts (تفلتر navGroups بـ PermissionService.hasAnyPermission) + production-standalone.routes.ts (كل مسار عليه permissionGuard بصلاحية محددة). أمثلة الصلاحيات: production.orders, production.mrp, production.costing, production.shopfloor.operate, production.shopfloor.supervise, production.boms, production.routings, production.centers, production.confirmations, production.reports.
قبل: كل الشاشات كانت بتظهر للكل بدون تمييز، فالمشغّل كان بيشوف شاشات تخطيط ومحاسبة مالهاش لازمة ليه وده بيلخبط. بعد: قائمة المصنع (السايدبار) بتتفلتر أوتوماتيك حسب صلاحيات الموظف — أي شاشة الموظف ملوش صلاحيتها مش بتظهر له أصلًا، وكمان لو حاول يفتح رابطها بييجي permissionGuard يمنعه. الخطوات العملية (للأدمن): (1) روح إدارة الأدوار/الصلاحيات وأعطِ كل دور الصلاحيات اللي تخصّه فقط: المشغّل ← production.shopfloor.operate (يشوف الترمينال بس)؛ المشرف ← يضيف production.shopfloor.supervise (شاشة البورد الحية)؛ المخطّط ← production.mrp (قمرة التخطيط + MPS + CRP)؛ المحاسب/مراقب التكلفة ← production.costing (الانحرافات + التكاليف القياسية)؛ مدير الإنتاج ← production.orders + production.confirmations + production.reports. (2) سجّل دخول بكل دور وتأكّد إن القائمة بتوريله شاشاته بس. ملاحظة: السوبر أدمن (بصلاحيات فاضية) بيشوف كل حاجة.
✅ النتيجة: النتيجة المتوقعة: كل موظف يفتح المصنع فيلاقي قائمة نضيفة فيها شاشاته اللي يشتغل عليها بس، فمفيش تشتيت ولا دخول لشاشات حساسة. نصيحة: امنح أقل صلاحية تكفي الدور (least privilege): المشغّل مايحتاجش غير الترمينال، والمحاسب مايحتاجش الترمينال. راجع الأدوار دوريًا وامسح أي صلاحية production.* زيادة عن الحاجة.

جرّب تجربة الأدوار بنفسك