مطابقة كاملة بين الدورة اللي وصفها العميل (طلب إنتاج → تطوير → إنتاج → موافقة محاسبية → أمر إنتاج → صرف) وبين الموجود فعليًا في Modules/Production + الـ FE، مع تحديد الفجوات الحقيقية واقتراح خطة الربط.
الدورة اللي وصفها العميل ليست شيئًا جديدًا على النظام — هي تقريبًا نفس workflow «التصنيع التعاقدي/التول» الموثّق بالفعل في mfg-pharma-toll-fitgap.html. كل الميكانيكا الثقيلة موجودة: BOM متعدد المستويات، Routing مستقل، حساب تكلفة 3-أرجل، دورة أمر إنتاج بحالات مُلزَمة على السيرفر، صرف خامات FEFO بقيود WIP متوازنة، توليف/أمانة، و~28 تقرير تكاليف + Cost-AI.
supply_source والبدائل).RollUpStandardCost (مادة/عمالة/أوفرهيد).7 مراحل عبر 4 أقسام، فيها 3 بوابات موافقة محاسبية إلزامية (لا انتقال إلا بموافقة).
| المرحلة | الموجود في النظام | الحالة | المرجع / الفجوة |
|---|---|---|---|
| 1. طلب الإنتاج (اختيار/إضافة منتج + كمية + مرفقات) |
المنتج + الكمية موجودين. المرفقات polymorphic (attachments) تشيل PDF/صور (10MB). عقد التول (MfgTollContract/Line) عمليًا «واجهة طلب» جاهزة ~70%: مربوط بعميل، سطوره تختار منتج موجود أو تكتب منتج جديد free-text، كمية، مرفقات، دورة حياة، ويولّد أمر إنتاج لكل سطر. |
جزئي | مفيش كيان «طلب إنتاج» قياسي. عقد التول فريمه «خامة العميل/consignment» = فريم تجاري غلط للـ MTO. مفيش زر رفع مرفقات في الـ UI. MfgTollContractLine.php:28-88 |
| 2. التطوير يعمل BOM | محرّر BOM كامل (/factory/boms): مكوّنات + عمليات + تقدير تكلفة. حالة Draft/Active/Inactive موجودة. |
جزئي | الـ BOM بيتولد Active على طول — مفيش draft→موافقة، مفيش ملكية قسم (تطوير)، ومفيش queue «منتج محتاج BOM». BomController.php · BomStatus.php |
| 3. الإنتاج: إكمال BOM + Route → تكلفة | Routing مستقل (MfgRoutingHeader/Operation) + مراكز عمل بمعدلات + RollUpStandardCost يحسب 3 أرجل (مادة من BOM + عمالة/أوفرهيد من الـ Routing). |
موجود | مكتمل. RollUpStandardCost.php · routing.component (ملاحظة: وقت التجهيز setup غير مُوزّع في v1). |
| 4. الحسابات تعتمد → أمر بيع بوابة 1 | أمر البيع موجود (SalesOrder) بحالاته. محرك موافقات عام في Core (متعدد المستويات + ثريشولد مبلغ). الربط SO↔MO موجود عبر MfgPegging. |
ناقص | أمر البيع بيتعمل بدون موافقة. محرك الموافقات غير موصّل ومافيهوش أنواع «إنتاج». مفيش مسار «اعتماد الطلب → إنشاء أمر بيع → أمر إنتاج». ApprovalDocumentType.php · SalesOrderController.php |
| 5. أمر إنتاج: تخطيط + توفّر خامات + إطلاق بوابة 2 | دورة أمر الإنتاج كاملة (planned→released→…) + تخطيط MRP/MPS/CRP + تبويب توفّر الخامات (readiness) ownership-aware + حجز المخزون عند الإطلاق. |
جزئي | الإطلاق (ReleaseProductionOrder) يتم بـ permission إنتاجي فقط — مفيش بوابة موافقة محاسبية. فحص توفّر الخامات استشاري ومابيمنعش الإطلاق. ReleaseProductionOrder.php · OrderCockpit::readiness |
| 6. صرف خامات الـ BOM | IssueMaterials → MfgMaterialIssue يلفّ InventoryIssue: FEFO + دفعات + قيد DR WIP / CR مخزون. Staging + backflush موجودين. |
موجود | شغّال. ملاحظة: الصرف خطوة صريحة (مش تلقائي عند الإطلاق)، وبـ production.consume (مخزن/إنتاج). |
| 7. خامات إضافية بموافقة بوابة 3 | — | ناقص | مفيش كيان «طلب خامات إضافية»، مفيش سقف كمية ضد الـ BOM (الصرف فوق الـ BOM مسموح بحرية)، ومفيش توقيع حسابات قبل خروج المخزن. IssueMaterials.php (لا cap / لا approval) |
نكلون شكل عقد التول (MfgTollContract) لكن بفريم MTO قياسي: رأس مربوط بعميل + سطور (منتج موجود أو منتج جديد free-text) + كمية مستهدفة + مرفقات (قانونية/PDF/صورة تركيبة) + دورة حياة فيها حالة «بانتظار اعتماد الحسابات». نشيل material_ownership='customer' (خامة المصنع مش العميل).
منطق «منتج بلا BOM ⇒ يدخل طابور التطوير» + ملكية قسم على الـ BOM + حالة draft→معتمد. حاليًا الـ BOM بيتولد Active مباشرة ومفيش طابور. (الموجود فقط: علم order_type=rnd/pilot وهو عمود ميت بلا UI أو منطق.)
MfgPegging).ReleaseProductionOrder::execute قبل الانتقال planned→released.IssueMaterials لأي صرف يتجاوز الـ BOM/الكمية المخططة.regulatory_* / JSON) + علم product_class (منتج تام/خام).readiness من استشاري → بوابة صلبة قبل الإطلاق.order_type/production_type ميتة — نُعيد توظيفها أو نشيلها.في Core محرك موافقات كامل (ApprovalWorkflow + Levels بثريشولد مبلغ + موافق role/user + auto-approve). بس مفصول: submitForApproval() ما بينادَاش من الإنتاج، والموافقة بتحدّث السجل فقط (مفيش event يغيّر حالة المستند)، وApprovalDocumentType مافيهوش أنواع إنتاج.
التوصيل المطلوب (3 خطوات صغيرة):
ApprovalDocumentType أنواع: ProductionRequest, ProductionLaunch, MaterialIssue (تحت ApprovalModule::Production الموجود).fully_approved ينقل حالة المستند المرتبط (trait Approvable خفيف).ReleaseProductionOrder، IssueMaterials (للإضافي).نسخة قياسية من MfgTollContract: نفس شكل (عميل + سطور منتج-موجود/جديد + كمية + مرفقات + دورة حياة)، بدون ملكية العميل. الفعل «سطر معتمد ⇒ أمر إنتاج» جاهز كقالب في CreateOrderFromTollContractLine — نشيل material_ownership='customer' ونضيف فرع «منتج جديد ⇒ التطوير».
MfgPegging (sales_order_id + production_order_id) موجود — نستخدمه كرابط الـ MTO. وكل قيود التكلفة (صرف/تأكيد/استلام/إغلاق) شغّالة عبر listeners. مفيش أي تغيير محاسبي مطلوب.
OrderCockpit::readiness الموجود (Phase B اتشطب لأنه كرّرها).product_class على المنتج، وزر رفع مرفقات (PDF/صورة تركيبة) في شاشة المنتج. (أقل مخاطرة، قيمة فورية، ومستقلة.)