عن المشروع
## نظرة عامة
Hospital-Recruit-QA-Bot هو خط أنابيب أتمتة من منظور ضمان الجودة (QA) يقوم بجمع إعلانات التوظيف من 42 مستشفى رئيسياً في كوريا تلقائياً كل صباح، والتحقق من سلامة البيانات المجمعة. لا يقتصر المشروع على مجرد الزحف (Crawling)، بل يهدف إلى هيكلية تتضمن بوابة تحقق لضمان تضمين البيانات الموثوقة فقط في النتائج النهائية.
## الميزات الرئيسية
### 1. بوابة تحقق RaiT
- يتم التحقق من القيم المفقودة وأخطاء التنسيق في البيانات الخام المجمعة في الوقت الفعلي بناءً على إطار عمل RaiT (Responsible AI Testing).
- يتم تضمين الإعلانات التي تجتاز التحقق (PASS) فقط في النتائج النهائية وتسجيلها في `seen_posts` لمنع اختلاط البيانات غير المناسبة بالنتائج.
### 2. خط أنابيب CI/CD (GitHub Actions)
- يتم التنفيذ تلقائياً كل يوم في الساعة 9 صباحاً (KST) في بيئة افتراضية Ubuntu.
- يقوم البوت بعمل commit/push لملف `seen_posts.csv` المحدث بعد الزحف لمنع التجميع المتكرر للبيانات بشكل مستمر.
### 3. تصفية البيانات المكررة
- تتشارك البيئة المحلية والسحابية في قاعدة بيانات تاريخية واحدة (`seen_posts.csv`) لاستبعاد الإعلانات التي تم التحقق منها مسبقاً وتقديم تقارير عن الإعلانات الجديدة فقط.
## سيناريوهات تحقق QA
حالات الاختبار الموضحة في README هي كما يلي:
| المعرف | بند الاختبار | النتيجة المتوقعة | الحالة |
|---|---|---|---|
| TC-01 | التحقق من صحة بيانات RaiT | تحديد تلقائي للقيم المفقودة وأخطاء التنسيق عبر منطق `verify_rait_compliance` | Pass |
| TC-02 | حارس سلامة البيانات | عكس البيانات الجديدة التي حصلت على قرار PASS فقط في قائمة منع التكرار | Pass |
| TC-03 | تخزين التقارير المتكاملة بشكل متفرع | إنشاء ملف Excel مع فصل البيانات (الكل/الجديد/RaiT_FAIL) في أوراق عمل منفصلة | Pass |
| TC-04 | الاتصال بـ 42 مستشفى مستهدفة | التحقق من الاتصال الطبيعي وتحليل البيانات للمواقع المستهدفة، باستثناء المواقع المحجوبة أمنياً | Pass |
## سير العمل
1. **المشغل:** تنفيذ تلقائي لجدولة GitHub Actions كل يوم الساعة 9 صباحاً (KST).
2. **الجمع:** جمع البيانات الديناميكية من صفحات التوظيف لكل مستشفى بناءً على Selenium.
3. **تحقق QA:** فحص سلامة البيانات من خلال منطق RaiT.
4. **إزالة التكرار:** تصفية الإعلانات المكررة من خلال المقارنة مع `seen_posts.csv`.
5. **التحديث التلقائي:** عمل commit و push تلقائي للبيانات الجديدة التي تم التحقق منها إلى المستودع.
6. **التقرير:** حفظ نتائج Excel النهائية وسجلات الأخطاء في GitHub Artifacts.
## المكدس التقني
- **اللغة:** Python 3.10
- **المكتبات:** Selenium, Pandas, Openpyxl, Webdriver-manager
- **الأتمتة:** GitHub Actions (CI/CD)
- **التخزين:** CSV (`seen_posts.csv`) ومخرجات Excel
## هيكل المشروع
```text
.github/workflows/ # إعدادات خط أنابيب CI/CD (crawler.yml)
top-hospitals/
├── qa/ # منطق الزحف لكل مستشفى ووحدة تحقق RaiT
├── main.py # محرك التنفيذ الرئيسي (بوابة QA ومعالجة البيانات)
└── seen_posts.csv # قاعدة بيانات التاريخ لمنع التكرار (تحديث تلقائي)
```
## سجل حل المشكلات
- **قابلية نقل المسارات بين البيئات:** حدثت أخطاء تنفيذ بسبب اختلاف المسارات بين البيئة المحلية وخادم GitHub Actions الافتراضي، وتم حل ذلك بإنشاء هيكل تنفيذ مستقل عن البيئة باستخدام مسارات نسبية ديناميكية تعتمد على `os.path`.
- **اتساق البيانات وإدارة التكرار:** تم حل مشكلة التكرار عند الجمع المتكرر من خلال إدارة تاريخ `seen_posts.csv` والربط مع التحديث التلقائي لـ GitHub Actions.
- **عزل البيئة:** تم تحسين `.gitignore` لفصل الكود المصدري عن مخرجات البيانات.
## القيود المعروفة
- يتم حظر الوصول إلى مستشفى سامسونج تشانغوون من بيئة GitHub Actions (Ubuntu/IP خارجي) بسبب سياسات أمنية مشددة. يوصى بتشغيل البرنامج محلياً إذا كانت بيانات هذا المستشفى مطلوبة، وقد تم ضبط خط أنابيب CI/CD لتخطي هذا الهدف تلقائياً لضمان الاستقرار.
## الخطط المستقبلية
- أتمتة اختبارات الوحدة والتكامل من خلال إدخال Pytest.
- تطوير منطق تحقق متعدد الأبعاد لتحديد الأخطاء السياقية واتساق النصوص.
- ربط تنبيهات Slack/Email لإرسال النتائج وتقارير RaiT FAIL تلقائياً.
## الترخيص وملاحظات هامة
يتبع المشروع ترخيص MIT. يوضح README أن هذا المشروع مخصص لتحسين المهارات التقنية الشخصية ولأغراض معرض الأعمال (Portfolio)، ويمنع الاستخدام التجاري للمعلومات المجمعة. حقوق الطبع والنشر لمعلومات التوظيف تعود لكل مستشفى، وقد يتم تحويل المستودع إلى خاص بناءً على طلب صاحب الحقوق. كما تمت الإشارة إلى تطبيق فترات تأخير لتقليل الحمل على الخوادم وحظر البيانات الضارة عبر بوابة RaiT.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.