نظام إدارة التقسيط والعقود
شرح تفصيلي شامل للنظام والشاشات والأفكار المطبقة
جدول المحتويات
نظرة عامة على النظام الوحدات الأساسية منطق العقود والتقسيط منطق الدفعات والسداد منطق الأقساط التفصيلي الحسابات المالية نظام الشركاء التقارير والإحصائيات شرح الشاشات بالتفصيل الميزات المتقدمةالهدف من النظام
نظام متكامل لإدارة عمليات بيع المنتجات بالتقسيط، مع إمكانية تتبع كامل لعمليات السداد، حساب الأرباح، إدارة الشركاء، والحصول على تقارير مالية تفصيلية.
إدارة العملاء
قاعدة بيانات كاملة للعملاء والضامنين
إدارة العقود
عقود متعددة بشروط مختلفة
إدارة التقسيط
متابعة الأقساط والسداد
التقارير المالية
تقارير شاملة ومفصلة
البيانات المخزنة:
- الاسم، رقم الهاتف، العنوان
- البطاقة الشخصية (رقم - صورة)
- صورة إيصال الكهرباء
- صورة العميل
- ربط بضامن (اختياري)
- إنشاء عميل جديد من داخل نموذج العقد مباشرة
- البحث السريع عن العملاء
- عرض جميع العقود المرتبطة بالعميل
البيانات المخزنة:
- الاسم، رقم الهاتف، العمر
- البطاقة الشخصية (رقم - صورة)
- العنوان
- ملاحظات عامة
الضامن يرتبط بالعقد لضمان السداد في حالة التعثر. يمكن أن يكون الضامن واحد لعدة عقود.
البيانات المخزنة:
- اسم المنتج، الموديل، اللون
- سعر الشراء (من المورد)
- سعر البيع (للعميل)
- التصنيف (Category)
- العلامة التجارية (Brand)
- الوسوم (Tags) - متعدد
البيانات المخزنة:
- العنوان، الوصف، المبلغ
- التصنيف (ExpenseCategory)
- تاريخ الصرف، طريقة الدفع
- رقم الإيصال، المورد
- المرفقات (صور - مستندات)
- حالة الموافقة (pending/approved/rejected)
يتم اختيار العميل والضامن (إن وجد) والمنتجات
السعر الأصلي + نسبة الربح = سعر التقسيط النهائي
عدد الأقساط، قيمة القسط، الفترة بين الأقساط (شهري/ربع سنوي/نصف سنوي/سنوي)
يقوم النظام بإنشاء جدول الأقساط بناءً على الشروط المحددة
تسجيل المدفوعات، تحديث حالة الأقساط، حساب المتبقي
1. عند إدخال السعر الأصلي ونسبة الربح:
2. عند تحديد عدد الأقساط:
3. حساب تواريخ الأقساط:
التحسينات المطبقة:
- تحديث قيمة القسط تلقائياً عند تغيير السعر الأصلي
- تحديث قيمة القسط تلقائياً عند تغيير نسبة الربح
- تحديث قيمة القسط تلقائياً عند تغيير عدد الأقساط
- حساب تاريخ أول قسط تلقائياً بناءً على الفترة المختارة
| الحقل | الوصف | النوع | مطلوب |
|---|---|---|---|
customer_id |
العميل | علاقة (Select) | نعم |
guarantor_id |
الضامن | علاقة (Select) | اختياري |
products |
المنتجات | علاقة متعددة | نعم |
contract_date |
تاريخ العقد | تاريخ | نعم |
contract_image |
صورة العقد | رفع ملف | اختياري |
mobile_serial |
أرقام السيريال | نص متعدد الأسطر (JSON) | اختياري |
original_price |
السعر الأصلي | رقم (Numeric) | نعم |
profit_percentage |
نسبة الربح % | رقم (Numeric) | نعم |
installment_price |
سعر التقسيط النهائي | رقم (محسوب تلقائياً) | تلقائي |
price_difference |
فرق السعر (الربح) | رقم (محسوب تلقائياً) | تلقائي |
installment_count |
عدد الأقساط | رقم صحيح | نعم |
installment_value |
قيمة القسط | رقم (محسوب تلقائياً) | تلقائي |
installment_interval |
الفترة بين الأقساط | قائمة (شهري/ربع سنوي/نصف سنوي/سنوي) | نعم |
first_installment_date |
تاريخ أول قسط | تاريخ (محسوب تلقائياً) | تلقائي |
notes |
ملاحظات | نص طويل | اختياري |
status |
حالة العقد | قائمة | نعم |
عند إنشاء أو تعديل العقد:
يقوم النظام بتوليد جدول الأقساط تلقائياً بناءً على:
المحدد في العقد
المحسوبة تلقائياً
شهري/ربع سنوي/...
بنية القسط (Installment Model):
| الحقل | الوصف | القيمة الافتراضية |
|---|---|---|
contract_id |
رقم العقد المرتبط | - |
due_date |
تاريخ الاستحقاق | محسوب حسب الفترة |
value |
قيمة القسط المستحق | من العقد |
paid_amount |
المبلغ المدفوع فعلياً | 0 |
payment_date |
تاريخ السداد الفعلي | null |
is_paid |
هل تم السداد؟ | false |
notes |
ملاحظات | - |
ملاحظات مهمة:
- يمكن الدفع جزئياً (paid_amount أقل من value)
- is_paid يتحول لـ true فقط عند الدفع الكامل
- يمكن تعديل تاريخ الاستحقاق يدوياً إذا لزم الأمر
مدفوع
is_paid = true
قادم
due_date > اليوم
اليوم
due_date = اليوم
متأخر
due_date < اليوم
يظهر عدد الأقساط المتأخرة كـ Badge في قائمة التنقل للتنبيه
دفعات مرتبطة بأقساط
يتم تسجيلها عند سداد قسط محدد من جدول الأقساط
- يجب اختيار عقد أولاً
- اختيار القسط المراد سداده
- إدخال المبلغ المدفوع
- تحديث حالة القسط تلقائياً
دفعات مباشرة (غير مرتبطة بقسط)
دفعات إضافية أو مبالغ خارج جدول الأقساط
- اختيار العميل
- اختيار العقد
- إدخال المبلغ مباشرة
- تُحتسب في إجمالي المدفوعات
| الحقل | الوصف | مطلوب |
|---|---|---|
customer_id |
اختيار العميل (يتم تصفية العقود بناءً عليه) | نعم |
contract_id |
اختيار العقد (يتم تصفية الأقساط بناءً عليه) | نعم |
installment_id |
🆕 اختيار القسط (اختياري تماماً)
اتركه فارغاً وسيتم التوزيع التلقائي على جميع الأقساط
|
اختياري |
amount |
المبلغ المدفوع | نعم |
payment_date |
تاريخ الدفع | نعم |
payment_method |
طريقة الدفع (نقدي/بنكي/...) | اختياري |
receipt_number |
رقم الإيصال | اختياري |
reference_number |
الرقم المرجعي | اختياري |
status |
حالة الدفع (completed/pending/...) | نعم |
notes |
ملاحظات | اختياري |
created_by |
المستخدم الذي سجل الدفعة | تلقائي |
عند اختيار العميل، يتم:
- تفعيل قائمة العقود
- عرض عقود هذا العميل فقط
- مسح قيمة العقد والقسط السابقة
عند اختيار العقد، يتم:
- تفعيل قائمة الأقساط
- عرض الأقساط غير المدفوعة فقط
- عرض معلومات العقد (رقم - المبلغ)
- مسح قيمة القسط والمبلغ السابقة
ببساطة أدخل المبلغ الذي دفعه العميل:
- النظام الجديد: إدخال المبلغ مباشرة (مثال: 2000 جنيه)
- اختياري: يمكنك اختيار قسط محدد إذا أردت
- التوزيع التلقائي: النظام يوزع المبلغ على الأقساط تلقائياً
عند الحفظ، يحدث التالي تلقائياً:
- ✅ حفظ سجل الدفعة
- 🔍 جلب الأقساط غير المدفوعة بالترتيب الزمني
- 📊 توزيع المبلغ على الأقساط تلقائياً
- 🎨 تحديث حالة كل قسط (مدفوع/جزئي/غير مدفوع)
- 💰 تحديث
paid_amountفي كل قسط - 📈 تحديث إجمالي المدفوعات في العقد
النتيجة: قسط 1 ✅ (700) + قسط 2 ✅ (700) + قسط 3 ⚠️ (600) = 2000
مثال عملي على الحسابات:
| البيان | القيمة | طريقة الحساب |
|---|---|---|
| سعر التقسيط الكلي | 12,000 جنيه | installment_price |
| أقساط مدفوعة (5 أقساط × 1000) | 5,000 جنيه | total_installments_paid |
| دفعات مباشرة | 2,000 جنيه | total_paid |
| إجمالي المحصل | 7,000 جنيه | 5,000 + 2,000 |
| المتبقي | 5,000 جنيه | 12,000 - 7,000 |
| نسبة السداد | 58.33% | (7,000 ÷ 12,000) × 100 |
البيانات:
- الاسم، العنوان
- رقم الهوية، الهاتف
- الوظيفة
- رأس المال الأولي
- صورة الشريك
- صورة البطاقة
البيانات:
- الشريك
- المبلغ
- التاريخ
- طريقة الدفع
- الملاحظات
البيانات:
- الشريك
- المبلغ
- التاريخ
- طريقة الصرف
- الملاحظات
حساب أرباح الشركاء:
يتم حساب حصة كل شريك من الأرباح في تقرير الأرباح بناءً على:
- نسبة مساهمة الشريك من إجمالي رأس المال
- الفترة الزمنية المحددة
- إجمالي الأرباح المحققة
يعرض:
- الرصيد الافتتاحي: قيمة محددة في الإعدادات
- الإيرادات:
- الأقساط المسددة
- إيداعات الشركاء
- المصروفات:
- المصاريف المعتمدة
- مسحوبات الشركاء
- مشتريات المنتجات
- الرصيد الختامي: الرصيد + الإيرادات - المصروفات
- من تاريخ / إلى تاريخ
- قيم افتراضية من الإعدادات
يعرض:
- تفاصيل كل عقد:
- العميل
- المنتجات
- سعر الشراء الإجمالي
- سعر التقسيط
- الربح = التقسيط - الشراء
- توزيع الأرباح على الشركاء
- من تاريخ / إلى تاريخ
- العميل
- المنتج
- العلامة التجارية
- التصنيف
- الأقساط المستحقة اليوم
- الأقساط المستحقة هذا الأسبوع
- الأقساط المستحقة هذا الشهر
- الأقساط المتأخرة
- الأقساط المدفوعة في فترة
- كشف حساب عميل
- عقود العميل
- المدفوعات
- الأقساط المتبقية
- نسبة السداد
- كشف حساب شريك
- حركات الشريك
- الإيداعات
- المسحوبات
- حصة الأرباح
الإحصائيات المعروضة:
عدد العملاء المسجلين
عدد العقود الجارية
المستحقة اليوم
للمتابعة الفورية
الويدجتس (Widgets):
- DashboardStatsWidget: إحصائيات عامة بـ Charts
- TodayInstallmentsWidget: أقساط اليوم
- LatestContractsWidget: أحدث العقود
- InstallmentsChart: رسم بياني للأقساط
- PaymentsOverviewWidget: نظرة عامة على المدفوعات
- ExpenseOverviewWidget: نظرة عامة على المصروفات
- ProductSalesChart: مبيعات المنتجات
العمليات المتاحة:
إضافة عقد جديد
- اختيار/إنشاء العميل
- اختيار/إنشاء الضامن (اختياري)
- اختيار/إنشاء المنتجات
- تحديد تاريخ العقد
- رفع صورة العقد (اختياري)
- إدخال أرقام السيريال (اختياري)
- إدخال السعر الأصلي
- تحديد نسبة الربح
- اختيار عدد الأقساط
- اختيار الفترة بين الأقساط
- مراجعة الحسابات التلقائية
- الحفظ
عرض العقد
- معلومات العقد الكاملة
- جدول الأقساط (Relation Manager)
- جدول المدفوعات (Relation Manager)
- حالة السداد (Progress Bar)
- الإحصائيات المالية
- InstallmentsRelationManager
- PaymentsRelationManager
الجدول (Table) يعرض:
- رقم العقد والعميل
- تاريخ الاستحقاق
- قيمة القسط
- المبلغ المدفوع
- حالة السداد (Badge ملون)
- تاريخ السداد الفعلي
الفلاتر المتاحة:
- مدفوع
- غير مدفوع
- متأخر
- اليوم
- هذا الأسبوع
- هذا الشهر
- العميل
- العقد
- التاريخ
يظهر عدد الأقساط المتأخرة في قائمة التنقل باللون الأحمر للتنبيه الفوري
النموذج يحتوي على:
- اختيار العميل: قائمة منسدلة مع بحث
- اختيار العقد: تتفعل بعد اختيار العميل، تعرض عقود العميل فقط
- اختيار القسط: (اختياري) تعرض الأقساط غير المدفوعة للعقد المختار
- المبلغ: يتم ملؤه تلقائياً عند اختيار قسط، أو يدوياً للدفعات المباشرة
- تاريخ الدفع: التاريخ الفعلي للسداد
- طريقة الدفع: (اختياري) نقدي/بنكي/...
- أرقام مرجعية: رقم الإيصال والرقم المرجعي
- الحالة: completed/pending
- ملاحظات: أي تفاصيل إضافية
التفاعلية (Reactive):
- تغيير العميل → مسح العقد والقسط
- تغيير العقد → مسح القسط والمبلغ
- اختيار قسط → ملء المبلغ تلقائياً
البيانات المعروضة:
- اسم المنتج
- الموديل
- اللون
- سعر الشراء
- سعر البيع
- التصنيف (Category)
- العلامة التجارية (Brand)
- الوسوم (Tags)
- تاريخ الإضافة
نظام الموافقات:
المستخدم ينشئ مصروف جديد بحالة "في الانتظار" (pending)
المسؤول يراجع المصروف ويضيف ملاحظات
الموافقة (approved) أو الرفض (rejected)
فقط المصاريف الموافق عليها تُحتسب في التقارير المالية
الحقول:
- العنوان، الوصف، المبلغ
- التصنيف (ExpenseCategory)
- تاريخ الصرف
- طريقة الدفع
- رقم الإيصال، المورد
- المرفقات (صور/ملفات)
- مصاريف متكررة (اختياري)
- توزيع المدفوعات تلقائياً على الأقساط
- لا حاجة لاختيار قسط محدد
- استخدام Observer Pattern
- تحديث حالات الأقساط تلقائياً
- حسابات دقيقة 100%
- توفير 90% من الوقت
→ قسطين كاملين + قسط جزئي تلقائياً!
- حساب سعر التقسيط من السعر الأصلي + نسبة الربح
- حساب قيمة القسط عند تغيير أي متغير
- حساب تاريخ أول قسط حسب الفترة المختارة
- تحديث إجمالي المدفوعات تلقائياً
- حساب نسبة السداد
- حساب المتبقي
- التحقق من القيم الرقمية
- التحقق من التواريخ
- التحقق من العلاقات (العميل/العقد/القسط)
- منع الحذف إذا كانت هناك بيانات مرتبطة
- التحقق من الصلاحيات
النظام مترجم بالكامل إلى 3 لغات:
- العربية: اللغة الأساسية (RTL)
- الإنجليزية: اللغة الثانوية (LTR)
- الفرنسية: لغة إضافية (LTR)
باستخدام Filament Shield:
- صلاحيات على مستوى الموديل
- صلاحيات على مستوى الصفحة
- صلاحيات على مستوى الويدجت
- صلاحيات على مستوى التقرير
- تحكم كامل في Create/View/Edit/Delete
ميزة التواريخ الافتراضية في التقارير:
- يمكن تعيين تاريخ بداية أساسي في الإعدادات
- جميع التقارير تستخدم هذا التاريخ كإعداد افتراضي
- يمكن تغييره من شاشة الإعدادات (Settings)
- توفير وقت المستخدم في إدخال التواريخ
- التقارير responsive على الموبايل
- الجداول قابلة للتمرير أفقياً
- البطاقات تنسدل عمودياً على الشاشات الصغيرة
- التحكم في عرض الأعمدة حسب الشاشة
- قوائم التنقل قابلة للطي
الطباعة:
- طباعة التقارير بتنسيق احترافي
- تنسيق خاص للطباعة (CSS)
- إخفاء العناصر غير الضرورية
- تحسين الهوامش والمحاذاة
التصدير إلى Excel:
- تصدير الجداول إلى Excel
- الاحتفاظ بالتنسيق
- التصدير حسب الفلاتر المطبقة
- باستخدام maatwebsite/excel
التصدير إلى PDF:
- تصدير التقارير PDF
- دعم العربية بشكل كامل
- تنسيق احترافي
- باستخدام dompdf
1. Eloquent Relationships:
- One-to-Many: Customer → Contracts
- One-to-Many: Contract → Installments
- One-to-Many: Contract → Payments
- Many-to-Many: Contract ← → Products
- BelongsTo: Installment → Contract
2. Accessors & Mutators:
- getTotalPaidAttribute()
- getTotalInstallmentsPaidAttribute()
- getTotalCollectedAttribute()
- getRemainingAmountAttribute()
- getPaymentPercentageAttribute()
3. Query Scopes:
- scopeCompleted() - للمدفوعات المكتملة
- scopeForCustomer() - حسب العميل
- scopeForContract() - حسب العقد
- Filters متقدمة في Filament
4. Filament Features:
- Forms with Reactive Fields
- Relation Managers
- Custom Pages & Reports
- Widgets & Charts
- Infolist للعرض الأنيق
تحديث جديد: نظام التوزيع التلقائي للمدفوعات (مارس 2026)
ميزة جديدة ثورية!
تم تطبيق نظام ذكي يوزع المدفوعات تلقائياً على الأقساط بدون تدخل يدوي
- يجب اختيار قسط محدد لكل دفعة
- كل دفعة = قسط واحد فقط
- إذا دفع العميل 2000 جنيه على 3 أقساط:
- دفعة 1: 700 للقسط الأول
- دفعة 2: 700 للقسط الثاني
- دفعة 3: 600 للقسط الثالث
- 😫 عمل يدوي متعب
- ❌ لا حاجة لاختيار قسط محدد
- فقط أدخل المبلغ المدفوع (2000 جنيه)
- النظام يوزع تلقائياً:
- ✅ القسط 1: 700 (مدفوع كلياً)
- ✅ القسط 2: 700 (مدفوع كلياً)
- ⚠️ القسط 3: 600 (مدفوع جزئياً)
- 😊 توزيع تلقائي ذكي!
مثال عملي توضيحي:
توفير 90% من الوقت
خطوة واحدة بدلاً من عدة خطوات
دقة 100%
لا أخطاء في التوزيع
تلقائي بالكامل
Observer يعمل في الخلفية
الملفات المضافة:
app/Observers/PaymentObserver.php- منطق التوزيع التلقائي- Migration: جعل
installment_idاختياري في جدولpayments
آلية العمل:
المستخدم يدخل المبلغ بدون تحديد قسط
PaymentObserver يعمل تلقائياً عند الحفظ
الأقساط غير المدفوعة بالترتيب الزمني
المبلغ يوزع على الأقساط بالترتيب
كل قسط يُحدث حالته (مدفوع/جزئي/غير مدفوع)
حسابات جديدة في Contract Model:
التوثيق الكامل:
لمزيد من التفاصيل، راجع الملفات التالية:
- START_HERE.md - ابدأ من هنا (30 ثانية)
- دليل_الاستخدام_السريع.md - دليل المستخدم الشامل
- المقارنة_البصرية.md - مقارنة قبل وبعد التحديث
- PAYMENT_AUTO_DISTRIBUTION.md - الشرح التقني المفصل
نظام متكامل ومتطور
تم بناء النظام باستخدام أحدث التقنيات وأفضل الممارسات في البرمجة
كود نظيف
آمن ومحمي
سريع وفعال
قابل للتطوير
التقنيات المستخدمة
تم إنشاء هذا المستند في مارس 2026