في 2010، صدر Node.js v0.4 وكان الإنترنت منشغلاً بالتجادل حول ما إذا كانت JavaScript على الخادم نكتة. في الوقت ذاته، كنت في الثانية والعشرين من عمري أكتب روتينات MUMPS لوحدة صرف أدوية الصيدلية في نظام EHR وطني كان سيُطرح في مستشفيات عبر الأردن.
معظم المهندسين في عمري كانوا يبنون تطبيقات CRUD. كنت أعمل على بنية تحتية للرعاية الصحية.
كان ذلك HAKEEM — مشروع EHR الوطني الذي تُديره الحلول الصحية الإلكترونية (EHS)، وهي شراكة بين القطاعين العام والخاص بين الحكومة الأردنية وتجمع من مزودي الرعاية الصحية. دوري: مطوّر ومحلل أنظمة، من 2010 إلى 2013. ثلاث سنوات. أربع مستشفيات. نظام واحد وطني النطاق.
ما بُني عليه HAKEEM
بُني HAKEEM على VistA — Veterans Information Systems and Technology Architecture الذي طوّرته وزارة شؤون المحاربين القدامى الأمريكية. إن لم تسمع به: VistA هو أحد أطول أنظمة EHR تشغيلاً على هذا الكوكب، منشور في مستشفيات المحاربين الأمريكية منذ الثمانينيات. يعمل على MUMPS (المُسمّى لاحقاً M)، مزيج قاعدة بيانات ولغة هرمي لا يشبه أي شيء كتبته من قبل.
قرار بناء EHR وطني على VistA لم يكن قراراً غريباً. VistA مُختبَر بشكل لا تستطيع EHRs التجارية التنافس معه — لديه وحدات صيدلية ودعم قرار سريري وجدولة وفوترة، كلها متكاملة تحت نموذج بيانات متسق. حقيقة أنه مفتوح المصدر تعني أن الأردن لم يحتج لترخيص برمجيات ملكية لنشر وطني. حقيقة أنه يعمل على GT.M، قاعدة بيانات NoSQL هرمية، تعني أنك تحتاج مهندسين يستطيعون قراءة MUMPS وليسوا خائفين من stack تقني عمره أربعون عاماً.
كنت أحد تلك المهندسين.
ما معنى “محلل أنظمة” فعلاً على أرض الواقع
المسمّى كان مطوّر/محلل أنظمة. ما كان يعنيه ذلك في الواقع: كتبت تطبيقات GUI بـC# تتواصل مع الـbackend لـVistA عبر بروتوكول Remote Procedure Call (RPC) Broker الخاص به. اثنان من الرئيسيين كانا GUI إدارة معلومات المريض وGUI الجدولة.
تبدو مملّة. لم تكن كذلك. إدارة معلومات المريض في EHR وطني تعني أن GUI الخاص بك هو الواجهة التي من خلالها تُدخل ممرضة التسجيل بيانات تتدفق في كل نظام downstream — الصيدلية والمختبرات والفوترة والتقارير. أخطئ في نموذج البيانات، أو ابنِ الـGUI بطريقة تسمح بإدخال بيانات غير صحيحة، وستُصحّح أخطاء عدم تطابق معرّفات المرضى في مستشفى الأمير حمزة بعد ستة أشهر من تاريخ الإطلاق.
GUI الجدولة كان يحمل بالمثل ثقلاً جوهرياً. جدولة عيادة المرضى الخارجيين في العيادة الشاملة للعاصمة تعني إدارة فترات المواعيد عبر أقسام متعددة، والتعامل مع الإلغاءات وإعادة الجدولة، وإنتاج تقارير تستخدمها إدارة العيادة في قرارات التوظيف. إنها برمجيات مملّة تهم كثيراً حين تنكسر.
MUMPS على خادم Linux في 2011
قاعدة بيانات GT.M عملت على خوادم Linux. ضمن مهمتي صيانة scripts bash للنسخ الاحتياطي وإدارة المهام — النوع من العمل التشغيلي الذي لا يُبدو الـresume مثيراً للإعجاب لكنه يمنع المستشفيات بالتأكيد من فقدان البيانات.
كتبت أيضاً روتينات MUMPS في ثلاث حزم: الصيدلية والفوترة ورسائل HL7.
MUMPS لغة ستُسيء إلى حسّك الجمالي ثم تعمل بشكل صحيح لأربعين عاماً. المتغيرات عالمية بشكل افتراضي. قاعدة البيانات هي اللغة — globals (مصطلح MUMPS للمتغيرات الدائمة) تُعيَّن مباشرة على هيكل قاعدة البيانات الهرمي. الروتين ملف. لا توجد دوال بالمعنى الحديث؛ هناك تسميات ومكافئات GOTO تُزعج محبّي البرمجة المُهيكلة.
ومع ذلك: منطق صرف الأدوية الذي كتبته بـMUMPS لـHAKEEM على الأرجح لا يزال يعمل بشكل ما في المستشفيات الأردنية اليوم. هذا ليس شيئاً تستطيع قوله عن معظم أُطر JavaScript التي كانت رائجة عام 2011.
أربع مستشفيات، أربع مشاكل مختلفة
طُرح HAKEEM في أربعة مرافق، وكل واحد كانت له قصة طرح مختلفة.
مستشفى الأمير حمزة كان المستشفى العام الكبير — حجم عالٍ، تخصصات متعددة، النطاق الكامل لقدرات الـEHR. هنا تكتشف إذا كانت تسجيل مريضك والجدولة تتوسعان حين تكون لديك مئات من زيارات المرضى الخارجيين يومياً.
العيادة الشاملة للعاصمة كانت نموذج المرضى الخارجيين. أخف في الرعاية الداخلية، أثقل في إدارة المواعيد ومتابعة الأمراض المزمنة. GUI الجدولة استحق مكانه هناك.
مستشفى الأمير حسين كانت له متطلبات سير عمل سريرية خاصة لم تُطابق بنظافة التهيئة الافتراضية لـVistA. تخصيص على طبقة MUMPS. أوقات ممتعة.
مركز الحسين للسرطان كان مشروع التكامل — ويستحق شرحه الخاص، وسأعطيه في تدوينة منفصلة عن HL7. لكن النسخة القصيرة: KHCC كان لديه EHR خاص به وسجلات مرضى خاصة وسير عمل خاصة. HAKEEM كان بحاجة لاستهلاك البيانات والمساهمة فيها عبر معيار مشترك. ذلك المعيار كان HL7 v2. بنيت التكامل.
GUIs محمولة في 2012
الشيء الآخر الذي لا يظهر في النقاط إلا إذا نظرت عن كثب: كتبت GUIs محمولة لمكونات HAKEEM بـJava وObjective-C، مستهدفاً Android وiOS على التوالي.
الرعاية الصحية المحمولة في 2012 لم تكن مجالاً ناضجاً. Android كان في الإصدار 4.0. iOS 6 كان على بعد أشهر. مفهوم استخدام الطبيب لجهاز محمول للوصول لسجلات المرضى كان جديداً بما يكفي لعدم وجود اتفاقيات مُرسَّخة لأنماط تجربة المستخدم. كنا نعرفها أثناء السير، تحت قيد أن سجل مريض مقروء خطأ على جهاز محمول له تداعيات على سلامة المريض لا تملكها تغريدة مقروءة خطأ.
ما علّمتني إياه البنية التحتية الوطنية النطاق
ثلاث سنوات في HAKEEM علّمتني شيئاً حملته منذ ذلك الحين في كل مشروع: الفجوة بين “برمجيات تعمل” و”بنية تحتية تعتمد عليها دولة” مشكلة تنظيمية، لا تقنية.
الكود كان صعباً. MUMPS صعبة. HL7 صعب. كتابة GUI لـEHR محمول في 2012 قبل أن يكون لأي شخص دليل تطبيقي كان صعباً.
لكن المشاكل الأصعب كانت التي لا يوجد لها مُصحِّح. أي مستشفى يحصل على sprint التخصيص التالية؟ من يملك القرار حين تحتاج مستشفيان تعديلات متعارضة على نفس روتين MUMPS؟ ماذا يعني التراجع حين أنت في منتصف الطرح في مستشفى يستقبل مرضى صباح الغد؟
كان عمري بين 22 و25 خلال تلك السنوات الثلاث. المهارات التقنية التي اكتسبتها كانت قيّمة. الفهم لكيفية فشل الأنظمة المعقدة على الطبقة التنظيمية كان أكثر قيمة. اتضح أن كتابة منطق الصيدلية بـMUMPS كانت طريقة جيدة جداً لتعلّم كليهما في وقت واحد.
كان النظام البيئي لـNode.js لا يزال يُنظّم نفسه حين انتهيت من EHS. وحدة صيدلية HAKEEM كانت بالفعل في الإنتاج في أربع مستشفيات. أنا سعيد بكيفية قضاء تلك السنوات.