خوارزمية حساب المهل النظاميةStatutory deadline computation
من تاريخ حدث موثق وقاعدة معتمدة سارية وقائمة عطلات، تحسب آخر يوم للإجراء. العد بالأيام التقويمية، والعطلات داخل المدة تُحسب، ويمتد الموعد فقط إذا وقع آخر يوم في عطلة رسمية.
الميزات التي تستخدمها: B12 محرك المهل النظامية وحاسبة الاعتراض، B11 الأحكام وطرق الاعتراض، B04 مراحل التقاضي ودورة حياة القضية
1الغرض والمصطلحات القانونية المرتبطة
الاعتراض على الحكم له مدة تبدأ من حدث (غالبًا استلام صك الحكم). فوات المدة يجعل الحكم نهائيًا. تقييم القرارات يؤكد: العد بالأيام التقويمية المتصلة، واستبعاد كل جمعة وسبت «يدمر مهل المكتب» (التقييم الهندسي).
2المدخلات وأنواعها ومصادرها
| المدخل | النوع | المصدر |
|---|---|---|
| trigger_date | Date (ميلادي) | الحكم أو المرحلة B11 الأحكام وطرق الاعتراض |
| rule | Deadline Rule (length, unit, start_offset, extend_on_holiday, calendar) | معتمد وسارٍ في trigger_date |
| holidays | مجموعة تواريخ مع وسم «مبدئي» | Holiday List للسنة |
| weekend | أيام الأسبوع (الجمعة والسبت افتراضيًا) | الإعداد |
3المخرجات والحالات
computed_dueتاريخ آخر يوم.internal_safe_dueنهاية يوم العمل السابق اقتراح هندسي.tentative_warningإن كان قريبًا من عطلة مبدئية.traceالمدخلات ونسخة القاعدة لإعادة الحساب والتدقيق.- أو حالة «لا قاعدة معتمدة» بلا تاريخ.
4خطوات المعالجة بالتسلسل
- اختيار القاعدة: الجهة، نوع المحكمة، المرحلة، الحدث، الاستعجال، والسريان في تاريخ الحدث، ومعتمدة.
- start = trigger_date + start_offset يومًا.
- end = start + length − 1 (للأيام). للأشهر والسنين: بحسب
calendar(هجري بأم القرى أو ميلادي) يحتاج اعتمادًا قانونيًا. - إذا extend_on_holiday وكان end عطلة أسبوعية أو رسمية: end += 1 حتى يوم عمل.
- حفظ النتيجة والأثر.
5الشروط والفروع والاستثناءات
- لا قاعدة أو غير معتمدة ← لا حساب، تنبيه للإدخال اليدوي بسبب.
- trigger_date غير معروف ← لا حساب (تنبيه مفتوح).
- عطلة مبدئية في النطاق ← تحذير «قد يتغير».
- حكم بطلبات بمدد مختلفة ← مهلتان والتذكير بالأقصر يحتاج اعتمادًا قانونيًا.
- تعديل يدوي ← يُحفظ مع الحساب الآلي.
6Pseudocode كامل
function compute_due_date(trigger_date, rule, holidays, weekend={FRI, SAT}):
if not rule.verified_by or not rule.is_valid_on(trigger_date):
return Result(status="NO_APPROVED_RULE")
start = trigger_date + days(rule.start_offset) # 1 = day after event (DG p38)
if rule.unit == "day":
end = start + days(rule.length - 1)
else:
require rule.calendar in {"hijri", "gregorian"} # [legal]
end = add_calendar_units(start, rule.length, rule.unit, rule.calendar) - days(1)
if rule.extend_on_holiday:
while end.weekday in weekend or end in holidays.dates:
end = end + days(1)
safe = previous_working_day(end, weekend, holidays) # [eng] internal target
warn = any(h.tentative and abs(h.date - end) <= days(3) for h in holidays)
return Result(status="OK", due=end, internal_safe_due=safe,
tentative_warning=warn,
trace={trigger_date, rule.code, rule.version, holidays.version})الكود المرجعي في دليل المطور بالمنطق نفسه (start_next_day، حلقة العطلات) (دليل المطور ص40-41).
7مثال اصطناعي خطوة بخطوة
| الحالة | الحدث | المدة | أول يوم | آخر يوم محسوب | الاستحقاق |
|---|---|---|---|---|---|
| عادي | الأحد 2026-11-01 | 30 | الاثنين 2026-11-02 | الثلاثاء 2026-12-01 | الثلاثاء 2026-12-01 |
| مستعجل | الثلاثاء 2026-11-03 | 10 | الأربعاء 2026-11-04 | الجمعة 2026-11-13 (عطلة) | الأحد 2026-11-15 |
| طلب السير بعد الشطب | الخميس 2026-11-05 | 60 | الجمعة 2026-11-06 | الاثنين 2027-01-04 | الاثنين 2027-01-04 |
الأمثلة من (دليل المطور ص41) والمدد فيها لتوضيح الحساب فقط وتبقى يحتاج اعتمادًا قانونيًا حتى الاعتماد. تحقّقنا من أيام الأسبوع لهذه التواريخ. ملاحظة: مثال الوثيقة المعمارية (2 رمضان 1446 «الثلاثاء») أيامه خاطئة؛ 2 رمضان 1446 يوافق الأحد 2025-03-02 (التعارض C-08).
8حالات الفشل والتعامل معها
- قائمة عطلات السنة غير موجودة ← رفض الحساب مع رسالة للمدير.
- تحويل هجري خارج نطاق المكتبة ← رفض.
- تعارض قاعدتين ساريتين بالرمز نفسه ← خطأ تهيئة يمنع الحفظ.
9منع التكرار والتزامن
إعادة الحساب (تغيير الحدث أو العطلات) في مهمة خلفية بقفل على Legal Deadline (SELECT … FOR UPDATE) ونسخة سجل؛ المهلة المغلقة لا تُعاد.
10الصلاحيات والتدقيق والأمن
تعديل القواعد لمختص؛ كل حساب يحفظ الأثر؛ كل تعديل يدوي بسبب ومن عدّل.
11اختبارات الوحدات والتكامل والقبول
| المعرّف | النوع | السيناريو | النتيجة المتوقعة |
|---|---|---|---|
ALG-DL-01 | وحدة | المثال العادي | 2026-12-01 |
ALG-DL-02 | وحدة | المثال المستعجل | 2026-11-15 |
ALG-DL-03 | وحدة | الشطب | 2027-01-04 |
ALG-DL-04 | وحدة | عطلة في منتصف المدة | لا تأثير |
ALG-DL-05 | وحدة | آخر يوم عيد مبدئي | امتداد + تحذير |
ALG-DL-06 | وحدة | start_offset = 0 | يبدأ يوم الحدث |
ALG-DL-07 | تكامل | عطلة تضاف لاحقًا | إعادة حساب المفتوح فقط |
ALG-DL-08 | قبول | قاعدة غير معتمدة | لا نتيجة |
12ما هو قاعدة تقنية وما هو قرار قانوني
| قاعدة تقنية (ينفذها المطور) | قرار قانوني (يعتمده مختص) |
|---|---|
| حلقة الحساب، التخزين، التذكير، إعادة الحساب | المدد وأحداث البدء والمواد |
| قائمة العطلات وحالتها | العطلات الرسمية والأعياد المؤكدة |
| الموعد الداخلي الآمن | ساعة انتهاء التقديم الإلكتروني |