من تعريف مكونات الراتب لحد الترحيل للمحاسبة — شرح كامل للوجيك
المكان: /hr/salary-components — أول حاجة تتعمل قبل أي حاجة.
مكون الراتب = أي عنصر بيأثر على الراتب (سواء بالزيادة أو الخصم).
| النوع | بالعربي | التأثير | أمثلة |
|---|---|---|---|
| earning | مكسب / بدل | يزيد الراتب | بدل سكن، بدل مواصلات، بدل طعام، عمولة |
| deduction | خصم / استقطاع | ينقص من الراتب | تأمينات اجتماعية، تأمين طبي، ضريبة دخل، قسط قرض |
| الطريقة | الشرح | مثال |
|---|---|---|
| fixed (ثابت) | مبلغ ثابت كل شهر | بدل مواصلات = 500 ريال |
| percentage (نسبة) | نسبة من الراتب الأساسي | بدل سكن = 25% من الأساسي |
| الكود | المكون | النوع | الحساب | القيمة | إلزامي |
|---|---|---|---|---|---|
| HA | بدل سكن | مكسب | نسبة | 25% من الأساسي | نعم ✅ |
| TA | بدل مواصلات | مكسب | ثابت | 500 ريال | لا |
| FA | بدل طعام | مكسب | ثابت | 300 ريال | لا |
| GOSI | تأمينات اجتماعية | خصم | نسبة | 9.75% من الأساسي | نعم ✅ |
| MI | تأمين طبي | خصم | ثابت | 200 ريال | نعم ✅ |
المكان: /hr/salary-structures
هيكل الراتب = ربط مكونات الراتب بالموظف. كل موظف ممكن يكون عنده مكونات مختلفة بقيم مختلفة.
is_mandatory = true تتطبق على كل الموظفين النشطين| الحقل | الشرح |
|---|---|
salary_component_id | المكون (بدل سكن، تأمينات، إلخ) |
calculation_type | fixed أو percentage |
amount | القيمة الثابتة (لو fixed) |
percentage_value | النسبة (لو percentage) — مثلاً 25% |
effective_from | تاريخ بداية السريان |
effective_to | تاريخ نهاية السريان (فاضي = سارية لحد ما تتغير) |
is_active | فعّال أم لا |
| المكون | النوع | الحساب | القيمة الشهرية |
|---|---|---|---|
| الراتب الأساسي | — | — | 8,000 |
| بدل سكن | مكسب | 25% × 8000 | +2,000 |
| بدل مواصلات | مكسب | ثابت | +500 |
| تأمينات (GOSI) | خصم | 9.75% × 8000 | -780 |
| تأمين طبي | خصم | ثابت | -200 |
| إجمالي المكاسب | 10,500 | ||
| إجمالي الخصومات | -980 | ||
| صافي الراتب | 9,520 | ||
المكان: /hr/payroll ← "مسير جديد" ← "حساب"
لكل موظف نشط (Active):
// 1. الأساسيات
basic_salary = employee.basic_salary // 8000
daily_rate = basic_salary / salary_calculation_days // 8000/30 = 266.67
hourly_rate = daily_rate / working_hours_per_day // 266.67/8 = 33.33
// 2. بيانات الحضور من فترة المسير
absent_days = عدد أيام الغياب (status = absent)
overtime_hours = إجمالي الساعات الإضافية
// 3. حساب الخصومات والإضافات
overtime_amount = overtime_hours × hourly_rate × overtime_multiplier
= 10h × 33.33 × 1.5 = 500 ريال
absent_deduction = absent_days × daily_rate
= 2 × 266.67 = 533.33 ريال
// 4. مكونات هيكل الراتب (الفعّالة في فترة المسير)
لكل مكون في salary_structure:
لو percentage: amount = basic_salary × percentage / 100
لو fixed: amount = المبلغ الثابت
لو earning → يضاف على المكاسب
لو deduction → يضاف على الخصومات
// 5. الإجمالي
total_earnings = basic_salary + overtime + بدلات
total_deductions = absent_deduction + تأمينات + ضرائب
net_salary = total_earnings - total_deductions
| المكاسب (Earnings) | |
|---|---|
| الراتب الأساسي | 8,000.00 |
| بدل سكن (25%) | +2,000.00 |
| بدل مواصلات (ثابت) | +500.00 |
| ساعات إضافية (10h × 33.33 × 1.5) | +500.00 |
| إجمالي المكاسب | 11,000.00 |
| الخصومات (Deductions) | |
| خصم الغياب (2 يوم × 266.67) | -533.33 |
| تأمينات اجتماعية (9.75%) | -780.00 |
| تأمين طبي (ثابت) | -200.00 |
| إجمالي الخصومات | -1,513.33 |
| صافي الراتب | 9,486.67 |
المكان: /hr/settings
| الإعداد | القيمة الافتراضية | الشرح |
|---|---|---|
salary_calculation_days | 30 | عدد أيام حساب الراتب (28 أو 30 أو 365) |
working_hours_per_day | 8 | ساعات العمل اليومية |
overtime_rate_multiplier | 1.5 | معامل أجر الساعة الإضافية (1.5 = 150%) |
salary_expense_account_id | — | حساب مصروف الرواتب (للترحيل المحاسبي) |
salary_payable_account_id | — | حساب الرواتب المستحقة |
social_insurance_account_id | — | حساب التأمينات الاجتماعية |
medical_insurance_account_id | — | حساب التأمين الطبي |
income_tax_account_id | — | حساب ضريبة الدخل |
| المرحلة | الزر | إيه اللي بيحصل |
|---|---|---|
| مسودة | 🔢 حساب | يحسب الراتب لكل موظف نشط (المكاسب + الخصومات + الصافي). النتيجة تتخزن في payroll_items + payroll_item_details |
| محسوب | ✅ موافقة | المدير يراجع ويوافق. يسجل approved_by + approved_at |
| معتمد | 📤 ترحيل للمحاسبة |
يعمل قيد محاسبي: مدين: حساب مصروف الرواتب (إجمالي المكاسب) دائن: حساب الرواتب المستحقة (صافي الراتب) دائن: حساب التأمينات (لو موجود) دائن: حساب ضريبة الدخل (لو موجود) ← يربط القيد بالمسير ( journal_entry_id)
|
| مرحّل | 💳 صرف | يعلّم الرواتب كمصروفة. يسجل paid_at. يمكن إنشاء قيد دفع إضافي (من البنك) |
salary_expense_account_id + salary_payable_account_id) قبل الترحيل. بدونها الترحيل هيرجع خطأ.كشف الراتب لموظف واحد — يظهر لما تضغط "👁️ تفاصيل" على المسير.
عند الترحيل، النظام ينشئ قيد يومية في موديول المحاسبة:
| الحساب | مدين | دائن |
|---|---|---|
| مصروف الرواتب (4100) | 52,500.00 | — |
| الرواتب المستحقة (2200) | — | 45,230.00 |
| التأمينات الاجتماعية (2210) | — | 3,900.00 |
| التأمين الطبي (2220) | — | 1,000.00 |
| ضريبة الدخل (2230) | — | 2,370.00 |
| الإجمالي | 52,500.00 | 52,500.00 |
الآلية: النظام بيدور على اسم المكون (social insurance, medical insurance, income tax) ولو لقاله ويوجد حساب محاسبي مضبوط → يفصله في سطر منفصل. غير كده يتحط كله في "الرواتب المستحقة".
| الحساب | مدين | دائن |
|---|---|---|
| الرواتب المستحقة (2200) | 45,230.00 | — |
| البنك (1100) | — | 45,230.00 |
مش كل خصم أو إضافة بتتكرر كل شهر. فيه حالات بتكون لشهر واحد بس — زي خصم إتلاف أو حافز استثنائي أو سلفة.
/hr/salary-structures/hr/salary-componentsلو الخصم بيتكرر على أقساط (زي سلفة أو دين):
/hr/loansالحل الأمثل: إضافة ميزة "تعديلات يدوية" على المسير — تضيف خصم أو إضافة لموظف معين في شهر معين بدون ما تعدل الهيكل.
السيناريو: أحمد أتلف جهاز كمبيوتر — خصم 1,500 ريال من راتب أبريل.
الحل:
| الراتب الأساسي | 8,000 |
| بدل سكن | +2,000 |
| تأمينات | -780 |
| خصم إتلاف (أبريل فقط) | -1,500 |
| الصافي | 7,720 |
السيناريو: سارة طلبت سلفة 3,000 ريال — تتخصم على 3 أشهر (1,000/شهر).
الحل:
/hr/loans ← "قرض جديد"السيناريو: محمد عليه دين سابق 5,000 ريال — عايز يسدد 2,000 من راتب الشهر ده.
الحل:
السيناريو: فريق المبيعات حقق التارجت — حافز 2,000 ريال لكل واحد في أبريل بس.
الحل:
| الراتب الأساسي | 8,000 |
| بدل سكن | +2,000 |
| حافز مبيعات (أبريل فقط) | +2,000 |
| تأمينات | -780 |
| الصافي | 11,220 |
السيناريو: الموظف تأخر أو غاب.
الحل: تلقائي! — النظام بيحسب خصم الغياب تلقائي من بيانات الحضور:
مش محتاج تعمل أي حاجة يدوي — بس تأكد إن الحضور مسجل صح.
| الحالة | الطريقة | المكان |
|---|---|---|
| خصم/إضافة لشهر واحد | هيكل راتب بتاريخ (من-إلى) | /hr/salary-structures |
| سلفة/دين على أقساط | قرض (loan/advance) | /hr/loans |
| خصم غياب/تأخير | تلقائي من الحضور | /hr/attendance |
| حافز لمرة واحدة | مكون مكسب بتاريخ محدد | /hr/salary-structures |
| سداد دين | مكون خصم بتاريخ أو قرض | /hr/salary-structures أو /hr/loans |