سيناريو تجربة شامل — من التفعيل للفاتورة

🧪 تجربة E2E للفلو المُحكَم للمشتريات (Controlled)

سكربت تجربة عملي تمشي عليه خطوة-بخطوة على النسخة المباشرة للتأكّد إن الفلو المُحكَم شغّال صح — من تفعيل الوضع، لطلب الشراء، لأمر الشراء، لإذن الاستلام، للجودة (كميات + صلاحية + باتش)، لاعتماد أمين المخازن، للفاتورة بالمستلَم، وصولًا للتتبّع. مع اختبارات الحُرّاس اللي هي جوهر الوضع المُحكَم.

📅 9 يوليو 2026 افتح التطبيق ↗ ⏱️ ~20–30 دقيقة يكمّل: التصميم · الأدوار
🔧 أدمن🛒 مشتريات🏬 مستلِم مخازن🔬 جودة🔑 أمين المخازن🧮 حسابات⚙️ النظام

أ التجهيز (مرة واحدة قبل التجربة)

لازم تتعمل الأول، وإلا الوضع المُحكَم مش هيتفعّل.

1
أدمن
جهّز حسابَي GR/IR والانحراف. من الإعدادات ← المشتريات ← مجموعة «الحسابات»، تأكّد إن حساب بضاعة مستلمة غير مفوترة (GR/IR) وحساب انحراف أسعار الشراء مختارين. الإعدادات ↗
✔ الحسابين مضبوطين (لو مش موجودين، اختارهم واحفظ).
2
أدمن
فعّل الوضع المُحكَم. في نفس شاشة إعدادات المشتريات، غيّر «نمط الشراء» من «بسيط» لـ«مُحكَم» واحفظ.
✔ الحفظ ينجح. لاحظ إن الإعدادات المحكومة التانية (نمط الاستلام/الإثبات/المطابقة…) بقت مقفولة ومكتوب جنبها «مُدار بالوضع المُحكَم».
❌ لو الحسابات (خطوة 1) ناقصة → الحفظ يُرفض برسالة تطلب تظبّطهم الأول (ده سلوك صحيح).
3
أدمن
(اختياري) جهّز مستخدمي الأدوار لو عايز تختبر فصل المهام: مستخدم مشتريات · مستلِم مخازن · مفتّش جودة · أمين مخازن · محاسب — حسب ملف الأدوار. الأدوار ↗ المستخدمون ↗
✔ لو بتجرّب بحساب المالك (كل الصلاحيات) → تقدر تعمل كل الخطوات بنفسك. الفصل بين الأدوار اختبار إضافي.
محتاج كمان: مورّد واحد على الأقل، مخزن، ومنتج مُفعّل عليه تتبّع المخزون (track inventory) — عشان الفلو المُحكَم يشتغل على بنود مخزنية مربوطة بأمر شراء.

ب المسار الكامل (Happy path)

امشِ بالترتيب. كل خطوة: مين يعملها · إيه تعمل · النتيجة المتوقّعة.

1
مشتريات
اعمل طلب شراء بالمنتج المخزني (كمية مثلًا 10) واعتمده. طلبات الشراء ↗
✔ الطلب اتعمل واتعتمد (حالة «معتمد»).
2
مشتريات
حوّله لأمر شراء (كمية 10)، اعتمده وأكّده/أرسله. أوامر الشراء ↗
✔ أمر الشراء بحالة «مؤكّد/مُرسل».
3
مستلِم
اعمل إذن استلام (GRN) على أمر الشراء. اختَر أمر الشراء (إلزامي في المُحكَم)، أدخل الكميات اللي وصلت. إذون الاستلام ↗
✔ إذن الاستلام اتعمل (Draft) ومربوط بأمر الشراء.
4
جودة
افحص الجودة. أرسل للجودة، وسجّل لكل بند: الكمية المقبولة (جرّب ترفض جزء — مثلًا اقبل 8 من 10)، ورقم الباتش، وتاريخ الصلاحية. اعتمد الفحص.
✔ حالة الإذن بقت «مقبول جودة»، والكميات المقبولة + الباتش + الصلاحية اتسجّلوا.
❌ لو حاولت تقبل+ترفض أكتر من كمية البند → يُرفض.
5
مشرف
اعتمد إذن الاستلام. من شاشة إذون الاستلام، اضغط «اعتماد» على الإذن المقبول-جودة.
🔑 اللحظة المحورية: حالة الإذن بقت «بانتظار اعتماد الاستلام» (pending_receipt) — ولسه مفيش مخزون اتحرّك، ومفيش قيد GR/IR اتسجّل، وكمية أمر الشراء المستلمة لسه 0. اتعمل إذن إضافة كمسودة مستنّي أمين المخازن.
6
أمين المخازن
اعتمد إذن الإضافة. روح لإذون الإضافة، هتلاقي إذن مسودة بكميات الجودة (8). اعتمده. إذون الإضافة ↗
✔ دلوقتي بس: الرصيد يدخل المخزن (8) · كمية أمر الشراء المستلمة تتحدّث (8) · قيد GR/IR يتسجّل (مدين مخزون / دائن GR-IR) · حالة إذن الاستلام بقت «معتمد». والباتش/الصلاحية اتحفظوا على حركة المخزون.
7
حسابات
اعمل الفاتورة من إذن الاستلام. من شاشة إذون الاستلام، على الإذن المعتمد اضغط «إنشاء فاتورة». عدّل السعر ليطابق فاتورة المورّد (لو مختلف)، ورحّل الفاتورة.
✔ الفاتورة اتعملت بالكمية المستلمة (8) — مش المطلوبة (10). عند الترحيل: GR/IR يتصفّى، وأي فرق سعر يروح لحساب انحراف الأسعار. أمر الشراء يبان عليه «مفوتر». الفواتير ↗
8
النظام
افتح تتبّع أمر الشراء. من شاشة أمر الشراء، افتح عرض الأمر → قسم «مسار المستند».
✔ الـTimeline بيعرض السلسلة كاملة: طلب ← أمر ← إذن استلام (+ إذن الإضافة) ← الفاتورة.
9
مخازن
راجع الصلاحية. تأكّد إن الرصيد دخل المخزن (8)، وإن تقرير «الدفعات قرب انتهائها» بيعرض الباتش لو صلاحيته قبل التاريخ اللي تختاره. أرصدة المخزون ↗
✔ الرصيد صح، والباتش/الصلاحية متسجّلين على الحركة. (ملاحظة: الصلاحية تتسجّل وتتقرّر — الفرض عند الصرف FEFO مشروع لاحق.)

ج اختبارات الحُرّاس (جوهر الوضع المُحكَم)

دي اللي بتثبت إن «المُحكَم» فعلًا بيمنع الفوضى. كل واحد المفروض يُرفض.

🚫 ١) إذن استلام تاني على نفس أمر الشراء وهو لسه مفتوح
جرّباعمل GRN تاني على نفس أمر الشراء قبل ما تخلّص الأول (قبل اعتماد إذن إضافته).
المتوقّع ✔يُرفض برسالة إن فيه إذن استلام مفتوح بالفعل (باسم الإذن). لازم تكمّله أو تلغيه الأول.
🚫 ٢) فاتورة تانية لنفس إذن الاستلام
جرّببعد ما تعمل فاتورة من الإذن (خطوة ب-7)، حاول تعمل فاتورة تانية من نفس الإذن.
المتوقّع ✔يُرفض برسالة إن الإذن متفوتر بالفعل (باسم الفاتورة).
🚫 ٣) فاتورة يدوية من أمر الشراء مباشرة
جرّبمن أمر الشراء، حاول «إنشاء فاتورة من أمر الشراء».
المتوقّع ✔يُرفض/يوجّهك إن الفاتورة لازم تتعمل من إذن الاستلام في الوضع المُحكَم.
🚫 ٤) إذن إضافة يدوي بدون صلاحية
جرّببمستخدم ماعندوش صلاحية «إذن يدوي»، حاول تعمل إذن إضافة يدوي (شراء/بدون مرجع) من شاشة المخازن.
المتوقّع ✔يُرفض (403) — الإذون اليدوية مقيّدة في المُحكَم. (إذون الإضافة الشرائية بتتعمل من الفلو بس.)
🚫 ٥) إطفاء الوضع المُحكَم وفيه إذن «بانتظار الاستلام»
جرّبسيب إذن استلام في حالة «بانتظار اعتماد الاستلام» (خطوة ب-5، من غير ما أمين المخازن يعتمده)، وارجع لنمط الشراء = «بسيط».
المتوقّع ✔يُرفض — ماينفعش تطفّي المُحكَم وفيه إذون مستنّية اعتماد أمين المخازن. اعتمدها أو ألغِها الأول.
إلغاء آمن: جرّب تلغي إذن استلام في حالة «بانتظار الاستلام» → المفروض يتلغي هو وإذن إضافته المسودة من غير ما يتحرّك أي مخزون أو يتسجّل أي قيد (لأنه لسه ما دخلش المخزن).

د تشيك-ليست النتائج

النقطةنجاح لو…
تفعيل المُحكَميُرفض بدون حسابات GR/IR؛ ينجح معاها؛ الإعدادات المحكومة تتقفل
اعتماد GRNيوصل «بانتظار الاستلام» بلا مخزون/GR-IR/كمية مستلمة
اعتماد أمين المخازنساعتها بس: مخزون يدخل + كمية مستلمة تتحدّث + GR/IR يتسجّل
الفاتورةبالكمية المستلمة (8) مش المطلوبة (10)
الباتش/الصلاحيةالجودة تسجّلهم؛ يظهروا على الحركة + تقرير الانتهاء
التتبّعمسار المستند يعرض السلسلة كاملة
الحُرّاس ١–٥كلهم يُرفضوا زي المتوقّع
وضع «بسيط»(اختبار عكسي) بعد ما ترجع بسيط: كل ده يرجع زي الأول — الفاتورة تحرّك المخزون في خطوة واحدة

ه ملاحظات وتنظيف