المرحلة: التوظيف

للمسؤولين

التوظيف: ينتقل المرشحون عبر مسار الشاغر (الفرز، والتقييم، والمقابلة، والعرض) حتى يُعيَّن أحدهم.

الموارد

الموردالواجهة البرمجيةالصفحات
الطلباتقراءة، وإنشاء (إضافة مرشح إلى شاغر)، ونقل بين المراحل، ورفض، وتعيينالطلبات
المقابلاتقراءة، وإنشاء (عرض مواعيد)، وتعديل (اقتراح مواعيد جديدة أو إلغاء)المقابلات
العروضقراءة، وتنزيل خطاب العرضالعروض

المسار المعتاد

  1. أضف مرشحًا إلى شاغر: POST /api/v1/applications مع { "openingId": "…", "candidate": { "externalSystem": "jobboard", "externalId": "C-881" } }.
  2. تابع نتائج الفرز والتقييم بـ application.updated وapplication.stage_changed.
  3. اعرض مواعيد المقابلة: POST /api/v1/interviews؛ فيختار المرشح موعدًا (interview.updated)، وتقيّمها اللجنة (interview.completed).
  4. انقل الطلب إلى OFFERED (recruitment.offer.issue)، ثم اقرأ خطاب العرض من /api/v1/offers/{id}/file (يحتاج recruitment.candidate.contact).
  5. عيّن: POST /api/v1/applications/{id}/hire. يصبح المرشح موظفًا: تتلقى application.hired وemployee.created، وتنتقل روابط المرشح الخارجية إلى الموظف.

قواعد تستحق المعرفة

  • إضافة مرشح تتبع مسار التوظيف للشاغر، كما في صفحة الوظائف (409 conflict مع opening_internal_only أو not_yet_external)؛ ويتقدم المرشح مرة واحدة لكل شاغر (already_applied).
  • يجب أن يكون الشاغر OPEN (opening_not_open).
  • التعيين يشغّل عملية التسليم نفسها التي يشغلها زر التعيين في التطبيق، بما فيها فحص سعة المقعد (position_full).
  • الطلب المعيَّن نهائي: نقله أو رفضه أو تعيينه مرة أخرى يعيد 409 conflict (already_hired). والطلب المرفوض لا يمكن تعيينه (already_rejected)؛ أعده أولاً إلى مرحلة نشطة.
  • إلغاء مقابلة ملغاة بالفعل لا يغير شيئًا؛ والمقابلة المكتملة تعيد 409 conflict (interview_closed).