🧾

ملحق: ما يقدمه Moon ERP جاهزاً لهذه الدورة (ERP Evidence for the Client Cycle)

هذا الملحق يربط دورة العميل الفعلية (مصنع أدوية يصنّع للغير بالأوردر — «تصنيع للغير») بما هو مبنيٌّ فعلاً في Moon ERP. لكل لبنة تحتاجها الدورتان — دورة التكلفة الاستكشافية ودورة الإنتاج بالأوردر — حُسم أحد ثلاثة أحكام: موجود يُعاد استخدامه كما هو، أو جزئي بنية أساسية حاضرة تحتاج توصيلاً أو توسعة، أو مفقود بناء جديد. كل حكم مسنود بملف وسطر في الشيفرة.

الدورتان كما وصفهما صاحب المصنع

الخلاصة التنفيذية: لبنات الدورة مقابل الموجود في النظام

اللبنة المطلوبةالحكمأين تقع / ما الناقص
عرض سعر وتحويله إلى أوردر (سعر الدورة 1 + الأوردر الرسمي للدورة 2)موجودModules/Sales دورة كاملة Draft→Sent→Accepted→Converted مع إجراء convertFromQuotation
دفعة العميل تحت الحساب بمعالجة محاسبية صحيحة (التزام مقدم لا تحصيل ذمم)جزئيسند القبض ReceiptVoucher وحساب 2104 إيرادات مقدمة موجودان، لكن بلا ربط بأوردر، وSalesPayment مقيّد بالفاتورة
خامات العميل المملوكة له (أمانة/عهدة لدى المصنع)مفقودلا نوع Consignment في المخازن ولا حقل ملكية على الرصيد
سير عمل البحث والتطوير ودفعة التجربةجزئيBomStatus::Draft جاهز للقائمة المبدئية؛ وحدة CMMS صيانة أصول لا بحث وتطوير؛ لا كيان لدفعة التجربة
سير موافقات لبوابات المراحل (اعتماد القائمة، بوابة الدفعة، إطلاق الأوردر)جزئيمحرك موافقات عام في Modules/Core لكن المسجَّل فيه Sales وPurchases فقط — لا Production
خط CRM لاستقبال طلبات التسعير (RFQ)مفقودModules/CRM دعم وتذاكر (Tickets/SLA) لا خط فرص بيعية
بدائية حجز الموادجزئيعمود StockBalance.reserved_quantity ودالة available موجودان لكن لا كود يكتب فيهما
انتقالات مراحل الإنتاج (أساس واجهات المراحل)جزئيProductionOrderController فيه confirm/start/complete/consume؛ لا مراحل عميل/تجربة/دفعة/حجز

1) عروض الأسعار وتحويلها إلى أوردر — موجود وجاهز

العمود الفقري للدورة 1 (عرض السعر) وللأوردر الرسمي في الدورة 2 مبنيٌّ بالكامل في Modules/Sales.

قيد التطبيق على الدورة: سعر الدورة 1 هو SalesQuotation مسعّر من قائمة المواد المبدئية؛ والأوردر الرسمي للدورة 2 هو ناتج convertFromQuotation. كل مستندات الدورة 2 يجب أن تتعلّق بمعرّف هذا الأوردر، أي أن أوامر الإنتاج الجديدة (mfg_*) تحتاج مفتاحاً أجنبياً sales_order_id.

2) دفعة العميل تحت الحساب ومعالجتها المحاسبية — جزئي (البنية حاضرة، غير موصولة)

هذه أدقّ نقطة مالياً: الدفعة تحت الحساب التزام مقدم على المصنع وليست تحصيلاً لذمة مدينة. تسجيلها كدفعة بيع عادية يشوّه الذمم والإيراد معاً.

الناقص: لا ربط بأوردر ولا دلالة «دفعة مطلوبة قبل الإطلاق» ولا بوابة «هل اكتملت الدفعة؟». وSalesPayment أداة خاطئة هنا لأنه مقيّد بـinvoice_id وPostSalesPayment مثبّت على «من ح/ النقدية إلى ح/ الذمم المدينة» مقابل فاتورة (أسطر 30–56) — لا مسار للالتزام المقدم. كما لا توجد سابقة مالية في LIS (كلمة advance هناك تعني تقدّم حالة لا دفعة).

التعديل المقترح: خطوة دفعة على مسار الأوردر تُصدر ReceiptVoucher بـreference_type=sales_order وبند دائن لحساب دفعات عملاء تحت الحساب (يصلح 2104 أو حساب فرعي جديد 2105). والبوابة المالية = مجموع سندات الدفعة المعتمدة ≥ الدفعة المطلوبة. عند الفوترة النهائية تُخصم الدفعة (من ح/ الإيرادات المقدمة إلى ح/ الذمم أو الإيراد).

3) خامات العميل المملوكة له (التصنيع بالأمانة) — مفقود

قال صاحب المصنع صراحةً إن العميل قد يورّد خاماته وتبقى ملكه. لا يعرف Moon ERP اليوم مفهوم ملكية المخزون إطلاقاً.

الأثر: خامات العميل ستُقيَّم وتُرحَّل لمخزون الشركة (تضخيم الأصول) وقد تُصرف لأوامر أخرى — والمصنع حائزٌ لها بالأمانة لا بالملكية.

خياران للتعديل: (1) علم المخزن — وفق القرار المعتمد سلفاً D-15 هو العلم warehouses.is_consignment لا نوع تعداد WarehouseType::Consignment جديد — مع owner_partner_id على المخازن، يكون تقييمها خارج الدفاتر (لا قيد أصل)، والصرف منها لا يولّد سطر تكلفة مواد. (تصحيح: الصياغة الأصلية اقترحت قيمة تعداد جديدة متجاهلةً اعتماد D-15 لصيغة العلم — الملحقان 33 و36 يتبعان D-15.) (2) إضافة owner_partner_id على stock_balances والحركات (فارغ = ملك الشركة) مع تصفية الرصيد والتقييم حسب المالك. كلاهما بناء جديد.

4) سير البحث والتطوير ودفعة التجربة — جزئي

الناقص: لا مفهوم «دفعة تجربة» (ProductionOrder بلا حقل kind/is_trial ولا ربط customer_id/sales_order_id). ووحدة CMMS صيانة أصول (CmmsAsset, CmmsWorkOrder, CmmsPmSchedule) لا تصلح للبحث والتطوير رغم اسم «أمر عمل». لا كيان مشاريع/مهام لاستقبال طلب R&D قبل وجود قائمة مواد.

التعديل: نمذجة التجربة كـProductionOrder بـkind=trial وsales_order_id لترث كل بنية التكلفة والمخزون وتبقى معلّقة على أوردر العميل.

5) سير الموافقات لبوابات المراحل — جزئي (محرك موجود، الإنتاج غير مسجّل)

يوجد محرك موافقات عام في Core يصلح تماماً للبوابات التي يريدها العميل (اعتماد القائمة، تأكيد الدفعة، إطلاق الأوردر، قبول التجربة).

التعديل: إضافة ApprovalModule::Production وأنواع مستندات (bom, production_order, trial_batch) لإعادة استخدام المحرك بدل بناء منطق موافقات خاص.

6) خط CRM لاستقبال طلبات التسعير — مفقود (شكل CRM غير مناسب)

Modules/CRM وحدة دعم وتذاكر لا خط مبيعات: نماذجها CrmTicket, CrmTicketComment, CrmSlaPolicy, CrmCustomerInteraction, CrmCustomerTag — لا Lead/Opportunity/Pipeline/Stage.

الأثر: لا خط فرص يستضيف استقبال «العميل يأتي بمنتج → طلب تسعير». والحل العملي: (1) إعادة استخدام SalesQuotation كسجل RFQ (حالة Draft = طلب مفتوح) — الأرخص، فيصير الطلب الاستكشافي والعرض سجلاً واحداً تحمل حالاته القمع. (2) أو تسجيل الاستفسار في CrmCustomerInteraction ثم توليد عرض. خط CRM كامل غير مطلوب لتلبية العميل.

7) انتقالات مراحل الإنتاج وطلب «واجهة لكل مرحلة» — جزئي

الناقص لمسار العميل: لا customer_id/sales_order_id على أمر الإنتاج، ولا مرحلة تجربة ولا بوابة دفعة مكتملة ولا مرحلة حجز ولا فحص جاهزية/تخطيط — الآلة الحالية تقفز Draft→Confirmed→InProgress.

التعديل: آلة مراحل تجارية موازية (لا توسعة ProductionOrderStatus — حُسمت كمظلّة mfg_order_cases في الملحق 35) لسلسلة العميل مثل: Requested → TrialInProgress → TrialAccepted → AwaitingDeposit → Released(+Reserved) → InProgress → Completed → ReceivedToFG، وتوصيل إجراء حجز يزيد reserved_quantity. تصحيح ترتيبي: وفق الصف 13 المعتمد في الخريطة، الحجز أثر جانبي لإجراء الإصدار — فمرحلة «محجوز» يدخلها الإصدار ولا تسبقه أبداً (السلسلة الأصلية هنا وضعت الحجز قبل الإصدار وكان ذلك ترتيباً دائرياً مخالفاً للتصميم المعتمد). كل مرحلة تقابل واجهة بنسبة 1:1.

3لبنات موجودة تُعاد كما هي
4لبنات جزئية تُوسَّع
2لبنات مفقودة تُبنى
2104حساب الإيرادات المقدمة الجاهز

جديد مقابل معاد استخدامه (لملحق خارطة الطريق)