كيف تراقب Trinta مئات المصادر كل يوم: داخل البنية المعمارية
27 يوليو 2026 · 7 دقائق قراءة
مدير عطاءات يصدّر معدات عبر غرب أفريقيا والخليج وأمريكا اللاتينية لديه، على الورق، مهمة واحدة: ألا يفوّت مناقصة ذات صلة أبدًا. عمليًا، تلك المهمة شبه مستحيلة يدويًا. تعيش الإعلانات في أكثر من 380 مكانًا مختلفًا: TED التابع للاتحاد الأوروبي، وPNCP البرازيلي، وSECOP الكولومبي، وDNCP الباراغوايي، والبنك الدولي وUNGM، إضافة إلى عشرات بوابات المشتريات الإلكترونية الوطنية، ومخازن الأدوية المركزية (NUPCO، KEMSA، CENAME، SALAMA)، وشبكات مستشفيات الضمان الاجتماعي (IMSS، EsSalud، CCSS)، ومستشفيات إحالة منفردة تنشر ملف PDF واحدًا وتمضي. كلٌّ منها يستخدم لغة وتخطيطًا وصيغة موعد نهائي وسياسة تسجيل دخول مختلفة. التحقق حتى من ثلاثين منها كل صباح دور بدوام كامل، والذي تتخطّاه يوم الثلاثاء هو الذي أُغلق يوم الجمعة.
تلك مشكلة المراقبة هي بالضبط ما وُجدت بنية Trinta لحلّها. إليك كيف تعمل فعلًا تحت الغطاء.
مئات الموصلات المكتوبة يدويًا، لا سكرابر سحري واحد
الاختصار المغري، حين تحتاج إلى قراءة مئات المصادر، هو بناء سكرابر عالمي ذكي واحد وتوجيهه إلى كل مكان. جرّبنا ذلك النهج وتخلّينا عنه عمدًا. لكل بوابة غرائبها الخاصة: مخططات ترقيم الصفحات، ومصافحات مكافحة التزوير (CSRF)، وملفات open-contracting الضخمة (OCDS) المسلَّمة كأرشيفات ZIP شهرية، وجلسات ضيف من خطوتين تسلّمك كوكي زائر قبل أن تُظهر لك أي شيء. محرك عام واحد يتعامل مع كل هذا بشكل سيّئ.
لذا تعمل Trinta على موصلات حتمية مكتوبة يدويًا: مكوّن صغير مبني لغرض محدد لكل مصدر، كلٌّ مضبوط على السلوك الفعلي لتلك البوابة. نمت الأسطول من نحو 15 موصلًا إلى قرابة 200، وفي ازدياد. موصل لواجهة برمجة تطبيقات منظمة مثل TED أو PNCP بسيط. أما موصل لبوابة تُظهر زر «تسجيل الدخول» لكنها تقدّم قائمة مناقصاتها بهدوء من نقطة نهاية عامة بلا مصادقة فيتطلّب عمل تحرٍّ: نعرض الصفحة مرة، ونراقب أي نداء لواجهة البرمجة يُعيد البيانات فعلًا، ثم نستدعي تلك النقطة مباشرةً. تلك التقنية وحدها فتحت عشرات البوابات التي بدت مسوَّرة من الخارج.
بضعة مبادئ تُبقي الأسطول أمينًا:
مسح مجدول يعمل بلا أن يراقبه أحد
الموصلات عديمة الفائدة إن كان على إنسان الضغط على البدء. يعمل خط المعالجة كله على مهمة سحابية مجدولة (cron يومي على GitHub Actions) لا تتطلب حاسوبًا محمولًا مفتوحًا ولا أحدًا مستيقظًا. وكل تشغيل يتّبع التسلسل المنضبط نفسه:
1. الحصاد. تعمل كل الموصلات على التوازي، بمهلة زمنية صارمة لكل مصدر بحيث لا تستطيع بوابة بطيئة أو معطّلة أن توقف المسح كله أو تُفشِله. 2. الاستيعاب والفرز. تُدمَج الإعلانات الجديدة في المخزن، وتُسقَط المنتهية، ويُرشَّح الضجيج البديهي. 3. الإثراء والتدقيق والنشر. تُسحَب الوثائق، ويُراجَع كل مناقصة، وتُنشَر النتائج إلى التدفق الحي.
مرشّحان يقومان بالعبء الأكبر أثناء الحصاد. بوابة صلة تطابق كل إعلان مع ملف كلمات مفتاحية متعدد اللغات (الإنجليزية، الفرنسية، الإسبانية، البرتغالية، العربية، العبرية)، بحيث يُحكَم على إعلان تركي أو برازيلي بلغته الخاصة، لا بترجمة تقريبية. ومرشّح نطاق يُسقِط ما يبدو صحيحًا لكنه ليس كذلك: بالنسبة لمشترٍ للأنظمة، يخرج إعلان إعادة توريد المستهلكات الصرف أو تأجير المعدات، والمرشّح يعرف مفردات التأجير بخمس لغات فتُشغّله «locacao» و«alquiler» و«location» جميعًا.
إثراء الوثائق: قائمة الملفات، لا الرابط فقط
إيجاد مناقصة نصف العمل. النصف الآخر قراءتها، وهنا تخسر الفرق ساعات: فتح البوابة، والبحث عن الملف، وتنزيل كل مرفق. تقوم طبقة إثراء الوثائق في Trinta بذلك تلقائيًا. يوجّه موزِّع كل إعلان إلى المستخرِج الصحيح:
هذه الخطوة حتمية بالكامل ولا تحتاج إلى أي نموذج ذكاء اصطناعي، فتعمل بتكلفة زهيدة في كل مسح. والنتيجة أن المناقصة تصل غالبًا ومعها رابط ملفها وقائمة مرفقات مرفقة بالفعل، بحيث يبدأ فريق العطاءات بالقراءة بدلًا من البحث.
وكيل تدقيق يسجّل كل مناقصة، ويفشل بصوت عالٍ
الخطوة الأخيرة هي التي تتخطّاها معظم أدوات المراقبة. بعد الحصاد والإثراء، يراجع وكيل تدقيق كل مناقصة لم تُراجَع بعد. يفتح الوثائق المتاحة، ويقرأ النطاق، ويطابق المتطلبات مع ما يورّده العميل فعلًا، ويمنح درجة ملاءمة مع تبرير موجز. تلك الدرجة، لا عدّ كلمات مفتاحية خام، هي ما يقود الترتيب في التدفق، فالفرصة العالية الدرجة هي فرصة دقّق شخص بالفعل متطلباتها.
هناك قاعدة أمان متعمّدة محفورة في الشيفرة، لا في الوثائق فقط: يجب تدقيق كل مناقصة قبل نشرها. إذا تعذّر تشغيل خطوة التدقيق (مثلًا، مفتاح API مفقود) أو لم تدقّق شيئًا، يفشل المسح كله بصوت عالٍ ويتوقف. لا شيء غير مُراجَع يصل إلى التدفق الحي. نفضّل ألا نُظهر أي تحديث على أن نُظهر تحديثًا خاطئًا.
لا بيانات مزيّفة، أبدًا
تحت كل هذا قاعدة تشكّل كل قرار تصميمي: لا نختلق بيانات لملء فجوة أبدًا. إذا كانت قيمة ما غير علنية، وقيم المشتريات مختومة فعلًا بشكل مدهش في كثير من الأحيان (ميزانيات برازيلية بموجب قوانين معيّنة، وإعلانات أشغال ألمانية، وأرقام مجالس خليجية خلف تسجيل دخول)، يُظهر التدفق «غير مُفصَح عنه» مع السبب، لا رقمًا مختلقًا أبدًا. رسوم وثائق العطاء ليست قيمة العقد، ولا نسمح قط لأحدهما بأن يتنكّر في هيئة الآخر. تُشذَّب الإعلانات القديمة على نافذة حداثة. وتُرشَّح إعلانات الترسية والنتائج، التي ليس لها موعد نهائي حقيقي، لئلا تظهر كفرص حية.
العائد لصاحب الشركة الصغيرة والمتوسطة أو المصدّر أو المستشار بسيط. بدلًا من جوب أكثر من 1000 بوابة والثقة بأنك غطّيتها، تفتح تدفقًا يوميًا واحدًا من المناقصات المطابَقة، مسجَّلة بالفعل للملاءمة، حاملة بالفعل وثائقها، منظَّفة بالفعل من الضجيج وعقود إعادة التوريد والإعلانات المنتهية. مشكلة المراقبة لا تختفي؛ إنها فقط تتوقف عن أن تكون مشكلتك. تلك هي الغاية الكاملة من تدفق يومي مُقيَّم ومطابَق: تستمر مئات المصادر في التغيّر كل ليلة، ولا ترى أبدًا إلا الحفنة التي تهمّك.
الأسئلة الشائعة
How does TRINTA monitor hundreds of procurement sources?
Through a fleet of hand-written connectors rather than one generic scraper: each connector targets one portal and pulls dated rows from it without a login. A scheduled scan runs daily without supervision, document enrichment retrieves the file list attached to each notice, and an audit agent scores every tender and fails loudly rather than silently.
Why not use a single generic scraper for all portals?
Because government portals have nothing in common structurally. They differ in markup, navigation, session handling, registration walls and publication format, and several publish tenders only as PDFs inside navigation. A generic scraper handles the easy ones and silently misses the rest, which is worse than not covering them at all.
How does TRINTA avoid publishing invented data?
An audit agent scores every tender and is designed to fail loudly rather than degrade quietly, so a source that stops returning real rows surfaces as an error rather than as an empty result that looks like a quiet week. The operating rule is that no fabricated record is preferable to a plausible one.
شارك هذا المقال