FHIR

Επεξήγηση των FHIR Subscriptions: θέματα, κανάλια και ειδοποιήσεις σε R4, R4B και R5

FHIR Subscription: ειδοποιήσεις αλλαγών. Μοντέλο R4 (κριτήρια), R4B/R5 (SubscriptionTopic). Κανάλια: rest-hook, websocket, message. Bundle ειδοποίησης. Subscriptions Backport για R4.

από Δημοσιεύτηκε 6 λεπτά ανάγνωσης

Σύντομη απάντηση: Μια Συνδρομή (Subscription) ενημερώνει έναν διακομιστή FHIR να ειδοποιήσει αυτό το τελικό σημείο όταν πόροι που ταιριάζουν με αυτές τις συνθήκες αλλάξουν. Στο FHIR R4 οι συνθήκες είναι μια συμβολοσειρά αναζήτησης (criteria: "Observation?patient=123&code=85354-9") και ο διακομιστής στέλνει τον αντίστοιχο πόρο σε ένα REST hook, ένα websocket, ένα email ή ένα μήνυμα FHIR. Στο R4B και R5 το μοντέλο αναδομήθηκε γύρω από το SubscriptionTopic: ο διακομιστής δημοσιεύει τα συμβάντα για τα οποία μπορεί να ειδοποιήσει, ο πελάτης εγγράφεται σε ένα θέμα με φίλτρα και οι ειδοποιήσεις φτάνουν ως ένα Bundle τύπου subscription-notification που ξεκινά πάντα με έναν πόρο SubscriptionStatus. Ο οδηγός υλοποίησης Subscriptions R5 Backport επιτρέπει στους διακομιστές R4 να προσφέρουν το νέο μοντέλο.

R4: Συνδρομές βάσει κριτηρίων

Στο FHIR R4, μια Συνδρομή βασίζεται σε κριτήρια: ο πελάτης δημιουργεί έναν πόρο Συνδρομής του οποίου τα κριτήρια είναι μια συμβολοσειρά αναζήτησης όπως Observation?code=…&patient=… και του οποίου το κανάλι είναι rest-hook, websocket, email, sms ή message. Ο διακομιστής αξιολογεί τα κριτήρια έναντι κάθε δημιουργίας και ενημέρωσης και δημοσιεύει κάθε αντίστοιχο πόρο, ή μια κενή ειδοποίηση, στο τελικό σημείο.

{
  "resourceType": "Subscription",
  "status": "requested",
  "reason": "Blood pressure alerts for the hypertension clinic",
  "criteria": "Observation?code=http://loinc.org|85354-9&patient=Patient/123",
  "channel": {
    "type": "rest-hook",
    "endpoint": "https://clinic.example.org/hooks/bp",
    "payload": "application/fhir+json",
    "header": ["Authorization: Bearer <token>"]
  }
}

Ο διακομιστής αξιολογεί τα κριτήρια σε κάθε δημιουργία και ενημέρωση. Όταν ένας πόρος ταιριάζει, τον στέλνει με POST στο τελικό σημείο (ή στέλνει ένα κενό σώμα αν παραλείπεται το payload, ώστε ο πελάτης να ανακτήσει ο ίδιος τον πόρο). Λειτουργούσε, αλλά με τρία προβλήματα: οι διακομιστές δεν μπορούσαν να δηλώσουν ποια κριτήρια υποστήριζαν, οι πελάτες δεν μπορούσαν να διακρίνουν μια χαμένη ειδοποίηση από μια περίοδο ηρεμίας, και "ένας πόρος ταίριαξε με μια αναζήτηση" δεν είναι το ίδιο με "ένα συμβάν συνέβη" (το τέλος ενός Encounter δεν μπορεί να εκφραστεί ως αναζήτηση).

R4B και R5: Συνδρομές βάσει θεμάτων

Στο FHIR R4B και R5, οι συνδρομές βασίζονται σε θέματα. Ο διακομιστής δημοσιεύει πόρους SubscriptionTopic που περιγράφουν συμβάντα (τον πόρο, ένα έναυσμα όπως δημιουργία, ενημέρωση, διαγραφή ή μια συνθήκη FHIRPath, και επιτρεπόμενα φίλτρα). Ένας συνδρομητής δημιουργεί μια Συνδρομή που δείχνει σε ένα θέμα με τιμές filterBy, έναν τύπο καναλιού, ένα τελικό σημείο, μια περίοδο καρδιακού παλμού και μια ρύθμιση περιεχομένου empty, id-only ή full-resource.

Το SubscriptionTopic είναι ένας πόρος που δημοσιεύει ο διακομιστής, περιγράφοντας ένα συμβάν: ποιος πόρος, ποιο έναυσμα (δημιουργία, ενημέρωση, διαγραφή, ή μια συνθήκη FHIRPath όπως %previous.status != 'finished' and %current.status = 'finished'), και ποια φίλτρα μπορεί να χρησιμοποιήσει ένας συνδρομητής. Ο συνδρομητής στη συνέχεια δημιουργεί μια Συνδρομή που δείχνει στο θέμα:

{
  "resourceType": "Subscription",
  "status": "requested",
  "topic": "http://example.org/fhir/SubscriptionTopic/encounter-end",
  "filterBy": [{"resourceType": "Encounter", "filterParameter": "patient", "value": "Patient/123"}],
  "channelType": {"system": "http://terminology.hl7.org/CodeSystem/subscription-channel-type", "code": "rest-hook"},
  "endpoint": "https://clinic.example.org/hooks/encounters",
  "heartbeatPeriod": 60,
  "timeout": 30,
  "contentType": "application/fhir+json",
  "content": "id-only"
}

Το content επιλέγει πόσα μεταφέρονται: empty (μόνο το συμβάν), id-only (αναφορές, ανακτήστε τα υπόλοιπα με τη δική σας εξουσιοδότηση), ή full-resource. Το heartbeatPeriod κάνει τον διακομιστή να στέλνει ένα heartbeat ώστε η σιωπή να είναι ανιχνεύσιμη.

Τι μοιάζει μια ειδοποίηση

Μια ειδοποίηση συνδρομής FHIR είναι ένα Bundle τύπου subscription-notification του οποίου η πρώτη καταχώρηση είναι ένας πόρος SubscriptionStatus που δίνει τη συνδρομή, το θέμα, τον τύπο ειδοποίησης (handshake, heartbeat, event-notification, query-status ή query-event) και έναν μετρητή eventsSinceSubscriptionStart για την ανίχνευση χαμένων συμβάντων. Περαιτέρω καταχωρήσεις μεταφέρουν τους τροποποιημένους πόρους ή τις αναφορές τους, ανάλογα με τη ρύθμιση περιεχομένου.

Κάθε ειδοποίηση είναι ένα Bundle τύπου subscription-notification. Η πρώτη του εγγραφή είναι ένα SubscriptionStatus με την αναφορά συνδρομής, το θέμα, τον τύπο της ειδοποίησης (handshake, heartbeat, event-notification, query-status, query-event) και έναν μετρητή eventsSinceSubscriptionStart· ένα κενό στον μετρητή σημαίνει ένα χαμένο συμβάν, και ο πελάτης μπορεί να καλέσει το $events για να το ανακτήσει. Περαιτέρω εγγραφές φέρουν τους πόρους ή τις αναφορές τους, ανάλογα με το content.

Κανάλια: rest-hook (ο διακομιστής στέλνει με POST στο HTTPS τελικό σημείο σας), websocket (ο πελάτης συνδέεται και λαμβάνει ειδοποιήσεις στο socket, χρήσιμο για εφαρμογές περιηγητή), email (μόνο ειδοποίηση, όχι δεδομένα), message (ένα FHIR messaging Bundle). Το κανάλι R4 sms καταργήθηκε.

Εκτέλεση σε παραγωγή

Η εκτέλεση Συνδρομών FHIR σε παραγωγή απαιτεί αλγοριθμικό χειρισμό με κλειδί τον αριθμό συμβάντος και την έκδοση πόρου, ασφάλεια τελικού σημείου που επαληθεύει τον αποστολέα και δεν αντιμετωπίζει ποτέ το ωφέλιμο φορτίο ως εξουσιοδότηση, ανοχή σε δέσμες με πολλά συμβάντα, απόκριση 2xx στην αρχική ειδοποίηση handshake, και επίγνωση ότι πολλοί διακομιστές εξακολουθούν να περιορίζουν τις συνδρομές σε υπηρεσίες παρασκηνίου αντί για εφαρμογές ασθενών.

  • Ιδιοδυναμία. Οι ειδοποιήσεις μπορεί να διπλασιαστούν μετά από μια επανεκκίνηση· κλειδώστε στον αριθμό συμβάντος και την έκδοση πόρου.
  • Ασφάλεια. Το τελικό σημείο πρέπει να επαληθεύει τον αποστολέα (μια κοινή μυστική κεφαλίδα, αμοιβαίο TLS ή υπογραφές) και δεν πρέπει ποτέ να εμπιστεύεται το payload ως εξουσιοδότηση· ανακτήστε ευαίσθητα δεδομένα από τον διακομιστή με το δικό σας token όταν το content είναι id-only.
  • Αντίθλιψη. Οι διακομιστές ομαδοποιούν συμβάντα και σέβονται το maxCount· οι πελάτες πρέπει να δέχονται bundles με πολλά συμβάντα.
  • Χειραψία. Κατά την ενεργοποίηση, ο διακομιστής στέλνει μια ειδοποίηση handshake και αναμένει ένα 2xx· αλλιώς, η συνδρομή μεταβαίνει σε error.
  • Εύρη. Το SMART on FHIR πρόσθεσε εύρη συνδρομής αργά· πολλοί διακομιστές εξακολουθούν να περιορίζουν τις συνδρομές σε υπηρεσίες παρασκηνίου (διαπιστευτήρια πελάτη) αντί για εφαρμογές ασθενών.

Webhooks που δεν είναι FHIR Συνδρομές

Τα Webhooks που δεν είναι Συνδρομές FHIR είναι απλοί μηχανισμοί πλατφόρμας: καταχωρείτε μια διεύθυνση URL HTTPS και λαμβάνετε υπογεγραμμένα συμβάντα JSON όπως εγγράφηκε πόρος ή άλλαξε συναίνεση, χωρίς κανένα SubscriptionTopic. Η Anpheros προσφέρει τέτοια webhooks. Είναι απλούστερα για μια πλατφόρμα, αλλά δεν είναι ανιχνεύσιμα από έναν γενικό πελάτη FHIR, επομένως οι ενσωματώσεις που πρέπει να λειτουργούν με οποιονδήποτε διακομιστή FHIR χρησιμοποιούν Συνδρομές.

Πολλές πλατφόρμες, συμπεριλαμβανομένου του Anpheros, προσφέρουν απλά webhooks: καταχωρείτε μια διεύθυνση URL HTTPS και λαμβάνετε υπογεγραμμένα JSON συμβάντα όπως εγγράφηκε πόρος, άλλαξε συναίνεση, οριστικοποιήθηκε έγγραφο. Λύνουν την ίδια ανάγκη με λιγότερη τυπικότητα και χωρίς SubscriptionTopic, και δεν είναι FHIR πόροι, οπότε ένας γενικός FHIR πελάτης δεν μπορεί να τους ανακαλύψει. Εάν η ενσωμάτωσή σας πρέπει να λειτουργεί με οποιονδήποτε διακομιστή FHIR, χρησιμοποιήστε Συνδρομές· εάν στοχεύει σε μία πλατφόρμα, τα webhooks της είναι συνήθως απλούστερα. Το Anpheros τεκμηριώνει τα webhooks του στον ιστότοπο προγραμματιστών (σύνδεσμος παρακάτω).

Σχετικές σελίδες

Πηγές

Συχνές ερωτήσεις

Μπορώ να χρησιμοποιήσω συνδρομές τύπου R5 σε διακομιστή R4;

Ναι, εάν ο διακομιστής υλοποιεί τον οδηγό υλοποίησης Subscriptions R5 Backport, ο οποίος κωδικοποιεί το θέμα, τα φίλτρα και τις ρυθμίσεις καναλιού ως επεκτάσεις στον πόρο R4 Subscription και χρησιμοποιεί R4 Bundles για τις ειδοποιήσεις.

Ποια είναι η διαφορά μεταξύ μιας Συνδρομής και της περιοδικής αναζήτησης με _lastUpdated;

Η περιοδική αναζήτηση ρωτά τον διακομιστή επανειλημμένα και δεν χάνει τίποτα, αλλά είναι αργή και σπάταλη· οι Συνδρομές στέλνουν συμβάντα καθώς συμβαίνουν. Οι στιβαρές εφαρμογές συνδυάζουν και τα δύο: εγγράφονται για ταχύτητα, κάνουν περιοδική αναζήτηση ή καλούν το $events για ανάκτηση μετά από διακοπή λειτουργίας.

Η ειδοποίηση περιέχει τα δεδομένα;

Μόνο εάν το content είναι full-resource. Η ασφαλέστερη προεπιλογή είναι id-only: η ειδοποίηση σας λέει ποιος πόρος άλλαξε και τον ανακτάτε με τη δική σας εξουσιοδότηση.

Είναι οι FHIR Συνδρομές ίδιες με τα webhooks;

Μια συνδρομή rest-hook είναι ένα webhook με σχήμα ορισμένο από το FHIR: ανακαλύψιμα θέματα, τυπικά bundles ειδοποιήσεων και παρακολούθηση κατάστασης. Τα απλά webhooks που προσφέρονται από μια πλατφόρμα κάνουν την ίδια δουλειά μόνο για αυτήν την πλατφόρμα.

Anpheros Platform

Δοκιμάστε δωρεάν στο sandbox

Η πρώτη σας κλήση FHIR σε 5 λεπτά. Ένα API HL7 FHIR R4 με τη συγκατάθεση του ασθενούς ενσωματωμένη: δοκιμάστε το στο sandbox, στη συνέχεια συνδέστε τη δική σας εφαρμογή ή σύστημα κλινικής.

Δωρεάν · 30 συνθετικοί ασθενείς · χωρίς κάρτα

Αυτός ο οδηγός παρέχεται για ενημερωτικούς σκοπούς και δεν αντικαθιστά την ιατρική συμβουλή. Για αποφάσεις σχετικά με την υγεία σας, μιλήστε με τον γιατρό σας. Σε επείγουσα περίπτωση, καλέστε τον τοπικό αριθμό έκτακτης ανάγκης (112 στην Ευρώπη).
Συντάχθηκε από
Η ομάδα του Anpheros

Το Anpheros δημιουργεί ένα ιατρικό αρχείο που ελέγχει ο ασθενής και μπορεί να μοιραστεί με οποιαδήποτε κλινική, σε πλατφόρμα HL7 FHIR R4, με έδρα την ΕΕ. Αυτοί οι οδηγοί σάς βοηθούν να κατανοήσετε και να οργανώσετε την υγεία σας· δεν αντικαθιστούν τον γιατρό σας.

Σχετικά με το Anpheros →