HL7v2

‫Health Level Seven International Version 2 ‏ (HL7v2) הוא פורמט של הודעות קליניות שמספק נתונים על אירועים שמתרחשים בתוך ארגון.

פרטים נוספים על HL7v2 מופיעים במסמכי התיעוד של חבילת המוצרים HL7 גרסה 2.

חנויות HL7v2

מאגר HL7v2 הוא מאגר נתונים שנמצא בתוך מערך נתונים. חנויות HL7v2 מכילות הודעות HL7v2.

המשאב HL7V2Store מספק ייצוג של המאפיינים של מאגר HL7v2. לכל אחד ממאגרי הנתונים שלכם בפורמט HL7v2, אתם יכולים לבחור אפשרויות כמו:

  • האם לפרסם שינויים במאגר HL7v2 (לדוגמה, אם האפליקציה מקבלת הודעה חדשה) בנושא Pub/Sub.
  • איך לנתח הודעות שהוטמעו במאגר HL7v2.

הודעות HL7v2

יכול להיות שיהיה קשה לקרוא הודעות גולמיות של HL7v2. לדוגמה, ניקח את ההודעה הבאה:

MSH|^~\&|FROM_APP|FROM_FACILITY|TO_APP|TO_FACILITY|20180101000000||ADT^A01|20180101000000|P|2.5|
EVN|A01|20110613083617|
PID|1|843125^^^^MRN|21004053^^^^MRN~2269030303^^^^ORGNMBR||SULLY^BRIAN||19611209|M|||123 MAIN ST^^CITY^STATE^12345|
PV1||I|H73 RM1^1^^HIGHWAY 01 CLINIC||||5148^MARY QUINN|||||||||Y||||||||||||||||||||||||||||20180101000000|

‫Cloud Healthcare API יכול:

  1. ניתוח הודעה.
  2. הוספנו אפשרות לחלץ כמה שדות מהקטע של כותרת ההודעה (MSH) כדי לאפשר סינון.
  3. התוכן של ההודעה מיוצג כנתוני JSON לעיבוד נוסף או להחלפת נתונים.

המשאב Message מספק ייצוג של הודעת HL7v2. הוא כולל מידע כמו:

  • השעה שבה ההודעה נוצרה
  • מי יצר את ההודעה
  • אילו נתונים כלולים בהודעה

משאב Message של ההודעה הקודמת נראה כך:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/W5_pxOBkoLoCxiFxE4cg8zwEWRzMlOzIfaLBrZPf0Zg=",
  "data": "TVNIfF5+XCZ8RlJPTV9BUFB8RlJPTV9GQUNJTElUWXxUT19BUFB8VE9fRkFDSUxJVFl8MjAxODAxMDEwMDAwMDB8fEFEVF5BMDF8MjAxODAxMDEwMDAwMDB8UHwyLjV8DUVWTnxBMDF8MjAxMTA2MTMwODM2MTd8DVBJRHwxfDg0MzEyNV5eXl5NUk58MjEwMDQwNTNeXl5eTVJOfjIyNjkwMzAzMDNeXl5eT1JHTk1CUnx8U1VMTFleQlJJQU58fDE5NjExMjA5fE18fHwxMjMgTUFJTiBTVF5eQ0lUWV5TVEFURV4xMjM0NXwNUFYxfHxJfEg3MyBSTTFeMV5eSElHSFdBWSAwMSBDTElOSUN8fHx8NTE0OF5NQVJZIFFVSU5OfHx8fHx8fHx8WXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwyMDE4MDEwMTAwMDAwMHw=",
  "sendFacility": "FROM_FACILITY",
  "sendTime": "2018-01-01T00:00:00Z",
  "messageType": "ADT",
  "createTime": "2018-01-01T00:00:00Z",
  "patientIds": [
    {
      "value": "843125",
      "type": "MRN"
    },
    {
      "value": "21004053",
      "type": "MRN"
    },
    {
      "value": "2269030303",
      "type": "ORGNMBR"
    }
  ],
  "parsedData": {
    "segments": [
      {
        "segmentId": "MSH",
        "fields": {
          "5": "TO_FACILITY",
          "2": "FROM_APP",
          "3": "FROM_FACILITY",
          "0": "MSH",
          "1": "^~\\&",
          "10": "P",
          "4": "TO_APP",
          "9": "20180101000000",
          "8.1": "ADT",
          "11": "2.5",
          "8.2": "A01",
          "6": "20180101000000"
        }
      },
      {
        "segmentId": "EVN",
        "fields": {
          "1": "A01",
          "2": "20110613083617",
          "0": "EVN"
        }
      },
      {
        "segmentId": "PID",
        "fields": {
          "1": "1",
          "3[0].1": "21004053",
          "3[1].1": "2269030303",
          "3[0].5": "MRN",
          "0": "PID",
          "11.4": "STATE",
          "11.5": "12345",
          "2.1": "843125",
          "2.5": "MRN",
          "5.1": "SULLY",
          "11.3": "CITY",
          "8": "M",
          "11.1": "123 MAIN ST",
          "3[1].5": "ORGNMBR",
          "7": "19611209",
          "5.2": "BRIAN"
        }
      },
      {
        "segmentId": "PV1",
        "fields": {
          "44": "20180101000000",
          "7.1": "5148",
          "16": "Y",
          "2": "I",
          "3.2": "1",
          "3.4": "HIGHWAY 01 CLINIC",
          "7.2": "MARY QUINN",
          "3.1": "H73 RM1",
          "0": "PV1"
        }
      }
    ]
  }
}

יצירה והוספה של הודעות

אפשר לאחסן הודעות HL7v2 בחנות HL7v2 בשיטות הבאות:

  • messages.create: יוצר משאב Message ומאחסן אותו בחנות HL7v2. התשובה של השיטה הזו מכילה את גוף ההודעה.

  • messages.ingest: מטמיע משאב Message ומאחסן אותו בחנות HL7v2. התשובה של השיטה הזו מכילה את גוף ההודעה ואת שדה האישור, hl7ack, שמאמת שההודעה התקבלה.

    חשוב לשים לב למידע הבא לגבי הערך של השדה hl7ack:

    • הערך מכיל סוג תגובה. סוג התגובה AA מציין Application Accept, כלומר שההודעה אומתה והועברה בהצלחה.
    • המתקן השולח והמתקן המקבל מתהפכים.
    • הערך מכיל את מזהה הבקרה של ההודעה המקורית.

אם האפליקציה שלכם דורשת תגובה של ACK, השתמשו ב-messages.ingest. אם האפליקציה לא דורשת תגובה של ACK, אפשר להשתמש ב-messages.create. ACK התשובות לא נשמרות בחנויות ב-HL7v2.

כשיוצרים הודעה של HL7v2 או מטמיעים אותה, השרת מקצה לה מזהה. אפשר להשתמש במזהה הזה כשמבצעים פעולות בהודעה (לדוגמה, כדי למחוק את ההודעה או להוסיף לה תוויות שהוגדרו על ידי המשתמש).

‫MLLP והמתאם Google Cloud MLLP

פרוטוקול השכבה התחתונה המינימלי (MLLP) הוא התקן שמשמש להעברת הודעות HL7v2 בחיבורי TCP/IP ברשת, כמו בבית חולים.

אין מיפוי מדויק בין MLLP לבין HL7v2 API בארכיטקטורת REST של Cloud Healthcare API, שמשתמש ב-HTTP. לכן, צריך להשתמש במתאם MLLP כדי להמיר הודעות שמועברות באמצעות MLLP לפורמט ש-API בארכיטקטורת REST יכול לקבל. כדי להעביר הודעות באמצעות MLLP ואז אל Cloud Healthcare API, צריך להשתמש במתאם MLLP של Google Cloud. למדריך לשימוש במתאם MLLP הזה, ראו העברת הודעות HL7v2 דרך חיבורי TCP/IP.

אם האפליקציה דורשת שרשות מהימנה תחתום על הודעת HL7v2, צריך להשתמש ב-Binary Authorization MLLP Adapter של Google Cloud. מדריך לשימוש במתאם MLLP הזה זמין במאמר העברת הודעות HL7v2 דרך חיבורי TCP/IP באמצעות Binary Authorization.

המתאם לא מנתח או בודק את ההודעות של HL7v2. ה-Cloud Healthcare API מנתח ומאמת את ההודעות כשהן מוזנות למאגר HL7v2. אחר כך תוכלו לבצע אימות נוסף של ההודעה על ידי צפייה בה או הוספת תווית לה לצורך ניתוח.

בזמן שהמתאם פועל, הוא שומר על חיבור TCP לטווח ארוך פתוח בין רשת מערכת הטיפול לבין המתאם. הוא גם חושף שקע TCP לקבלת הודעות HL7v2 דרך MLLP. המתאם קובע את גבולות ההודעה על ידי זיהוי של בייטים של בלוק התחלה וסיום של כל הודעה, כפי שמוגדר בתקן MLLP.

כשהמתאם של MLLP מקבל הודעה של HL7v2 ממערכת הטיפול דרך חיבור ה-TCP, הוא מטמיע את ההודעה במאגר HL7v2. החנות משיבה באופן סינכרוני למתאם MLLP עם ACK או NACK. התו ACK נשלח אם ההודעה נוצרה בצורה תקינה ויש לה פלח כותרת תקין. מתאם MLLP שולח את התגובה ACK או NACK למערכת הטיפול.

מתאם MLLP יכול גם להאזין למינוי Pub/Sub שמשויך למאגר HL7v2. כשנוצרת הודעה בפורמט HL7v2 או כשהיא מוזנת למאגר, מתאם MLLP מקבל את ההתראה ומפרסם את ההודעה במערכת הטיפול.

פרוטוקול MLLP ואבטחה

פרוטוקול MLLP לא תומך באופן מובנה בהצפנה או באימות. לכן, חיבור TCP שמשתמש ב-MLLP צריך להיות עטוף בחיבור מאובטח באמצעות רשת וירטואלית פרטית (VPN). אתם יכולים להשתמש ב-Cloud VPN כדי ליצור חיבור מאובטח בין אשכול GKE שבו פועל מתאם MLLP לבין האפליקציה המקומית שלכם. מידע נוסף זמין במאמר בנושא הגדרת Cloud VPN.

‫HL7v2,‏ MLLP ו-Pub/Sub

היבט בסיסי בשימוש ב-HL7v2 עם Cloud Healthcare API הוא ההגדרה של התראות Pub/Sub. אם משתמשים באפליקציית מנויים עם Pub/Sub, אפשר לקבל התראות כשנוצרת הודעה בפורמט HL7v2 או כשהיא מוזנת למאגר HL7v2.

במאמר הגדרת התראות Pub/Sub מוסבר איך להשתמש בנושאים ב-Pub/Sub עם הטמעה של HL7v2 ב-Cloud Healthcare API.

‫HL7v2,‏ MLLP וארכיטקטורה Google Cloud

בתרשים הבא מוצג תהליך השליחה של הודעת HL7v2 ממערכת לטיפול רפואי וההטמעה שלה ב-Cloud Healthcare API. מתאם MLLP נפרס ב-Google Kubernetes Engine וההודעה מועברת דרך VPN באמצעות Cloud VPN. אחרי ההטמעה, אפליקציה רשומה שרשומה לנושא Pub/Sub של מאגר HL7v2 מקבלת התראה על כך שההודעה הוטמעה. בנוסף, Cloud Healthcare API יוצר ACK למתאם MLLP ושולח אותו בחזרה דרך תעלת ה-VPN אל מערכת הטיפול.

ההודעה של HL7v2 שנשלחת ממערכת הטיפול היא הודעת ADT, שהיא הודעה נפוצה ב-HL7v2. כשמערכת לטיפול שולחת הודעת ADT, היא לא מצפה ליצירת הודעה חדשה ולהחזרתה מהמערכת המרוחקת או המקומית.

mllp_adapter

בתרשים מוצגים הפריטים הבאים:

  1. מערכת שירותי הבריאות המקומית.
  2. הודעת ADT HL7v2 יוצאת ממערכת הטיפול.
  3. ההודעה של HL7v2 מוטמעת דרך מתאם MLLP בחנות של HL7v2.
  4. הנושא ב-Pub/Sub שהוגדר בחנות HL7v2 מקבל התראה על כך שהתבצע ייבוא של הודעה.
  5. אפליקציה רשומה מקשיבה להתראות על הטמעה של הודעות HL7v2 מנושא Pub/Sub שלה.