من أيام إلى ثوانٍ: كيف حررنا نظام KYC من جحيم قوائم المراقبة اليدوية؟

أذكرها وكأنها البارحة. كانت الساعة تقارب الثانية بعد منتصف الليل في المكتب، ورائحة القهوة المرة تختلط برائحة الميرمية التي اعتدتُ على شربها في ليالي العمل الطويلة. لم يكن في المكتب سواي وأنس، الشاب اليافع في فريق الامتثال (Compliance). كان أنس يحدق في شاشتين أمامه، عيناه محمرتان من التعب، وعلى إحدى الشاشات قائمة PDF طويلة من إحدى الجهات الرقابية، وعلى الأخرى نظامنا الداخلي.

رن هاتفي فجأة، وكان المتصل مدير المنتج في إحدى الشركات التي نقدم لها حلولنا المالية. صوته كان حاداً ومتوتراً: “أبو عمر، شو القصة يا خال؟ عنا عملاء بستنوا يومين وتلات عشان يتفعل حسابهم! النظام الآلي اللي بعتونا إياه طلع مش آلي ولا إشي!”.

شعرت بالحرارة تتصاعد في وجهي. كان محقاً. لقد بنينا لهم نظام “اعرف عميلك” (KYC) متطوراً، يقوم بقراءة الهوية الشخصية وجواز السفر آلياً باستخدام تقنيات OCR، ويتحقق من صحة المستندات، كل شيء كان يتم في أقل من دقيقة… إلا خطوة واحدة كانت بمثابة الجحيم: التحقق من قوائم المراقبة (Watchlists).

نظرت إلى أنس الذي كان لا يزال يقوم بعملية بحث يدوية (Ctrl+F) عن اسم “محمد أحمد علي” في ملف PDF يحتوي على آلاف الأسماء. هذه العملية اليدوية كانت عنق الزجاجة الذي يخنق نظامنا الآلي بالكامل. في تلك اللحظة، أدركت أننا لا نستطيع الاستمرار هكذا. لم تكن المشكلة في سرعة أنس، بل في بدائية العملية نفسها. كان لا بد من حل جذري، حل تقني يحررنا من هذا الكابوس اليدوي. ومن هنا بدأت رحلتنا.

ما هو جحيم قوائم المراقبة اليدوية؟

قبل أن نغوص في الحل، دعونا نفهم المشكلة جيداً. في عالم التكنولوجيا المالية (Fintech)، يعد التحقق من هوية العميل (KYC) حجر الزاوية للامتثال للقوانين الدولية لمكافحة غسيل الأموال (AML) وتمويل الإرهاب (CTF). جزء أساسي من هذا التحقق هو التأكد من أن العميل ليس مدرجاً في أي من قوائم المراقبة العالمية.

ما هي قوائم المراقبة (Watchlists)؟

هي قوائم تصدرها هيئات حكومية ودولية (مثل مكتب مراقبة الأصول الأجنبية الأمريكي OFAC، الأمم المتحدة، الاتحاد الأوروبي) وتحتوي على أسماء أفراد وكيانات مفروض عليهم عقوبات أو يعتبرون “أشخاصاً ذوي خطورة سياسية” (Politically Exposed Persons – PEPs). التعامل مع أي شخص في هذه القوائم يعرض شركتك لغرامات باهظة ومشاكل قانونية ضخمة.

المشكلة الحقيقية: الفوضى اليدوية

كان سير العمل القديم لدينا يبدو “آلياً” على الورق، ولكنه في الحقيقة كان كابوساً تشغيلياً:

  1. التقديم الآلي: يقوم العميل برفع هويته، ويقوم نظامنا باستخلاص البيانات (الاسم، تاريخ الميلاد، الجنسية) في ثوانٍ.
  2. عنق الزجاجة اليدوي: يتم إرسال تنبيه لموظف الامتثال (المسكين أنس في قصتنا).
  3. البحث المضني: يقوم الموظف بفتح عدة ملفات (PDF, CSV) من مصادر مختلفة.
  4. لعبة “ابحث عن الاختلافات”: يبدأ الموظف بالبحث عن الاسم يدوياً. وهنا تبدأ المشاكل الحقيقية:
    • تشابه الأسماء: اسم شائع مثل “أحمد محمود” قد يظهر مئات المرات.
    • اختلافات إملائية: هل الاسم “Mohammad” أم “Muhammad” أم “Mohammed”؟ هل هو “عبد الرحمن” أم “Abdelrahman”؟
    • الأسماء المستعارة والألقاب: القوائم مليئة بالأسماء الحركية والألقاب.
  5. التحقق الإضافي: عند العثور على تطابق محتمل، يجب على الموظف مقارنة تاريخ الميلاد والجنسية وأي معلومات أخرى متاحة يدوياً لتجنب النتائج الإيجابية الخاطئة (False Positives).

هذه العملية كانت تستغرق من 15 دقيقة إلى عدة ساعات لكل عميل، وفي أوقات الذروة، كانت الطلبات تتراكم لأيام. كان الأمر مكلفاً، بطيئاً، ومحفوفاً بخطر الخطأ البشري.

مهمة الإنقاذ: بناء محرك المطابقة الذكي

كان الهدف واضحاً: نحتاج إلى نظام آلي بالكامل يقوم بفحص قوائم المراقبة في ثوانٍ، وبدقة تفوق دقة الإنسان. قسمنا المشروع إلى ثلاث مراحل رئيسية.

المرحلة الأولى: تجميع البيانات وتوحيدها

لا يمكن لأي نظام ذكي أن يعمل على ملفات PDF متفرقة. كانت خطوتنا الأولى هي بناء قاعدة بيانات مركزية وموحدة لجميع قوائم المراقبة.

نصيحة أبو عمر: يا جماعة، قبل ما تكتبوا سطر كود واحد، ابحثوا عن واجهة برمجية (API). وقتكم أثمن من إعادة اختراع العجلة. العديد من الجهات الرقابية توفر بياناتها بصيغة منظمة (XML, CSV)، وبعض الشركات التجارية (RegTech) توفر APIs مجمعة لكل القوائم مقابل اشتراك. هذا يوفر عليك شهوراً من العمل.

قمنا بالاشتراك في خدمة توفر لنا وصولاً عبر API لأغلب القوائم العالمية المحدثة باستمرار. بنينا خدمة صغيرة (Microservice) تقوم بسحب هذه البيانات يومياً وتخزينها في قاعدة بيانات Elasticsearch، والتي تتميز بقدراتها الفائقة في البحث النصي.

المرحلة الثانية: سحر المطابقة التقريبية (Fuzzy Matching)

هنا يكمن قلب الحل. مقارنة النصوص بشكل حرفي (e.g., `name1 == name2`) هي وصفة للفشل. نحتاج إلى خوارزميات تفهم أن “محمد خليل” و “Mohamad Al-Khalil” هما على الأرجح نفس الشخص.

هذا ما يسمى بـ “المطابقة التقريبية” أو Fuzzy Matching. بدلاً من إعطاء نتيجة (نعم/لا)، تعطي هذه الخوارزميات درجة تشابه بين 0 و 100.

هناك العديد من الخوارزميات لهذا الغرض، أشهرها:

  • مسافة ليفنشتاين (Levenshtein Distance): تحسب عدد التعديلات (حذف، إضافة، استبدال) اللازمة لتحويل كلمة إلى أخرى.
  • خوارزمية Jaro-Winkler: تعطي وزناً أكبر للأحرف المتشابهة في بداية الكلمة، وهي ممتازة للأسماء الشخصية.

استخدمنا مكتبة بايثون شهيرة تسمى fuzzywuzzy والتي تبسط استخدام هذه الخوارزميات.

مثال كود بسيط بلغة بايثون

هذا مثال بسيط يوضح كيف يمكن استخدام المكتبة لمقارنة اسمين:


from fuzzywuzzy import fuzz

def get_match_score(user_name, watchlist_name):
    """
    Calculates a composite fuzzy match score.
    """
    # يقارن السلاسل النصية كما هي
    simple_ratio = fuzz.ratio(user_name.lower(), watchlist_name.lower())
    
    # يتجاهل ترتيب الكلمات، ممتاز للأسماء مثل "علي أحمد" و "أحمد علي"
    token_sort_ratio = fuzz.token_sort_ratio(user_name.lower(), watchlist_name.lower())

    # يأخذ أعلى درجة من الخوارزميات المختلفة
    # هذا يعطينا مرونة أكبر في التعامل مع أنواع مختلفة من الاختلافات
    final_score = max(simple_ratio, token_sort_ratio)
    
    return final_score

# --- التجربة ---
user_name_from_id = "Mohamad N. Khalil"
watchlist_name_1 = "Mohammed Nazmi Al-Khalil"
watchlist_name_2 = "John Smith"

score1 = get_match_score(user_name_from_id, watchlist_name_1)
score2 = get_match_score(user_name_from_id, watchlist_name_2)

print(f"Score for '{watchlist_name_1}': {score1}")
# Expected output: درجة عالية، مثلاً 85 أو أعلى
print(f"Score for '{watchlist_name_2}': {score2}")
# Expected output: درجة منخفضة جداً

نصيحة أبو عمر التقنية: لا تعتمدوا على خوارزمية واحدة فقط. قمنا بدمج عدة مقاييس (مثل `ratio` و `token_sort_ratio`) وأعطينا أوزاناً مختلفة لكل منها. كما قمنا بمعالجة الأسماء مسبقاً (Preprocessing) عن طريق إزالة الألقاب الشائعة (مثل Mr, Mrs)، وتحويل الأحرف إلى حالة صغيرة (lowercase)، وتوحيد بعض الأحرف (مثل إزالة النقاط من “أ” و “إ” لتصبح “ا”). هذا يزيد من دقة المطابقة بشكل كبير.

المرحلة الثالثة: نظام تسجيل النقاط واتخاذ القرار

الحصول على درجة تشابه 85% لا يعني بالضرورة أن الشخص هو نفسه. الخطوة الأخيرة كانت بناء نظام تسجيل نقاط (Scoring System) يأخذ في الاعتبار عوامل أخرى:

  • مطابقة الاسم: درجة المطابقة التقريبية (Fuzzy Score) لها الوزن الأكبر.
  • مطابقة تاريخ الميلاد: هل يتطابق تاريخ الميلاد؟ حتى التطابق الجزئي (نفس السنة والشهر) يزيد من النقاط.
  • مطابقة الجنسية/بلد الإقامة: تطابق هذه المعلومة يزيد من النقاط بشكل كبير.

بناءً على النتيجة الإجمالية، يقوم النظام باتخاذ واحد من ثلاثة قرارات:

  1. Auto-Approve (موافقة آلية): إذا كانت النتيجة النهائية أقل من حد معين (مثلاً 40). العميل يتم تفعيله في ثوانٍ. ✅
  2. Manual Review (مراجعة يدوية): إذا كانت النتيجة في نطاق متوسط (مثلاً بين 40 و 85). يتم إرسال تنبيه لموظف الامتثال مع كل المعلومات مجمعة أمامه لمراجعتها. هذا هو المكان الذي يتدخل فيه الإنسان، ولكن فقط للحالات الرمادية والمشكوك فيها. ⚠️
  3. Auto-Reject / High Alert (رفض آلي / تنبيه عالي): إذا كانت النتيجة عالية جداً (مثلاً أعلى من 85) مع تطابق في معلومات أخرى. يتم إيقاف العملية فوراً وإرسال تنبيه عالي الأولوية لفريق الامتثال. 🛑

النتائج: من أيام إلى ثوانٍ

بعد إطلاق النظام الجديد، كانت النتائج مذهلة وفاقت توقعاتنا:

  • 95% من العملاء أصبحت تتم الموافقة على حساباتهم في أقل من 30 ثانية.
  • 4% من الحالات فقط أصبحت تتطلب مراجعة يدوية، مما حرر فريق الامتثال للتركيز على الحالات المعقدة حقاً.
  • انخفضت تكاليف التشغيل المتعلقة بعملية KYC بنسبة تقارب 70%.
  • الأهم من ذلك، ارتفع رضا عملاء عملائنا بشكل كبير، وتحولت الشكاوى إلى إشادات بسرعة الإنجاز.

الخلاصة ونصيحة أخيرة 🚀

يا أصدقائي المبرمجين ورواد الأعمال، قصة تحول نظام الـ KYC لدينا هي مثال حي على أن الأتمتة الذكية ليست مجرد رفاهية تقنية، بل هي ضرورة حتمية للبقاء والنمو في عالم التكنولوجيا المالية. المشاكل التي تبدو معقدة ومستحيلة الحل يدوياً، يمكن تفكيكها وحلها بكفاءة مذهلة باستخدام الأدوات البرمجية الصحيحة والعقلية الهندسية السليمة.

نصيحتي الأخيرة لكم: لا تخافوا من تحدي العمليات اليدوية في شركاتكم. ابحثوا عن عنق الزجاجة، تلك العملية البطيئة والمملة التي يكرهها الجميع. غالباً ما تكون هذه هي الفرصة الأكبر للابتكار وتحقيق قفزة نوعية. ابدأوا اليوم، ولو بخطوة صغيرة، لأن منافسيكم بالتأكيد قد بدأوا بالفعل.

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

برمجة وقواعد بيانات

تحديثات قاعدة البيانات بدون توقف: كيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من جحيم التوقفات المجدولة؟

هل سئمت من إيقاف الخدمة مع كل تحديث لهيكلة قاعدة البيانات؟ أشارككم قصة حقيقية وكيف أنقذنا نمط التوسيع والتعاقد (Expand/Contract) من ليالي النشر الطويلة والمُجهدة،...

4 يونيو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت إعادة المحاولة كارثة: كيف أنقذتنا مفاتيح عدم تكرار العمليات (Idempotency Keys) من جحيم الفواتير المزدوجة؟

أشارككم قصة حقيقية من الخنادق البرمجية، يوم كاد خطأ بسيط في إعادة محاولة طلبات الدفع أن يكلفنا سمعتنا وأموال عملائنا. اكتشفوا معنا كيف كانت مفاتيح...

4 يونيو، 2026 قراءة المزيد
الحوسبة السحابية

من التوقف التام إلى النجاة: كيف أنقذتنا استراتيجية “الضوء المرشد” (Pilot Light) يوم انقطعت السحابة؟

أتذكر ذلك اليوم جيدًا، فنجان القهوة الصباحي، وصوت تنبيهات المراقبة يصرخ كأنه يوم القيامة. كانت منطقة سحابية كاملة قد توقفت عن العمل، لكن بفضل استراتيجية...

4 يونيو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كانت مهمتي البرمجية للاختبار مجرد كود: كيف أنقذني توثيق القرارات من جحيم الصمت بعد المقابلة؟

أشارككم قصة حقيقية من بداياتي، وكيف تعلمت بالطريقة الصعبة أن المهمة البرمجية ليست مجرد كتابة كود، بل هي فرصة لإظهار طريقة تفكيرك. اكتشف كيف يمكن...

4 يونيو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

من الانتظار لأيام إلى الدفع في ثوانٍ: كيف أنقذتنا شبكات الدفع الفوري من جحيم التحويلات البنكية؟

أسرد لكم من واقع تجربتي كـ "أبو عمر"، كيف عانينا من بطء وتكلفة التحويلات البنكية الدولية، وكيف جاءت شبكات الدفع الفوري ومعيار ISO 20022 لتكون...

4 يونيو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كان كل خادم لدينا ‘ندفة ثلج’ فريدة: كيف أنقذنا ‘الكود كبنية تحتية’ (IaC) من جحيم الانجراف اليدوي؟

في هذه المقالة، أشارككم قصة حقيقية من قلب المعركة التقنية مع "خوادم ندفات الثلج" الفوضوية. سنغوص في مفهوم "الكود كبنية تحتية" (IaC) وكيف أن أدوات...

4 يونيو، 2026 قراءة المزيد
اختبارات الاداء والجودة

كانت تغطية الاختبارات 100% لكن الأخطاء تتسرب: كيف أنقذنا “الاختبار الطفري” من جحيم الثقة الزائفة؟

كنا نظن أن تغطية الاختبار بنسبة 100% هي درعنا الواقي، لكن الأخطاء كانت تتسلل إلى الإنتاج كاللصوص في ليل بهيم. اكتشف كيف أنقذنا "الاختبار الطفري"...

4 يونيو، 2026 قراءة المزيد
البودكاست