שימוש בסכימה מותאמת אישית כדי לנתח הודעות HL7v2

בדף הזה מוסבר איך להגדיר סכימה מותאמת אישית כדי לנתח הודעות HL7v2 שלא תואמות לתקן HL7v2.

אם אתם ממירים הודעות HL7v2 לפורמט אחר, כמו FHIR או OMOP, אתם צריכים קודם לנתח ולהטמיע את הודעות HL7v2 במאגר HL7v2. המדריך הזה יעזור לכם לוודא שאתם יכולים לנתח ולהטמיע הודעות HL7v2.

סקירה כללית

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

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

לפני שמגדירים את ParserConfig, כדאי לקרוא את הקטעים הבאים כדי להבין מהן הודעות HL7v2, הגדרות סוג והגדרות קבוצה.

הודעות HL7v2

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

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

  • ‫ADT: משמש להעברת חלקים מנתוני ניהול המטופל של המטופל
  • ‫ORU: משמש להעברת תוצאות של תצפיות
  • ‫ORM: משמש להעברת מידע על הזמנה

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

איור 1. תרשים של מבנה הודעת HL7v2.

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

כברירת מחדל, ההודעות של HL7v2 משתמשות בתווים הבאים כדי להפריד בין פרטים. אפשר לשנות את התווים להגדרת גבולות, את התווים להפרדה ואת התווים לסיום של הודעת HL7v2 ברמת ההודעה בקטע MSH.

  • סיום פלח: \r

    אם ההודעות בפורמט HL7v2 משתמשות במפריד פלחים אחר, אפשר לעיין בדוגמה של מסיים פלח מותאם אישית ושדה מותאם אישית.

  • מפריד שדות: |

  • מפריד רכיבים: ^

  • מפריד של רכיבי משנה: &

  • מפריד חזרות: ~

  • תווי בריחה (escape): \

הגדרות של סוגים וקבוצות

כדי להבין את מנתח הסכימה, צריך להשתמש בהגדרות סוג ובהגדרות קבוצה.

הגדרת סוג

המונח 'סוגים' כולל את האפשרויות הבאות:

  • סוגי פלחים של HL7v2, כמו MSH (כותרת של פלח הודעה), DG1 (אבחון) ו-PID (זיהוי מטופל)

    רשימה של כל סוגי הפלחים ב-HL7v2 זמינה במאמר הגדרות של פלחים.

  • סוגי נתונים ב-HL7v2, כמו ST (נתוני מחרוזת), TS (חותמת זמן) ו-SI (מזהה רצף)

    רשימה של כל סוגי הנתונים שמוגדרים כברירת מחדל ב-HL7v2 מופיעה במאמר סוגי נתונים.

מציינים את הסוגים בשדה name בתוך האובייקט Type.

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

  • אילו שדות נכללים בפלח?
  • מהם סוגי הנתונים של השדות?

בדוגמה הבאה מוצגת הגדרת הסוג של ZCD פלח מותאם אישית:

{
  "type": {
    "name": "ZCD", // Segment type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "A", // Custom data type
        "minOccurs": 1 // Repeated, because maxOccurs is not defined
      }
    ]
  }
}

בדוגמה הזו, הפלח ZCD מכיל שני שדות בשמות 1 ו-2. סוג הנתונים של 1 הוא ST, שהוא סוג נתונים של מחרוזת פרימיטיבית. סוג הנתונים של 2 הוא A, שהוא סוג נתונים מותאם אישית.

ההגדרה הבאה של סוג הנתונים המותאם אישית A מראה שהוא מכיל גם סוג נתונים מותאם אישית אחר, בשם B.

{
  "type": {
    "name": "A", // Custom data type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "B", // Custom data type
        "minOccurs": 1,
        "maxOccurs": 1
      }
    ]
  }
}

בדוגמה הבאה מוצגת הגדרת הסוג של סוג הנתונים המותאם אישית B, שיש לו שדה בשם 1 עם סוג הנתונים ST ושדה בשם 2 עם סוג הנתונים ST שחוזר על עצמו:

{
  "type": {
    "name": "B", // Custom data type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "ST"
        "minOccurs": 1,
        "maxOccurs": 1
      }
    ]
  }
}

אחרי שמבינים את המידע על הפלח וסוגי הנתונים, אפשר להעריך איך נראה הפלח ZCD בהודעת HL7v2 המקורית. בדוגמה הזו מוצגת הודעת HL7v2 עם השדה A שחוזר על עצמו פעם אחת, וזה מותר כי הערך maxOccurs לא מוגדר בשדה A:

ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2
איור 2. דיאגרמה של הגדרת סוג.

באיור 2, החלקים הבאים של הגדרת הסוג מסומנים: הפלח, כותרת הפלח, השדות, הרכיבים, רכיבי המשנה והחזרות.

הגדרת הקבוצה

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

מציינים קבוצות במערך groups בתוך האובייקט GroupOrSegment.

הנה קטע קוד של מבנה קבוצה להודעת ADT_A01 HL7v2:

  • הערך הראשון segment במערך members הוא MSH (כותרת של פלח הודעה), כי MSH נדרש בכל הודעת HL7v2.
  • group בשם Group 1.

    הקבוצה הזו יכולה להופיע עד 2 פעמים ומכילה את פלח הקהל המותאם אישית ZCD.

    בדרך כלל, group מכיל כמה פלחים מקוננים וקבוצות אחרות שמקובצים באופן לוגי, אבל בדוגמה הזו Group 1 מכיל רק פלח אחד: ZCD.

{
  "ADT_A01": {
    "members": [
      {
        "segment": {
          "type": "MSH"
        }
      },
      {
        "group": {
          "name": "Group 1",
          "minOccurs": 1,
          "maxOccurs": "2",
          "members": [
            {
              "segment": {
                "type": "ZCD"
              }
            }
          ]
        }
      }
    ]
  }
}

אחרי שמקבלים את המידע על הקבוצות, אפשר להעריך איך נראית ההודעה המקורית של HL7v2 אם ZCD מופיע פעמיים בהודעה של HL7v2, וזה מותר כי maxOccurs ב-Group 1 מוגדר כ-2. לא ניתן לדעת מהם שאר המאפיינים של פלח ZCD בלי לדעת גם את הגדרת הסוג.

MSH|^~\&|||||20100308000000||ADT^A01|23701|1|2.3||
ZCD|ZCD_CONTENT
ZCD|ZCD_CONTENT
איור 3. תרשים של הגדרת קבוצה.

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

הגדרת סכימה מותאמת אישית בחנות HL7v2

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

הגדרה של סוג החנות ב-HL7v2

אחרי שמבינים את הגדרת הסוג של הודעת HL7v2, אפשר לציין הגדרת סוג בחנות HL7v2. כדי לציין את ההגדרה, מוסיפים מערך של types ומערך של version.

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

שימו לב שההגדרה משתמשת במערך version כדי לציין את השדות mshField ו-value. השדות האלה תואמים לשדות ולרכיבים בפלח MSH.

המערך types שאתם מציינים חל רק על הודעות שיש להן פלח MSH שתואם לערכים של mshField ו-value במערך version. כך אפשר להטמיע הודעות של HL7v2 עם גרסאות שונות באותו מאגר HL7v2.

{
  "types": [
    {
      "version": [
        {
          "mshField": "12",
          "value": "2.3"
        }
      ],
      "type": [
        {
          "name": "ZCD", // Segment type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "A",
              "minOccurs": 1
            }
          ]
        },
        {
          "name": "A", // Data type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "B",
              "minOccurs": 1,
              "maxOccurs": 1
            }
          ]
        },
        {
          "name": "B", // Data type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "ST"
            }
          ]
        }
      ]
    }
  ]
}

הגדרת קבוצת חנויות ב-HL7v2

אפשר להשתמש בקבוצות כדי להגדיר מבנה היררכי ברמת ה'חברות'. הקבוצות מצוינות במערך members ברמת הפלח. המבנה של פלח הוא צפוי ובדרך כלל הוא מכיל שדות, רכיבים ותת-רכיבים, אבל הפלח עצמו יכול להיות בכל רמה של הודעת HL7v2.

בדומה להגדרת סוג, הגדרת קבוצה משתמשת במסנן version כדי לאפשר לכם להטמיע הודעות HL7v2 עם גרסאות שונות באותו מאגר HL7v2.

בדוגמה הבאה מוצגת הגדרה של הקבוצה שמוצגת בהגדרת הקבוצה בחנות HL7v2:

{
  "version": [
    {
      "mshField": "12",
      "value": "2.3"
    }
  ],
  "messageSchemaConfigs": {
    "ADT_A01": {
      "members": [
        {
          "segment": {
            "type": "MSH"
          }
        },
        {
          "group": {
            "name": "Group 1",
            "maxOccurs": "2",
            "members": [
              "segment": {
                "type": "ZCD"
              }
            ]
          }
        }
      ]
    }
  }
}

השלמת ההגדרה של חנות HL7v2

כשמשלבים את ההגדרה של type עם ההגדרה של group, אפשר לראות איך נראית ההגדרה המלאה של הסכימה המותאמת אישית במאגר HL7v2. אפשר גם לקבוע שהסכימה המותאמת אישית תתאים להודעת HL7v2 שנראית כך:

MSH|^~\&|||||20100101000000||ADT^A01^A01|23701|1|2.3||
ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2

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

הרחבה

{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1,
                    "maxOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "maxOccurs": "2",
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD", // Segment type
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A"
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "A", // Data type
              "fields": [
                {
                  "name": "1",
                  "type": "ST"
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B"
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B", // Data type
              "fields": [
                {
                  "name": "1",
                  "type": "ST"
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST"
                  "minOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

יצירת מאגר HL7v2 עם סכימה בהתאמה אישית

כדי ליצור מאגר HL7v2 שמשתמש בסכימה מותאמת אישית מלאה, צריך להשלים את השלבים שבקטע הזה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • ‫LOCATION: המיקום של מערך הנתונים
  • ‫DATASET_ID: מערך הנתונים הראשי של החנות ב-HL7v2
  • ‫HL7V2_STORE_ID: מזהה החנות ב-HL7v2

תוכן בקשת JSON:

{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
EOF

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

@'
{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

הטמעה וניתוח של הודעת HL7v2 באמצעות סכימה מותאמת אישית

כדי להטמיע גרסה בקידוד Base64 של הודעת HL7v2, צריך להשלים את השלבים שבקטע הזה.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • LOCATION: המיקום של מערך הנתונים הראשי
  • ‫DATASET_ID: מערך הנתונים הראשי של החנות ב-HL7v2
  • ‫HL7V2_STORE_ID: מזהה החנות ב-HL7v2

תוכן בקשת JSON:

{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

cat > request.json << 'EOF'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}
EOF

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

@'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

קביעת העוצמה של שדה

כדי לקבוע את הקרדינליות של שדה בהודעת HL7v2, צריך להגדיר את השדות הבאים במאגר HL7v2:

  • ‫minOccurs: קובע את המספר המינימלי של פעמים שקבוצה, פלח, שדה, רכיב או רכיב משנה צריכים להופיע או לחזור בהודעות HL7v2 נכנסות
  • ‫maxOccurs: קובע את המספר המקסימלי של פעמים שקבוצה, פלח, שדה, רכיב או רכיב משנה יכולים להופיע או לחזור בהודעות HL7v2 נכנסות

התעלמות מרכיבים חסרים

מגדירים את ignoreMinOccurs לערך true אם רוצים שממשק HL7v2 API יקבל את כל ההודעות הנכנסות של HL7v2, בלי קשר לרכיבים חסרים. המשמעות היא שהודעה לא תידחה אם חסרים בה קבוצות, פלחים, שדות, רכיבים או רכיבי משנה נדרשים.

אם אתם לא מצליחים להטמיע הודעות HL7v2 כי חסרים בהן שדות נדרשים, מומלץ להגדיר את ignoreMinOccurs ל-true.

סוג שדה של תווים כלליים לחיפוש

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

לדוגמה, נבחן את הגדרת הסוג הבאה. בשדה 2 נעשה שימוש בתו כללי במקום בסוג נתונים של שדה. ההגדרה שוות ערך להגדרה הראשונה בהגדרת סוג, ולא צריך לציין את הסוגים A ו-B:

"type": {
  "name": "ZCD"
  "fields": [
    {
      "name": "1",
      "type": "ST"
    },
    {
      "name": "2",
      "type": "*"
    }
  ]
}

המאמרים הבאים

דוגמאות לניתוח סכימות בהתאמה אישית