كل الأعمال ←

تجزئة — بيع أجهزة كهربائية بالتقسيط · منشور وشغّال

نظام الأقساط

نظام كامل لإدارة البيع بالتقسيط في معرض أجهزة كهربائية: من طلب العميل لحد آخر قسط، بكل خطوة موافقة وكل جنيه بينهم.

العميل
معرض أجهزة كهربائية (الاسم مش مذكور) — اسم المعرض مش مذكور في أي مكان في الحزمة.
نوع النظام
نظام تشغيل داخلي كامل
نظام الأقساط
1 / 6

المعرض كان بيبيع بالتقسيط من غير نظام: كشاكيل ورق للعقود وجداول الأقساط، وملفات إكسل للمتابعة، وحسابات بالآلة الحاسبة لكل عملية بيع. النظام ده بيجمع الدورة كلها في مكان واحد — طلب، تحرٍ، موافقة المدير، تنفيذ العقد، جدول أقساط، تحصيل، خزائن ومخزون — وكل خطوة بتفتح اللي بعدها، والأرصدة مشتقّة مش مكتوبة، وكل تعديل بيكتب سجل تدقيق بلقطة قبل وبعد.

67
جدول في قاعدة البيانات
51
مسار API
250
إجراء سيرفر
61
مفتاح صلاحية
26
صفحة في التنقّل
97,855
سطر كود
1,063
commit
المجال
تجزئة — بيع أجهزة كهربائية بالتقسيط
نوع النظام
نظام تشغيل داخلي كامل (طلبات · عقود · تحصيل · خزائن · مخزون · تقارير)
التغطية
٢٦ صفحة في التطبيق · ٥١ مسار API · ٦٧ جدول في قاعدة البيانات
المستخدمين
موظفو المعرض بأدوار مختلفة: مدير، كاشير، محقِّق
اللغة
عربي بالكامل، اتجاه من اليمين للشمال، وأرقام عربية شرقية (٠-٩)
الأجهزة
ديسكتوب وموبايل — نفس النظام، مش نسخة مصغّرة
المدة
من ٢٦ يناير ٢٠٢٦ لحد ٥ يوليو ٢٠٢٦ (١٬٠٦٣ commit)

المشكلة قبل النظام

المعرض كان بيبيع بالتقسيط من غير نظام. الشغل كان متوزّع على تلات حاجات مع بعض: كشاكيل ورق للعقود وجداول الأقساط، وملفات إكسل للمتابعة، وحسابات بالآلة الحاسبة لكل عملية بيع.

اقرأ التفاصيلإخفاء التفاصيل5 نقطة
مفيش رقم واحد صح
رصيد الخزنة في ورقة، والمقبوضات في ملف إكسل، والمتبقي على العميل في كشكول تالت. أي سؤال بسيط زي «العميل ده باقي عليه كام؟» محتاج فتح تلات مصادر ومطابقتهم.
حساب القسط بيتعمل من أول وجديد كل مرة
سعر الجهاز، المقدم، المصاريف الإدارية، نسبة الربح حسب المدة — كل ده بالآلة الحاسبة، وأي غلطة في الضرب بتفضل في العقد لآخر يوم فيه.
التحصيل بالذاكرة
مين متأخر النهاردة؟ الإجابة كانت تقليب صفحات، فالمتأخر بيفضل متأخر لحد ما حد يفتكره.
المسؤولية مش واضحة
مين قبض المبلغ ده؟ ومين وافق على الطلب ده؟ الورق ما بيجاوبش.
العُهد بتكبر في إيد الموظفين
من غير ما حد ياخد باله، لأن مفيش رقم بيتحدّث لحظيًا.

المدخل

اقرأ التفاصيلإخفاء التفاصيل

قبل أي كود، الشغل الأول كان فهم إزاي المعرض بيشتغل فعلًا — مش إزاي المفروض يشتغل.

البيع بالتقسيط مش معاملة، ده علاقة ممتدة لحد ٢٠ شهر. النظام لازم يمسك العلاقة دي كاملة: الجهاز، الضامن، جدول الأقساط، كل دفعة، وكل مكالمة متابعة.

الثقة هي المنتج الحقيقي. المعرض بيدّي بضاعة مقابل وعد. عشان كده التحرّي والضامن وإيصال الأمانة مش إجراءات شكلية — دي جوهر الشغل، ولازم تكون خطوات إلزامية في النظام مش خانات اختيارية.

الفلوس بتدخل من أكتر من باب — كاش في المعرض، ومحفظة رقمية، وتحصيل في الشارع. أي نظام ما بيوحّدش المسارات دي في خزنة واحدة مفهومة هيسيب فجوة.

الموظف مش هيسيب شغله عشان يملأ بيانات. أي شاشة بتاخد وقت أطول من الورق مش هتتستخدم.

قرارات هندسية بتفرق فعلًا

اقرأ التفاصيلإخفاء التفاصيل14 نقطة
  1. 01

    الأرصدة مشتقّة، مش مخزّنة

    رصيد أي خزنة ناتج من معادلة واحدة على حركاتها الفعلية، ومفيش مسار في النظام بيسمح بتعديل الرصيد بالإيد.

  2. 02

    المبالغ أعداد صحيحة بالجنيه

    مفيش أرقام عشرية عائمة في أي عملية حسابية على فلوس، فمفيش خطأ تقريب بيتراكم.

  3. 03

    قاعدة التسعير في مكان واحد

    نفس المعادلة بالظبط بتغذّي الحاسبة، ونموذج الطلب، والعقد. الرقم اللي البايع بيقوله للعميل هو الرقم اللي في العقد.

  4. 04

    الحذف ناعم في كل مكان

    كل صف قابل للاسترجاع من سلة محذوفات مركزية، وكل استعلام بيفلتر المحذوف — فمفيش حاجة بتضيع بضغطة غلط.

  5. 05

    مصفوفة صلاحيات واحدة

    سجل واحد بيغذّي صفوف قاعدة البيانات، وإخفاء عناصر القايمة، وحارس الصفحة على السيرفر — فالتلاتة ما ينفعش يختلفوا.

  6. 06

    الفرض على السيرفر مش في الواجهة

    إخفاء الزرار راحة للمستخدم؛ المنع الحقيقي في الـaction نفسه وفي قيود الاستعلام.

  7. 07

    التدقيق بلقطة قبل/بعد

    سجل النشاط بيجاوب «إيه اللي اتغيّر، من إيه، لإيه، ومين عمله» — مش مجرد سطر وصفي.

  8. 08

    كاش على جهاز المستخدم بنظام «اعرض فورًا ثم حدّث بصمت»

    الفتحة الباردة بترسم من الجهاز على طول، والتحديث بيحصل في الخلفية — وأي تعديل بيبطّل الكاش المتأثر فورًا.

  9. 09

    بدون استعلام دوري

    النظام كاش-أولًا مع إبطال عند التغيير، بدل ما يفضل يسأل السيرفر كل شوية ويستهلك موارد من غير داعي.

  10. 10

    الأعمدة التقيلة مستبعدة من القوائم

    الصور المخزّنة كنصوص base64 ما بتتحمّلش في شاشات القوائم، بس في شاشة التفاصيل — فالقوائم بتفضل خفيفة.

  11. 11

    التواريخ بالتوقيت المحلي عبر Intl

    المنطقة الزمنية فيها توقيت صيفي، فمقارنة الأيام بتتعمل بسلسلة يوم تقويمي مش بإزاحة ثابتة مكتوبة في الكود — وده اللي بيمنع القسط إنه يتحسب متأخر يوم بدري.

  12. 12

    جدول مرجعي واحد

    كل جدول في النظام بيطابق نفس المواصفة: ترتيب، بحث، فلاتر، اختيار أعمدة، أعمدة قابلة لتغيير العرض، حالة عرض محفوظة لكل مستخدم، وحالة فاضية مفيدة.

  13. 13

    الطباعة عبر نافذة مستقلة

    الإيصالات وكشوف الحساب بتتبني كصفحة قائمة بذاتها بقواعد طباعة صحيحة، بدل ما تعتمد على تنسيق الشاشة.

  14. 14

    ممنوع عرض المعرّفات الداخلية

    المستخدم بيشوف أكواد مقروءة زي `CNT-1039` مش معرّفات قاعدة البيانات.

القواعد المفروضة في الكود

أهم حاجة في النظام إن كل خطوة بتفتح اللي بعدها، ومفيش حالة بتتظبط من غير قرار الخطوة اللي قبلها. المسار: طلب جديد ← تحرٍ ← موافقة المدير ← تنفيذ العقد ← جدول أقساط، وفيه مسار رفض بسبب موثّق.

اقرأ التفاصيلإخفاء التفاصيل7 نقطة

الطلب ما يوصلش للموافقة قبل التحرّي

موظف التحرّي بيزور ويكتب تقييمه، وتقييمه بيتسجّل مع الطلب — فقرار المدير مبني على حاجة مكتوبة.

التنفيذ مقفول من غير موافقة المدير

مفيش عقد بيتكوّن ومفيش بضاعة بتخرج قبل القرار ده.

التنفيذ نفسه له تلات شروط لازم تتحقق

تم التواصل مع العميل، تم طلب المنتج، واتوقّع إيصال الأمانة. الشروط دي مفاتيح فعلية بتقفل زرار التنفيذ.

المقدم لازم يتحصّل بالكامل

قبل ما العقد ينفّذ.

مدد التقسيط ٨ أو ١٤ أو ٢٠ شهر بس

مفروضة على مستوى قاعدة البيانات نفسها، مش على مستوى الواجهة.

السداد تسلسلي

مينفعش تدفع قسط قبل اللي قبله، فترتيب الدفتر ما يتلغبطش.

الدفع الرقمي بيفضل معلّق

لحد ما المدير يشوف صورة التحويل ويأكّد. لحد اللحظة دي رصيد المحفظة ما اتغيّرش.

العربية والاستجابة

مش ترجمة، ده تصميم عربي من الأساس. كل التخطيط من اليمين للشمال، والأرقام المعروضة عربية شرقية (٠-٩) عبر محوِّل عام بيشتغل قبل الرسم عشان ما يحصلش وميض بأرقام لاتينية.

اقرأ التفاصيلإخفاء التفاصيل5 نقطة
  • الجداول العريضة بتتزحلق جوّه حاويتها والصفحة نفسها ما بتتزحلقش يمين وشمال.
  • حجم خط الحقول كبير كفاية إن الموبايل ما يعملش تكبير تلقائي عند الكتابة.
  • الارتفاع بيستخدم وحدات العرض الديناميكي عشان أشرطة المتصفح المتحركة على أندرويد.
  • يتثبّت كتطبيق: فيه ملف manifest وأيقونات، فالموظف بيضيفه على الشاشة الرئيسية ويفتحه من غير شريط متصفح.
  • التحصيل بره المعرض بيتعمل من نفس النظام كامل على الموبايل، مش نسخة مصغّرة منه.

الدخول من الموبايل

1 / 10

الحوكمة والتتبّع

اقرأ التفاصيلإخفاء التفاصيل

٦١ مفتاح صلاحية — ٢٨ للصفحات، ٣٠ للإجراءات، ٣ للتقارير — كلها من سجل واحد.

كل تعديل بيكتب سجل تدقيق مربوط بالكيان، بلقطة قبل وبعد ومنفّذ ووقت.

كل حذف قابل للاسترجاع من سلة محذوفات مركزية.

القيود على مستوى الاستعلام — الموظف بيشوف عهدته هو، مش عهدة غيره.

الشاشات

28 شاشة

كل الأسماء والأرقام والمبالغ الظاهرة في الصور بيانات تجريبية مولّدة بالكامل على قاعدة بيانات منفصلة ومؤقتة على الجهاز المحلي، بمولّد أرقام عشوائية ببذرة ثابتة. مفيش أي بيانات عملاء حقيقية ولا أي مبلغ حقيقي، ومفيش رقم حقيقي اتغيّر مقياسه — فمفيش طريقة تستنتج بيها أرقام المعرض الحقيقية من الصور دي. هوية المعرض نفسها (الاسم والعنوان والتليفون ورقم المحفظة) كانت مكتوبة في الكود في ٤٠ ملف، منها ملفات الشعار SVG اللي فيها الاسم كنص، واتبدّلت في النسخة اللي اتبنى منها التطبيق قبل التصوير. وقبل كل لقطة بيتعمل مسح لنصوص الصفحة، وفيه فحص بيرفض اللقطة تمامًا لو لقى أي سلسلة من قائمة الممنوعات — فمفيش صورة اتكتبت على القرص من غير ما تعدّي الفحص.

الشغل اليومي

شاشة الدخولجلسة مخزَّنة في قاعدة البيانات، مش مجرد كوكي
شاشة الدفع — نقطة البدايةكل نوع حركة له مساره وتوثيقه المنفصل
شاشة التحصيلنسبة السداد محسوبة من الأقساط الفعلية، مش مكتوبة بالإيد
حاسبة الأقساطقاعدة التسعير الحقيقية للمعرض، مطبَّقة في مكان واحد

دورة الطلب — من التقديم للتنفيذ

لوحة طلبات البيعالطلب بيتنقّل بين مراحل مقفولة، مش حالة حرة
نفس اللوحة بعين المحقِّقالصلاحية بتغيّر المعروض على السيرفر
شاشة الاعتمادالتنفيذ مقفول لحد ما المدير يوافق
نموذج طلب تقسيط جديدالتحقق عند الإدخال، والقسط بيتحسب فوري
القرض الحسنمسار مستقل بنفس الانضباط وبدون أي فايدة

الخزائن والحركة المالية

الخزائن والعُهدرصيد كل خزنة مشتقّ من حركاتها، مش مكتوب
سجل حركة الخزنةكل جنيه داخل أو خارج له صف يفسّره
المعاملات الماليةجدول واحد بكل خصائص العرض المطلوبة
تأكيد التحويلات الرقميةالفلوس الرقمية ما بتدخلش الخزنة إلا بعد مراجعة بشرية
الجمعياتالتزام شهري متكرر متتبَّع جوّه نفس الخزنة
حساب الشركاءتوزيع الأرباح محسوب من دفتر فعلي

ملفات العملاء والأقساط

سجل العملاءالمدفوع والمتبقي محسوبين لكل عميل
ملف العميلتاريخ العميل كله في شاشة واحدة
جدول الأقساطكل الاستحقاقات في شبكة واحدة
مستويات العملاءقواعد التصنيف في قاعدة البيانات، مش في الكود

المخزن والموردين

المخزن — وحدة بوحدةكل وحدة متتبَّعة لحد العقد اللي راحت فيه
الموردينرصيد كل مورد مشتقّ من دفتره

الصلاحيات والتدقيق

المستخدمون والصلاحياتمصفوفة صلاحيات واحدة بتحكم الواجهة والسيرفر
سجل النشاطكل تعديل متسجَّل بصورة قبل وبعد
التقاريرأرقام التقرير بتطابق الشاشات التشغيلية
سلة المحذوفاتالحذف قابل للتراجع، والبيانات ما بتتشالش فعليًا
توثيق قاعدة البياناتالتوثيق جوّه التطبيق ومربوط بالمخطط الفعلي

نفس الشاشة بأدوار مختلفة

شاشة الدفع بحساب كاشيرالكاشير بيشوف عهدته هو بس
سجل العملاء بحساب كاشيرنفس البيانات، صلاحيات أقل

الأثر

قبلبعد
«العميل ده باقي عليه كام؟» — فتح ومطابقة تلات مصادررقم واحد على الشاشة، مشتقّ من الأقساط
حساب القسط — بالآلة الحاسبة كل مرةمعادلة واحدة، نفس الرقم في الحاسبة والعقد
مين متأخر النهاردة — تقليب صفحات بالذاكرةقايمة شغل مرتّبة بالمستحق
مين قبض / مين وافق — مش متسجّلسجل تدقيق بمنفّذ ووقت وقيمة قبل وبعد
رصيد الخزنة — بيتحسب في آخر اليوممشتقّ لحظيًا من الحركات
موافقة المدير — شفهيةبوابة مقفولة في الكود، مفيش تنفيذ من غيرها
التحصيل بره المعرض — ورقنفس النظام كامل على الموبايل

الأثر التشغيلي هنا موصوف من ناحية إيه اللي بقى ممكن، مش بأرقام أداء — لأن أرقام التشغيل الحقيقية للمعرض مش متقاسة هنا، وما اتقيستش عن قصد.

الأرقام

حجم النظام

ملفات الصفحات
40
صفحات التنقّل
26
مسارات API
51
جداول قاعدة البيانات
67
الأنواع التعدادية
52
إجراءات السيرفر
250
مفاتيح الصلاحيات (٢٨ صفحة · ٣٠ إجراء · ٣ تقارير)
61
أسطر الكود
97,855
مكوّنات الواجهة (منها ٢٣ عنصر أساسي مشترك)
115
ملفات الاختبار
90
الـcommits
1,063
هجرات قاعدة البيانات
15
أول commit ← آخر commit
2026-01-26 → 2026-07-05

كل رقم هنا متقاس بأمر قابل لإعادة التشغيل من جذر المستودع. مفيش رقم واحد مقدَّر بالتخمين.

أرقام ظاهرة في الصور

عملاء مولّدين
64
عقود
54
أقساط
876
مدفوعات معتمدة
428
مدفوعات معلّقة
7
وحدات مخزون (١١٠ مباعة · ٨١ متاحة)
191
طلبات بيع (عبر ٦ مراحل)
23
طلبات قرض حسن
18

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

تحقّق من قاعدة التسعير

السعر كاش (ج.م)
27,500
المقدم (ج.م)
5,500
القسط — ٨ شهور
4,390
القسط — ١٤ شهر
2,480
القسط — ٢٠ شهر
1,845

الأرقام الظاهرة في صورة الحاسبة. اتحسبت يدويًا من قاعدة التسعير (خصم المقدم، ثم +٤٪ مصاريف إدارية، ثم نسبة ربح لكل مدة، بتقريب لأعلى لأقرب ٥ ج.م) وطلعت مطابقة، وإجمالي كل خطة = القسط × عدد الشهور. المبالغ نفسها بيانات تجريبية.

أرقام ما اتقالتش عن قصد

عدد العملاء الحقيقيين للمعرض
حجم المبيعات أو الإيراد الحقيقي
عدد المستخدمين النشطين
ساعات موفّرة أو نسبة تقليل أخطاء
زمن التحميل أو أرقام الأداء
نسبة تغطية الاختبارات
مدة التطوير بالساعات

مفيش رقم منهم مذكور في أي مكان في المستند ده، لأنه مش متقاس. عدد ملفات الاختبار متقاس (٩٠) لكن نسبة التغطية ما اتشغّلتش، وتواريخ الـcommits متقاسة لكن ساعات الشغل الفعلية لأ. قاعدة بيانات الإنتاج اتقرر عدم لمسها نهائيًا، فمفيش أي كلام عن عملاء المعرض الحقيقيين أو مبيعاته أو إيراده. ومفيش قياس قبل وبعد، فمفيش ادعاء بـ«وفّر كذا ساعة» أو «قلّل الأخطاء بنسبة كذا».