Skip to content

Instantly share code, notes, and snippets.

@erkantaylan
Created February 13, 2026 13:41
Show Gist options
  • Select an option

  • Save erkantaylan/d4dced60dfbb09159e30fe896f44dec9 to your computer and use it in GitHub Desktop.

Select an option

Save erkantaylan/d4dced60dfbb09159e30fe896f44dec9 to your computer and use it in GitHub Desktop.
İlaç Etkileşimi Modülü Tasarım Dokümanı

İlaç Etkileşimi Modülü (Tasarım Dokümanı)

İlaçTarif masaüstü uygulamasına eklenecek İlaç Etkileşimi modülünün teknik tasarımı. Bu modül, bir reçetedeki birden fazla ilacın etken maddelerini analiz ederek olası etkileşimleri tespit edecek ve eczacıyı uyaracaktır.

Bu modül henüz geliştirilmemiştir. Aşağıdaki tasarım, mevcut İlaçTarif mimarisine (Prism modüler MVVM) uyumlu şekilde hazırlanmıştır.


Problem Tanımı

Bir reçetede birden fazla ilaç bulunduğunda, bu ilaçların etken maddeleri birbirleriyle etkileşime girebilir. Etkileşim türleri:

  • Kontrendikasyon — İlaçlar birlikte kullanılmamalı (ciddi risk)
  • Majör Etkileşim — Yakın takip gerektirir, alternatif düşünülmeli
  • Minör Etkileşim — Bilgilendirme amaçlı, genelde sorun oluşturmaz
  • Sinerjik Etki — İlaçlar birbirinin etkisini artırabilir

Eczacının bu etkileşimleri reçete hazırlanırken görmesi, hasta güvenliği açısından kritiktir.


Genel Mimari

Sistem Akışı

sequenceDiagram
    participant E as 💊 İlaçTarif (Masaüstü)
    participant S as 🌐 Mercury API

    Note over E: Reçete taranır / barkodlar okunur
    E->>E: Reçetedeki tüm barkodları topla
    E->>S: POST /api/v1/drug-interaction/check
    S->>S: Barkodlardan etken maddeleri çöz
    S->>S: Etken madde çiftlerini etkileşim veritabanında ara
    S->>E: Etkileşim sonuçları (varsa)

    alt Etkileşim bulundu
        E->>E: Uyarı panelini göster
        E->>E: Ciddiyet seviyesine göre renklendir
    else Etkileşim yok
        E->>E: Panel gizli kalır
    end
Loading

Modül Konumu

graph TD
    BC["🔍 BarcodeCapturerModule<br/>(Barkod taranır)"] --> RX["📋 PrescriptionModule<br/>(Reçete oluşturulur)"]
    BC --> CS["🛒 CrossSaleModule<br/>(Çapraz satış önerileri)"]
    BC --> DI["⚠️ DrugInteractionModule<br/>(İlaç etkileşimi kontrolü)"]

    RX -.->|"Prism Event"| DI
    DI -.->|"Uyarı göster"| RX

    style DI fill:#e74c3c,stroke:#333,color:#fff
    style BC fill:#3498db,stroke:#333,color:#fff
    style RX fill:#27ae60,stroke:#333,color:#fff
    style CS fill:#f5a623,stroke:#333,color:#000
Loading

Modül, mevcut CrossSaleModule ile aynı tetikleme mekanizmasını kullanacaktır: barkod tarandığında Prism EventAggregator üzerinden event yayınlanacak, DrugInteractionModule bu event'i dinleyerek API'ye istek atacaktır.


Modül Yapısı

CrossSaleModule referans alınarak aşağıdaki yapı oluşturulacaktır:

Modules.DrugInteractionModule/
├── DrugInteractionModule.cs              # Prism modül bootstrap
├── Events/
│   └── DrugInteractionEvents.cs          # Modül event tanımları
├── Models/
│   ├── InteractionResult.cs              # Etkileşim sonuç modeli
│   ├── InteractionSeverity.cs            # Ciddiyet seviyesi enum
│   └── ActiveIngredientPair.cs           # Etken madde çifti
├── Requests/
│   ├── DrugInteractionRequest.cs         # API istek sınıfı
│   └── Models/
│       ├── InteractionCheckRequest.cs    # İstek DTO
│       └── InteractionCheckResponse.cs   # Yanıt DTO
├── ViewModels/
│   └── DrugInteractionViewModel.cs       # Ana ViewModel
├── Views/
│   ├── DrugInteractionPanelView.xaml     # Uyarı paneli
│   └── DrugInteractionPanelView.xaml.cs
└── Dictionaries/
    └── DrugInteractionStyles.xaml        # Stil tanımları

API Tasarımı

Endpoint'ler

Metod Endpoint Açıklama
POST /api/v1/drug-interaction/check Barkod listesinden etkileşim kontrolü yapılacak
GET /api/v1/drug-interaction/details/{interactionId} Belirli etkileşimin detaylı açıklaması getirilecek
GET /api/v1/drug-interaction/ingredient/{barcode} Tek ilacın etken madde bilgisi sorgulanacak

İstek / Yanıt Modelleri

POST /api/v1/drug-interaction/check

İstek:

{
  "pharmacistId": "string",
  "barcodes": ["8699536090273", "8699514090120", "8680742080156"]
}

Yanıt:

{
  "hasInteractions": true,
  "interactions": [
    {
      "id": "uuid",
      "severity": "major",
      "drug1": {
        "barcode": "8699536090273",
        "name": "Aspirin 100mg",
        "activeIngredient": "Asetilsalisilik Asit"
      },
      "drug2": {
        "barcode": "8699514090120",
        "name": "Coumadin 5mg",
        "activeIngredient": "Varfarin Sodyum"
      },
      "summary": "Kanama riski artabilir. Birlikte kullanımda INR takibi gereklidir.",
      "recommendation": "Doktor bilgilendirilmeli, alternatif analjezik düşünülmelidir."
    }
  ],
  "checkedAt": "2026-02-12T15:30:00Z"
}

GET /api/v1/drug-interaction/details/{interactionId}

Yanıt:

{
  "id": "uuid",
  "severity": "major",
  "drug1ActiveIngredient": "Asetilsalisilik Asit",
  "drug2ActiveIngredient": "Varfarin Sodyum",
  "mechanism": "Her iki ilaç da antitrombosit/antikoagülan etki gösterir. Birlikte kullanım kanama riskini sinerjik olarak artırır.",
  "clinicalEffect": "Gastrointestinal kanama, intrakraniyal kanama riski artışı",
  "management": "Birlikte kullanım zorunluysa INR düzeyleri sık takip edilmeli. Mümkünse Parasetamol gibi alternatif analjezik tercih edilmelidir.",
  "references": [
    "TÜFAM İlaç Etkileşim Veritabanı",
    "Stockley's Drug Interactions"
  ]
}

Veri Modelleri

Ciddiyet Seviyeleri

graph LR
    C["🔴 Kontrendike<br/>Birlikte kullanılmamalı"] --> M["🟠 Majör<br/>Yakın takip gerekli"]
    M --> MI["🟡 Minör<br/>Bilgilendirme"]
    MI --> S["🟢 Sinerjik<br/>Etki artışı olabilir"]

    style C fill:#c0392b,stroke:#333,color:#fff
    style M fill:#e67e22,stroke:#333,color:#fff
    style MI fill:#f1c40f,stroke:#333,color:#000
    style S fill:#27ae60,stroke:#333,color:#fff
Loading

C# Model Tanımları

InteractionSeverity (enum) {
    Contraindicated,          // Kontrendike — birlikte kullanılmamalı
    Major,                    // Majör — yakın takip gerektirir
    Minor,                    // Minör — bilgilendirme amaçlı
    Synergistic               // Sinerjik — etki artışı olabilir
}

InteractionCheckRequest {
    PharmacistId: string      // Eczacı kimliği
    Barcodes: List<string>    // Reçetedeki ilaç barkodları
}

DrugInfo {
    Barcode: string           // İlaç barkodu
    Name: string              // İlaç adı
    ActiveIngredient: string  // Etken madde
}

InteractionResult {
    Id: UUID                  // Etkileşim kaydı
    Severity: InteractionSeverity
    Drug1: DrugInfo
    Drug2: DrugInfo
    Summary: string           // Kısa açıklama
    Recommendation: string    // Eczacıya öneri
}

InteractionCheckResponse {
    HasInteractions: boolean
    Interactions: List<InteractionResult>
    CheckedAt: DateTime
}

InteractionDetail {
    Id: UUID
    Severity: InteractionSeverity
    Drug1ActiveIngredient: string
    Drug2ActiveIngredient: string
    Mechanism: string         // Etkileşim mekanizması
    ClinicalEffect: string   // Klinik etki
    Management: string        // Yönetim önerisi
    References: List<string>  // Kaynak referansları
}

Prism Entegrasyonu

Event Tanımları

CrossSaleEvents yapısı referans alınacaktır:

DrugInteractionEvents {
    // Barkod tarandığında tetiklenecek (List<string> barcodes)
    DrugInteractionCheckEvent : PubSubEvent<List<string>>

    // Etkileşim bulunduğunda paneli gösterecek
    DrugInteractionShowEvent : PubSubEvent<InteractionCheckResponse>

    // Panel gizlenecek
    DrugInteractionHideEvent : PubSubEvent

    // Detay görüntülenecek
    DrugInteractionDetailEvent : PubSubEvent<InteractionResult>
}

Modül Bootstrap

sequenceDiagram
    participant App as App.xaml.cs
    participant Mod as DrugInteractionModule
    participant DI as DryIoc Container
    participant RM as RegionManager

    App->>DI: ConfigureModuleCatalog
    App->>Mod: RegisterTypes(registry)
    Mod->>DI: Register<DrugInteractionRequest>
    Mod->>DI: Register<DrugInteractionViewModel>
    App->>Mod: OnInitialized(container)
    Mod->>RM: RegisterViewWithRegion("DrugInteractionRegion", DrugInteractionPanelView)
Loading

Kayıt Sırası

App.xaml.cs içinde mevcut modül listesine eklenecektir:

catalog.AddModule<PrescriptionModule>();
catalog.AddModule<CrossSaleModule>();
catalog.AddModule<DrugInteractionModule>();    ← Yeni

RegionNames.cs dosyasına yeni bölge eklenecektir:

public static string DrugInteractionRegion => "DrugInteractionRegion";

UI Tasarımı

Panel Yerleşimi

Etkileşim uyarı paneli, reçete ekranının yanında (CrossSale paneline benzer konumda) görüntülenecektir.

graph TD
    subgraph İlaçTarif Ana Ekran
        subgraph Sol Panel
            RX["📋 Reçete Listesi<br/>(PrescriptionRegion)"]
        end
        subgraph Sağ Panel
            CS["🛒 Çapraz Satış<br/>(CrossSaleRegion)"]
            DI["⚠️ İlaç Etkileşimi<br/>(DrugInteractionRegion)"]
        end
    end

    style DI fill:#e74c3c,stroke:#333,color:#fff
    style RX fill:#27ae60,stroke:#333,color:#fff
    style CS fill:#f5a623,stroke:#333,color:#000
Loading

Uyarı Kartı Tasarımı

Her etkileşim için bir kart gösterilecektir:

graph TD
    subgraph Etkileşim Kartı
        H["🔴 MAJÖR ETKİLEŞİM"]
        D1["💊 Aspirin 100mg<br/>Etken Madde: Asetilsalisilik Asit"]
        ARROW["⚡ etkileşim ⚡"]
        D2["💊 Coumadin 5mg<br/>Etken Madde: Varfarin Sodyum"]
        MSG["⚠️ Kanama riski artabilir.<br/>INR takibi gereklidir."]
        BTN["📖 Detayları Gör"]
    end

    H --> D1
    D1 --> ARROW
    ARROW --> D2
    D2 --> MSG
    MSG --> BTN

    style H fill:#c0392b,stroke:#333,color:#fff
    style MSG fill:#fff3cd,stroke:#333,color:#000
Loading

Renk Kodlaması

Seviye Arka Plan Kenarlık İkon
Kontrendike #FADBD8 (açık kırmızı) #C0392B (koyu kırmızı) 🔴
Majör #FDEBD0 (açık turuncu) #E67E22 (turuncu) 🟠
Minör #FEF9E7 (açık sarı) #F1C40F (sarı) 🟡
Sinerjik #D5F5E3 (açık yeşil) #27AE60 (yeşil) 🟢

Veri Akışı

Tetikleme Mekanizması

flowchart TD
    A["Barkod taranır"] --> B["BarcodeCapturerModule"]
    B --> C["PrescriptionModule<br/>Reçeteye ilaç eklenir"]
    B --> D["EventAggregator<br/>DrugInteractionCheckEvent yayınlanır"]
    D --> E["DrugInteractionViewModel<br/>Event dinlenir"]
    E --> F{Reçetede 2+ ilaç var mı?}
    F -->|Hayır| G["Panel gizli kalır"]
    F -->|Evet| H["POST /api/v1/drug-interaction/check"]
    H --> I{Etkileşim var mı?}
    I -->|Hayır| G
    I -->|Evet| J["DrugInteractionShowEvent yayınlanır"]
    J --> K["Panel gösterilir<br/>Ciddiyet sırasına göre kartlar listelenir"]
    K --> L["Eczacı 'Detayları Gör' tıklar"]
    L --> M["GET /api/v1/drug-interaction/details/{id}"]
    M --> N["Detay dialogu açılır"]

    style A fill:#3498db,stroke:#333,color:#fff
    style K fill:#e74c3c,stroke:#333,color:#fff
    style N fill:#8e44ad,stroke:#333,color:#fff
Loading

Önbellekleme Stratejisi

Aynı barkod kombinasyonu için tekrarlanan API çağrılarını önlemek amacıyla:

- Anahtar: Sıralanmış barkod listesinin hash'i
- Süre: Oturum boyunca (uygulama kapanana kadar)
- Temizleme: Yeni reçete açıldığında önbellek sıfırlanacak

Sunucu Tarafı Tasarımı

Veritabanı Şeması

erDiagram
    DRUG ||--o{ DRUG_INGREDIENT : contains
    INGREDIENT ||--o{ DRUG_INGREDIENT : "is in"
    INGREDIENT ||--o{ INTERACTION : "interacts as drug1"
    INGREDIENT ||--o{ INTERACTION : "interacts as drug2"

    DRUG {
        string barcode PK
        string name
        string manufacturer
    }

    INGREDIENT {
        int id PK
        string name
        string atc_code
    }

    DRUG_INGREDIENT {
        string drug_barcode FK
        int ingredient_id FK
        float dosage_mg
    }

    INTERACTION {
        int id PK
        int ingredient1_id FK
        int ingredient2_id FK
        string severity
        string summary_tr
        string mechanism_tr
        string clinical_effect_tr
        string management_tr
        string references
        datetime updated_at
    }
Loading

API İş Mantığı

flowchart TD
    A["POST /api/v1/drug-interaction/check<br/>Barkod listesi alınır"] --> B["Her barkod için<br/>etken maddeleri çöz"]
    B --> C["Tüm etken madde çiftlerini oluştur<br/>(n*(n-1)/2 kombinasyon)"]
    C --> D["Her çift için<br/>INTERACTION tablosunu sorgula"]
    D --> E{Eşleşme var mı?}
    E -->|Evet| F["Etkileşimleri ciddiyet sırasına göre<br/>sırala ve döndür"]
    E -->|Hayır| G["hasInteractions: false döndür"]

    style A fill:#3498db,stroke:#333,color:#fff
    style F fill:#e74c3c,stroke:#333,color:#fff
    style G fill:#27ae60,stroke:#333,color:#fff
Loading

Veri Kaynakları

Etkileşim veritabanı aşağıdaki kaynaklardan beslenecektir:

  • TÜFAM (Türkiye Farmakovijilans Merkezi) ilaç etkileşim verileri
  • DrugBank açık veri seti
  • Stockley's Drug Interactions referans verileri
  • Eczacı geri bildirimleri ile sürekli güncelleme

Geliştirme Aşamaları

gantt
    title İlaç Etkileşimi Modülü Geliştirme Planı
    dateFormat  YYYY-MM-DD
    section Sunucu
        Veritabanı şeması ve seed verisi         :s1, 2026-03-01, 5d
        API endpoint'leri geliştirme              :s2, after s1, 7d
        Etkileşim veritabanı doldurma             :s3, after s1, 14d
    section İlaçTarif (Masaüstü)
        Prism modül iskeleti oluşturma            :d1, 2026-03-01, 3d
        API istek sınıfları                       :d2, after s2, 3d
        ViewModel ve event entegrasyonu           :d3, after d2, 5d
        UI panel ve kart tasarımı                 :d4, after d3, 5d
        Önbellekleme mekanizması                  :d5, after d4, 2d
    section Test
        Birim testleri                            :t1, after d5, 5d
        Entegrasyon testleri                      :t2, after t1, 3d
        Eczacı kullanıcı testleri                 :t3, after t2, 5d
Loading

Dosya Değişiklikleri Özeti

Yeni Dosyalar

Dosya Açıklama
Modules/Modules.DrugInteractionModule/ Tüm modül dizini
Modules.DrugInteractionModule.csproj Proje dosyası

Değiştirilecek Mevcut Dosyalar

Dosya Değişiklik
App.xaml.cs catalog.AddModule<DrugInteractionModule>() eklenecek
Common.StaticObjects/RegionNames.cs DrugInteractionRegion eklenecek
Common.Infrastructure/AggregatorEvents/ DrugInteractionEvents.cs eklenecek
MedicineFullSystem.sln Yeni proje referansı eklenecek
Ana ekran XAML DrugInteractionRegion ContentControl eklenecek
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment