# Billing Policy Templates

## لماذا أضفنا القوالب؟

كانت سياسة الدفع تُضبط سابقًا داخل كل فوج عبر حقول مستقلة. هذا كان يكرر نفس الإعدادات كثيرًا ويزيد احتمال اختلافها بين الأفواج، خصوصًا عند استعمال حقوق التسجيل أو الدفع الكامل.

القوالب الجديدة تجعل السياسة قابلة لإعادة الاستخدام:

- ننشئ القاعدة مرة واحدة من لوحة التحكم.
- نربطها بأي فوج جديد أو قائم.
- نحافظ على التوافق مع الأفواج القديمة التي ما زالت تعتمد على الحقول السابقة.

## كيف تُطبّق الآن؟

`BillingPlanFactory` أصبح يقرأ السياسة بهذا الترتيب:

1. إذا كان الفوج مرتبطًا بـ `billing_policy_template_id`:
   - يستعمل القالب مباشرة.
2. إذا لم يوجد قالب:
   - يرجع إلى الحقول القديمة على الفوج (`billing_policy_type`, `deposit_percent`, ...).
3. إذا لم يجد أي سياسة صالحة:
   - يعمل `full` كـ fallback آمن.

## ما الذي يتغير عند ربط فوج بقالب؟

- التسجيلات الجديدة فقط هي التي تتأثر.
- التسجيلات السابقة لا تتغير لأن `Enrollment` يحتفظ بـ snapshot للأسعار وقت التسجيل:
  - `total_amount_dzd`
  - `deposit_required_dzd`
  - `balance_due_dzd`
  - `payment_stage`

لهذا يمكن تعديل القالب أو استبداله لاحقًا دون التأثير على طالب بدأ التسجيل سابقًا.

## سلوك Legacy

الحقول القديمة ما زالت موجودة على الفوج للتوافق الرجعي.

- إذا لم يُربط قالب بالفوج: النظام يقرأ الحقول القديمة كالسابق.
- إذا رُبط قالب بالفوج: يصبح القالب هو المصدر الأساسي، وتبقى الحقول القديمة للمرجعية فقط داخل الإدارة.

## إدارة القوالب

يوجد الآن مساران إداريان:

- `/admin/billing-policies`
  - إنشاء، تعديل، تفعيل، تعطيل، ومعاينة سريعة على مبلغ افتراضي.
- `/admin/billing-policies/migrate`
  - تطبيق قالب على أفواج مستقبلية بشكل جماعي.

## حذف القوالب

لا نحذف القوالب المرتبطة بالأفواج. بدلًا من ذلك:

- نعطّل القالب إذا لم نعد نريد استعماله في أفواج جديدة.
- الأفواج المرتبطة به تظل تقرأه بشكل طبيعي.

## الأنواع المدعومة

- `full`
- `deposit_percent`
- `deposit_fixed`

مع دعم إضافي لـ:

- حدود دنيا وعليا للمبلغ المطلوب الآن
- التقريب
- مهلة استحقاق الرصيد المتبقي
