الهيكل الوظيفي

للمسؤولين

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

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

النقاط

الطريقة والمسارالوظيفةالصلاحية
GET /api/v1/sectorsقائمة قطاعات مساحة عملكstructure.functional.view
GET /api/v1/sub-sectorsقائمة القطاعات الفرعية المختارة في هيكلك الوظيفيstructure.functional.view
GET /api/v1/job-familiesقائمة المجموعات الوظيفية التي تستخدمها مساحة عملكstructure.functional.view
GET /api/v1/job-families/{jobFamilyId}جلب مجموعة وظيفية واحدةstructure.functional.view

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

محتوى كل قائمة

  • القطاعات: القطاع الذي تعمل فيه مساحة عملك، وأي قطاع أنشأته مساحة عملك.
  • القطاعات الفرعية: القطاعات الفرعية المختارة في هيكلك الوظيفي فقط.
  • المجموعات الوظيفية: المجموعات التي أضافتها مساحة عملك فقط (من الدليل المشترك أو من إنشائك). لا تظهر أبداً مجموعات أنشأتها مساحات عمل أخرى، حتى لو كانت تحت القطاع الفرعي نفسه.

الصفوف المؤرشفة التي ما زالت مستخدمة تُرجَع مع قيمة archivedAt.

المطابقة بين البيئات: slug

صفوف الدليل المشترك (القطاعات والقطاعات الفرعية والمجموعات الوظيفية والمهارات من دليل جديرون) تُرجع slug، مثل healthcare-services. لا يتغيّر الـ slug أبداً وهو نفسه في كل بيئات جديرون، لذا طابِق صفوف الدليل بالـ slug. أما الصفوف التي أنشأتها مساحة عملك فتُرجع slug: null، فطابِقها عبر externalRefs.

تختلف المعرّفات بين بيئات جديرون وقد تتغيّر عند إعادة تهيئة البيانات النموذجية: لا تنسخ المعرّفات من بيئة إلى أخرى.

كائن القطاع

الحقلالنوعملاحظات
idنصمعرّف جديرون.
slugنص أو nullالمفتاح الثابت لقطاع من الدليل؛ null لقطاعك الخاص.
name{ ar, en }
archivedAtISO 8601 أو null
externalRefsمصفوفة[{ system, externalId }].
createdAt, updatedAtISO 8601

كائن القطاع الفرعي

الحقلالنوعملاحظات
idنصمعرّف جديرون.
slugنص أو nullالمفتاح الثابت لقطاع فرعي من الدليل؛ null لقطاعك الفرعي الخاص.
sectorIdنصالقطاع الذي ينتمي إليه.
name{ ar, en }
sortOrderعدد صحيحترتيب العرض لديك (الأصغر أولاً).
archivedAtISO 8601 أو null
externalRefsمصفوفة[{ system, externalId }].
createdAt, updatedAtISO 8601يتغيّر updatedAt أيضاً عند اختيار القطاع الفرعي أو إعادة ترتيبه.

كائن المجموعة الوظيفية

مفتاح المجموعة الوظيفية هو id المجموعة. يمكن أن تستخدم مساحة عملك المجموعة نفسها أكثر من مرة بصفات (mandate) مختلفة، وكل استخدام هو نسخة (instance).

الحقلالنوعملاحظات
idنصمعرّف المجموعة الوظيفية.
slugنص أو nullالمفتاح الثابت لمجموعة من الدليل؛ null لمجموعتك الخاصة.
name{ ar, en }
archivedAtISO 8601 أو null
instancesمصفوفةنسخ مساحة عملك، انظر أدناه.
externalRefsمصفوفة[{ system, externalId }].
createdAt, updatedAtISO 8601updatedAt هو آخر تغيير على المجموعة أو أي من نسخها، بما في ذلك حذف إحدى نسخها.

لكل نسخة:

الحقلالنوعملاحظات
idنصمعرّف النسخة (تشير إليه الأوصاف الوظيفية باسم workspaceJobFamilyId).
mandateنصREGULATORY أو EXECUTIVE أو INTERNAL.
subSectorsمصفوفة[{ id, sortOrder }]: قطاعاتك الفرعية المختارة التي تقع المجموعة تحتها، وموضع المجموعة في كل منها (null حتى يُعاد ترتيبها).
skillsكائن{ technical: [...], general: [...] }، المهارات المختارة لهذه النسخة، كل منها { id, slug, name }.
createdAt, updatedAtISO 8601

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

الحدثمتىdata.object
sector.createdتنشئ مساحة عملك قطاعها الخاص أثناء التهيئةالقطاع
sector.updatedتنتقل مساحة عملك إلى قطاعالقطاع
sector.deletedتتوقف مساحة عملك عن استخدام قطاع من الدليل (انتقلت إلى قطاع آخر){ id, externalRefs }
sub_sector.createdتنشئ مساحة عملك قطاعها الفرعي الخاصالقطاع الفرعي
sub_sector.updatedيُختار قطاع فرعي أو يُعاد ترتيبهالقطاع الفرعي
sub_sector.deletedيُلغى اختيار قطاع فرعي{ id, externalRefs }
job_family.createdتُنشأ مجموعة، أو تُضاف إلى مساحة عملك لأول مرةالمجموعة الوظيفية
job_family.updatedيتغيّر اسم مجموعة، أو صفة نسخة أو مهاراتها أو ترتيبها، أو تُضاف نسخة أو تُنسخ أو تُحذف، أو يُختار قطاع فرعي تندرج تحته المجموعة أو يُلغى اختياره (فتتغيّر subSectors)، أو يُعاد تسمية مهارة خاصة بمساحة عملك في نسخة أو تُحذفالمجموعة الوظيفية
job_family.deletedتتوقف مساحة عملك عن استخدام مجموعة (حُذفت آخر نسخة منها)، أو حُذفت مجموعتك الخاصة{ id, externalRefs }
<resource>.bulk_changedتغيّر عدد كبير من الصفوف دفعة واحدة يتعذّر سردها{ resource }

نسخ نسخة مجموعة وظيفية إلى صفة أخرى يرسل job_family.updated، وعند نسخ أوصافها الوظيفية ووظائفها يرسل أيضاً job_description.created وposition.created لكل نسخة (أو <resource>.bulk_changed إذا تجاوزت 50).

يعني *.deleted هنا غالباً أن الصف خرج من هيكلك الوظيفي: فالقطاع أو القطاع الفرعي أو المجموعة من الدليل ما زال موجوداً في الدليل. وحدها المجموعة التي أنشأتها مساحة عملك تُحذف فعلاً، وتظهر حينها أيضاً في GET /api/v1/deleted?resource=job_family. أما إلغاء الاختيار فلا يظهر أبداً في /deleted: إن احتمل أن يفوتك حدث *.deleted فأعد قراءة القائمة كاملة (دون updatedSince) وقارنها بقائمتك؛ فكل ما غاب عنها خرج من هيكلك الوظيفي.

التغييرات على الدليل المشترك نفسه (التي تجريها جديرون) لا ترسل أحداثاً. أعِد قراءة هذه القوائم من حين لآخر، يومياً مثلاً مع updatedSince، لالتقاطها.

الأخطاء

الحالة والرمزالمعنى
403 forbiddenالمفتاح لا يملك structure.functional.view.
404 not_foundمساحة عملك لا تستخدم مجموعة وظيفية بهذا المعرّف.
422 validation_failedقيمة limit أو cursor أو updatedSince غير صالحة.
422 validation_failedأُرسل أحد externalSystem وexternalId دون الآخر.

مثال

curl https://jadiroon.com/api/v1/job-families?limit=1 \
  -H "Authorization: Bearer $JADIROON_KEY"
{
  "data": [
    {
      "id": "cmvjx0h1t0001kn3o9c2a7def",
      "slug": "nursing",
      "name": { "ar": "التمريض", "en": "Nursing" },
      "archivedAt": null,
      "instances": [
        {
          "id": "cmvjx0h9k0003kn3oa1b2c3d4",
          "mandate": "EXECUTIVE",
          "subSectors": [{ "id": "cmvjx0g7r0000kn3o5e6f7a8b", "sortOrder": 0 }],
          "skills": {
            "technical": [{ "id": "cmvjx0f2a0007kn3o1a2b3c4d", "slug": "patient-assessment", "name": { "ar": "تقييم المرضى", "en": "Patient assessment" } }],
            "general": [{ "id": "cmvjx0f3b0008kn3o5e6f7a8b", "slug": "teamwork", "name": { "ar": "العمل الجماعي", "en": "Teamwork" } }]
          },
          "createdAt": "2026-10-20T09:12:44.120Z",
          "updatedAt": "2026-10-21T13:40:02.511Z"
        }
      ],
      "externalRefs": [],
      "createdAt": "2026-09-01T00:00:00.000Z",
      "updatedAt": "2026-10-21T13:40:02.511Z"
    }
  ],
  "nextCursor": "Y212angwaDF0MDAwMWtuM285YzJhN2RlZg"
}