معرفة إكلينيكية تتحوّل إلى برنامج لا يخمّن أبداً.
احتاجت عيادة طب وقائي خاصة إلى تشغيل بروتوكولها الإكلينيكي كبرنامج — دون أن يعيد أي مهندس كتابة عتبة أو جرعة أو نطاق مرجعي واحد. بنينا منصة مراقبة ودعم قرار تعود فيها كل توصية إلى معرفة الطبيب المُوثّقة نفسها، ويرفض فيها البرنامج الإجابة بدلاً من الارتجال.
في البرمجيات الطبية، الإجابة الخاطئة الواثقة هي الخطأ الوحيد الذي لا يُغتفر.
يقوم الطب الوقائي على مئات المؤشرات الحيوية والتدخلات وموانع الاستعمال وعتبات الأمان. معظم التطبيقات الصحية تكتب عدداً قليلاً منها داخل الكود وتأمل الأفضل. كان المطلوب هنا عكس ذلك تماماً: الطبيب يملك الطب، والبرنامج يملك التسليم، والحد الفاصل بينهما يجب أن يكون قابلاً للإثبات.
معرفة لا يجوز للمهندسين المساس بها
كل عتبة وجرعة ونطاق مرجعي ومستوى دليل يملكها الطبيب. لا يمكن لأيٍّ منها أن تعيش داخل كود التطبيق، حيث قد تُغيّر إعادة هيكلة أو خطأ مطبعي توصية إكلينيكية دون أن يلاحظ أحد.
البوابة التي تمرّ بصمت أسوأ من غيابها
كان محرك القواعد الموروث يعيد الإجابة نفسها «لا اعتراض» سواء اجتازت بوابة الأمان فعلاً أو لم تجد أصلاً عتبة تختبر عليها. كانت مئات البوابات تُبلغ عن نتيجة سليمة دون أن تُقيَّم إطلاقاً.
ثلاثة أدوار وقاعدة بيانات واحدة
الطبيب والمريض والمختبر يتشاركون قاعدة بيانات واحدة. يرى المختبر طلب التحليل ولا يرى اسماً أبداً. ويرى المريض سجله وحده لا غير. كان لا بد أن يتحقق هذا الضمان داخل قاعدة البيانات، لا في شرط داخل الواجهة.
العربية أولاً، وداخل الحدود
شاشات المريض عربية أولاً بتخطيط من اليمين إلى اليسار، ويشترط نظام حماية البيانات الشخصية السعودي بقاء بيانات المرضى داخل المملكة — وهو ما يستبعد معظم المنصات المُدارة ويعيد تشكيل بنية النشر بالكامل.
محرك واحد، ومصدر حقيقة واحد، وحدّ فاصل يفرضه التكامل المستمر.
قسّمنا النظام إلى طبقة معرفة يملكها الطبيب، وطبقة تطبيق نملكها نحن، ومحرك قرار حتمي هو المكوّن الوحيد المسموح له بالتفكير إكلينيكياً. ويُفشل فحص في التكامل المستمر عملية البناء إذا ظهر أي رقم إكلينيكي داخل كود التطبيق.
ثنائي اللغة، يُعرض من الخادم، ويعي الأدوار
- Next.js 16 App Router مع مكوّنات وإجراءات خادم من React 19 — دون طبقة API منفصلة تحتاج للمزامنة
- العربية أولاً في كل الواجهة، مع فحص في التكامل المستمر يفشل عند أي نص غير مُترجَم
- Tailwind CSS v4 ونظام تصميم إكلينيكي مقتصد — خطوط شعرية بدل الإطارات، أرقام متساوية العرض، ولون تمييز واحد
- رسوم SVG تُبنى على الخادم دون أي مكتبة رسوم — منحنيات ومخططات جلوكوز تبقى مقروءة في التخطيط من اليمين إلى اليسار
حتمي، وصريح حين يرفض
- خدمة FastAPI بلغة Python تكشف نقطة نهاية إكلينيكية واحدة فقط — المسار الوحيد لأي توصية
- واحد وعشرون سبب رفض مُسمّى — يمتنع المحرك مع ذكر السبب بدل التخمين حين تكون المدخلات غير كافية
- تقرير تغطية البوابات — تذكر كل توصية عدد بوابات الأمان التي قُيّمت فعلاً، وسبب تعذّر تقييم الباقي
- ختم الإصدار — يحمل كل قرار مخزَّن إصدار المعرفة الذي أنتجه بالضبط
عزل مُثبَت عند الإقلاع لا مفترَض
- PostgreSQL 17 بثلاثة مخططات معزولة — المعرفة الإكلينيكية العامة، وبيانات المرضى، والمصادقة خلف جدار صارم
- أمان على مستوى الصف في كل جدول يخص المرضى، مع تحقق عند الإقلاع يرفض تشغيل النظام إذا كان الدور المتصل قادراً على تجاوزه
- تجزئة Argon2 وتحقق TOTP إلزامي للأطباء، مع جلسات ذات حالة يمكن إبطالها فوراً — وليست JWT عن قصد
- تشفير AES-256-GCM للبيانات المخزَّنة لرموز الأجهزة والأسرار، على بنية تحتية تُبقي بيانات المرضى داخل المملكة
قياسات تدخل، وتوصيات مُؤمَّنة ببوابات تخرج.
تمتد الدورة من تسجيل المريض مروراً بتحاليل المختبر وبيانات الأجهزة القابلة للارتداء وصولاً إلى خطة يعتمدها الطبيب ويلتزم بها المريض — مع بوابات إفراج صريحة، فلا يصل شيء إلى المريض قبل أن يُفرج عنه الطبيب.
إفراج على مرحلتين
تبقى نتيجة المختبر المؤكَّدة وبند الخطة المعتمَد غير مرئيين للمريض حتى يُفرج عنهما الطبيب. وهذا مفروض في قاعدة البيانات لا في الواجهة.
استقبال بيانات الأجهزة والمختبرات
ربط Whoop عبر OAuth2 بخطافات ويب موقّعة بـ HMAC، وبيانات جلوكوز مستمرة من Dexcom، واستخراج ضوئي لتقارير المختبرات بالعربية والإنجليزية.
سجل تدقيق مترابط بالتجزئة
سجل تدقيق لا يقبل إلا الإضافة، وأي تعديل أو حذف يُبطل كل ما بعده. يسجّل من فعل ماذا — لا القيمة الإكلينيكية نفسها.
واجهة إكلينيكية لا تُوبّخ المريض أبداً.
ورق دافئ بدل الأبيض الطبي، وحبر بدل الأسود الخالص، وأخضر واحد هادئ يُستخدم بحساب. تُقرأ حالات المؤشرات: ضمن النطاق الأمثل، أو خارجه، أو غير مقيسة — دون حكم بالأحمر والأخضر — لأن خط الأساس الكامل يستغرق أسابيع، وينبغي أن يبدو الانتظار هادئاً لا فشلاً.
فكرة واحدة في كل شاشة.
تصل كل توصية على هيئة بطاقة قرار تُظهر منطقها بنفسها: أين يقع المؤشر من نطاقه الأمثل، وأي بوابات الأمان قُيّمت، والأهم — أيها لم يُقيَّم. ولأن الواجهة نفسها سرية، فما يلي هو شكلها لا لقطة منها.
مختومة بإصدار المعرفة الذي أنتجها. ولا يصل شيء إلى المريض حتى يُفرج عنه الطبيب.
منصة يمكن تتبّع كل ادعاء إكلينيكي فيها إلى مصدره.
صفر قيمة إكلينيكية داخل كود التطبيق
يفحص التكامل المستمر الكود عند كل إضافة ويُفشل البناء إذا ظهرت عتبة أو جرعة أو نطاق مرجعي خارج طبقة المعرفة التي يملكها الطبيب.
63 من 202 بوابة مؤشر صارت قادرة على الحجب
البوابات التي كانت تُبلغ عن نتيجة سليمة دون تقييم صارت إما تحجب أو تذكر صراحةً سبب تعذّر تشغيلها — معلَناً في كل توصية بدل إخفائه داخلها.
الكود والمعرفة الإكلينيكية يتراجعان معاً
وسم صورة الحاوية هو إصدار المعرفة نفسه، فالتراجع عن إصدار يتراجع عنهما معاً. وتُتحقق النسخ الاحتياطية أسبوعياً باستعادتها ومقارنتها بالنظام الحي — فالملف على القرص ليس نسخة احتياطية.
34,000 سطر · 54 جدولاً · 591 اختباراً
ثلاثة تطبيقات واثنتا عشرة حزمة في مستودع موحّد مُنمَّط بالكامل، مع كل نص واجهة مُتاح بالعربية والإنجليزية وبناء يفشل عند أي ترجمة ناقصة.
تبني شيئاً لا يحتمل الخطأ؟
إذا كان منتجك يحمل عواقب حقيقية — إكلينيكية أو مالية أو تنظيمية — فلنتحدث عن الحدود التي يحتاجها.