يوجد بالفعل موديول Modules\Production داخل النظام، لكنه نواة مبدئية صغيرة (Minimum Viable Module) تغطي تعريف مراكز الإنتاج وقوائم المكونات وأوامر التشغيل بدورة حياة أساسية وحسابات تكلفة دفترية فقط — دون أي ترحيل فعلي للمخزون أو القيود المحاسبية، ودون أحداث (Events) أو خدمات تكامل مع باقي الموديولات.
الموديول قائم على نفس بنية باقي الموديولات (BaseModel مع company_id، فصل الفروع، وترقيم المستندات عبر SequenceService)، وله واجهة Angular كاملة وصلاحيات مُسجَّلة في Core. لكنه غير مُفعَّل فعلياً في الإنتاج: لا يوجد بيانات أولية (Seeder فارغ)، ولا اختبارات، ولا أي موديول آخر يشير إليه.
| الجدول (Table) | الغرض | أعمدة لافتة |
|---|---|---|
production_centers | مراكز الإنتاج (آلة/عمالة/مختلط) | type, capacity_per_hour, cost_per_hour, overhead_rate, account_id |
bill_of_materials | قائمة المكونات للمنتج | version, quantity, is_default, standard_cost |
bom_components | مكونات قائمة الـBOM | quantity, waste_percentage, cost_per_unit |
bom_operations | عمليات الـBOM (التوجيه المبدئي) | production_center_id, sequence, setup_time_minutes, run_time_minutes |
production_orders | أوامر التشغيل | order_number, status, planned/produced/scrap_quantity, تكاليف مخططة/فعلية |
production_order_materials | مواد أمر التشغيل والمستهلك منها | planned_quantity, consumed_quantity, actual_cost |
production_order_operations | عمليات أمر التشغيل | planned/actual_setup_time, planned/actual_run_time, status |
ملاحظة: ترحيل الجداول مكتوب بأسلوب دفاعي عبر ثلاث هجرات (2026_03_31_000001_create_production_tables ثم ...000002_ensure... ثم ...000003_force_create...) كلها بشرط if (! Schema::hasTable(...))، وهو ما يدل على مشاكل سابقة في تطبيق الهجرات (استنتاج).
draft — إنشاء الأمر وترقيمه عبر SequenceService('production','order')، وتعبئة المواد/العمليات تلقائياً من الـBOM إن وُجد.confirmed — عبر confirm (يُسمح فقط من draft).in_progress — عبر start؛ يسجّل actual_start_date.consume (تسجيل استهلاك المواد) وrecord-output (تسجيل الكمية المنتجة والهالك).completed — عبر complete؛ يحسب التكاليف الفعلية من المواد والعمليات.cancelled — عبر cancel (من draft أو confirmed فقط).consume وrecord-output يحدّثان أعمدة الكمية داخل جداول الإنتاج فقط ولا يُنشئان أي حركة مخزون (StockMovement) ولا يخصمان/يضيفان رصيداً في Inventory.Modules\Accounting\Actions\CreateJournalEntry؛ التكلفة تُحسب وتُعرض دفترياً فقط (حقول actual_material_cost / actual_labor_cost وتقرير costing).account_id في production_centers معرّف لكنه غير مستخدم في أي ترحيل (استنتاج).Modules\Core\database\seeders\RolePermissionSeeder.php (الأسطر 709–727) ومُطبَّقة كـMiddleware في الـControllers، ومتطابقة تماماً مع حُرّاس Angular.src/app/features/production (centers, boms, orders, reports) مع خدمات وموديلات في core/services وcore/models وعناصر تنقّل في nav-items.config.ts.Events/Listeners/Actions/Services؛ EventServiceProvider فارغ، ولا يوجد مجلد Actions للتكامل العابر للموديولات حسب «وصفة» النظام.| مفهوم المواصفة | الحالة | ملاحظة |
|---|---|---|
| BOM Versions | جزئي | عمود version نصّي فقط، بلا منطق إصدارات/تفعيل/تأريخ. |
| Routing / Operations | جزئي | bom_operations + production_order_operations بتسلسل وأزمنة، بلا توجيه متقدم. |
| Work Centers | موجود | production_centers بأنواع وطاقة وتكلفة/ساعة. |
| Tools / Molds | غير موجود | لا جداول للعدد/القوالب. |
| MRP / التخطيط | غير موجود | لا تخطيط احتياجات مواد ولا اقتراح أوامر شراء/تشغيل. |
| Confirmations / Shop Floor | جزئي | consume وrecord-output فقط، بلا محطات/تأكيدات تفصيلية. |
| Costing | جزئي | حساب مخطط/فعلي وانحراف دفترياً، بلا ترحيل محاسبي فعلي. |
| Stock Posting | غير موجود | لا ترحيل صرف مواد ولا استلام منتج تام في المخزون. |
الموديول الحالي نواة هيكلية نظيفة ومتوافقة مع «وصفة» النظام لكنها سطحية وظيفياً وغير مستخدمة في الإنتاج (لا بيانات، لا اختبارات، لا مراجع خارجية). التوصية: التوسعة في مكانه (Extend in place) بالبناء فوق الجداول والصلاحيات والواجهة القائمة — لا إعادة بناء كاملة — مع إضافة الطبقات الناقصة (ترحيل المخزون، القيود المحاسبية عبر CreateJournalEntry، الأحداث/المستمعين، طبقة الإصدارات، MRP، والعدد/القوالب). مخاطر الترحيل شبه معدومة لعدم وجود بيانات أو ارتباطات قائمة (استنتاج).