موديول التصنيع ليس جزيرة منعزلة؛ فهو يستهلك الطلب من المبيعات، ويأخذ معدلات الأجور من الموارد البشرية لتسعير تأكيدات العمالة، ويربط فحوص الجودة وتقارير عدم المطابقة بموديول الجودة القائم بدلاً من بناء جداول جودة داخلية، ويعامل مراكز العمل والقوالب كأصول قابلة للصيانة في موديول الصيانة. أما الواجهة الأمامية فتتبع نمطاً موحَّداً من المسارات الكسولة وحُرّاس الصلاحيات ومكوّنات الجداول والحوارات والطباعة المشتركة، مع شاشة طرفية لمسية لأرضية المصنع.
يقرأ التصنيع الطلبات المؤكَّدة من جدول sales_orders وبنوده sales_order_items لتغذية خطة الإنتاج الرئيسية (MPS) عبر حقل confirmed_orders_qty، ولربط أوامر التشغيل بالطلب عبر جدول الربط Pegging (علاقة كثير-لكثير بين الطلب والإنتاج). جدول sales_orders يملك بالفعل expected_delivery_date وdelivery_status وstatus، وبند الطلب يتتبّع delivered_quantity وinvoiced_quantity.
product_id وproduct_variant_id في sales_order_items — وهو نفس مرجع products الذي يبني عليه التصنيع قائمة المكوّنات (BOM).sales_quotations.sales_order_id وsales_orders.quotation_id.company_id, branch_id) لفصل النطاق (DataScope).فجوة لا يوجد في sales_orders أي حقل «وعد التسليم المتاح» (ATP/CTP) ولا حقل رجوعي يحمل التاريخ المُتعهَّد به من التصنيع؛ الوعد بالتسليم القائم يدوي (expected_delivery_date) دون ربط بقدرة الإنتاج (استنتاج). يلزم خطّاف (Action) من التصنيع يكتب التاريخ المُتعهَّد ويُحدِّث delivery_status عند الربط (Pegging).
تأكيدات العمليات (Confirmation) تُسجِّل ساعات/كميات العامل، ويجب تسعيرها من بيانات الموارد البشرية. جدول employees يربط الموظف بالمستخدم عبر user_id (سلسلة employees.user_id → users.id)، ويملك basic_salary فقط. الورديات في shifts (start_time, end_time, working_hours, is_night_shift) والحضور في attendances (worked_hours, overtime_hours).
فجوة جوهرية لا يوجد حقل «أجر بالساعة» (hourly_rate) ولا «أجر بالقطعة» (piece_rate) على مستوى الموظف؛ الأجر بالساعة مُشتَقّ حسابياً داخل PayrollService من basic_salary / salaryDays / hoursPerDay فقط. وبما أن مواصفات التصنيع تتطلب وضعين (labor_calc ∈ {Hourly, PieceRate})، يلزم مصدر معدّل صريح للتأكيدات، إما حقل جديد أو خدمة معدّلات في الموارد البشرية (استنتاج).
تنصّ المواصفة صراحةً (ملف 06 §6.5) على أن «إدارة الجودة» مرحلة لاحقة تتعلّق بتأكيدات الإنتاج (الدرجات/أكواد الأسباب وبوابات الفحص على العمليات) — وموديول الجودة القائم يغطّيها بالفعل، فلا حاجة لبناء جداول جودة داخل التصنيع. الأهم: جداول qms_inspection_plans وqms_inspections تحمل بالفعل عمود production_order_id، أي أنها صُمِّمت أصلاً للربط بأوامر التشغيل.
| حاجة المواصفة (Spec need) | المتوفّر في الجودة (QMS has) | الربط |
|---|---|---|
بوابة فحص على العملية (inspection_required على Routing_Operation) | qms_inspection_plans + qms_inspection_criteria | type='in_process' مع production_order_id |
| تسجيل نتيجة الفحص أثناء التأكيد | qms_inspections (quantity_inspected/accepted/rejected, result) + qms_inspection_results | عمود production_order_id موجود |
| تقرير عدم مطابقة على الهالك (NCR) | qms_non_conformances (ncr_number, type, severity, root_cause) | عبر inspection_id ومن ثم production_order_id |
| إجراء تصحيحي/وقائي على تكرار العيوب | qms_capa_actions (capa_number, type, effectiveness_check) | عبر non_conformance_id |
reason_code في تأكيد التصنيع) تُغذّي تحليل باريتو، وتُترجَم إلى qms_non_conformances عند تجاوز عتبة.quality_status ∈ {Released, OnHold, Rejected}) تُحسَم عبر نتيجة qms_inspections.result.فجوة لا يوجد عمود مفتاح أجنبي رسمي على qms_inspections.production_order_id (مجرّد unsignedBigInteger دون constrained) لأن جداول التصنيع لم تُنشأ بعد؛ كما تنقص رابطة operation_no لتثبيت الفحص على عملية بعينها (استنتاج).
تنصّ المواصفة (§6.5) على أن الصيانة (PM) «تُقلِّل قدرة مركز العمل أثناء نوافذ التوقّف». موديول الصيانة يوفّر cmms_assets (مع specifications JSON وparent_asset_id) ليمثّل الآلة/القالب كأصل، وcmms_pm_schedules للصيانة الدورية، وcmms_work_orders لأوامر الصيانة بحقل downtime_hours وfailure_code ونوع WorkOrderType ∈ {Preventive, Corrective}.
cmms_assets فئة قوالب؛ مركز العمل (Work_Center) أصل آلة.cmms_work_orders.downtime_hours + actual_start/end يخصمان القدرة المتاحة من CRP.cmms_pm_schedules.meter_field + meter_threshold يدعمان «صيانة كل N ضربة» للقوالب.فجوة لا يوجد جدول قراءات عدّاد (مثل cmms_asset_meters) يجمع عدد ضربات القالب التراكمي (cycles_used في المواصفة) ليُطلِق صيانة العتبة؛ الحقل meter_field نصّي فقط دون مصدر بيانات تراكمي. كما أن cmms_work_order_labor يربط بـuser_id لا بـemployee_id (استنتاج).
الواجهة Angular مستقلّة المكوّنات (Standalone) بمسارات كسولة. كل موديول مجموعة مسارات تحت حارس الموديول moduleGuard (يمنع تجاوز تعطيل الموديول)، وكل مسار فرعي تحت permissionGuard مع data.permissions ببادئة الموديول (مثل ['manufacturing.']). المكوّنات تُحمَّل عبر loadComponent الكسول.
| العنصر (FE element) | الملف/النمط | الاستخدام للتصنيع |
|---|---|---|
| مجموعة مسارات الموديول | app.routes.ts (canActivate: [moduleGuard]) | مسار manufacturing بأطفال لكل شاشة |
| حارس الصلاحيات | core/guards/auth.guard.ts (permissionGuard) | data: { permissions: ['manufacturing.bom'] } |
| جدول البيانات المشترك | shared/components/data-table/data-table.component.ts | قوائم أوامر التشغيل/BOM/التأكيدات |
| حوار النموذج المشترك | shared/components/form-dialog/form-dialog.component.ts | إنشاء/تعديل BOM، إصدار أمر تشغيل |
| تنقّل الموديول | shared/components/module-nav/module-nav.component.ts | شريط جانبي لورشة التصنيع |
| الطباعة | shared/print/print.service.ts + print-templates.ts | أمر تشغيل، إذن صرف مواد، استلام تام |
| تخطيط طرفية لمسية | features/pos/pos-layout/ (مرجع نمط) | شاشة أرضية المصنع لمسية لكل مركز عمل |
manufacturing-layout) + لوحة + بيانات أساسية (BOM/Routing/Work Center/Tool).[Start]/[Done]، طابور الأوامر الجاهزة، إدخال كمية/درجة/هالك — على نمط pos-layout.