תקינות רפרנציאלית של FHIR

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

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

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

אפשר להשבית את השלמות הרפרנציאלית על ידי הגדרת האפשרות disableReferentialIntegrity בזמן יצירת החנות.

החרגות ומגבלות

מפרט FHIR מאפשר שימוש בצורות שונות של הפניות, שחלקן לא מכוסות על ידי שלמות הפניה:

  • הפניה חיצונית שצוינה על ידי כתובת URL שלא תואמת לכתובת ה-URL הבסיסית של מאגר FHIR.
  • הפניה לוגית שצוינה על ידי מזהה עסק.
  • הפניה שמכילה רק מחרוזת להצגה, שאנשים יכולים לקרוא.
  • הפניות בתוך תוספים של FHIR כפופות לשלמות רפרנציאלית רק אם הערך של complexDataTypeReferenceParsing מוגדר כ-ENABLED. זהו ערך ברירת המחדל למאגרי FHIR חדשים.

שיטות מסוימות של API עלולות לגרום להפרה של השלמות ההפניה בתנאים מסוימים:

  • ב-FHIR אפשר להפנות לגרסה ספציפית בהיסטוריה של משאב באמצעות הפורמט [resource type]/[resource ID]/_history/[version ID]. השלמות ההפנית חלה על ההפניות האלה כשהן נוצרות או מתעדכנות, אבל כשמשתמשים בשיטה Resource-purge כדי להסיר גרסאות היסטוריות של משאב, המערכת לא בודקת הפניות נכנסות.
  • השיטה import של FHIR לא אוכפת את השלמות הרפרנציאלית. אפשר להשתמש בשיטה הזו במקרים שבהם לא נדרשת שלמות רפרנציאלית, או במקרים שבהם ידוע שהקלט עומד בדרישות של שלמות רפרנציאלית. במקרה האחרון, ההפניות בתוך מאגר FHIR יגיעו לעקביות בסופו של דבר אחרי שכל משאב יובא בהצלחה.
  • השיטה deidentify יכולה ליצור מאגר FHIR במצב שלא עומד בדרישות של שלמות רפרנציאלית באופן זמני במהלך הפעולה, או באופן קבוע אם נעשה שימוש במסננים כדי לבחור קבוצת משנה של משאבים.

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

משאבים כלולים

במפרט FHIR יש אילוץ שלפיו כל משאב מוכל צריך להיות מוזכר מאיפשהו בתוך המשאב שמכיל אותו (כולל הפניות ממשאבים מוכלים אחרים), וכל הפניה למשאב מוכל צריכה להיות תקפה. האילוץ הזה נאכף בנפרד מיושרה רפרנציאלית, ואי אפשר להשבית אותו כי הוא מוגדר באינווריאנטים של FHIRPath בכל משאב בנפרד.