FHIR

FHIR Abonelikleri: R4, R4B ve R5'te konular, kanallar ve bildirimler

Bir FHIR Aboneliği, bir şeyler değiştiğinde sizi aramasını bir sunucudan ister. R4'ün kritere dayalı modeli nasıl çalışır, R4B ve R5 neden SubscriptionTopic'e geçti, rest-hook, websocket ve mesaj kanalları ne sunar, bir bildirim Bundle'ı ne içerir ve Subscriptions Backport yeni modeli R4'e nasıl getirir.

yazan Yayınlandı 5 dk okuma

Kısa cevap: Bir Subscription, FHIR sunucusuna bu koşullara uyan kaynaklar değiştiğinde bu uç noktayı bilgilendir der. FHIR R4'te koşullar bir arama dizesidir (criteria: "Observation?patient=123&code=85354-9") ve sunucu eşleşen kaynağı bir REST hook'una, websocket'e, e-postaya veya bir FHIR mesajına gönderir. R4B ve R5'te model SubscriptionTopic etrafında yeniden oluşturuldu: sunucu bildirebileceği olayları yayınlar, istemci filtrelerle bir konuya abone olur ve bildirimler her zaman bir SubscriptionStatus kaynağıyla başlayan subscription-notification türünde bir Bundle olarak gelir. Subscriptions R5 Backport uygulama kılavuzu, R4 sunucularının yeni modeli sunmasına olanak tanır.

R4: Kriter tabanlı abonelikler

FHIR R4'te bir Abonelik (Subscription) kritere dayalıdır: istemci, Observation?code=…&patient=… gibi bir arama dizesi kriterine ve rest-hook, websocket, email, sms veya message kanalına sahip bir Abonelik kaynağı oluşturur. Sunucu, her oluşturma ve güncelleme işlemine karşı kriterleri değerlendirir ve eşleşen her kaynağı veya boş bir bildirimi uç noktaya gönderir.

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

Sunucu, kriterleri her oluşturma ve güncelleme için değerlendirir. Bir kaynak eşleştiğinde, onu uç noktaya POST eder (veya payload atlanırsa boş bir gövde POST eder, böylece istemci kaynağı kendisi çeker). İşe yaradı, ancak üç sorun vardı: sunucular hangi kriterleri desteklediklerini söyleyemezlerdi, istemciler kaçırılan bir bildirimi sessiz bir dönemden ayırt edemezlerdi ve "bir kaynak bir aramayı eşleştirdi" ile "bir olay meydana geldi" aynı şey değildir (bir Encounter'ın sonlanması bir arama olarak ifade edilemez).

R4B ve R5: Konu tabanlı abonelikler

FHIR R4B ve R5'te abonelikler konuya dayalıdır. Sunucu, olayları (kaynak, tetikleyici -örneğin oluşturma, güncelleme, silme veya bir FHIRPath koşulu- ve izin verilen filtreler) açıklayan Abonelik Konusu (SubscriptionTopic) kaynakları yayınlar. Bir abone, filtre değerleri, kanal türü, uç nokta, kalp atışı süresi ve boş, yalnızca kimlik veya tam kaynak içerik ayarı ile bir konuya işaret eden bir Abonelik oluşturur.

SubscriptionTopic, sunucunun yayınladığı bir kaynaktır ve bir olayı tanımlar: hangi kaynak, hangi tetikleyici (oluşturma, güncelleme, silme veya %previous.status != 'finished' and %current.status = 'finished' gibi bir FHIRPath koşulu) ve bir abonenin kullanabileceği filtreler. Abone daha sonra konuya işaret eden bir Subscription oluşturur:

{
  "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, ne kadarının gönderileceğini seçer: empty (sadece olay), id-only (referanslar, geri kalanını kendi yetkilendirmeyle çekin) veya full-resource. heartbeatPeriod, sunucunun sessizliğin tespit edilebilir olması için bir kalp atışı göndermesini sağlar.

Bir bildirim neye benzer

Bir FHIR abonelik bildirimi, subscription-notification türünde bir Paket'tir (Bundle). Bu paketin ilk girdisi, aboneliği, konuyu, bildirim türünü (el sıkışma, kalp atışı, olay bildirimi, sorgu durumu veya sorgu olayı) ve kaçırılan olayları tespit etmek için bir eventsSinceSubscriptionStart sayacını veren bir Abonelik Durumu (SubscriptionStatus) kaynağıdır. Diğer girdiler, içerik ayarlarına bağlı olarak değiştirilen kaynakları veya bunların başvurularını taşır.

Her bildirim subscription-notification türünde bir Bundle'dır. İlk girdisi, abonelik referansını, konuyu, bildirim türünü (handshake, heartbeat, event-notification, query-status, query-event) ve bir eventsSinceSubscriptionStart sayacını içeren bir SubscriptionStatus'tur; sayacındaki bir boşluk kaçırılan bir olayı ifade eder ve istemci bunu kurtarmak için $events çağırabilir. Daha sonraki girdiler, content'e bağlı olarak kaynakları veya bunların referanslarını taşır.

Kanallar: rest-hook (sunucu HTTPS uç noktanıza POST yapar), websocket (istemci bağlanır ve sokette bildirimler alır, tarayıcı uygulamaları için kullanışlıdır), email (yalnızca bildirim, veri değil), message (bir FHIR mesajlaşma Bundle'ı). R4 sms kanalı kaldırıldı.

Üretimde çalıştırma

FHIR Aboneliklerini üretimde çalıştırmak; olay numarası ve kaynak sürümüne göre anahtarlanmış, göndericiyi doğrulayan ve yükü asla yetkilendirme olarak kabul etmeyen uç nokta güvenliği, birçok olayı içeren gruplanmış paketlere karşı tolerans, ilk el sıkışma bildirime 2xx yanıtı ve birçok sunucunun hala abonelikleri hasta uygulamaları yerine arka uç hizmetleriyle sınırladığı gerçeğinin farkında olmayı gerektirir.

  • Idempotency. Bildirimler bir denemeden sonra çoğaltılabilir; olay numarası ve kaynak sürümüne göre anahtar kullanın.
  • Güvenlik. Uç nokta göndereni doğrulamalıdır (paylaşılan bir gizli anahtar başlığı, karşılıklı TLS veya imzalar) ve hiçbir zaman yetkilendirme olarak yüküne güvenmemelidir; content id-only ise hassas verileri kendi belirtecinizle sunucudan geri alın.
  • Backpressure. Sunucular olayları toplu olarak işler ve maxCount'a uyar; istemciler birçok olay içeren paketleri kabul etmelidir.
  • Handshake. Aktivasyon üzerine sunucu bir handshake bildirimi gönderir ve 2xx bekler; aksi takdirde abonelik error durumuna geçer.
  • Scopes. SMART on FHIR, abonelik kapsamlarını yavaş yavaş ekledi; birçok sunucu hala abonelikleri hasta uygulamaları yerine arka uç hizmetleriyle (istemci kimlik bilgileri) sınırlar.

FHIR Abonelikleri Olmayan Webhook'lar

FHIR Abonelikleri Olmayan Webhook'lar, basit platform mekanizmalarıdır: bir HTTPS URL'si kaydeder ve herhangi bir Abonelik Konusu olmadan, kaynak yazılması veya onay değişikliği gibi imzalı JSON olayları alırsınız. Anpheros bu tür webhook'lar sunar. Tek bir platform için daha basittirler ancak genel bir FHIR istemcisi tarafından keşfedilemezler, bu nedenle herhangi bir FHIR sunucusuna karşı çalışması gereken entegrasyonlar Abonelikleri kullanır.

Anpheros dahil birçok platform, düz webhook'lar sunar: bir HTTPS URL'si kaydeder ve kaynak yazıldı, rıza değişti, belge tamamlandı gibi imzalı JSON olayları alırsınız. Aynı ihtiyacı daha az törenle ve SubscriptionTopic olmadan çözerler ve FHIR kaynakları olmadıkları için genel bir FHIR istemcisi tarafından keşfedilemezler. Entegrasyonunuz herhangi bir FHIR sunucusuna karşı çalışmak zorundaysa, Abonelikleri kullanın; tek bir platformu hedefliyorsa, webhook'ları genellikle daha basittir. Anpheros, webhook'larını geliştirici sitesinde (aşağıdaki bağlantı) belgeler.

İlgili sayfalar

Kaynaklar

Sık sorulan sorular

R5 tarzı abonelikleri R4 sunucusunda kullanabilir miyim?

Evet, sunucu Subscriptions R5 Backport uygulama kılavuzunu uyguluyorsa, konu, filtreler ve kanal ayarlarını R4 Subscription kaynağındaki uzantılar olarak kodlar ve bildirimler için R4 Bundle'ları kullanır.

Subscription ile _lastUpdated ile yoklama arasındaki fark nedir?

Yoklama, sunucuya tekrar tekrar sorar ve hiçbir şeyi kaçırmaz ancak yavaştır ve israftır; Abonelikler olaylar gerçekleştiğinde bunları gönderir. Sağlam istemciler her ikisini birleştirir: hız için abone olun, kesinti sonrası kurtarmak için yoklama yapın veya $events çağırın.

Bildirim veriyi içeriyor mu?

Yalnızca content full-resource ise. Daha güvenli varsayılan id-only'dir: bildirim size hangi kaynağın değiştiğini söyler ve siz onu kendi yetkilendirmeyle çekersiniz.

FHIR Abonelikleri webhook'larla aynı mı?

Bir rest-hook aboneliği, FHIR tanımlı bir şekle sahip bir webhook'tur: keşfedilebilir konular, standart bildirim paketleri ve durum takibi. Bir platform tarafından sunulan düz webhook'lar yalnızca o platform için aynı işi yapar.

Anpheros Platform

Sandbox'ta ücretsiz deneyin

İlk FHIR çağrınız 5 dakikada. Hasta izniyle yerleşik HL7 FHIR R4 API: sandbox'ta deneyin, ardından kendi uygulamanızı veya klinik sisteminizi bağlayın.

Ücretsiz · 30 sentetik hasta · kart gerekmez

Bu rehber bilgilendirme amaçlıdır ve tıbbi muayenenin yerini tutmaz. Sağlığınızla ilgili kararlar için doktorunuzla konuşun. Acil bir durumda yerel acil numarasını arayın (Avrupa’da 112).
Yazan
Anpheros Ekibi

Anpheros, hasta kontrolünde olan ve herhangi bir klinik ile paylaşılabilecek, AB merkezli bir HL7 FHIR R4 platformu üzerinde tıbbi kayıtlar oluşturur. Bu rehberler, sağlığınızı anlamanıza ve düzenlemenize yardımcı olur; doktorunuzun yerini tutmaz.

Anpheros Hakkında →