FHIR

Vysvetlenie FHIR Subscription: témy, kanály a notifikácie v R4, R4B a R5

FHIR Subscription požiada server, aby vás kontaktoval, keď sa niečo zmení. Ako funguje model R4 založený na kritériách, prečo R4B a R5 prešli na SubscriptionTopic, čo prinášajú kanály rest-hook, websocket a message, čo obsahuje notifikačný Bundle a ako Subscriptions Backport prináša nový model do R4.

od Zverejnené 6 min čítania

Krátka odpoveď: Subscription (predplatné) informuje FHIR server o tom, aby upozornil tento koncový bod, keď sa zdroje zodpovedajúce týmto podmienkam zmenia. Vo verzii FHIR R4 sú podmienky definované ako vyhľadávací reťazec (criteria: "Observation?patient=123&code=85354-9") a server posiela zodpovedajúci zdroj prostredníctvom REST hooku, websocketu, e-mailu alebo FHIR správy. Vo verziách R4B a R5 bol model prestavaný okolo SubscriptionTopic: server publikuje udalosti, o ktorých môže informovať, klient sa prihlási na odber témy s filtrami a upozornenia prichádzajú ako Bundle typu subscription-notification, ktorý vždy začína zdrojom SubscriptionStatus. Implementačný sprievodca Subscriptions R5 Backport umožňuje R4 serverom ponúkať nový model.

R4: predplatné založené na kritériách

Vo FHIR R4 je predplatné založené na kritériách: klient vytvorí zdroj Subscription, ktorého kritériom je vyhľadávací reťazec, napríklad Observation?code=…&patient=…, a ktorého kanál je rest-hook, websocket, email, sms alebo message. Server vyhodnotí kritériá pri každom vytvorení a aktualizácii a odošle každý zodpovedajúci zdroj, alebo prázdne upozornenie, na koncový bod.

{
  "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>"]
  }
}

Server vyhodnocuje kritériá pri každom vytvorení a aktualizácii. Keď zdroj zodpovedá, odošle ho (POST) na koncový bod (alebo odošle prázdne telo, ak je payload vynechaný, takže klient si zdroj vyžiada sám). Fungovalo to, ale s tromi problémami: servery nevedeli povedať, ktoré kritériá podporujú, klienti nedokázali rozlíšiť zmeškané upozornenie od pokojného obdobia a „zdroj zodpovedal vyhľadávaniu“ nie je to isté ako „nastala udalosť“ (ukončenie stretnutia – Encounter – sa nedá vyjadriť ako vyhľadávanie).

R4B a R5: predplatné založené na témach

Vo FHIR R4B a R5 sú predplatné založené na témach. Server publikuje zdroje SubscriptionTopic, ktoré popisujú udalosti (zdroj, spúšťač ako vytvorenie, aktualizácia, odstránenie alebo podmienka FHIRPath a povolené filtre). Odberateľ vytvorí predplatné (Subscription) odkazujúce na tému s hodnotami filterBy, typom kanála, koncovým bodom, periódou srdcového tepu a nastavením obsahu na empty, id-only alebo full-resource.

SubscriptionTopic je zdroj, ktorý server publikuje a opisuje udalosť: ktorý zdroj, ktorý spúšťač (vytvorenie, aktualizácia, odstránenie alebo podmienka FHIRPath, ako napríklad %previous.status != 'finished' and %current.status = 'finished') a aké filtre môže odberateľ použiť. Odberateľ potom vytvorí predplatné (Subscription), ktoré odkazuje na tému:

{
  "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 určuje, koľko dát sa prenesie: empty (iba udalosť), id-only (referencie, zvyšok si vyžiadajte s vlastným oprávnením) alebo full-resource. heartbeatPeriod umožňuje serveru posielať „srdcový tep“, takže ticho je detekovateľné.

Ako vyzerá upozornenie

Upozornenie na predplatné FHIR je Bundle typu subscription-notification, ktorého prvým záznamom je zdroj SubscriptionStatus poskytujúci predplatné, tému, typ upozornenia (handshake, heartbeat, event-notification, query-status alebo query-event) a čítač eventsSinceSubscriptionStart na detekciu zmeškaných udalostí. Ďalšie záznamy nesú zmenené zdroje alebo ich referencie, v závislosti od nastavenia obsahu.

Každé upozornenie je Bundle typu subscription-notification. Jeho prvý záznam je SubscriptionStatus s referenciou na predplatné, témou, typom upozornenia (handshake, heartbeat, event-notification, query-status, query-event) a čítačom eventsSinceSubscriptionStart; medzera v čítači znamená zmeškanú udalosť a klient môže zavolať $events na jej obnovenie. Ďalšie záznamy obsahujú zdroje alebo ich referencie, v závislosti od content.

Kanály: rest-hook (server posiela POST na váš HTTPS koncový bod), websocket (klient sa pripojí a prijíma upozornenia na sockete, užitočné pre prehliadačové aplikácie), email (iba upozornenie, nie dáta), message (FHIR správa typu Bundle). Kanál R4 sms bol zrušený.

Prevádzka v produkcii

Prevádzka predplatných FHIR v produkcii vyžaduje idempotentné spracovanie kľúčované podľa čísla udalosti a verzie zdroja, zabezpečenie koncového bodu, ktoré overuje odosielateľa a nikdy nepovažuje dátovú časť za autorizáciu, toleranciu k dávkovým zväzkom s mnohými udalosťami, odpoveď 2xx na úvodné upozornenie na nadviazanie spojenia a uvedomenie si, že mnohé servery stále obmedzujú predplatné na backendové služby namiesto klientskych aplikácií.

  • Idempotencia. Upozornenia sa môžu po opakovanom pokuse duplikovať; kľúčom je číslo udalosti a verzia zdroja.
  • Bezpečnosť. Koncový bod musí overiť odosielateľa (spoločné tajné hlavičky, vzájomné TLS alebo podpisy) a nikdy nesmie dôverovať obsahu ako autorizácii; citlivé údaje si vyžiadajte späť zo servera s vlastným tokenom, ak je content nastavený na id-only.
  • Spätný tlak (Backpressure). Servery zoskupujú udalosti a rešpektujú maxCount; klienti musia akceptovať balíky s mnohými udalosťami.
  • Handshake. Po aktivácii server pošle upozornenie handshake a očakáva odpoveď 2xx; inak predplatné prejde do stavu error.
  • Rozsahy (Scopes). SMART on FHIR pomaly pridával rozsahy predplatného; mnohé servery stále obmedzujú predplatné na backendové služby (klientove poverenia), namiesto klientskych aplikácií.

Webhooky, ktoré nie sú FHIR predplatnými

Webhooky, ktoré nie sú predplatnými FHIR, sú bežné mechanizmy platformy: zaregistrujete HTTPS URL a prijímate podpísané JSON udalosti, ako napríklad zapísaný zdroj alebo zmenený súhlas, bez akéhokoľvek SubscriptionTopic. Anpheros ponúka takéto webhooky. Sú jednoduchšie pre jednu platformu, ale nie sú objaviteľné generickým klientom FHIR, takže integrácie, ktoré musia fungovať s akýmkoľvek serverom FHIR, používajú predplatné.

Mnohé platformy, vrátane Anpheros, ponúkajú jednoduché webhooky: zaregistrujete HTTPS URL a dostávate podpísané JSON udalosti, ako napríklad zdroj bol zapísaný, súhlas bol zmenený, dokument bol finalizovaný. Riešia rovnakú potrebu s menším množstvom obradov a bez SubscriptionTopic, a nie sú to FHIR zdroje, takže ich všeobecný FHIR klient nedokáže objaviť. Ak vaša integrácia musí fungovať s akýmkoľvek FHIR serverom, použite predplatné (Subscriptions); ak je zameraná na jednu platformu, jej webhooky sú zvyčajne jednoduchšie. Anpheros dokumentuje svoje webhooky na vývojárskej stránke (odkaz nižšie).

Súvisiace stránky

Zdroje

Časté otázky

Môžem použiť predplatné v štýle R5 na R4 serveri?

Áno, ak server implementuje implementačný sprievodca Subscriptions R5 Backport, ktorý kóduje tému, filtre a nastavenia kanála ako rozšírenia na zdroji R4 Subscription a používa R4 Bundles pre upozornenia.

Aký je rozdiel medzi predplatným a opakovaným dopytovaním s _lastUpdated?

Opakované dopytovanie sa pýta servera opakovane a nič nezmešká, ale je pomalé a neefektívne; predplatné posiela udalosti, keď sa vyskytnú. Robustné klienti kombinujú oboje: prihlásia sa na odber pre rýchlosť, opakované dopytovanie alebo volanie $events na obnovenie po výpadku.

Obsahuje upozornenie dáta?

Iba ak je content nastavený na full-resource. Bezpečnejším predvoleným nastavením je id-only: upozornenie vám povie, ktorý zdroj sa zmenil, a vy si ho vyžiadate s vlastným oprávnením.

Sú FHIR predplatné rovnaké ako webhooky?

Predplatné typu rest-hook je webhook s tvarom definovaným FHIR: objaviteľné témy, štandardné balíky upozornení a sledovanie stavu. Jednoduché webhooky ponúkané platformou robia tú istú prácu iba pre danú platformu.

Anpheros Platform

Vyskúšajte zadarmo v sandboxe

Prvé volanie FHIR za 5 minút. API podľa štandardu HL7 FHIR R4 s integrovaným súhlasom pacienta: vyskúšajte si ho v sandboxe a potom pripojte svoju vlastnú aplikáciu alebo klinický systém.

Zadarmo · 30 syntetických pacientov · bez karty

Tento návod slúži na informačné účely a nenahrádza lekársku radu. Pri rozhodovaní o svojom zdraví sa poraďte so svojím lekárom. V núdzi volajte miestne tiesňové číslo (v Európe 112).
Napísal
Tím Anpheros

Anpheros vyvíja zdravotný záznam, ktorý pacient ovláda a môže zdieľať s akoukoľvek klinikou, na platforme HL7 FHIR R4, so sídlom v EÚ. Tieto návody vám pomôžu pochopiť a usporiadať si svoje zdravie; nenahrádzajú vášho lekára.

O Anpherose →