دليل سير العمل الكامل — Moon HR

شرح تفصيلي لـ 5 وحدات: من البداية للنهاية — الحقول، الحالات، الـ API، القيود المحاسبية

1. التوظيف 2. الأداء 3. التدريب 4. نهاية الخدمة 5. السلف والقروض
1. التوظيف (Recruitment)
من فتح الوظيفة الشاغرة لحد تعيين الموظف الجديد
1

المسار الكامل للتوظيف

1. إنشاء وظيفة شاغرة (Job Opening)
2. إضافة مرشحين (Candidates)
3. التقديم على الوظيفة (Applications)
4. عرض التوظيف (Offer)
5. التعيين — إنشاء سجل موظف
1.1

الوظائف الشاغرة (Job Openings)

أول خطوة — تعريف الوظيفة المطلوبة مع تفاصيلها.

الحقول:

الحقلالنوعالشرح
titleنصالمسمى الوظيفي (مثلاً: مهندس برمجيات)
department_idFKالقسم (المبيعات، تقنية المعلومات، إلخ)
position_idFKالمنصب الوظيفي
vacanciesرقمعدد الشواغر المطلوبة
salary_min / salary_maxرقمنطاق الراتب (من — إلى)
employment_typeاختيارنوع العقد: full_time / part_time / contract / internship
closing_dateتاريختاريخ إغلاق الإعلان
descriptionنص طويلوصف الوظيفة والمتطلبات

دورة الحالات:

مسودة
draft
مفتوحة
open
مغلقة
closed
معلّقة
on_hold

النشر: لما الوظيفة جاهزة، استخدم POST /job-openings/{id}/publish عشان تتحول من draft لـ open.

API:

الطريقةالمسارالشرح
GET/hrm/job-openingsقائمة الوظائف الشاغرة
POST/hrm/job-openingsإنشاء وظيفة جديدة
PUT/hrm/job-openings/{id}تعديل وظيفة
DELETE/hrm/job-openings/{id}حذف (soft delete)
POST/hrm/job-openings/{id}/publishنشر الوظيفة (draft → open)
💡 الوظيفة لازم تكون open عشان المرشحين يقدروا يتقدموا عليها. لو الشواغر اكتملت، حوّلها لـ closed.
1.2

المرشحون (Candidates)

قاعدة بيانات المرشحين — مستقلة عن الوظائف. مرشح واحد ممكن يتقدم على أكتر من وظيفة.

الحقول:

الحقلالنوعالشرح
first_name / last_nameنصاسم المرشح
emailنصالبريد الإلكتروني (فريد)
phoneنصرقم الهاتف
experience_yearsرقمسنوات الخبرة
sourceاختيارمصدر الوصول: linkedin / referral / website / job_board / other
resume_pathملفمسار السيرة الذاتية (PDF)
notesنص طويلملاحظات إضافية

API:

الطريقةالمسارالشرح
GET/hrm/candidatesقائمة المرشحين
POST/hrm/candidatesإضافة مرشح جديد
PUT/hrm/candidates/{id}تعديل بيانات مرشح
DELETE/hrm/candidates/{id}حذف مرشح
1.3

التقديمات (Applications)

ربط المرشح بالوظيفة. كل تقديم يمر بـ 6 مراحل.

دورة المراحل:

تقديم
applied
فرز
screening
مقابلة
interview
تقييم
assessment
مراجعة نهائية
final_review
قرار
decision

تحديث الحالة: PUT /hrm/applications/{id}/status مع إرسال {"status": "interview"}

API:

الطريقةالمسارالشرح
GET/hrm/applicationsقائمة التقديمات (مع فلتر حسب الوظيفة)
POST/hrm/applicationsإنشاء تقديم (ربط مرشح بوظيفة)
PUT/hrm/applications/{id}/statusتحديث مرحلة التقديم
DELETE/hrm/applications/{id}حذف تقديم
💡 كل مرحلة ممكن تضيف عليها ملاحظات — مثلاً بعد المقابلة تسجل ملاحظات اللجنة وتقييمها.
1.4

عروض التوظيف (Offers)

بعد قرار القبول، يتعمل عرض رسمي للمرشح.

الحقول:

الحقلالنوعالشرح
application_idFKالتقديم المرتبط
salaryرقمالراتب المعروض
start_dateتاريختاريخ بدء العمل
benefitsنصالمزايا (تأمين، بدلات، إلخ)
valid_untilتاريخصلاحية العرض (لو انتهت = expired)

دورة الحالات:

مسودة
draft
مرسل
sent
مقبول
accepted
مرفوض
rejected
|
منتهي
expired

الإجراءات:

الإجراءالمسارالشرح
sendPOST /hrm/offers/{id}/sendإرسال العرض للمرشح (draft → sent)
acceptPOST /hrm/offers/{id}/acceptقبول العرض (sent → accepted)
rejectPOST /hrm/offers/{id}/rejectرفض العرض (sent → rejected)
1.5

التعيين

بعد قبول العرض accepted، الخطوة الأخيرة هي إنشاء سجل موظف جديد في نظام الموارد البشرية.

  • يتنقل تلقائي من بيانات المرشح: الاسم، الإيميل، الهاتف
  • يتعين في القسم والمنصب المحددين في الوظيفة الشاغرة
  • الراتب الأساسي = الراتب المحدد في العرض
  • تاريخ التعيين = تاريخ البدء في العرض
✅ بعد التعيين، الوظيفة الشاغرة تنقص شاغر واحد. لو اكتمل العدد ← تتحول لـ closed تلقائي.

2. الأداء (Performance Management)
من تعريف مؤشرات الأداء لحد إقرار الموظف بالتقييم
2

المسار الكامل لإدارة الأداء

1. تعريف مؤشرات الأداء (KPIs)
2. إنشاء قوالب التقييم (Review Templates)
3. إجراء التقييم (Performance Review)
4. النتائج والإقرار (Results & Acknowledge)
2.1

مؤشرات الأداء (KPIs)

مؤشرات الأداء = المعايير اللي الموظف يتقاس عليها. كل مؤشر ليه وزن وهدف.

الحقول:

الحقلالنوعالشرح
nameنصاسم المؤشر (مثلاً: نسبة المبيعات)
categoryنصالتصنيف (مبيعات، خدمة عملاء، كفاءة، إلخ)
weightرقمالوزن النسبي (مثلاً: 30%)
target_valueرقمالقيمة المستهدفة (100,000 ريال)
unitنصوحدة القياس (نسبة %, عدد, مبلغ)
descriptionنصوصف المؤشر وكيفية قياسه

مثال — مؤشرات قسم المبيعات:

المؤشرالفئةالوزنالهدفالوحدة
نسبة تحقيق المبيعاتمبيعات30%100,000ريال
رضا العملاءخدمة عملاء20%90%
عدد العملاء الجددمبيعات20%15عميل
سرعة الردكفاءة15%24ساعة
الحضور والانضباطسلوك15%95%
المجموع100%

API:

الطريقةالمسارالشرح
GET/hrm/kpisقائمة المؤشرات
POST/hrm/kpisإنشاء مؤشر
PUT/hrm/kpis/{id}تعديل مؤشر
DELETE/hrm/kpis/{id}حذف مؤشر
⚠ مجموع الأوزان لازم يساوي 100% في كل قالب. لو مختلف = خطأ في الحساب.
2.2

قوالب التقييم (Review Templates)

القالب = تجميعة من مؤشرات الأداء مع أوزانها. قالب واحد يُستخدم لتقييم مجموعة من الموظفين بنفس المعايير.

الحقول:

الحقلالشرح
nameاسم القالب (مثلاً: تقييم المبيعات)
descriptionوصف القالب
kpisقائمة المؤشرات مع أوزانها

API:

الطريقةالمسارالشرح
GET/hrm/review-templatesقائمة القوالب
POST/hrm/review-templatesإنشاء قالب مع مؤشراته
PUT/hrm/review-templates/{id}تعديل قالب
DELETE/hrm/review-templates/{id}حذف قالب
💡 القالب بيتعدّل قبل ما يُستخدم في تقييم. بعد ما يتم تقييم عليه، يفضل تنشئ نسخة جديدة بدل ما تعدل القديم — عشان تحافظ على سجل التقييمات.
2.3

إجراء التقييم (Performance Review)

التقييم = ربط موظف بقالب ومقيّم في فترة زمنية محددة.

الحقول:

الحقلالنوعالشرح
employee_idFKالموظف المقيّم
reviewer_idFKالمقيّم (المدير المباشر عادةً)
review_template_idFKالقالب المستخدم
period_typeاختيارربع سنوي / نصف سنوي / سنوي
review_dateتاريختاريخ التقييم
overall_scoreرقمالدرجة الكلية (يُحسب تلقائي)
strengthsنصنقاط القوة
weaknessesنصنقاط الضعف
goalsنصالأهداف المستقبلية

دورة الحالات:

مسودة
draft
مرسل
submitted
معتمد
approved
إقرار الموظف
acknowledged

حساب الدرجة:

الدرجة الكلية = مجموع (درجة كل مؤشر × وزن المؤشر / 100)

مثال: مبيعات (85 × 30%) + رضا العملاء (90 × 20%) + عملاء جدد (70 × 20%) + سرعة رد (80 × 15%) + انضباط (95 × 15%)
= 25.5 + 18 + 14 + 12 + 14.25 = 83.75 من 100

API:

الطريقةالمسارالشرح
GET/hrm/performance-reviewsقائمة التقييمات
POST/hrm/performance-reviewsإنشاء تقييم جديد
PUT/hrm/performance-reviews/{id}تعديل درجات ومراجعات
POST/hrm/performance-reviews/{id}/submitتقديم التقييم (draft → submitted)
POST/hrm/performance-reviews/{id}/approveاعتماد (submitted → approved)
POST/hrm/performance-reviews/{id}/acknowledgeإقرار الموظف (approved → acknowledged)

3. التدريب (Training)
من تعريف البرنامج التدريبي لحد تسجيل الموظف وإتمام التدريب
3

المسار الكامل للتدريب

1. البرنامج التدريبي (Training Program)
2. الجلسة التدريبية (Training Session)
3. تسجيل الموظفين (Enrollment) + الدرجة والتغذية الراجعة
3.1

البرامج التدريبية (Training Programs)

البرنامج = خطة تدريب عامة. ممكن يكون فيه أكتر من جلسة تحت نفس البرنامج.

الحقول:

الحقلالنوعالشرح
nameنصاسم البرنامج (مثلاً: إدارة المشاريع الاحترافية PMP)
categoryنصالتصنيف (تقني، إداري، مهارات ناعمة، سلامة)
objectivesنص طويلأهداف البرنامج
durationنصالمدة (5 أيام، 40 ساعة، إلخ)
costرقمتكلفة البرنامج
providerنصمزود التدريب (شركة، مدرب مستقل)
is_activebooleanفعّال أم متوقف

API:

الطريقةالمسارالشرح
GET/hrm/training-programsقائمة البرامج
POST/hrm/training-programsإنشاء برنامج
PUT/hrm/training-programs/{id}تعديل برنامج
DELETE/hrm/training-programs/{id}حذف برنامج
3.2

الجلسات التدريبية (Training Sessions)

الجلسة = حدث تدريبي فعلي بتاريخ ومكان ومدرب محدد. كل جلسة مرتبطة ببرنامج.

الحقول:

الحقلالنوعالشرح
training_program_idFKالبرنامج الأب
titleنصعنوان الجلسة
dateتاريختاريخ الجلسة
locationنصالمكان (قاعة 3، أونلاين، إلخ)
trainerنصاسم المدرب
max_participantsرقمالحد الأقصى للمشاركين

دورة الحالات:

مجدولة
scheduled
جارية
in_progress
مكتملة
completed
ملغية
cancelled

API:

الطريقةالمسارالشرح
GET/hrm/training-sessionsقائمة الجلسات
POST/hrm/training-sessionsإنشاء جلسة
PUT/hrm/training-sessions/{id}تعديل جلسة
DELETE/hrm/training-sessions/{id}حذف جلسة
💡 لما الجلسة تكتمل completed، لازم تحدّث حالة كل مسجّل (حضر / لم يحضر).
3.3

التسجيل (Enrollments)

تسجيل الموظفين في الجلسات التدريبية ومتابعة حضورهم ونتائجهم.

دورة الحالات:

مسجّل
enrolled
حضر
attended
مكتمل
completed
ملغي
cancelled
|
لم يحضر
no_show

الحقول بعد الإتمام:

الحقلالشرح
scoreالدرجة / التقييم (0-100)
feedbackالتغذية الراجعة من الموظف عن الجلسة
certificateشهادة الإتمام (لو متاحة)

API:

الطريقةالمسارالشرح
GET/hrm/training-enrollmentsقائمة التسجيلات
POST/hrm/training-enrollmentsتسجيل موظف في جلسة
PUT/hrm/training-enrollments/{id}تحديث الحالة / الدرجة / التغذية
DELETE/hrm/training-enrollments/{id}إلغاء تسجيل
⚠ لا يمكن تسجيل أكثر من max_participants في جلسة واحدة. النظام يرفض التسجيل لو العدد اكتمل.

4. مكافأة نهاية الخدمة (End of Service)
حساب المكافأة حسب نظام العمل السعودي — الإنهاء، الحساب، الاعتماد، الصرف
4

المسار الكامل لنهاية الخدمة

1. إنشاء تسوية (EOS Settlement)
2. حساب المكافأة (Calculate)
3. اعتماد المدير (Approve)
4. الصرف + القيد المحاسبي (Pay)
4.1

إنشاء التسوية

الحقول:

الحقلالنوعالشرح
employee_idFKالموظف
termination_typeاختيارنوع الإنهاء (انظر الجدول)
last_working_dayتاريخآخر يوم عمل
reasonنصسبب الإنهاء

أنواع الإنهاء:

النوعبالإنجليزيتأثير على المكافأة
استقالةresignationحسب سنوات الخدمة (جدول مفصّل)
فصلterminationمكافأة كاملة
تقاعدretirementمكافأة كاملة
انتهاء عقدcontract_endمكافأة كاملة
وفاةdeathمكافأة كاملة (تُصرف للورثة)

دورة الحالات:

مسودة
draft
محسوب
calculated
معتمد
approved
مصروف
paid
4.2

طريقة حساب المكافأة — نظام العمل السعودي

القاعدة الأساسية:

أول 5 سنوات: نصف راتب شهري × عدد السنوات
بعد 5 سنوات: راتب شهري كامل × عدد السنوات الزائدة

المكافأة = (الراتب / 2 × min(سنوات, 5)) + (الراتب × max(سنوات - 5, 0))

حالة الاستقالة (تأثير خاص):

سنوات الخدمةالنسبة المستحقةالشرح
أقل من سنتين0%لا يستحق شيء
2 — 5 سنواتثلث (33.3%)ثلث المكافأة المحسوبة
5 — 10 سنواتثلثين (66.7%)ثلثي المكافأة المحسوبة
أكثر من 10 سنوات100%المكافأة كاملة

الإضافات والخصومات:

البندالنوعالشرح
رصيد الإجازات المتبقيإضافةأيام × الأجر اليومي
قروض معلّقةخصمالرصيد المتبقي من القرض
سلف غير مسددةخصمأي سلف تحت حساب لم تُسدد

مثال — موظف راتبه 10,000 ريال، 8 سنوات، استقالة:

سنوات الخدمة = 8
الراتب = 10,000 ريال

// المكافأة الكاملة:
أول 5 سنوات = (10,000 / 2) × 5 = 25,000
بعد 5 سنوات = 10,000 × 3 = 30,000
المجموع = 55,000

// نسبة الاستقالة (5-10 سنوات = ثلثين):
المستحق = 55,000 × 2/3 = 36,667 ريال

// الإضافات:
رصيد إجازات = 12 يوم × (10,000/30) = 4,000 ريال

// الخصومات:
قرض متبقي = 5,000 ريال

// الصافي:
36,667 + 4,000 - 5,000 = 35,667 ريال
4.3

الاعتماد والصرف

الخطوات:

  1. approve: المدير يراجع الحساب ويعتمده (calculated → approved)
  2. pay: المالية تصرف المبلغ وتعمل القيد المحاسبي (approved → paid)

القيد المحاسبي:

عند الصرف (pay):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
من حـ/ مخصص نهاية الخدمة     35,667
     إلى حـ/ البنك (أو الخزنة)      35,667
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
الشرح: صرف مكافأة نهاية خدمة — الموظف: أحمد محمد

API:

الطريقةالمسارالشرح
GET/hrm/eosقائمة التسويات
POST/hrm/eosإنشاء تسوية جديدة
POST/hrm/eos/{id}/calculateحساب المكافأة (draft → calculated)
POST/hrm/eos/{id}/approveاعتماد (calculated → approved)
POST/hrm/eos/{id}/payصرف + قيد محاسبي (approved → paid)
💡 إعداد مهم: تأكد إن حساب "مخصص نهاية الخدمة" معرّف في شجرة الحسابات — وإلا القيد مش هيتعمل.

5. السلف والقروض (Loans & Advances)
من تقديم الطلب لحد السداد التلقائي من الراتب
5

المسار الكامل للسلف والقروض

1. تقديم الطلب (Pending)
2. الموافقة (Approved) + قيد الصرف
3. نشط (Active) — أقساط تُخصم شهرياً
4. مسدد بالكامل (Paid)
5.1

أنواع القروض

النوعبالإنجليزيالشرحالسداد
سلفةadvanceمبلغ صغير للحالات الطارئةيُسدد خلال 1-2 شهر (قسط أو قسطين)
قرضloanمبلغ كبير لغرض محدد (زواج، علاج، سيارة)يُسدد على أقساط شهرية (3-24 شهر)
5.2

إنشاء القرض / السلفة

الحقول:

الحقلالنوعالشرح
employee_idFKالموظف
typeاختيارadvance (سلفة) / loan (قرض)
amountرقمالمبلغ المطلوب
monthly_installmentرقمالقسط الشهري
number_of_installmentsرقمعدد الأقساط
start_dateتاريختاريخ بدء الخصم
reasonنصسبب القرض
remaining_amountرقمالمتبقي (يتحدث تلقائي مع كل قسط)

دورة الحالات:

معلّق
pending
موافق
approved
نشط
active
مسدد
paid
مرفوض
rejected
|
ملغي
cancelled
5.3

الموافقة والرفض

  • approve: المدير يوافق → الحالة تتحول لـ approved ثم active بعد الصرف
  • reject: المدير يرفض مع كتابة السبب → rejected

API:

الطريقةالمسارالشرح
GET/hrm/loansقائمة القروض والسلف
POST/hrm/loansإنشاء قرض / سلفة
PUT/hrm/loans/{id}تعديل قرض (لو لسه pending)
POST/hrm/loans/{id}/approveموافقة
POST/hrm/loans/{id}/rejectرفض
DELETE/hrm/loans/{id}حذف (لو pending فقط)
5.4

القيود المحاسبية

1. عند صرف القرض (الموافقة والصرف):

عند صرف القرض:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
من حـ/ سلف موظفين (1109)        5,000
     إلى حـ/ الخزنة (1100)            5,000
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
الشرح: صرف سلفة — الموظف: أحمد محمد

2. عند خصم القسط من الراتب (كل شهر):

عند خصم القسط من المسير:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
من حـ/ رواتب مستحقة (2101)      1,000
     إلى حـ/ سلف موظفين (1109)       1,000
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
الشرح: خصم قسط سلفة شهر مارس — الموظف: أحمد محمد

مثال كامل — سلفة 5,000 ريال على 5 أقساط:

الشهرالقسطالمتبقيالقيد
يناير (صرف)5,000مدين: سلف موظفين / دائن: الخزنة
فبراير1,0004,000مدين: رواتب مستحقة / دائن: سلف موظفين
مارس1,0003,000مدين: رواتب مستحقة / دائن: سلف موظفين
أبريل1,0002,000مدين: رواتب مستحقة / دائن: سلف موظفين
مايو1,0001,000مدين: رواتب مستحقة / دائن: سلف موظفين
يونيو1,0000 — مسددمدين: رواتب مستحقة / دائن: سلف موظفين
5.5

الربط بالمسير (Payroll Integration)

لما المسير يتحسب → النظام يتحقق من كل القروض النشطة active للموظف → يخصم القسط تلقائي.

آلية الخصم التلقائي:

  1. عند حساب المسير، النظام يفحص: هل الموظف عنده قروض نشطة؟
  2. لو نعم → يضيف القسط كـ خصم في تفاصيل المسير (يظهر كسطر "قسط سلفة")
  3. القسط يتسجل في loan_installments كقسط مدفوع
  4. remaining_amount ينقص بقيمة القسط
  5. لو remaining_amount = 0 → القرض يتحول لـ paid تلقائي
💡 إعداد مهم: الخصم التلقائي يعتمد على إعداد hrm.auto_deduct_loans = true في الإعدادات. لو الإعداد false → الخصم يدوي.
⚠ لو الموظف انتهت خدمته والقرض لسه نشط → المتبقي يتخصم من مكافأة نهاية الخدمة (EOS) تلقائي.

مرجع سريع — الإعدادات المؤثرة على هذه الوحدات

الإعدادالقيمةالتأثير
hrm.auto_deduct_loanstrue / falseخصم أقساط القروض تلقائي من المسير
hrm.salary_calculation_days30عدد أيام الشهر لحساب الأجر اليومي
hrm.eos_account_idحساب محاسبيحساب مخصص نهاية الخدمة للقيد
hrm.loan_account_id1109حساب سلف الموظفين
hrm.default_bank_accountحساب بنكالحساب الافتراضي لصرف المكافآت والقروض
Moon ERP — HR Workflows Guide • 5 Modules • 2026