RAKAEZ
Form Validation

قواعد التحقق من الفورمات

١٤ فورم رئيسي · ١٢٠+ حقل · مع رسائل خطأ موحدة

*إجباري · Required
○اختياري · Optional
regexتعبير نمطي للتحقق
valueقيمة محددة (min/max/pattern)
١ · تسجيل دخول ٢ · تسجيل جديد ٣ · OTP ٤ · إنشاء مستخدم ٥ · مشروع جديد ٦ · جدول تخطيط ٧ · بند تنفيذ ٨ · طلب مخزن ٩ · أمر شراء ١٠ · فاتورة ١١ · عقار VIP ١٢ · مستأجر ١٣ · عميل/مورد ١٤ · رسائل الأخطاء

١ · فورم تسجيل الدخول

/auth/login · ٣ حقول · يدعم رقم موبايل أو إيميل

الحقلالنوعإجباريالقواعدرسالة الخطأ
المعرّف
phone OR email
text*إيميل صالح أو رقم موبايل ١١ رقم
^(01[0-9]{9}|[\w.-]+@[\w-]+\.[\w.-]+)$
رقم موبايل أو بريد إلكتروني صالح مطلوب
كلمة المرور
password
password*طول ٨ أحرف على الأقل
يحتوي حرف كبير + رقم
^(?=.*[A-Z])(?=.*\d).{8,}$
كلمة السر يجب أن تكون ٨ أحرف على الأقل وتحتوي حرف كبير ورقم
تذكرني
remember
checkbox○boolean · default: false—

٢ · فورم التسجيل الجديد (للعميل)

/auth/register · ٧ حقول · يحتاج OTP بعد التسجيل

الحقلالنوعإجباريالقواعدرسالة الخطأ
الاسم الأولtext*٢-٥٠ حرف · حروف عربية أو إنجليزية فقط
^[ء-يa-zA-Z\s]{2,50}$
الاسم الأول يجب أن يكون ٢-٥٠ حرف بالعربية أو الإنجليزية
الاسم الأخيرtext*٢-٥٠ حرف · حروف فقطالاسم الأخير مطلوب
رقم الموبايلtel*١١ رقم يبدأ بـ 01
^01[0-9]{9}$
غير مسجّل من قبل
رقم موبايل مصري صالح / هذا الرقم مسجّل بالفعل
البريد الإلكترونيemail*صيغة إيميل صالحة
غير مسجّل من قبل
بريد إلكتروني غير صالح / مسجّل من قبل
كلمة المرورpassword*٨+ حرف · حرف كبير + صغير + رقم + رمز
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
قوية أكثر · يجب أن تحتوي حرف كبير وصغير ورقم ورمز
تأكيد كلمة المرورpassword*تطابق كلمة المروركلمتا السر غير متطابقتين
الموافقة على الشروطcheckbox*true إجبارييجب الموافقة على الشروط للمتابعة

٣ · فورم OTP

/auth/otp-verify · رمز ٦ أرقام · صلاحية ٥ دقائق

الحقلالنوعإجباريالقواعدرسالة الخطأ
رمز OTPtext · 6 digits*٦ أرقام بالضبط
^\d{6}$
صلاحية ٥ دقائق
الرمز ٦ أرقام / الرمز منتهي الصلاحية / الرمز غير صحيح
محاولاتinternal—أقصى ٣ محاولات خاطئة · ثم 60 ثانية انتظارتجاوزت عدد المحاولات · حاول بعد ٦٠ ثانية

٤ · إنشاء مستخدم جديد (Admin)

/users/new · ١٢ حقل · للأدوار الإدارية

الحقلالنوعإجباريالقواعدرسالة الخطأ
الاسم الأولtext*٢-٥٠ حرفالاسم الأول مطلوب
الاسم الأخيرtext*٢-٥٠ حرفالاسم الأخير مطلوب
كود الموظفtext*تلقائي EMP-XXXX · فريدكود مكرر
الموبايلtel*١١ رقم · فريدرقم مسجّل من قبل
الإيميلemail*صيغة صالحة · فريدإيميل غير صالح / مسجّل
الجنسيةselect○قائمة دول—
الدورselect*أحد الـ ٩ أدوار · لا يمكن إنشاء admin من غير adminاختر دوراً صالحاً
القسمselect*FK→departments · يتفلتر حسب الدوراختر قسماً
تاريخ التعيينdate*<= اليومالتاريخ لا يمكن أن يكون في المستقبل
الراتبnumber○أكبر من ٠ · صلاحية HR فقطراتب غير صالح
الصورة الشخصيةfile○JPG/PNG · حد أقصى ٢ MBالملف كبير جداً (الحد ٢MB) / صيغة غير مدعومة
كلمة مرور مؤقتةpassword*تلقائية · يجبر على تغييرها أول دخول—

٥ · فورم مشروع جديد

/projects/new · ١٤ حقل + قائمة فريق

الحقلالنوعإجباريالقواعدرسالة الخطأ
اسم المشروعtext*٣-١٠٠ حرف · فريد لنفس العميلالاسم مطلوب · مكرر لنفس العميل
كود المشروعtextautoتلقائي PRJ-YYYY-XXX—
العميلautocomplete*FK→clients · بحث liveاختر عميلاً
نوع المشروعselect*villa/apartment/duplex/office/clinic/chaletاختر النوع
المساحة (م²)number*٢٠-١٠٠٠٠ م²مساحة غير منطقية
العنوانtext*٥-٢٠٠ حرفالعنوان مطلوب
الموقع GPSmap○lat/lng من Google Maps—
تاريخ البدءdate*>= اليومتاريخ البدء يجب أن يكون اليوم أو بعده
المدة المتوقعةnumber*٧-٧٣٠ يوممدة غير منطقية
الميزانيةnumber*> ٠ · بالجنيه المصريالميزانية مطلوبة
المدير المسؤولselect*FK→users role=managerاختر مدير المشروع
مهندس الموقعselect*FK→users role=site-engineerاختر مهندس موقع
مصمم التصميم الداخليselect○FK→users role=designer—
الوصفtextarea○حد أقصى ٢٠٠٠ حرفالوصف طويل جداً

٦ · إنشاء جدول تخطيط ⭐

/planning/schedule/:projectId · جدول أسبوعي/نصف شهري

الحقلالنوعإجباريالقواعدرسالة الخطأ
المشروعreadonly*FK→projects · من URL—
نوع الفترةradio*weekly | biweeklyاختر نوع الفترة
تاريخ بداية الفترةdate*سبت من أي أسبوعيجب أن يبدأ يوم سبت
تاريخ النهايةautoautoتلقائي = البداية + ٧ أو ١٤ يوم—
البنودarray (1+)*على الأقل بند واحدأضف بند واحد على الأقل

٧ · بند تنفيذ (داخل الجدول) ⭐

في جدول التخطيط · ٨ حقول

الحقلالنوعإجباريالقواعدرسالة الخطأ
عنوان البندtext*٣-٢٠٠ حرفعنوان البند مطلوب
نوع البندselect*structural/electrical/plumbing/painting/flooring/decorationاختر نوع البند
التسلسلnumberautoتلقائي · sequence_order—
تاريخ البدء المخططdate*داخل فترة الجدولالتاريخ خارج فترة الجدول
تاريخ النهاية المخططdate*>= البداية · داخل الفترةالتاريخ غير صالح
المهندس المسؤولselect*من فريق المشروعاختر مهندساً
البند السابق (Dependency)select○FK→schedule_items · اختياري—
قائمة فحص الجودةarray*على الأقل ٣ بنود فحصأضف ٣ بنود فحص على الأقل
rule
قاعدة تحديث النسبة: progress_percent يقبل قيم: 0, 20, 40, 60, 80, 100 فقط · لا يمكن العودة لرقم أقل · عند ١٠٠٪ ينتقل لـ pending_quality_check تلقائياً.

٨ · طلب من المخزن (للمهندس)

شاشة N1 من ملاحظات الميدان

الحقلالنوعإجباريالقواعدرسالة الخطأ
المشروعauto*من المهندس الحالي—
القسمselect*كهرباء/سباكة/...اختر القسم
الأصنافarray (1+)*صنف واحد على الأقلأضف صنف واحد على الأقل
↳ الصنفautocomplete*FK→items · بحث liveاختر الصنف
↳ الكميةnumber*> ٠ · <= max المتاح + ٢٠٪الكمية يجب أن تكون أكبر من ٠ / تجاوز الكمية المسموحة
↳ الوحدةselect*قطعة/متر/طقم/كيلو/أنبوبة...اختر الوحدة
↳ ملاحظاتtext○حتى ٥٠٠ حرف—
أولوية الطلبselect*عاجل/عادي/منخفضاختر الأولوية
التاريخ المطلوبdate○>= اليومالتاريخ في الماضي

٩ · أمر شراء جديد

/operations/purchasing/new

الحقلالنوعإجباريالقواعدرسالة الخطأ
الموردautocomplete*FK→suppliers · فعّالاختر مورداً
المشروعselect*FK→projects · نشطاختر مشروعاً
البنودarray*صنف واحد على الأقلأضف صنف
↳ الكمية × سعر الوحدةautoautoالمجموع يحسب تلقائياً—
المجموع الفرعيautoautoمجموع البنود—
الخصمnumber○٠-٥٠٪الخصم بين ٠ و٥٠٪
VATautoauto١٤٪ تلقائي—
الإجماليautoautoمحسوب تلقائياً—
تاريخ التسليم المتوقعdate*>= اليوم + ١ يومالتاريخ على الأقل غداً
طريقة الدفعselect*cash/transfer/creditاختر طريقة الدفع
اعتماد المديرautoconditionalإجباري لو الإجمالي > ٥٠ ألفهذا الطلب يحتاج اعتماد المدير

١٠ · فاتورة عميل

/operations/accounting/invoices/new

الحقلالنوعإجباريالقواعدرسالة الخطأ
رقم الفاتورةautoautoINV-YYYY-XXX—
العميلselect*FK→clientsاختر العميل
المشروعselect*FK→projects · للعميل المختاراختر مشروع
نوع الدفعةselect*المقدم/بدء/منتصف/تسليم نهائياختر نوع الدفعة
المبلغnumber*= ٢٥٪ من إجمالي العقدالمبلغ غير صحيح
VAT (١٤٪)autoautoمحسوب تلقائياً—
الإجماليautoautoالمبلغ + VAT—
تاريخ الإصدارdate*اليوم تلقائي—
تاريخ الاستحقاقdate*>= اليوم + ١ يومتاريخ غير صالح

١١ · إضافة عقار (VIP) ⭐

/vip/properties/new

الحقلالنوعإجباريالقواعدرسالة الخطأ
كود العقارautoautoPR-YYYY-XXX—
المالك (VIP)select*FK→clients vip_active=trueالمالك يجب أن يكون VIP
المشروع المرتبطselect○FK→projects (إن وُجد)—
اسم العقارtext*٣-١٠٠ حرفاسم مطلوب
النوعselect*villa/apartment/duplex/office/chaletاختر النوع
العنوانtext*٥-٢٠٠ حرفعنوان مطلوب
المساحة (م²)number*٢٠-١٠٠٠٠مساحة غير صحيحة
عدد الغرفnumber○١-٢٠—
الإيجار الشهريnumber○>= ١٠٠٠ ج.مإيجار غير منطقي
الحالةselect*rented/vacant/maintenanceاختر الحالة
الصورfile[]○JPG/PNG · حد أقصى ٢٠ صورة · ٥ MB لكل صورةعدد الصور تجاوز الحد / حجم كبير

١٢ · إضافة مستأجر

/vip/tenants/new

الحقلالنوعإجباريالقواعدرسالة الخطأ
العقارselect*FK→properties status=vacantالعقار يجب أن يكون شاغراً
اسم المستأجرtext*٣-٢٠٠ حرفالاسم مطلوب
الموبايلtel*دولي · ٧-١٥ رقمرقم غير صالح
الإيميلemail○صيغة صالحةإيميل غير صالح
الرقم القوميtext*١٤ رقم (مصري) أو passportرقم قومي غير صحيح
صورة الهويةfile*JPG/PNG · حتى ٥ MBصورة الهوية مطلوبة
تاريخ بداية العقدdate*>= اليومالتاريخ في الماضي
تاريخ نهاية العقدdate*> البداية بـ ٣ شهور على الأقلالعقد ٣ شهور على الأقل
التأمينnumber*= إيجار شهرين على الأقلتأمين غير كافٍ

١٣ · إضافة عميل/مورد

/operations/clients/new أو /suppliers/new

الحقلالنوعإجباريالقواعدرسالة الخطأ
النوعradio*فرد/شركةاختر النوع
الاسم/اسم الشركةtext*٣-٢٠٠ حرفالاسم مطلوب
الموبايلtel*دولي صالحرقم غير صالح
الإيميلemail○صيغة صالحة—
السجل الضريبيtext○إجباري للشركاتالسجل الضريبي مطلوب للشركات
VAT Numbertext○٩-١٢ رقم—
العنوانtext*٥-٢٠٠ حرفعنوان مطلوب
عميل VIPcheckbox○افتراضي false—

١٤ · رسائل الأخطاء الموحدة

قاموس موحد لكل رسائل الأخطاء · بالعربية

رسائل عامة
requiredهذا الحقل مطلوب
minlength{n} أحرف على الأقل
maxlengthحد أقصى {n} حرف
minالقيمة يجب أن تكون >= {n}
maxالقيمة يجب أن تكون <= {n}
patternالصيغة غير صحيحة
رسائل خاصة
emailبريد إلكتروني غير صالح
phoneرقم موبايل غير صالح
passwordMismatchكلمتا السر غير متطابقتين
uniqueهذه القيمة مستخدمة من قبل
dateInPastالتاريخ لا يمكن أن يكون في الماضي
fileTooLargeحجم الملف كبير جداً (الحد {n} MB)
أخطاء النظام (HTTP)
400طلب غير صحيح
401انتهت الجلسة · يرجى تسجيل الدخول
403ليس لديك صلاحية لهذا الإجراء
404المورد غير موجود
409يوجد تعارض مع البيانات الحالية
500حدث خطأ في الخادم · حاول لاحقاً
حالات الشبكة
offlineلا يوجد اتصال بالإنترنت
timeoutانتهت مهلة الاتصال
retryجاري إعادة المحاولة...
successتم بنجاح ✓
طريقة الاستخدام في Angular
// validation-messages.const.ts
export const VALIDATION_MESSAGES = {
  required: 'هذا الحقل مطلوب',
  email: 'بريد إلكتروني غير صالح',
  phone: 'رقم موبايل غير صالح',
  minlength: (n: number) => `${n} أحرف على الأقل`,
  maxlength: (n: number) => `حد أقصى ${n} حرف`
};

// In template
<mat-error *ngIf="form.get('email').errors?.required">
  {{ VALIDATION_MESSAGES.required }}
</mat-error>