Mimari kata · K—03

Bölgesel Sağlık Bilgi Değişimi

Mimari kata · kurgusal bir problem tanımı üzerine tasarım çalışması

Sektör
Sağlık
Teknolojiler
Apache Camel, Apache Kafka, HAPI FHIR, PostgreSQL, Splink, Open Policy Agent, Keycloak, Apache APISIX, immudb, Ceph, Apache Flink, Trino
Akış: EHR beslemeleri Kafka'ya girer, hasta eşleştirmeyle FHIR kaydına dönüşür; her okuma tek rıza politikasından geçer.
Tasarım tek bakışta: 30 dakikalık, tek sayfalık canlı çizim. Diyagram etiketleri İngilizcedir.

Kısaca

Sekiz EHR sisteminden hasta başına tek FHIR kaydı, geri alınabilir hasta eşleştirme, her okumada rıza ve on yıllık denetim izi.

Problem

Bölgesel bir sağlık otoritesi, 4 milyon hasta için 40 hastane ve 600 klinik işletiyor. Sekiz farklı elektronik sağlık kaydı (EHR) sistemi HL7 v2 mesajı, FHIR ya da yalnızca CSV ve PDF dosyası üretiyor. Bir hastanedeki klinisyen başka hastanenin geçmişini göremiyor. Yeni bir yasa ortak hasta özeti ve vatandaşın yönettiği rıza şartını koşuyor. Hastaların yaklaşık %15’inin ulusal kimliği yok. Hacim günde yaklaşık 20 milyon mesaj ve hiçbir mesaj kaybolmamalı.

Yaklaşım

Tasarımı iki kısıt belirliyor: sekiz heterojen kaynak ve toplu okumalar dahil her okumada geçerli olması gereken rıza. Tasarım ham mesajı değiştirmeden saklıyor, tek bir kanonik FHIR R4 modeline dönüştürüyor, kimlikleri geri alınabilir biçimde bağlıyor ve rızayı okuma anında politika olarak uyguluyor. Her EHR için bir Apache Camel adaptörü ham mesajı Kafka’ya yazıyor. Adaptör, göndericiye yalnızca Kafka yazımı onayladıktan sonra yanıt veriyor.

Mimari

  • Alım: HL7 v2, FHIR ve dosya için Camel adaptörleri. Kafka anahtarı kaynak ve kayıt numarası; böylece hasta başına sıra korunuyor.
  • Kanonik depo: dönüşüm servisi FHIR profillerine eşliyor ve idempotent işlemlerle PostgreSQL üzerindeki HAPI FHIR’a yazıyor. Ham bayt Object Lock’lu Ceph’te kalıyor.
  • Kimlik: Splink olasılıksal eşleştirmesi bir bağlantı tablosunu besliyor; birleştirme geri alınabilen bir satır.
  • Erişim: SMART on FHIR için Keycloak, tek kapı olarak APISIX, rıza için Open Policy Agent.
  • Denetim ve araştırma: her okuma immudb’de bir denetim olayı oluyor. Bir Flink işi veriyi üniversite için kimliksizleştiriyor.
Mimari: EHR akışları Kafka'ya girer, hasta eşleştirmesiyle FHIR'a dönüşür, her okuma rızadan geçer.
Çözüm genel bakışı: sekiz EHR sağlayıcısı, Camel adaptörleri, Kafka, FHIR dönüşümü, EMPI, HAPI FHIR deposu, rıza denetimli API ve denetim defteri. Diyagram etiketleri İngilizcedir.Tam boyutta aç (yeni sekmede açılır)

Neden bu bileşenler

İhtiyaç Seçim Neden
Kaynak adaptörleri Apache Camel; HL7, FHIR ve FTP bileşenleri Her vendor için ayrı, durumsuz bir adaptör; MLLP üzerinden HL7 v2, FHIR ve dosya bileşenleri hazır. Vendor tuhaflıkları adaptörde kalıyor. Mirth Connect 2024’te kapalı lisansa geçti.
Olay omurgası Apache Kafka (Strimzi) Kalıcı, tekrar oynatılabilir, kaynak artı kayıt numarasında sıralı bir log; hasta başına sıra korunuyor. Onay yalnızca commit sonrası dönüyor. Redpanda, Business Source License nedeniyle elendi.
Şema ve profil sözleşmesi Apicurio Registry ve bir FHIR Implementation Guide Ham zarf şemaları ve bölgesel FHIR profilleri sürümleniyor; uyumsuz değişiklik CI’da kırılıyor. Confluent Schema Registry, Community License nedeniyle elendi.
Kanonik klinik depo HAPI FHIR JPA Server, PostgreSQL üzerinde FHIR R4 referans uygulaması; arama, sürümleme ve interceptor yapısı hazır. Tüketiciler vendor formatını hiç görmüyor. IBM FHIR Server artık bakımda değil; Smile CDR ticari destek sunuyor.
Hasta eşleştirme Splink, kendi eşleştirme servisi ve PostgreSQL bağlantı tablosu Ulusal kimliği olmayan %15 için olasılıksal eşleştirme şart. Birleştirme, kanıtıyla birlikte bir satır ve geri alınabiliyor. IBM Initiate, Verato gibi ticari ana hasta indeksleri kapalı.
Rıza politikası Open Policy Agent (Rego) Rıza, kimlik, kuruluş ve kullanım amacı tek politika paketinde; API, toplu dışa aktarım ve araştırma aynı paketi çalıştırıyor. Veri katmanına gömülü rıza tabloları toplu okumada veri kaçırır.
Kimlik ve yetki Keycloak; SMART on FHIR ve OpenID Connect Hastane kimlik federasyonu, ulusal e-Kimlik aracılığı, SMART kapsamları ve kullanım amacı bilgisi. Apache 2.0 ve Red Hat desteği var. Alternatif Ory Hydra.
API geçidi Apache APISIX ve OPA eklentisi Token doğrulama, politika çağrısı, hız sınırı ve denetim başlıkları. FHIR sunucusuna yalnızca geçitten erişiliyor. Kong OSS açık sürümden özellik çıkardığı için APISIX.
Denetim defteri immudb Kimin neyi neden gördüğünü kriptografik olarak doğrulanabilir, ekle-sil-yok biçimde tutuyor; on yıl saklanıyor ve hasta uygulamasında görünüyor. Amazon QLDB kapalı ve tek buluta bağlı olduğu için elendi.
Önbellek Valkey Rıza verisi ve önceden hesaplanan hasta özeti için milisaniyenin altında okuma. Önbellek anahtarı rıza sürümünü içeriyor. Redis 7.x lisans değişikliği nedeniyle Valkey.
Ham arşiv ve dokümanlar Ceph RGW, S3 Object Lock ile Ham HL7 ve FHIR mesajları ile PDF’ler on yıl değiştirilemez nesne olarak duruyor; tekrar oynatmanın kaynağı da bu. MinIO topluluk sürümü daraldığı için Ceph.
Araştırma hattı Apache Flink, Apache Iceberg, Trino Akışta de-identifikasyon, proje başına bir Iceberg tablosu; üniversite Trino ile sorguluyor. Ham veri üniversiteye hiç gitmiyor.
Sır ve anahtar yönetimi OpenBao Yeniden tanımlama anahtarına yalnızca güvenilir üçüncü tarafın politikasıyla erişiliyor. PKI ve veritabanı sırları da burada. HashiCorp Vault, Business Source License nedeniyle elendi.
Gözlemlenebilirlik OpenTelemetry, Prometheus, Grafana, Loki, Tempo Vendor başına akış sağlığı, uçtan uca tazelik, eşleştirme oranları, API p95 ve denetim yazma gecikmesi tek panoda.

Kararlar ve ödünleşimler

  • Rıza FHIR sunucusunun içinde değil, OPA’da. Tek politika paketi geçitte, FHIR arama interceptor’ında ve Flink araştırma işinde çalışmalı. HAPI’ye gömülü yetki araştırma hattı için yeniden yazılırdı. OPA yalnızca izin ya da ret değil, filtre döndürüyor; toplu dışa aktarım kayıt kayıt süzülüyor. Bedeli, işletilecek bir bileşen daha. Rıza yalnızca API’de uygulansaydı HAPI’nin kendi interceptor’ı yeterdi.
  • Eşleştirme yanlış negatife yatkın. 0,99 ve üstü skor otomatik bağlanıyor. 0,85 ile 0,99 arası kayıtlar bir insanı bekliyor. Yanlış birleşme başka bir hastanın alerjisini özete taşır. Yanlış negatif eksik geçmiş demek; bu zaten bugünkü durum. Bedeli bir inceleme kuyruğu. Gerçek zamanlı ulusal kimlik sorgusu olasılıksal payı küçültürdü.
  • Hasta özeti yazma anında önceden hesaplanıyor. Tek okuma p95’i 500 ms’nin altında tutuyor; soğuk yol sekiz FHIR araması ister. Bedeli, her değişimde yeniden hesaplama ve önbellek geçersiz kılma. Rıza değişince önbellekteki özet saniyeler içinde siliniyor. Anahtar rıza sürümünü taşıdığı için eski sürüm hiç isabet etmiyor.
  • Acil erişim engellenmiyor. “Camı kır” erişimi gerekçe, 48 saat içinde gizlilik görevlisi incelemesi ve haftalık gözden geçirme istiyor; hasta da uygulamada görüyor. Engellemek hasta güvenliğini bozar. Kaydetmemek güveni bozar. Bedeli, denetimin sonradan yapılması.
  • Ham baytı sakla, tekrar oynat; hastaneden yeniden isteme. Adaptör onayı ancak Kafka commit’inden sonra gönderiyor. Ham mesaj Kafka’da 30 gün, Ceph’te on yıl duruyor. Dönüşümde hata çıkarsa adaptörü düzeltip tekrar oynatıyorum. Yazımlar kaynak tanımlayıcısıyla koşullu güncelleme olduğu için tekrar güvenli. Bedeli depolama.
  • Aktif-aktif değil, sıcak yedek. Aktif-aktif PostgreSQL çoklu master yazımı ister ve FHIR sürümleme mantığını zorlar. Akış replikasyonlu sıcak yedek, iki saatlik kurtarma hedefini karşılıyor ve çok daha basit. Bedeli küçük bir pencere: onaylanmış ama henüz kopyalanmamış mesajlar, mesaj kimliği aralığıyla vendor’dan yeniden isteniyor.
Akış: adaptörler Kafka commit'inden sonra onaylar, hastalar sıralı kalır, eşleşmeler geri alınabilir, her okuma rızadan geçer.
Yazma yolu dayanıklı ve yeniden oynatılabilir bir zincir; okuma yolu bir politika kararı ve ardından önceden hesaplanmış özetin tek bir FHIR okuması. Diyagram etiketleri İngilizcedir.Tam boyutta aç (yeni sekmede açılır)

Yeniden ele alacaklarım

  • Vendor teslim davranışı. Beş HL7 v2 vendor’ı gerçekten onayı bekleyip yeniden deniyor mu, yoksa gönderip unutuyor mu? Kayıpsızlık garantisi ve mesaj kimliğiyle yeniden istek buna bağlı.
  • Ulusal kimlik kayıt servisi. Gerçek zamanlı sorgu var mı, hangi hizmet seviyesiyle? Yoksa eşleştirme tamamen olasılıksal kalır.
  • Hassas veri kategorileri. Yasa ruh sağlığı, cinsel sağlık ve genetik dışında hangi kategorileri tanımlıyor? FHIR güvenlik etiketlerine eşleme klinik onay ister.
  • Rıza varsayılanı. Opt-out ya da opt-in mimariyi değiştirmez; ama ilk gün davranışını ve iletişimi belirler.

Sonuç notları (tasarım varsayımları, ölçüm değil)

Bu bir tasarım çalışmasıdır, çalışan bir sistem değildir. Çıktı: dört sayfalık diyagram seti, tek sayfalık beyaz tahta sürümü ve 15 sayfalık Türkçe PDF. Saniyede ortalama yaklaşık 230 mesaj gibi kapasite rakamları, kata metnindeki sayılardan yapılmış aritmetiktir; ölçüm değildir.

Kaynaklar

  • Mimari PDF (Türkçe, 15 sayfa).
  • draw.io diyagramları (İngilizce etiketler): dört sayfalık set ve 30 dakikalık tek sayfa sürüm.

Bu konudaki gerçek projeler

  1. P—01

    Tamamlandı

    Öne çıkan

    Kurumsal Veri Ambarının Google BigQuery'ye Taşınması

    80 TB'lık ambar SQL Server ve 15 düğümlü Cloudera kümesinden BigQuery'ye taşındı: yıllık $550K tasarruf, %75 düşük altyapı maliyeti, 7 kat hızlı iş akışları.

    • Veri platformu
    • Veri kalitesi
    • Analitiğe hazır veri
    • Orkestrasyon
    • Bulut

    Rol

    Tasarım ve liderlik · Kıdemli Veri Mühendisliği ve Veri Mimarisi Grup Yöneticisi

  2. P—08

    Tamamlandı

    Veri Yönetişimi, Metadata ve Ana Veri Yönetimi (MDM)

    100+ kaynak sistem genelinde veri yönetişimi, metadata yönetimi ve ana veri yönetimi (MDM); veri kataloğu ve soy ağacı (lineage) araçlarıyla.

    • Veri yönetişimi
    • Veri izlenebilirliği
    • Veri kalitesi

    Rol

    Uygulama · Büyük Veri Yönetimi ve Veri Mimarisi Yöneticisi

Güvenilir veri: projeler, katalar ve yayınlar

Katalar hakkında

Benzer bir tasarım problemi için yazın.