طبقة التخطيط هي «عقل» وحدة التصنيع: تترجم الطلب المتوقّع والفعلي إلى خطة إنتاج ملموسة وقابلة للتنفيذ. تتكوّن من ثلاثة مكوّنات متسلسلة مع حلقة تغذية راجعة مغلقة هي MPS → MRP → CRP، وترث جميع القواعد العامة من ملف المبادئ 00 (اللقطات المجمّدة، آلات الحالة، علاقة الطلب↔التوريد متعدّدة لمتعدّد، التعشيق متعدّد المستويات، التهيئة بدل البرمجة الصلبة، تجريد الموارد).
تنتج طبقة التخطيط ثلاث مخرجات فقط؛ يُنصح بالاحتفاظ بها كنموذج ذهني. المدخلات هي: طلب العميل، البيانات الرئيسية (شجرة المكوّنات BOM والمسار Routing ومراكز العمل)، المخزون الحالي، إعدادات الصنف، وملكية المادة.
| # | المخرَج | السؤال الذي يجيب عنه | المنتِج |
|---|---|---|---|
| 1 | قبول الطلب وتاريخ التسليم | هل نقبل الطلب؟ ومتى نسلّم؟ | MPS + CTP |
| 2 | جدول المواد | ماذا نشتري/نصنع، وكم، ومتى | MRP |
| 3 | خطة الإنتاج التفصيلية | متى تبدأ كل مرحلة | MRP draft + CRP confirm |
يقرّر ماذا نُنتج وكم ومتى. في وضع الصنع حسب الطلب يتحوّل دوره من «متنبّئ» إلى «مترجِم للطلبات + فاحص قبول وطاقة». يتفرّع سلوكه حسب نوع الإنتاج production_type:
| نوع الإنتاج | السلوك |
|---|---|
MakeToStock | الطلب = استهلاك التوقّع بالطلبات الفعلية؛ اقتراح إنتاج عند نزول الرصيد المتاح PAB تحت مخزون الأمان. |
MakeToOrder | تجاهل التوقّع؛ الإنتاج المخطّط = الطلبات المؤكّدة؛ مخزون الأمان = 0؛ تشغيل فحص CTP. |
AssembleToOrder | المكوّنات تُدار كـMakeToStock والتجميع النهائي كـMakeToOrder. |
TollManufacturing | تخطيط الطاقة فقط (المادة ملك العميل — انظر MRP). |
المعادلة الجوهرية لكل فترة زمنية t:
PAB[t] = PAB[t-1] + scheduled_production[t] - demand[t]demand[t] تُحسب وفق قواعد استهلاك التوقّع وحواجز الزمن أدناه.الطلبات الفعلية تستهلك التوقّع ولا تُضاف إليه — لمنع الحساب المزدوج:
consumed = MIN(actual_orders[t], forecast[t])remaining_forecast = forecast[t] - consumedtotal_demand[t] = actual_orders[t] + remaining_forecasttotal_demand[t] = actual_orders[t]الإعدادات: forecast_consumption_method ∈ {None, Backward, Forward, Both} وconsumption_window.
تُحدَّد المنطقة بحسب بُعد الفترة عن اليوم، لمنع «عصبية النظام»: الخطة قريبة المدى مستقرّة وبعيدة المدى مرنة.
| الشرط (المسافة من اليوم) | المنطقة | قاعدة الطلب |
|---|---|---|
distance ≤ DTF (Demand Time Fence) | FROZEN | الطلبات الفعلية فقط (تجاهل التوقّع). |
distance ≤ PTF (Planning Time Fence) | SLUSHY | مزج MAX/استهلاك؛ التغييرات تحتاج موافقة. |
| غير ذلك | LIQUID | الطلب = التوقّع (لا طلبات بعد). |
جوهر الصنع حسب الطلب: وعد تسليم مبني على الطاقة لا على المخزون. يحسب الحِمل على كل مركز عمل عبر مسار الصنف، ويعتمد عنق الزجاجة (أعلى موعد ممكن) كموعد وعد:
cycles = Q / cavity_count ثم load += cycles × cycle_time + setup_time، وإلا load += Q × run_time + setup_time.earliest[wc] = find_earliest_slot(wc, load[wc]).MAX(earliest[wc]) (عنق الزجاجة يقرّر).promised ≤ D، وإلا أبكر موعد ممكن.Pegging: { production_order_id, sales_order_id, allocated_quantity } (يُعرَّف في الملف 06).| الكيان | الحقول الرئيسية |
|---|---|
MPS_Header | id, plan_name, plant_id, time_bucket∈{Day,Week,Month}, start_date, end_date, frozen_fence, slushy_fence, status |
MPS_Line | product_id, period_date, forecast_qty, confirmed_orders_qty, planned_production, projected_balance, safety_stock_target, available_to_promise |
المتاح للوعد ATP له ثلاثة أنماط (إعداد): Discrete (الإنتاج ناقص الطلبات حتى الإنتاج التالي)، Cumulative (مجاميع تراكمية)، وLook-ahead (الأكثر أمانًا).
يحوّل أوامر الإنتاج إلى احتياجات مواد: ماذا نشتري/نصنع، وكم، ومتى. هو عملية وليس جدولاً، وينتج «أوامر مخطّطة» مؤقّتة. إعدادات الصنف:
| الحقل | القيم/المعنى |
|---|---|
mrp_type | Planned | ReorderPoint | NoPlanning |
procurement_type | Buy | Make |
material_ownership | Own | Customer |
lot_sizing_rule | Exact | Fixed | MinMax | EOQ | PeriodOrder |
| كميّات | lot_size, min_lot, max_lot, safety_stock, lead_time_days, reorder_point |
تُعالَج الأصناف مستوى بمستوى من الأعلى (التام = 0) إلى الأعمق (الخام):
Gross[t] = طلب MPS (للتام) + الطلب المعتمد من الآباء (للمكوّن).Available[t] = on_hand + open_POs[t] + open_WOs[t] - reserved[t].Net[t] = MAX(0, Gross[t] - Available[t] + safety_stock).Order_Qty = apply_lot_sizing(Net[t], lot_rule).Release_Date = Required_Date - lead_time.procurement_type == Make: تفجير الـBOM لتوليد طلب معتمد للمكوّنات والتعشيق الأعمق تكراريًا.تفجير الـBOM يطبّق الهدر لكل سطر: required = Q × line.quantity × (1 + line.scrap_pct)، ويتكرّر للمكوّنات من نوع Make.
| القاعدة | الناتج |
|---|---|
Exact | الصافي كما هو net |
Fixed | round_up(net, lot_size) |
MinMax | clamp(net, min, max) |
EOQ | كمية الطلب الاقتصادي |
PeriodOrder | مجموع الصافي عبر عدّة فترات ← تجميع لتقليل التجهيز/تبديل القوالب |
الأصناف كثيفة العُدد تستخدم PeriodOrder/Fixed لتجميع الطلب وتقليل تركيب القوالب.
material_ownership == Customer: لا يُصدَر أمر شراء، بل يُتحقَّق من كفاية الكمية المورَّدة من العميل، وعند النقص يُطلق تنبيه.يفترض MRP طاقة لانهائية؛ يحقن CRP الواقع للتحقّق من توفّر طاقة مراكز العمل والعُدد والعمالة في الوقت المطلوب. في مصانع العُدد يكون CRP أهمّ من MRP (المواد سهلة؛ جدولة عدّة قوالب على عدّة مكابس هي المشكلة الحقيقية).
Total_Load[resource, period] = Σ loads.Util = Total_Load / effective_capacity × 100.الاستغلال Util | الحالة |
|---|---|
| > 100% | OVERLOAD |
| 70%–100% | OK |
| < 70% | UNDERLOAD |
تقاطع الموارد: earliest_start = MAX(machine_free_time, tool_free_time, labor_free_time) — القيد المُلزِم هو المورد الأقل توفّرًا، والقالب مورد متنقّل يُتتبَّع عبر المكابس (resource_type ∈ {Machine, Tool, Labor}). يدعم النظام نمطين: RCCP (قطع خشن على MPS للموارد الحرجة، يستخدمه CTP لقبول الطلب) وCRP (تفصيلي على MRP لكل الموارد).
مثال الميلامين: مركز المكبس بطاقة 90 ساعة في الأسبوع 3، طلب 6000 طبق بقالب أحادي التجويف ودورة 80 ثانية = 133 ساعة، فالاستغلال 148% (تحميل زائد)؛ والحلّ المطروح استخدام قالب رباعي التجاويف = 33 ساعة فقط — ما يربط قرار جدولة (CRP) باختيار بيانات رئيسية (أيّ قالب).
promised_date وإعادة التشغيل؛ وانحرافات التكلفة (الملف 04) تُحدّث المعايير والتخطيط المستقبلي.Production الحالية تملك BillOfMaterials وBomComponent وBomOperation وProductionOrder وProductionCenter (يحوي capacity_per_hour)، لكن لا توجد طبقة تخطيط (لا MPS ولا MRP ولا CRP) — هذه الطبقة بناء جديد بالكامل وفق نفس وصفة الوحدات.mfg_mps_headers وmfg_mps_lines وmfg_item_mrp_settings (امتداد على Core\Product على نمط AccBpExt) وmfg_planned_orders وmfg_pegging وmfg_crp_loads.production_type وmrp_type وlot_sizing_rule وresource_type ومنطقة الزمن FROZEN/SLUSHY/LIQUID وحالة الاستغلال OVERLOAD/OK/UNDERLOAD.Modules\Sales\SalesOrder، المتاح من Modules\Inventory\StockBalance، التوريد المفتوح من Modules\Purchases\PurchaseOrder وProductionOrder؛ ومخرجات الشراء المخطّط تُحوَّل إلى PurchaseRequest مع تخطّي مكوّنات العميل.find_earliest_slot وeffective_capacity، وجدول تعشيق Pegging، وخدمة تحويل وحدات القياس. يجب توفيرها قبل تشغيل MPS/CRP بدقّة.SequenceService، وحصر الفروع عبر DataScope، وخريطة الصلاحيات تُسجَّل في Core PermissionDependencyRegistry ببادئة mfg؛ وأيّ ترحيل تكلفة لاحق يمرّ حصرًا عبر Modules\Accounting\Actions\CreateJournalEntry.