- مقدمة
- العرض
- MVP
- خارطة الطريق
- متطلبات المنتج
- ابدأ الآن
- البيئة المحلية
- البنية المعمارية
- الهيكل
- الأنماط
- الحزمة التقنية
- قاعدة البيانات
- تعدّد المستأجرين
- الفهرس (Catalog)
- العمل دون اتصال
- المصادقة
- التهيئة (Onboarding)
- تدفق التكامل (Integration Flow)
- التهيئة (Provision)
- القبول
- الحضور
- الامتثال التنظيمي
- الملف الشخصي
- الاجتماعات
- إدارة الرسوم
- الفاتورة
- التدويل
- الترجمة
- دليل الترجمة
- أمان قاعدة البيانات
- المساهمة
- هَوْغوارتس
- عرض حي
- الإلهام
عرّف ما تفرضه المدرسة من رسوم، خصّصها للطلاب، حصّلها أونلاين أو دون اتصال، تتبّع الأقساط، وأشعِر عند أحداث دورة الحياة. مهمّة مجدوَلة (cron) عند الساعة 9 صباحاً تكشف الرسوم المتأخّرة وتُرسل تذكيرات عاجلة.
خط الأنابيب
1. المسؤول ينشئ هيكل رسوم (Fee Structure) — رسوم دراسية، نقل، زيّ، …
2. المسؤول يخصّص الرسوم للطلاب (فردي أو جماعي)
3. الطالب وأولياء الأمور يتلقّون إشعاراً (داخل التطبيق + بريد)
4. الطالب يدفع أونلاين (Stripe) أو يسجّل المسؤول دفعاً يدوياً
5. النظام يتتبّع الأقساط — PAID / PARTIAL / OVERDUE
6. cron يومي عند الساعة 9 صباحاً يكشف المتأخّرات → تذكيرات عاجلة
7. إيصال PDF يُولَّد لكل عملية دفع
هيكل الرسوم
يُعرَّف ضمن المالية ← الرسوم ← هياكل الرسوم.
| الحقل | الوصف |
|---|---|
| الاسم | "رسوم دراسية"، "رسوم نقل" |
| المبلغ | إجمالي مبلغ الرسوم |
| الفئة | TUITION, TRANSPORT, UNIFORM, EXAM, ACTIVITY, LIBRARY, LAB, HOSTEL, OTHERS |
| السنة الدراسية | "2025-2026" |
| الأقساط | عدد الأقساط (الافتراضي 1) |
| جدول الدفع | اختياري — تواريخ ومبالغ محدّدة |
| غرامة التأخير | اختيارية — FIXED, PERCENTAGE, DAILY, MONTHLY |
| سياسة الخصومات | اختيارية — أشقاء، دفع مبكّر |
التخصيص
نمطان:
- فردي — اختر الطالب ← اختر الهيكل ← مبلغ مخصّص اختياري ← خصّص
- جماعي — اختر الفصل / المرحلة ← اختر الهيكل ← خصّص للجميع
عند التخصيص: يُنشَأ صفّ FeeAssignment بحالة PENDING، يحصل الطالب وكلّ أولياء أمره على إشعار fee_due (داخل التطبيق + بريد)، وخصم الأشقاء يُحسَب آلياً (مثلاً الطفل الثاني 10٪، الثالث 20٪).
الدفع
أونلاين (الطالب بنفسه)
تسجيل الدخول ← رسومي ← اضغط "ادفع أونلاين" ← Stripe Checkout (Visa, MC, Apple Pay)
← عند النجاح، webhook يسجّل الدفعة آلياً
← إشعار fee_paid (الطالب + أولياء الأمور)
خارج الإنترنت (المسؤول يسجّل)
المالية ← الرسوم ← المدفوعات ← دفعة جديدة
← اختر تخصيص الرسوم ← أدخل المبلغ والوسيلة ومرجعاً اختيارياً
← سجلّ Payment + تحديث الحالة + إشعار fee_paid
الوسائل
| الوسيلة | الحالة | الأسواق |
|---|---|---|
| Stripe | فعّال | عالمي (Visa, MC, Apple Pay, Google Pay) |
| Tap | قريباً | الخليج (mada, KNET, STC Pay) |
| Cash | فعّال | الجميع |
| Bank Transfer | فعّال | الجميع |
| Mobile Money | فعّال | السودان (Bankak, mBOK) |
البوّابة تُختار آلياً بناءً على بلد المدرسة.
الأقساط
نمطان:
- صريح — المسؤول يحدّد التواريخ والمبالغ بدقّة (مثلاً 5,000 SAR في 1 سبتمبر / 5,000 SAR في 1 ديسمبر / 5,000 SAR في 1 مارس)
- تقسيم متساوٍ — المسؤول يحدّد العدد، والنظام يقسّم بالتساوي بمواعيد استحقاق شهرية
| الحالة | المعنى |
|---|---|
| PAID | مغطّى بالكامل |
| PARTIAL | دفعة جزئية، مع رصيد متبقٍّ |
| PENDING | لم يحن موعد الاستحقاق بعد |
| OVERDUE | تجاوز موعد الاستحقاق ولم يُدفع كاملاً |
يرى الطلاب خطّاً زمنياً مرئياً بمؤشّرات أخضر / أصفر / أحمر / رمادي وشريط تقدّم.
الإشعارات
| الحدث | المستلمون | الأولوية | القنوات |
|---|---|---|---|
| تخصيص رسوم | الطالب + أولياء الأمور | عالية | داخل التطبيق + بريد |
| استلام دفعة | الطالب + أولياء الأمور | عادية | داخل التطبيق + بريد |
| رسوم متأخّرة | الطالب + أولياء الأمور | عاجلة | داخل التطبيق + بريد |
cron المتأخّرات
يومياً عند الساعة 9:00 صباحاً:
- مسح كل التخصيصات بحالة
PENDINGوPARTIAL - التحقّق ممّا إذا فات أي قسط موعد استحقاقه
- تحديث الحالة إلى
OVERDUE - إرسال إشعار عاجل (المبلغ + اسم الرسم)
إشعار المتأخّرات يُطلَق مرّة واحدة — عند تغيّر الحالة إلى OVERDUE لأوّل مرّة. التذكيرات المتكرّرة للحسابات المتأخّرة أصلاً تحسين مخطّط له (إعادة الإشعار إذا مرّ على آخر إشعار أكثر من 7 أيام).
تفضيلات المستخدم: أنواع الإشعارات، القنوات (داخل التطبيق / بريد)، ساعات الهدوء، وضع الخلاصة (يومي / أسبوعي).
التتبّع
| من | أين | يرى |
|---|---|---|
| الطالب | رسومي | الرسوم المخصّصة، سجلّ الدفعات، خطّ الأقساط الزمني |
| ولي الأمر | الإشعارات | تنبيهات الاستحقاق / التأخّر / الدفع (داخل التطبيق + بريد) |
| المسؤول | المالية ← الرسوم ← المدفوعات | كلّ الدفعات، قابلة للتصفية بالطالب / الحالة / الوسيلة |
| المحاسب | المالية ← الرسوم | السجلّ الكامل للمدفوعات مع قيود اليومية |
حقول سجلّ الدفعة: رقم الدفعة (فريد)، رقم الإيصال (فريد)، المبلغ، التاريخ، الوسيلة، معرّف المعاملة الخارجي (أونلاين)، الحالة (PENDING → SUCCESS → REFUNDED?)، رابط قيد اليومية.
كل دفعة ناجحة تُولّد إيصال PDF قابلاً للتنزيل بهوية المدرسة، مع تفاصيل الدفع والرصيد المتبقّي.
الاستردادات
طلبات الاسترداد تتتبّع: تاريخ الطلب، السبب، الموافقة (processedBy, approvalNotes)، المستندات الداعمة، والحالة عبر دورة حياة الاسترداد.
الخصومات
خصم الأشقاء
يُكتشف آلياً عبر أولياء الأمور المشتركين. نسب قابلة للتهيئة (مثلاً الطفل الثاني 10٪، الثالث 20٪). تُطبَّق وقت التخصيص.
المنح الدراسية
مبلغ مخصّص أو نسبة، مرتبطة بتخصيصات رسوم محدّدة، مع أثر تدقيق كامل.
غرامات التأخير
لكل هيكل رسوم:
| النوع | المثال |
|---|---|
| FIXED | 100 SAR ثابتة |
| PERCENTAGE | 5٪ من المتبقّي |
| DAILY | 10 SAR لكل يوم تأخير |
| MONTHLY | 200 SAR لكل شهر تأخير |
الملفات الرئيسية
| المكوّن | المسار |
|---|---|
| Server actions | src/components/school-dashboard/finance/fees/actions.ts |
| الاستعلامات | src/components/school-dashboard/finance/fees/queries.ts |
| نموذج الدفع | src/components/school-dashboard/finance/fees/payment-form.tsx |
| رسومي (الطالب) | src/components/school-dashboard/finance/fees/my-fees.tsx |
| زرّ الدفع أونلاين | src/components/school-dashboard/finance/fees/pay-online-button.tsx |
| الخطّ الزمني للأقساط | src/components/school-dashboard/finance/fees/installment-timeline.tsx |
| إيصال PDF | src/components/school-dashboard/finance/fees/receipt-pdf.tsx |
| cron المتأخّرات | src/app/api/cron/fee-overdue/route.ts |
| مزوّدو الدفع | src/lib/payment/providers/ |
| تهيئة البوّابة | src/lib/payment/gateway-config.ts |
| Stripe webhook | src/app/api/webhooks/stripe/route.ts |
| Schema | prisma/models/finance-fees.prisma |