محرك موافقات واحد للمنصة كلها
كان سهل جداً إن طلبات الموارد البشرية تيجي ومعاها محرك موافقات صغير بتاعها — عمود حالة، وخانة مدير، وإيميل. وده بالظبط اللي بيعمله كل منتج موارد بشرية تقريباً. DWPlatform ما بيعملهاش، والسبب لازم يتقال الأول عشان باقي الصفحة يبقى ليه معنى.
DWPlatform HR
- بيانات الطلب — اتطلب إيه، ومين اللي طلبه، ولأي تواريخ أو أي مبلغ
- التحقّق — الرصيد، والتداخل، والحدود والسقوف اللي القانون حاططها
- الآثار — التسجيل في دفتر الإجازات، وعمل جدول أقساط، وفتح سطر تكليف جديد
DWPlatform WorkFlow
- مسار الموافقات — المراحل، ومين قاعد في كل مرحلة، وبأي ترتيب
- صندوق الوارد — مكان واحد بينزل فيه كل قرار معلّق في المنصة
- المصمّم — المكان اللي المؤسسة بتعدّل فيه شكل المسار من غير مبرمج
محرك موافقات تاني جوه الموارد البشرية كان هيدّي المنصة صندوقين وارد. المدير كان هيبص في مكان على موافقات المشتريات والمراسلات، وفي مكان تاني على إجازات فريقه — وأكيد هيفوته حاجات في المكان اللي بيفتحه أقل. وكمان كان هيدّي المنصة مجموعتين من باجات التوجيه، وتنفيذين للتفويض، وتايمرين للتصعيد، وشكلين لسجل التدقيق، وكل ده لازم يتصلّح مرتين وهيفضل يتباعد عن بعضه مع الوقت. عشان كده الموارد البشرية بتجهّز المسارات اللي محتاجاها، وبعدين بتسلّم ملكيتها.
التسع مسارات الجاهزة
المؤسسة الجديدة ما بتبدأش بمصمّم مسارات فاضي وفورم طلب ما بيروحش لحاجة. فيه تسع مسارات افتراضية بتتزرع جاهزة، ومتجرَّبة على المنتج، وشغالة من أول يوم — وبعدين بتتسلّم للمؤسسة تعدّل فيها زي ما هي عايزة.
| المسار | المراحل | بيغطي إيه |
|---|---|---|
HR_LEAVE | 3 | الإجازة وإلغاء الإجازة (إجازة) |
HR_LOAN | 4 | السلف (سلفة) — فلوس بتخرج من الشركة، عشان كده المالية موجودة في المسار |
HR_AID | 3 | الإعانات (إعانة) |
HR_LETTER | 2 | الخطابات والشهادات (خطاب) — مفيش مرحلة مدير؛ الموارد البشرية هي اللي بتصدرها |
HR_MISSION | 4 | المأموريات والسفر للشغل (مأمورية) |
HR_ATTENDANCE_ADJUSTMENT | 3 | تسوية سجلات الحضور |
HR_RESIGNATION | 3 | الاستقالة |
HR_TRANSFER | 2 | النقل (نقل) |
HR_PERSONAL_DATA | 2 | تعديل البيانات الشخصية وتغيير الحساب البنكي وتغيير الحالة الاجتماعية |
الشكل المشترك بينهم كلهم
بص على عدد المراحل هتلاقي نمط واضح. كل مسار بيبدأ بمرحلة تقديم. وبعدين معظمهم بيروح لـالمدير المباشر، لأن اللي هيغطّي الغياب المفروض يعرف الأول. وبعده الموارد البشرية، اللي بيراجعوا القواعد وماسكين السجل. ولما يكون فيه فلوس بتتحرك، بتتزاد مرحلة رابعة للمالية — وده بالظبط سبب إن HR_LOAN وHR_MISSION ليهم أربع مراحل وHR_LEAVE ليه تلاتة.
المسارات اللي مرحلتين بتشيل المدير مش الموارد البشرية: طلب خطاب أو تغيير الحساب البنكي مش محتاج رأي مدير، ده محتاج الموارد البشرية تنفّذ.
دي إعدادات افتراضية، مش قواعد. أي واحد من التسعة بيتعدّل في مكتب WorkFlow زيه زي أي مسار تاني — تزوّد مرحلة لرئيس القطاع، أو تشيل المالية، أو تغيّر مين اللي يعتبر المعتمِد، أو تزوّد تصعيد. الموارد البشرية بتزرع المسار اللي محتاجاه من أول يوم عشان ما يبقاش فيه حاجة ناقصة من أول لحظة، وبعد كده ما بتملكهوش تاني أبداً. والمؤسسة اللي إجازاتها بتروح للموارد البشرية على طول من غير مرحلة مدير مش بتحارب المنتج؛ دي بتظبطه على مقاسها.
ليه كل مسار بيبدأ بمرحلة تقديم صريحة
أول مرحلة في التسع مسارات ما بتعملش حاجة. مالهاش معتمِد، وما بتاخدش قرار، وموجودة بس بسبب طريقة تصرّف المحرك وقت إنشاء الطلب.
لما نسخة من المسار بتتعمل، المحرك بينفّذ الإجراء الافتراضي لأول مرحلة أوتوماتيك. وده تصرّف منطقي — هو اللي بيخلي المسار يتحرك من غير كليك زيادة. بس معناه إن أول مرحلة في القايمة بتتقفل في نفس لحظة إنشاء الطلب، قبل ما أي إنسان يكون شافه.
من غير مرحلة تقديم
المرحلة الأولى هي المدير المباشر. والمحرك بينفّذ إجراءها الافتراضي أوتوماتيك وقت الإنشاء. يبقى مرحلة المدير اتوافق عليها في لحظة التقديم، ومن غير ما حد يوافق، والطلب بينزل على مكتب الموارد البشرية وهو شايل موافقة مدير ما حصلتش أصلاً.
بمرحلة تقديم
المرحلة الأولى هي التقديم. والمحرك بينفّذ دي أوتوماتيك — وده صح، لأن التقديم هو بالظبط اللي الموظف لسه عامله. وبعدين الطلب بيتقدّم لمرحلة المدير ويستنى إنسان، وده كل الهدف من مسار الموافقات.
ده فرق سطر واحد في سكريبت الزرع، وهو الفرق بين مسار موافقات حقيقي وبين ختم على الفاضي. وهو كمان أول حاجة تتشيّك عليها لما مؤسسة تعيد تصميم مسار في مكتب WorkFlow: لو مسحت مرحلة التقديم، أول معتمِد حقيقي هيتخطّى في صمت.
الطلب بيوصل للمعتمِد فين؟ في «شغلي»
قبل ما ندخل في دورة الحياة، شوف الناحية التانية من الرحلة: المدير مش بيفتح شاشة موارد بشرية عشان يلاقي طلبات فريقه — الموافقة بتنزل له في «شغلي» في المنصة نفسها، مع باقي موافقاته من كل الوحدات، والجرس بيرن بيها. يدوس على الصف، يشوف التفاصيل والرصيد، ويقرر — والطلب يكمّل سكته لوحده.
الخمس حالات اللي الطلب بيعدّي عليها
الطلب مش «معلّق» وبعدين «خلص». الطلب بيعدّي على خمس حالات، وكل واحدة فيهم موجودة لأن فيه حاجة ممكن تبوظ بينها وبين اللي بعدها.
لسه بيتملّى. ملك الموظف؛ ومحدش تاني بيشوفه. Draft
اتفحص واتسلّم لمحرك المسارات. Submitted
واقف عند مرحلة، مستني إنسان. InApproval
القرار اتاخد. بس لسه محصلش حاجة في البيانات. Approved
الأثر اتكتب فعلاً. والطلب خلص. Applied
NeedsCorrectionالمعتمِد بيرجّعه بدل ما يرفضه. الموظف بيصلّح ويقدّم تاني — وتاريخ مين طلب إيه بيفضل متسجّل مع الطلب.
Rejectedقرار نهائي. الطلب بيحتفظ بكل تاريخه؛ ومفيش أي أثر بيتنفّذ.
HR_LEAVE؛ ولما تختار سلفة بتبدأ نسخة من HR_LOAN، بمرحلة المالية الزيادة بتاعتها.ليه معتمد وتم التنفيذ حالتين مختلفتين
دول أكتر حالتين الناس عايزة تدمجهم في واحدة، ودمجهم هو السبب اللي بيخلي طلبات تضيع. القرار ونتيجته بيحصلوا في وقتين مختلفين، وفي خدمتين مختلفتين، وممكن واحد فيهم ينجح والتاني لسه ما حصلش.
- آخر معتمِد بيضغط «موافقة».
محرك المسارات بيسجّل القرار وبيعلّم الطلب معتمد. دي حقيقة عن إنسان، وبقت دايمة من دلوقتي.
- حدث موافقة بيتنشر.
حدث دايم على الناقل — مش نداء مباشر جوه الموارد البشرية.
- مستهلك idempotent بينفّذ الأثر.
يسجّل الأيام في دفتر الإجازات؛ ويعمل جدول أقساط السلفة؛ ويقفل سطر تكليف ويفتح اللي بعده. وكلمة idempotent دي مهمة: لو الحدث اتسلّم مرتين — والتسليم «مرة على الأقل» معناه إن ده وارد — المحاولة التانية ما بتغيّرش أي حاجة.
- الطلب بيبقى «تم التنفيذ».
دلوقتي بس بيبقى خلص، ودلوقتي بس بيتحرك الرصيد فعلاً.
- عملية تسوية بتعيد المحاولة لأي حاجة واقفة.
الطلبات اللي قاعدة في حالة معتمد أكتر من اللازم بتتلقط وبيتعاد تنفيذها.
المكسب: لو التنفيذ فشل، الطلب بيفضل باين إنه مش كامل بدل ما يضيع في صمت. لو معتمد وتم التنفيذ كانوا حالة واحدة، أي مستهلك يقع في نص الكتابة كان هيسيب طلب متعلّم عليه «خلص» ورصيد ما اتحركش — ومحدش هيلاحظ غير لما موظف ياخد باله بعد شهور إن إجازته ما اتخصمتش، ومن غير أي أثر يوضّح اللي حصل. لكن الحالتين بيخلّوا الفجوة حالة تقدر تسأل عنها بالاستعلام: معتمد وما اتنفّذش لسه، وعملية التسوية شايفاه وشغالة عليه.
وإيه شكل «تم التنفيذ» على الشاشة؟ الأثر بيبان في مكانين: رصيد الموظف بيتحرك فورًا، والملف بيتسجّل فيه اللي حصل — من غير ما حد يدخّل حاجة بإيده:
ليه النتيجة بتتنقل كحدث دايم على الناقل
محرك المسارات كان يقدر ببساطة ينده على الـ API بتاع الموارد البشرية أول ما المسار يخلص. بس ما بيعملش كده. النتيجة بتتنشر كحدث دايم وبتتستهلك بشكل غير متزامن — والسبب هو نفس السؤال اللي بيحسم معظم خلافات التكامل: يحصل إيه لو الطرف التاني واقع؟
نداء مباشر
المدير بيضغط «موافقة» الساعة 22:40، في نفس وقت نشر نسخة جديدة من خدمة الموارد البشرية. النداء بيفشل. ودلوقتي المنصة لازم تختار بين نتيجتين وحشين: تضيّع القرار، أو تفشّل الموافقة وتطلب من المدير ياخدها تاني بكرة — بعد ما تكون قالتله إنها عدّت خلاص.
حدث دايم
القرار بيتسجّل وبيتنشر. والوسيط بيمسكه. الموارد البشرية بترجع تشتغل، وتستهلك الحدث، وتنفّذ الأثر، والطلب يبقى تم التنفيذ. ليلة المدير ما اتأثرتش، ومحدش اتطلب منه ياخد نفس القرار مرتين.
والقاعدة باختصار: القرار اللي اتاخد ما يضيعش، والمعتمِد ما يتطلبش منه ياخده تاني. الشرطين دول مع بعض بيلغوا فكرة النداء المباشر، لأن النداء المباشر يقدر يحقّق واحد منهم بس في المرة. ونفس المنطق ده هو سبب إن المستهلك يبقى idempotent وسبب وجود عملية التسوية — الحدث الدايم بيضمن التسليم مرة على الأقل، يبقى الطرف المستقبِل لازم يتبني وهو مستحمل ده بالظبط.
مصفوفة الطلبات
كل نوع طلب الموديول بيتعامل معاه، والمسار اللي بيوجّهه، و — وده أهم عمود — بيتغيّر إيه فعلاً لما الطلب يتوافق عليه. لو عمود الأثر في أي سطر فاضي، يبقى الطلب ده مجرد رسالة مش معاملة؛ ومفيش ولا سطر هنا كده.
| الطلب | بالإنجليزي | المسار | الموافقة بتغيّر إيه |
|---|---|---|---|
| إجازة | Leave | HR_LEAVE | الأيام بتتسجّل في دفتر الإجازات وبتتخصم من رصيد سنة الإجازة دي |
| إلغاء إجازة | Leave cancellation | HR_LEAVE | التسجيل الأصلي بيترجع، والأيام بترجع تاني للرصيد |
| إذن | Hour permission | HR_LEAVE | ساعات الخروج بتبقى مصرّح بيها، فالحضور ما بيسجّلهاش تأخير ولا غياب |
| تسوية حضور | Attendance adjustment | HR_ATTENDANCE_ADJUSTMENT | سجل الحضور بيتصحّح — وده بيغيّر أرقام العمل الإضافي والغياب اللي المرتبات بتقراها |
| سلفة | Loan / advance | HR_LOAN | بتتفتح سلفة بجدول أقساط؛ والمرتبات بتبدأ تخصم، بحد أقصى 25% من الأجر |
| إعانة | Aid grant | HR_AID | الإعانة بتتسجّل وبتتصرف مع المرتب كاستحقاق |
| خطاب | Letters & certificates | HR_LETTER | الخطاب بيتصدر للموظف — شهادة راتب، أو خطاب توظيف، أو خطاب للبنك |
| مأمورية | Mission / business travel | HR_MISSION | الأيام بتتعلّم مأمورية مش غياب، وأي استحقاق بيتبعت للمرتبات |
| بدل تعليم | Education allowance | HR_AID | البدل بيتربط على الموظف كعنصر من عناصر الأجر |
| تغيير الحساب البنكي | Bank-account change | HR_PERSONAL_DATA | البنك والـ IBAN في ملف الموظف بيتحدّثوا — يعني الدورة الجاية هتحوّل على حساب تاني |
| تغيير الحالة الاجتماعية | Marital-status change | HR_PERSONAL_DATA | الحالة الاجتماعية والمعالين بيتحدّثوا |
| عمل إضافي | Overtime pre-approval | HR_ATTENDANCE_ADJUSTMENT | الساعات الزيادة بتبقى عمل إضافي مستحق الدفع؛ والساعات اللي اتشتغلت من غير الإذن ده ما بتتدفعش أوتوماتيك |
| تعديل البيانات الشخصية | Personal-data change | HR_PERSONAL_DATA | الحقول المطلوبة في ملف الموظف بتتحدّث، والطلب نفسه بيبقى هو المستند المثبِت |
| استقالة | Resignation | HR_RESIGNATION | بتتفتح حالة إنهاء الخدمة؛ وفترة التوظيف بتتقفل في تاريخها |
| نقل | Transfer | HR_TRANSFER | سطر التكليف الحالي بيتقفل، وبيتفتح سطر جديد من تاريخ السريان |
| عهدة | Custody | HR_PERSONAL_DATA | الأصل بيتقيّد على الموظف — وبيبقى بند لازم يتخلّص منه عند نهاية الخدمة |
| بدل مهمة | Mission allowance | HR_MISSION_ALLOWANCE | بدل المأمورية اللي اتوافق عليها بيتصرف مع المرتب كاستحقاق |
| استرداد مصروفات | Expense claim | HR_EXPENSE | بيتعمل مستحق ويترد ببند غير خاضع للضريبة — رد فلوس اتصرفت مش دخل |
| تظلم من جزاء | Penalty objection | HR_PENALTY_OBJECTION | لو التظلم اتقبل الجزاء بيتلغي — إلا لو كان اتخصم في قسيمة راتب، ساعتها بيتصحّح بمسير أثر رجعي مش بتغيير حالة |
| طلب احتياج | Manpower request | HR_MANPOWER | بيتعمل طلب توظيف معتمد من الأول — يعني مفيش طلب توظيف من غير الموافقة اللي عملته |
اقرا عمود الأثر من فوق لتحت هتلاقي النمط: الموافقة عمرها ما بتكون آخر الحكاية — كل سطر بيكتب في دفتر، أو جدول، أو ملف، أو مدخل من مدخلات المرتبات. وده بالظبط سبب وجود حالة تم التنفيذ.
تروح فين بعد كده: جانب الموظف من الطلبات دي — المعالج، والتحقّق، وشاشة متابعة الحالة — تلاقيه في الخدمة الذاتية للموظف. أما القواعد اللي الآثار دي لازم تلتزم بيها، من شرايح الإجازات لحد سقف الخصم 25%، فهي في دليل الموارد البشرية.