سلالم الرواتب

للمسؤولين

سلالم الرواتب هي سلالم الأجور في مساحة عملك: لكل سلم مراتب، ولكل مرتبة درجات لكل منها مبلغ أساسي. تشير الوظائف والأوصاف الوظيفية إلى سلم ومرتبة. هذه النقطة للقراءة فقط: تُدار السلالم داخل التطبيق من سلم الرواتب، ويقرؤها نظام تخطيط الموارد (ERP) أو نظام الرواتب لديك ليطابق عليها مراتبه.

جميع النقاط تحت /api/v1 وتتطلب مفتاح واجهة برمجية (Authorization: Bearer jdr_live_…) ينشئه مسؤول مساحة العمل من الإعدادات ← التكاملات.

النقاط

الطريقة والمسارالوظيفةالصلاحية
GET /api/v1/pay-scalesقائمة سلالم الرواتب مع مراتبها ودرجاتهاstructure.functional.salary

تقبل القائمة limit (من 1 إلى 100، والافتراضي 50) وcursor وتُرجع { data, nextCursor }. ويُرجع updatedSince (بصيغة ISO 8601) السلالم التي تغيّرت منذ ذلك الوقت فقط؛ وإضافة مرتبة أو تعديلها أو حذفها تُعدّ تغييراً في سلمها. وتُدرج السلالم غير النشطة. ويبحث ?externalSystem=&externalId= (معاً) عن السلم المرتبط بمعرّفك الخاص.

كائن سلم الرواتب

الحقلالنوعملاحظات
idنصمعرّف جديرون (يظهر في الوظائف باسم payScaleId).
name{ ar, en }
kindنصGENERAL أو HEALTH أو EDUCATION أو MILITARY أو CUSTOM.
builtInمنطقيtrue إذا نُسخ السلم من قالب جديرون.
periodنصMONTHLY أو ANNUAL: وحدة كل المبالغ في السلم.
currencyنصمثل SAR.
stepModelنصCOMPUTED (الأساس + الدرجة × العلاوة) أو EXPLICIT (مبالغ محددة لكل درجة).
activeمنطقيهل السلم نشط في التطبيق.
gradesمصفوفةالمرتبة الأدنى أولاً، انظر أدناه.
externalRefsمصفوفة[{ system, externalId }].
createdAt, updatedAtISO 8601

لكل مرتبة:

الحقلالنوعملاحظات
idنصيظهر في الوظائف باسم payGradeId.
rankعدد صحيحترتيبها في السلم، 1 = الأدنى.
codeنصتسمية المرتبة في السلم، مثل G6.
name{ ar, en }اسم عرض اختياري.
baseMin, incrementعدد صحيحمبلغ الدرجة الأولى والعلاوة لكل درجة.
stepCountعدد صحيحعدد الدرجات.
stepsمصفوفة[{ number, baseAmount }] لكل درجة، مع تطبيق أي مبالغ محددة لكل درجة. وقيمة payStepNumber في الوظيفة هي أحد هذه الأرقام.

أحداث خطافات الويب

الحدثمتىdata.object
pay_scale.createdيُنشأ سلم أو يُنسخ من قالبسلم الرواتب
pay_scale.updatedيتغيّر سلم أو إحدى مراتبه؛ ويسرد data.changedFields الحقول (grades لتغييرات المراتب)سلم الرواتب
pay_scale.deletedيُحذف سلم{ id, externalRefs }
pay_scale.bulk_changedنسخت تهيئة مساحة العمل سلالم القطاع{ resource: "pay_scale" }

تعديل مبالغ مرتبة أو عدد درجاتها يعيد أيضاً تسعير ما يقع عليها: كل وظيفة يتغيّر payStepNumber أو baseSalary فيها ترسل position.updated (changedFields: ["payStepNumber", "baseSalary"])، وكل وصف وظيفي يتغيّر نطاقه يرسل job_description.updated (changedFields: ["salaryMin", "salaryMax"])، أو <resource>.bulk_changed إذا تجاوزت 50. أما إعادة تسمية المرتبة أو تغيير رمزها أو ترتيبها فقط فلا يعيد تسعير شيء ولا يرسل إلا pay_scale.updated. ولا تتلقى نقاط الاستقبال التي لا يملك تكاملها structure.functional.salary أحداث position.updated وjob_description.updated هذه الناتجة عن إعادة التسعير، لأن التغيير في الأجر وحده.

يظهر السلم المحذوف أيضاً في GET /api/v1/deleted?resource=pay_scale لمدة 180 يوماً. ولا تتلقى هذه الأحداث إلا النقاط التي يملك مفتاحها structure.functional.salary.

الأخطاء

الحالة والرمزالمعنى
403 forbiddenالمفتاح لا يملك structure.functional.salary.
422 validation_failedقيمة limit أو cursor أو updatedSince غير صالحة.
422 validation_failedأُرسل أحد externalSystem وexternalId دون الآخر.

مثال

curl https://jadiroon.com/api/v1/pay-scales?limit=1 \
  -H "Authorization: Bearer $JADIROON_KEY"
{
  "data": [
    {
      "id": "cmvk2a7p10002kn5s3d4e5f6a",
      "name": { "ar": "سلم الموظفين العام", "en": "General civil service scale" },
      "kind": "GENERAL",
      "builtIn": true,
      "period": "MONTHLY",
      "currency": "SAR",
      "stepModel": "COMPUTED",
      "active": true,
      "grades": [
        {
          "id": "cmvk2a7q40003kn5s7a8b9c0d",
          "rank": 1,
          "code": "1",
          "name": { "ar": "المرتبة الأولى", "en": "Grade 1" },
          "baseMin": 3000,
          "increment": 135,
          "stepCount": 3,
          "steps": [
            { "number": 1, "baseAmount": 3000 },
            { "number": 2, "baseAmount": 3135 },
            { "number": 3, "baseAmount": 3270 }
          ]
        }
      ],
      "externalRefs": [],
      "createdAt": "2026-10-20T09:12:44.120Z",
      "updatedAt": "2026-10-20T09:12:44.120Z"
    }
  ],
  "nextCursor": null
}