בדף הזה מוסבר איך Cloud Healthcare API תומך בתוספים ל-FHIR.
סקירה כללית
FHIR מאפשר תוספים שמוגדרים על ידי המשתמשים במשאבים ובסוגי נתונים. Cloud Healthcare API תומך באחסון ובאחזור של התוספים האלה.
ערכי תוספים
רכיב הרחבה הוא צמד מפתח/ערך. המפתח, שמאוחסן בשדה url, מציין את כתובת ה-URL הקנונית של הגדרת התוסף שמגדירה את התוכן והמשמעות של התוסף. השדה value הוא רכיב בחירה שיכול להכיל סוגים שונים של נתוני FHIR.
המנגנון הזה זהה בכל הגרסאות של FHIR, למעט בגרסאות קודמות שבהן יש פחות סוגי נתונים זמינים. סוגי הנתונים הזמינים לתוספים מפורטים בתקן FHIR (DSTU2, STU3, R4).
בדוגמה הבאה מוצג משאב Patient עם שתי תוספים, צבע שיער ואזרחות, ברכיב הבסיסי:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/hair-color",
"valueString": "brown"
},
{
"url": "http://example.com/fhir/StructureDefinition/patient-citizenship",
"valueCodeableConcept": {
"coding" : [{
"system" : "urn:iso:std:iso:3166",
"code" : "US"
}]
}
}
]
}
גם לסוגי נתונים מורכבים ולרכיבים עם שדות צאצא יכולות להיות תוספות. לדוגמה, Patient מכיל תוסף בשדה identifier שהוא סוג נתונים מורכב, ותוסף בשדה communication שיש לו שדות צאצא אחרים:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"identifier": [
"system": "MRN",
"value": "AB1234",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/last-verified",
"valueDateTime": "2021-01-01T00:00:00Z"
}
]
],
"communication": [
{
"language": {
"coding": [{
"system": "urn:iso:std:iso:639",
"code": "EN"
}]
},
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/fluency-level",
"valueInteger": 7
}
]
}
]
}
לכל רכיב של תוסף יכול להיות רק שדה ערך אחד. כדי להגדיר תוסף שמכיל מערך של ערכים, צריך להגדיר כמה רכיבי תוסף עם אותו url.
אי אפשר להגדיר תוספים ברכיב הבסיס לסוגי המשאבים הבאים:
BinaryBundleParameters
תוספים מורכבים
תוספים יכולים להכיל תוספים כדי להגדיר מבנה מקונן. השם url של תוסף הצאצא הוא יחסי לתוסף החיצוני. לכל אלמנט extension צריך להיות אלמנט value או אלמנט extension צאצא מוטמע, אבל לא שניהם.
בדוגמה הבאה מוצג משאב Patient שמכיל תוסף מורכב patient-citizenship עם תוספי צאצא code ו-period:
{
"resourceType": "Patient",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
"extension": [
{
"url": "code",
"valueCodeableConcept": {
"coding": [{
"system": "urn:iso:std:iso:3166",
"code": "CA"
}]
}
},
{
"url": "period",
"valuePeriod": {
"start": "2010-01-01"
}
}
]
}
]
}
תוספים בסוגים פרימיטיביים
גם לסוגי נתונים פרימיטיביים ב-FHIR יכולים להיות תוספים. כשתוספים מיוצגים בפורמט JSON, הם מיוצגים במאפיין JSON נוסף עם הקידומת _ לשם של הרכיב הפרימיטיבי, כפי שמוגדר בייצוג JSON של FHIR.
בדוגמה הבאה, בפורמט JSON, מוצג משאב Patient עם תוסף בשדה birthDate:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"birthDate": "1970-01-01",
"_birthDate": {
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/date-type",
"valueString": "A"
}
]
}
}
אם האלמנט הפרימיטיבי חוזר על עצמו, המאפיין עם _ מטופל גם כמערך, עם ערכי null שמשמשים ליישור ערכי התוסף עם הפרימיטיבים התואמים.
בדוגמה הבאה מוצג משאב Patient עם תוסף בערך השני של name.given, אבל בלי תוסף בערך הראשון:
{
"resourceType": "Patient",
"name": {
"given": [
"ABC",
"DEF"
],
"_given": [
null,
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/display",
"valueString": "XYZ"
}
]
}
]
}
}
הגדרת תוסף עם StructureDefinition
לצורך פעולה הדדית, אפשר להגדיר את השם והמשמעות של תוסף באמצעות משאב StructureDefinition שאפשר לפרסם או להפיץ כדי לאפשר לצרכני הנתונים לפרש אותו. הפרמטר הזה הוא אופציונלי כשמשתמשים בתוספים ב-Cloud Healthcare API.
הזהות של ההגדרה הזו מצוינת על ידי כתובת ה-URL הקנונית בשדה url. לכל נתון שמועבר בין ארגונים, מומלץ להשתמש בכתובת URL שצרכני הנתונים יכולים לעקוב אחריה כדי לקבל את StructureDefinition. Cloud Healthcare API לא מאמת את כתובת ה-URL הזו ולא מנסה לפתור אותה.
התוכן של משאב StructureDefinition יכול להיות מורכב, ולרוב הוא מוגדר באמצעות כלים ליצירת פרופילי FHIR.
תוספים לשינוי
תוספים לשינוי דומים לתוספים, אבל הם מאוחסנים בשדה modifierExtension. תוסף לשינוי הוא נתונים נוספים שלא ניתן להתעלם מהם כי הם עלולים לפסול את הפרשנות של הרכיב שמכיל אותם.
לדוגמה, תוסף של משנה יכול לציין שלמטופל אין את המצב שצוין או שאסור לרשום תרופה מסוימת.
ה-API של Cloud Healthcare מאחסן ומאחזר תוספים של משנים, אבל לא מנסה לפרש את המשמעות שלהם. מומלץ לאפליקציות לבצע פעולה מתאימה כשהן נתקלות בתוסף לשינוי שהן לא מבינות, למשל להציג אזהרה או לדחות את המשאב לחלוטין. מומלץ להימנע ככל האפשר משימוש בתוספים לשינוי.