سلالم الرواتب هي سلالم الأجور في مساحة عملك: لكل سلم مراتب، ولكل مرتبة درجات لكل منها مبلغ أساسي. تشير الوظائف والأوصاف الوظيفية إلى سلم ومرتبة. هذه النقطة للقراءة فقط: تُدار السلالم داخل التطبيق من سلم الرواتب، ويقرؤها نظام تخطيط الموارد (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, updatedAt | ISO 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
}