🧮

ملحق: تصميم دورة التكلفة الاستكشافية (Exploratory Costing Cycle Design)

تصميم تنفيذي كامل للدورة الأولى التي وصفها صاحب المصنع: العميل يأتي بمنتجه وتركيبته ويطلب تسعيراً استكشافياً ← البحث والتطوير يبني قائمة مواد مبدئية ← المحاسبة تحسب تكلفة مبدئية ← يعود السعر للعميل كعرض سعر بصلاحية محددة. التصميم يسكن داخل وحدة الإنتاج الموسّعة Modules/Production وفق القرارات المنشورة: جداول جديدة ببادئة mfg_*، صلاحيات production.*، إعادة الاستخدام أولاً، والقاعدة الذهبية هنا: الدورة الأولى لا تنشئ أي قيد محاسبي ولا أي حركة مخزون إطلاقاً — محرك التكلفة يعمل في وضع المحاكاة فقط.

2جدولان جديدان فقط
8إجراءات (Actions)
5أحداث (Events)
6شاشات مراحل
0قيود محاسبية في الدورة

توحيد التسمية (يحسم ما ورد في الملاحق السابقة)

الملحق 30 اقترح mfg_quotations + mfg_quotation_costings، والملحق 31 اقترح mfg_costing_requests + mfg_cost_estimates. هذا الملف يثبّت التسمية النهائية: رأس التقدير هو mfg_cost_estimates (طلب التسعير + حالة المسار التجاري في كيان واحد) وإصدارات الحساب المتعاقبة في mfg_cost_estimate_versions (سجل غير قابل للتعديل — كل إعادة حساب صفٌّ جديد). أما عرض السعر الموجَّه للعميل فليس جدولاً جديداً: هو SalesQuotation الموجود فعلاً في Modules/Sales بدورة حياته الكاملة وتحويله إلى أوردر (دليل الملحق 32 §1)، ويُربط بالتقدير عبر sales_quotation_id. هذه التسمية صادق عليها الملحق 36 (ورقة الدلتا الموحَّدة) — لا وجود لـmfg_quotations في أي وثيقة معتمدة؛ وإجمالي الملاحق الموحَّد +6 جداول (24 ← 30): هذا الزوج + mfg_order_cases وmfg_trial_batches وmfg_customer_advances وmfg_order_stage_gates.

1) الكيانات: ماذا نبني وماذا نعيد استخدامه

الكيانالحكمالدور في الدورة
mfg_cost_estimatesجديدرأس التقدير: العميل (customer_idBusinessPartner في Core)، المنتج المرشَّح (prospect_product_id)، مرفق التركيبة (Attachment)، الكمية المستهدفة، رابط القائمة المبدئية draft_bom_id، رابط عرض السعر والأوردر، الحالة {Draft, Estimated, Quoted, Won, Lost}، صلاحية السعر valid_until. ترقيم عبر SequenceService('production','cost_estimate')
mfg_cost_estimate_versionsجديدنتائج الحساب المتعاقبة (لا تُعدَّل أبداً): لقطة تفجير القائمة، مصدر سعر الخامة لكل بند {CurrentCost, LastPurchase, Manual}، تكلفة مواد + عمالة + غير مباشرة ← تكلفة الوحدة ← نسبة الربح ← السعر المقترح، مع مَن حسب ومَن اعتمد ومتى
bill_of_materialsتوسعة مُقرّةالقائمة المبدئية للبحث والتطوير = bom_type=Engineering + status=Draft وفق دورة الحياة المُقرّة سلفاً (الخريطة 20 سطر 2). قاعدة صارمة: قائمة Draft لا تُجمَّد في أمر إنتاج — باستثناء واحد معتمد خارج هذه الدورة (القرار D-32): أوامر order_type=Trial خلف الإعداد production.trial_allow_draft_bom (الملحقان 35 و36)؛ داخل الدورة الأولى نفسها لا تجميد إطلاقاً
products.lifecycleتوسعةإضافة حالة Prospect (القرار D-26): منتج العميل يُسجَّل كمنتج «مرشَّح» يحفظ سلامة مفتاح القائمة، ويُرقّى إلى Active عند الفوز فقط — ولا يظهر في البيع أو المخزون أو التخطيط قبل ذلك
ComputeStandardCostتوسعةنفس محرك تجميع التكلفة المعياري (الخريطة 20 سطر 23: تفجير القائمة × معدلات مراكز العمل × cost_driver) يُضاف له وضع محاكاة mode=Simulation: يكتب في mfg_cost_estimate_versions بدلاً من mfg_standard_costs، ولا يستدعي CreateJournalEntry إطلاقاً
SalesQuotation + convertFromQuotationإعادة استخدامعرض السعر للعميل ودورته Draft→Sent→Accepted→Converted والتحويل لأوردر — موجودان كما هما (الملحق 32 §1)
ApprovalWorkflow في Coreتوسعةإضافة ApprovalModule::Production ونوع مستند cost_estimate لبوابة اعتماد المحاسبة قبل إرسال العرض (الملحق 32 §5)
mfg_peggingsتوسعةإضافة cost_estimate_id لسلسلة الربط حتى يُعاد بناء النسب الكامل: طلب ← قائمة ← إصدارات ← عرض ← أوردر ← ما بعده (المتطلب R-18)

2) آلة الحالات مع الفاعلين (البيع، البحث والتطوير، المحاسبة)

#منالإجراءالفاعلالشرط الحاكمإلىالحدث
1CreateCostEstimateالبيععميل صحيح + مرفق التركيبة؛ يُنشأ المنتج المرشَّح Prospect تلقائياًDraftCostEstimateRequested
2DraftSubmitDraftBomالبحث والتطويرالقائمة Engineering+Draft وأبوها المنتج المرشَّح؛ يثبَّت draft_bom_id (حالة فرعية: «القائمة جاهزة»)DraftDraftBomReady
3DraftSimulateCostEstimateالمحاسبةالقائمة مرفقة + لكل بند سعرٌ قابل للحل (سعر حالي / آخر شراء / يدوي للخامات غير المخزّنة بعد)؛ لا قيد ولا مخزونEstimated— داخلي
4EstimatedRecostEstimateالمحاسبةإعادة الحساب = إصدار جديد غير قابل للتعديل؛ التاريخ كله محفوظEstimated
5EstimatedQuoteCostEstimateالبيع (بعد اعتماد المحاسبة)الإصدار الحالي معتمَد؛ تحديد نسبة الربح والسعر وvalid_until؛ إنشاء وإرسال SalesQuotation وطباعة PDF؛ العرض يصبح للقراءة فقطQuotedEstimateQuoted
6QuotedRecostEstimateالمحاسبة/البيعإلزامي عند انتهاء الصلاحية (Expired) أو عند إعادة التفاوض — يعود لخطوة 4 ثم يُعاد العرضEstimated
7QuotedMarkEstimateWonالبيع (بقبول العميل)عرض السعر المرتبط Accepted والتاريخ داخل الصلاحية — العرض المنتهي يمنع الفوز حتى يُعاد التسعير (السؤال المفتوح OQ-5)WonEstimateWon
8QuotedMarkEstimateLostالبيعسبب الخسارة إلزامي؛ المنتج المرشَّح يبقى Prospect مؤرشفاًLostEstimateLost

قواعد عابرة لكل الانتقالات: كل انتقال محكوم بصلاحية production.estimates.*؛ القائمة المبدئية تظل غير مؤهلة لأي أمر إنتاج طوال الدورة؛ ولا أثر مالي أو مخزني في أي خطوة — قناة القيود الوحيدة في النظام CreateJournalEntry لا تُستدعى في هذه الدورة أصلاً.

3) الأحداث ومن يستهلكها

كلها في Modules\Production\Events وتُطلق بعد نجاح المعاملة، ومستهلكوها مستمعون داخل وحدة الإنتاج يستدعون إجراءات الوحدات الأخرى للأمام (قانون العقود — الملحق 22 §2: لا وحدة تستورد الإنتاج أبداً).

الحدثالمُطلِقالمستهلكون
CostEstimateRequestedCreateCostEstimateمغذّي قائمة أعمال البحث والتطوير (طابور شاشة 3) + بث للوحة المسار
DraftBomReadySubmitDraftBomمغذّي طابور شاشة التكاليف بالمحاسبة + تشغيل المحاكاة تلقائياً (إعداد اختياري للشركة) + بث للوحة
EstimateQuotedQuoteCostEstimateمجدول متابعة البيع وراصد الصلاحية (يعلّم Expired عند الموعد ويمنع الفوز) + لوحة الإدارة + أرشفة PDF
EstimateWonMarkEstimateWonبوابة الدورة الثانية: ترقية المنتج، بذر الربط mfg_peggings، وعرض مسار التجربة (دفعة العيّنة R-05)
EstimateLostMarkEstimateLostتحليلات الربح/الخسارة وإغلاق النسب

4) شاشات المراحل (نمط واجهة-لكل-مرحلة الذي طلبه العميل — R-17)

كل شاشة تعرض بيانات مرحلتها وأزرار انتقالها فقط، والزر يستدعي نفس الإجراء الذي تكشفه الواجهة البرمجية — الشاشات لا تتجاوز آلة الحالات أبداً. شرائح الصلاحيات: production.estimates.create للبيع، production.estimates.rnd.draft_bom للبحث والتطوير، production.estimates.cost وapprove_costing للمحاسبة، quote وconvert للبيع، والمشرف يشمل الكل.

5) مسار التحويل: تقدير فائز ← مدخل دورة الإنتاج

  1. قبول العميل يمر عبر منطق التحويل الموجود مُستدعىً حصراً عبر الإجراء الأمامي Modules\Sales\Actions\ConvertQuotationToOrder (استخلاص الملحق 36 رقم 19 من المتحكم convertFromQuotation — نفس وصفة CreatePurchaseRequest؛ الإنتاج لا يستدعي متحكم وحدة أخرى أبداً، قانون العقود §0.1): SalesQuotation = Accepted ← أوردر بيع رسمي يُختم على التقدير — هذا الأوردر هو مرساة الدورة الثانية الذي تتعلق به كل المستندات اللاحقة.
  2. ترقية المنتج المرشَّح Prospect ← Active فيصبح مؤهلاً للمخزون والتخطيط والبيع.
  3. القائمة المبدئية لا تُرقَّى تلقائياً: تُسلَّم للدورة الثانية وهي Draft، ويثبّتها البحث والتطوير (Engineering/Draft ← Production/Active، نسخة نشطة واحدة لكل نافذة سريان) بعد نتيجة دفعة التجربة لأن دروس التجربة تدخل في التركيبة النهائية — وإن تخطى العميل التجربة جاز الترقية فوراً.
  4. بذر صف mfg_peggings يربط التقدير بالأوردر فيكتمل النسب من طلب التسعير حتى استلام التام.
  5. التفرع: (أ) تجربةmfg_trial_batches + أمر إنتاج order_type=Trial ينفذه البحث والتطوير على قضبان التنفيذ الحقيقية بتكلفة وقيود حقيقية (أول قيد محاسبي في حياة هذا العميل يقع هنا، في الدورة الثانية لا الأولى)؛ أو (ب) مباشرة — تثبيت القائمة ← التخطيط ← بوابة الدفعة تحت الحساب ← الحجز ← الإطلاق.
  6. استمرارية التكلفة: الإصدار الفائز من mfg_cost_estimate_versions هو خط الأساس الذي تُقارن به تكلفة التجربة الفعلية، ومرشَّح لبذر أول تكلفة معيارية في mfg_standard_costs بعد تفعيل القائمة.

6) موضعها في خارطة الطريق وقرارات التوقيع

تهبط الدورة في المرحلة 2.5 «واجهة العميل» (الملحق 36 ثالثاً — الموضع الذي سمّاه الملحق 30 §6 مؤقتاً «1.5»): بعد المرحلة 1 (دورة حياة القائمة) وبعد المرحلة 2 — لأن معدلات العمالة/الماكينات وcost_driver التي يسعّر بها التقدير تصل في المرحلة 2 لا المرحلة 1 (تصحيح للادعاء السابق بأن المرحلة 1 تكفي) — ومستقلة عن محرك التخطيط. وضع المحاكاة هو سحبٌ مبكر لرياضيات تجميع التكلفة من المرحلة 3 بنسخة تقديرية فقط (البند C-03) دون الحاجة لمحرك الانحرافات. القرارات المطلوب توقيعها قبل البناء (من السجل المرجعي — الملحق 36 رابعاً): D-31 بناء القمع التجاري (كان يُستشهد به سابقاً برقم «D-23» المؤقت)، D-26 حالة المنتج المرشَّح، D-29 إعادة استخدام عرض سعر البيع (الدليل مثبت)، وD-34/OQ-5 مدة صلاحية العرض (الافتراضي 30 يوماً، والعرض المنتهي يمنع التحويل حتى يُعاد تسعيره).