انتقل إلى المحتوى

الجداول وجولات التخصيص

ما هي

تُنفِّذ جولة التخصيص قواعد التخصيص على خطة طلب مؤكَّدة، وتُنتج لكل فتحة شاغرة قائمة مرشَّحين مُرتَّبة، مع تحديد الأفضل منهم على أنهم مُختارون. الجولة ليست الجدول المنشور — بل هي العملية الحسابية التي تقترح مَن ينبغي اختياره، ثم يراجعها المخطِّط ويقفلها ويَنشرها (في خطوة منفصلة).

لماذا توجد

ملء خطة الطلب يدويًا بطيء ويصعب تبريره. تقوم الجولة بذلك في مرور واحد — بتقييم كل مرشَّح مقابل كل فتحة عبر القواعد — وتُسجِّل سبب تأهُّل كل شخص أو عدمه، فتكون النتيجة قابلة للتفسير وللتكرار. وفصلُ "الحساب" عن "المراجعة" و"النشر" يُبقي الإنسان مسؤولًا عمّا يدخل حيز التشغيل فعليًا.

المفاهيم والمصطلحات الأساسية

  • جولة التخصيص — تنفيذ واحد للقواعد على (خطة طلب × مجموعة قواعد).
  • صف المرشَّحموظف × سطر طلب واحد مُقيَّم، يحمل تأهُّله ودرجته وترتيبه.
  • مؤهَّل مقابل مُختارمؤهَّل يعني أن المرشَّح اجتاز كل القواعد الصارمة؛ مُختار يعني أنه كان ضمن الأعلى ترتيبًا الذين اختيروا لملء العدد المطلوب لذلك السطر. المؤهَّل هو "يمكن استخدامه"؛ والمُختار هو "تم اختياره".
  • اللقطة (Snapshot) — البيانات المُجهَّزة مسبقًا لكل جولة والتي تقرأ منها القواعد، حتى تتجنّب الجولة عشرات الآلاف من رحلات الذهاب والإياب إلى قاعدة البيانات.
  • إعادة التشغيل — التشغيل من جديد؛ يُنشئ جولة جديدة تمامًا ولا يُغيّر القديمة أبدًا.
  • حالة الجولةDraft أو Computed أو Reviewed أو Locked أو Failed.

كيف تعمل

تفصل الجولة عمل الآلة عن حُكم الإنسان:

stateDiagram-v2
  [*] --> Draft: create
  Draft --> Computed: execute (the engine runs the rules)
  Draft --> Failed: engine error
  Computed --> Reviewed: a planner reviews the ranked candidates
  Computed --> Failed: mark failed
  Reviewed --> Locked: a planner locks the run
  note right of Locked
    Rerun spawns a NEW Draft run.
    This run is never modified in place.
  end note

يُقيّم المحرّك كل موظف نشط مقابل كل سطر طلب، ويُرتّب المؤهَّلين لكل سطر، ويحدّد الأعلى ضمن العدد المطلوب على أنهم مُختارون. ويكتب صف مرشَّح واحدًا لكل تقييم، يحمل التأهُّل والدرجة والترتيب والدليل وراء القرار.

لماذا اللقطة؟ قد تكون الجولة الكبيرة بحجم مئات الموظفين × نحو 100 سطر × نحو 11 قاعدة — أي قرابة نصف مليون تقييم. ولو استعلم كل تقييم من قاعدة البيانات عن المهارات والشهادات والورديات السابقة والإجازات وما إلى ذلك، لكان ذلك عشرات الآلاف من رحلات الذهاب والإياب. لذا تُجهّز الجولة لقطة واحدة في الذاكرة مسبقًا (بضعة استعلامات) تقرأ منها كل القواعد. إنها تُضحّي بقليل من الذاكرة مقابل تقليص نحو 50,000 استعلام إلى بضعة استعلامات.

موضع الجولة في المسار الأوسع:

flowchart LR
  D["خطة الطلب (Confirmed)"] --> R["قواعد التخصيص"]
  R --> Run["جولة التخصيص — تُرتّب وتختار المرشَّحين"]
  Run --> P["النشر → الجدول (خطوة منفصلة)"]

جولة تخصيص مكتملة — مرشَّحون مؤهَّلون مُرتَّبون، والأعلى ضمن العدد المطلوب مُعلَّم كمُختار.

جولة غير مكتملة — سطر ناقص عن عدده المطلوب، مع أعداد المؤهَّلين/غير المؤهَّلين لكل سطر.

القواعد وما يُفرَض

  • الجولة لا تَنشر ولا تكتب تعيينات الورديات. تُنتج صفوف مرشَّحين مُرتَّبة/مُختارة فقط. وتحويل الجولة إلى جدول حيّ هو خطوة نشر منفصلة (يغطّيها قسم الموافقات والنشر).
  • ترتيب الحالات مُلزَم: التنفيذ يحتاج Draft، والمراجعة تحتاج Computed، والقفل يحتاج Reviewed. والاستدعاءات خارج الترتيب تُرفَض (HTTP 409)، ولا تُقبَل بصمت.
  • إعادة التشغيل لا تُعدّل أبدًا. تُنشئ جولة Draft جديدة على الخطة ومجموعة القواعد نفسيهما؛ وتحتفظ الأصلية بحالتها (يمكن أن تبقى Locked) كي تتمكّن من المقارنة.
  • الاختيار حتميّ — يُرتَّب المؤهَّلون بالدرجة (ثم بمعرّف الموظف) كي تكون عمليات إعادة التشغيل ثابتة.
  • المرشَّحون غير المؤهَّلين لا يظهرون إلا للمستخدمين الذين يملكون صلاحية التصحيح (debug).

مَن يستطيع رؤية سبب استبعاد شخص ما: إن سبب الإخفاق الصارم لكل قاعدة محصور بصلاحية المسؤول/التصحيح (allocation_run.debug، SYS_ADMIN). أما المخطِّط فلا يرى سوى المرشَّحين المؤهَّلين ومَن اختير — لا أسباب الاستبعاد. ويظهر أثر ذلك بشدّة في الجولة غير المكتملة، حيث يكون التشخيص الذي يحتاجه المخطِّط (مثل "لا توجد قاعدة إعارة"، أو "انتهت صلاحية الشهادة") هو بالضبط الجزء الذي لا يستطيع رؤيته (الاكتشاف F6).

ثلاث حالات مختلفة من "Locked"/"Published" — لا تخلط بينها أبدًا: يمكن أن تكون خطة الطلب Locked، ويمكن أن تكون جولة التخصيص Locked، والجدول المنشور يكون Published. تعيش هذه على ثلاثة أشياء مختلفة وتعني ثلاثة أشياء مختلفة. فقفل الجولة ليس قفلًا لخطة الطلب، ولا أيٌّ منهما يَنشر جدولًا. ملاحظة: حالة Locked لخطة الطلب هي حالة مُعرَّفة بلا مسار تشغيلي حالي، بينما Locked للجولة وPublished للجدول كلاهما قابل للوصول وجرى التحقّق منهما تشغيليًا (المرحلة 3).

ما هو متاح مقابل المخطَّط له

  • متاح: محرّك الجولة (Draft→Computed/Failed)، واللقطة، والانتقالات المحكومة بشريًا (Computed→Reviewed→Locked)، وإعادة التشغيل، وواجهة قراءة المرشَّحين المؤهَّلين/غير المؤهَّلين، وتنظيف الاحتفاظ، وقائمة الجولات / تفاصيل الجولة / شارة الحالة / حوارات القفل وإعادة التشغيل.
  • جزئي: زر تشغيل الجولة (Execute) على الويب وصل متأخرًا في السبرنت (نقطة نهاية التنفيذ نفسها متاحة في الخلفية)؛ كما يَشحن قسمٌ واحد من اللقطة (فوج مزيج الورديات) فارغًا، مؤجَّلًا إلى عمل المساواة — والقواعد التي تحتاجه تعود إلى درجة محايدة.

ذات صلة