معظم المهندسين لم يروا رسالة HL7 حقيقية قط.

إذا عملت في fintech، ربما حللت ISO 8583. إذا عملت في اللوجستيات، تعاملت مع EDI. إذا عملت في بيانات الرعاية الصحية - وتحديداً إذا بنيت تكاملاً مباشراً بين نظامَي مستشفيين - رأيت HL7 v2، ولديك آراء فيه لم تكن لك قبل ذلك.

كتبت تكامل HL7 بين مركز الحسين للسرطان (KHCC) وHAKEEM، نظام الـEHR الوطني الأردني، خلال عملي في الحلول الصحية الإلكترونية بين 2010 و2013. هكذا بدا ذلك فعلاً.

كيف تبدو رسالة HL7 v2

لنبدأ بتنسيق الـwire، لأنه أول ما يجعل المهندسين يُصدرون صوتاً.

MSH|^~\&|KHCC|KHCC|HAKEEM|MOH|20120315120000||ADT^A01|MSG00001|P|2.3
EVN|A01|20120315120000
PID|1||12345^^^KHCC^MR||AL-MANSOUR^AHMAD^MOHAMMED||19750304|M|||AMMAN^JO||||AR|M||12345
PV1|1|I|ONCOLOGY^101^1^KHCC||||SMITH^JOHN^A^^^DR||||||||ONCOLOGY|||V|||||||||||||||||||||||20120315

هذه رسالة ADT^A01 - رسالة قبول/تسريح/نقل، الحدث A01 يعني قبول المريض. كل مقطع محدَّد بـpipe. الحقول داخل المقطع محدَّدة بـpipes. الحقول الفرعية بـ^. الحقول الفرعية الفرعية بـ&. الحقول المتكررة بـ~.

مقطع MSH هو رأس الرسالة: التطبيق المُرسِل، المرفق المُرسِل، التطبيق المُستقبِل، المرفق المُستقبِل، الطابع الزمني، نوع الرسالة، معرّف الرسالة، معرّف المعالجة، الإصدار. مقطع PID هو معرّف المريض: قائمة معرّف المريض (يمكن أن تكون متعددة، من أنظمة متعددة)، الاسم، تاريخ الميلاد، الجنس، العنوان، اللغة، الحالة الزوجية، الدين، رقم الحساب.

HL7 v2.3 - الإصدار الذي كنا نعمل به - أُنجز عام 1997. التنسيق المحدَّد بـpipe يعود لزمن كان فيه النطاق الترددي مكلفاً ولم تكن XML قد غزت العالم المؤسسي بعد. إنه ليس جميلاً. لكنه يُعيَّن مباشرة على كيفية تخزين أنظمة المستشفيات وتبادلها لبيانات المرضى، وهو السبب في أنه لا يزال تنسيق الـwire المسيطر في الرعاية الصحية بعد عقود رغم وجود FHIR وCDA وكل معيار آخر كان من المفترض أن يحل محله.

لماذا كان KHCC تحدي تكامل محدداً

مركز الحسين للسرطان ليس مستشفى عاماً. إنه مرفق أورام متخصص. يصل المرضى إلى KHCC عن طريق الإحالة من مستشفيات أخرى - كثير منها، في النظام الوطني الأردني، كان بالفعل على HAKEEM.

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

حين يصل ذلك المريض إلى KHCC لعلاج السرطان، KHCC لديه EHR خاص به. فضاء معرّف مريض خاص به. نموذج بيانات خاص به للمفاهيم السريرية كبروتوكولات العلاج الكيميائي وخطط العلاج الإشعاعي ولوحات المختبر الخاصة بالأورام. التحدي ليس فقط “اجلب بيانات KHCC إلى HAKEEM.” التحدي هو تحليل هوية المريض عبر نظامين أسّنا معرّفات مختلفة لنفس الإنسان، يليه مزامنة سجلات ثنائية الاتجاه تُبقي كلا النظامين محدَّثاً دون إنشاء سجلات مكررة أو فقدان السياق السريري.

HL7 v2 هو طبقة النقل لتلك المشكلة. إنه ليس الحل لتلك المشكلة. الحل هو خوارزمية مطابقة المرضى، وفهرس مريض رئيسي، وطبقة توجيه رسائل تفهم أي أحداث في أحد النظامين يجب أن تُشغّل رسائل للآخر.

الأجزاء الصعبة فعلاً

إليك ما يتركه “فقط حلل HL7” خارجاً.

هوية المريض ليست مشكلة محلولة. KHCC أسّن أرقام سجلات طبية (MRN) خاصة بهم. HAKEEM حافظ على مخطط معرّف مريض وطني خاص به. مقطع PID لديه حقل لقائمة معرّف المريض - PID-3 - تحديداً لأن المريض لديه معرّفات متعددة عبر أنظمة متعددة. لكن معرفة أن المريض لديه المعرّفات 12345 في KHCC و98765 في HAKEEM تتطلب جدول تعيين، وبناء ذلك الجدول يتطلب إما خوارزمية مطابقة احتمالية آلية (المطابقة على الاسم + تاريخ الميلاد + الجنس + العنوان، تسجيل الثقة) أو عملية مطابقة يدوية، أو - في الواقع العملي - كليهما، مع قواعد مختلفة لعتبات ثقة مختلفة.

تسلسل الأحداث مهم سريرياً. رسالة ADT في HL7 تحمل نوع حدث - A01 هو القبول، A02 هو النقل، A03 هو التسريح، A08 هو تحديث معلومات المريض. يجب أن تصل هذه الأحداث بالترتيب وتُعالَج بالترتيب، وإلا ستكون صورتك السريرية خاطئة. مريض قُبل (A01) ونُقل (A02) ثم سُرِّح (A03) يبدو مختلفاً جداً عن مريض تصل هذه الرسائل بترتيب مختلف وتُعالَج كقُبل، سُرِّح، ثم نُقل لقسم غادره أصلاً.

في تكامل مستشفى عالي الحجم، لا تصل الرسائل دائماً بالترتيب. TCP يمنحك التسليم الموثوق؛ لا يمنحك ضمانات الترتيب على مستوى التطبيق حين تُنتج الرسائل بشكل غير متزامن من أنظمة مختلفة. تحتاج أرقام تسلسل، وتحتاج إقرار الرسائل (ACK/NAK)، وتحتاج queue مع منطق إعادة محاولة يتعامل مع NAKs دون فقدان الرسالة أو إغراق الوجهة بنسخ مكررة.

تطبيق النظام المُرسِل هو المواصفة الحقيقية. HL7 v2.3 معيار. لكن المعيار لديه حقول اختيارية ومقاطع اختيارية ومجال واسع لاختلاف التطبيق. ما أرسله EHR لـKHCC فعلاً في PID-3 هو ما أهم - لا ما قالت مواصفة HL7 يجب أن يكون هناك. قضيت وقتاً ذا معنى مع الفريق التقني في KHCC لتحليل رسائلهم الصادرة الفعلية لفهم ما سنستقبله، لأن وثائق التطبيق كانت غير مكتملة. هذا طبيعي. كل تكامل HL7 سمعت عنه له نسخة من هذه القصة.

كيف بدت طبقة توجيه الرسائل

استخدم تكامل HAKEEM-KHCC حزمة رسائل HL7 في VistA - روتينات MUMPS في تلك الحزمة تعاملت مع تحليل الرسائل الواردة وتوجيهها على جانب HAKEEM. كتبت الروتينات التي تعاملت مع أنواع أحداث محددة - بشكل رئيسي أحداث ADT لحركة المريض وأزواج ORM/ORU لأوامر المختبر ونتائجها.

تدفق الإحالة:

  1. مستشفى الإحالة (على HAKEEM) يُرسل المريض إلى KHCC.
  2. KHCC يُسجّل المريض في نظامه، يُسنّد MRN الخاص به.
  3. KHCC يُرسل ADT^A01 إلى HAKEEM مقرّاً بالقبول.
  4. طبقة توجيه HL7 في HAKEEM تستلم A01، تحلل هوية المريض عبر تعيين MPI، وتُحدّث سجل المريض في HAKEEM بمعلومات لقاء KHCC.
  5. نتائج المختبر من لوحات أورام KHCC تعود عبر رسائل ORU^R01 وتهبط في سجل المريض في HAKEEM، مرئية للأطباء المُحيلين الذين لا يزالون يمتلكون علاقة الرعاية الأولية للمريض.

هذه النقطة الأخيرة مهمة سريرياً. طبيب الأورام في KHCC يعالج السرطان. الطبيب العام في المستشفى المُحيل لا يزال يدير ضغط الدم والسكري وكل شيء آخر للمريض. يحتاجون رؤية نتائج الأورام. تكامل HL7 هو ما يجعل ذلك ممكناً دون أن يحمل المريض سجلات ورقية بين المرافق.

ما أفكر فيه بشأن HL7 الآن، بعد اثني عشر عاماً

HL7 v2 ليست برمجيات جميلة. لكنها النوع من القبح الذي يكسب احترامك: قبيحة لأن نطاق المشكلة قبيح، لا لأن المصمّمين لم يحاولوا.

بيانات الرعاية الصحية فوضوية لأن الرعاية الصحية فوضوية. المرضى لديهم معرّفات متعددة لأنهم يتفاعلون مع أنظمة متعددة. الأحداث لها متطلبات ترتيب لأن المواعيد السريرية مهمة للتشخيص والعلاج. الاختيارية في الحقول التي تجعل المواصفة تبدو مرنة موجودة لأن التخصصات السريرية المختلفة لها متطلبات بيانات مختلفة والمعيار يجب أن يخدمها جميعاً.

FHIR أفضل حقاً في معظم النواحي - RESTful وJSON أو XML وموجّه للموارد وأدوات حديثة. إنه أيضاً أحدث باثني عشر عاماً. في 2012، كانت FHIR مواصفة تجريبية. HL7 v2 كان ما تتحدثه أنظمة المستشفيات. تتكامل مع ما هو موجود.

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

لاحظت السباكة. بنيت بعضها. الأنابيب لا تزال تجري.