You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Mobil uygulama aşağıdaki dizin yapısında geliştirilecektir:
src/
├── api/ # API katmanı (domain bazlı)
│ ├── auth/ # Kimlik doğrulama (4 endpoint)
│ ├── prescriptions/ # Reçete API'leri (2 endpoint)
│ ├── device/ # Cihaz kaydı/bilgisi (4 endpoint)
│ └── medicine/ # İlaç sorgulama (1 endpoint)
├── features/ # Redux slice'ları
│ ├── userData/ # Kullanıcı oturum bilgisi
│ ├── profileData/ # Profil (doğum tarihi, boy, kilo, kan grubu)
│ ├── alarmV9Data/ # Alarm & ilaç & reçete durumu
│ ├── deviceData/ # Cihaz kayıt durumu
│ ├── themeData/ # Tema tercihi
│ └── languageData/ # Dil tercihi
├── screens/ # Ekranlar
│ ├── login/ # Giriş (SMS doğrulama)
│ ├── landing/ # Karşılama
│ ├── onboarding/ # İlk kurulum
│ ├── drugs/ # İlaç yönetimi
│ ├── alarms/ # Alarm/takipçi
│ ├── prescriptions/ # Reçete görüntüleme
│ ├── addDrug/ # Manuel ilaç ekleme
│ ├── medicineQr/ # QR ile ilaç tarama
│ └── settings/ # Ayarlar
├── navigation/ # Navigasyon yapısı
│ ├── DrawerNavigator
│ └── BottomTabNavigatorV2
├── hooks/ # Özel hook'lar
├── services/ # İş mantığı servisleri
├── utils/ # Yardımcı araçlar
│ ├── baseApi.js # Axios yapılandırması
│ └── decryptData.js # RSA+AES çözümleme
└── locales/ # Dil dosyaları (TR, EN)
İlaçTarif Uygulama Yapısı
İlaçTarif, 60+ proje içeren modüler bir WPF masaüstü uygulaması olarak yapılandırılacaktır:
MedicineFullSystem.sln
├── Medicine/ # Ana WPF uygulaması
├── Common/ # Ortak kütüphaneler
│ ├── Common.Core # Temel sınıflar ve arayüzler
│ ├── Common.Infrastructure # HTTP istemcileri, altyapı
│ └── Common.Logging # Loglama
├── Medicine.Models/ # Veri modelleri, DTO'lar
├── Medicine.Requests/ # HTTP istemci kütüphanesi
├── Modules/ # Prism modülleri (20+)
│ ├── Modules.PrescriptionModule # Reçete işlemleri
│ ├── Modules.MobileModule # Mobil uygulama iletişimi
│ ├── Modules.MobileDevicesModule# Mobil cihaz yönetimi
│ ├── Modules.CargoModule # Kargo yönetimi
│ ├── Modules.ShortSaleModule # Kısa satış
│ ├── Modules.Shelf2Module # Raf/stok yönetimi
│ ├── Modules.CrossSaleModule # Çapraz satış önerileri
│ └── ... # Diğer modüller
├── Extensions/ # Eklentiler
│ ├── BarcodeListener # Barkod okuyucu entegrasyonu
│ └── PrescriptionCore # Reçete iş mantığı
└── Tests/ # Test projeleri
İletişim Mimarisi
Genel Akış
Mobil uygulama ile İlaçTarif masaüstü uygulaması arasındaki tüm iletişim bir API Gateway üzerinden sağlanacaktır.
graph LR
A["📱 Mobile<br/>(React Native)"] <-->|"HTTPS<br/>RSA+AES şifreli<br/>JSON payloadlar"| B["🌐 API Gateway"]
B <-->|"HTTPS"| C["💊 İlaçTarif<br/>(WPF/.NET)"]
style A fill:#61dafb,stroke:#333,color:#000
style B fill:#f5a623,stroke:#333,color:#000
style C fill:#512bd4,stroke:#333,color:#fff
Loading
API Yol Haritası
Gateway üzerinden sunulacak endpoint grupları:
graph TD
GW["🌐 API Gateway"] --> V1["/api/v1/"]
GW --> V2["/api/v2/"]
GW --> MOB["/mobile/"]
GW --> PAT["/patient/"]
V1 --> V1A["Reçete işlemleri"]
V1 --> V1B["Cihaz yönetimi"]
V1 --> V1C["Kimlik doğrulama"]
V2 --> V2A["Çapraz satış önerileri"]
MOB --> MOBA["Cihaz ve ilaç endpoint'leri"]
PAT --> PATA["Hasta işlemleri"]
style GW fill:#f5a623,stroke:#333,color:#000
style V1 fill:#4a90d9,stroke:#333,color:#fff
style V2 fill:#4a90d9,stroke:#333,color:#fff
style MOB fill:#4a90d9,stroke:#333,color:#fff
style PAT fill:#4a90d9,stroke:#333,color:#fff
Mobile ve İlaçTarif arasında hibrit RSA + AES şifreleme kullanılacaktır:
Şifreleme Akışı
sequenceDiagram
participant M as 📱 Mobile
participant K as 🔐 Keychain
participant S as 🌐 Sunucu (İlaçTarif)
Note over M,S: Anahtar Üretimi (İlk Giriş)
M->>M: 2048-bit RSA anahtar çifti üretilecek
M->>K: Özel anahtar güvenli depolanacak
M->>S: Açık anahtar gönderilecek (publicKey)
Note over M,S: Veri Şifreleme (Sunucu → Mobile)
S->>S: Rastgele AES-256 anahtarı üretilecek
S->>S: Reçete verisi AES-256-CBC ile şifrelenecek
S->>S: AES anahtarı RSA public key ile şifrelenecek
S->>M: Payload: [RSA(AES_KEY)] [IV] [AES(veri)]
Note over M,K: Veri Çözümleme (Mobile)
M->>K: Özel anahtar alınacak
K->>M: RSA private key
M->>M: RSA ile AES anahtarı çözülecek
M->>M: AES-CBC ile veri çözülecek
M->>M: JSON olarak parse edilecek
Loading
İlgili Dosyalar
Geliştirme sırasında aşağıdaki dosyalar oluşturulacaktır:
Taraf
Dosya
İşlev
Mobile
src/screens/login/utils/generateKeys.js
RSA anahtar üretimi ve depolama
Mobile
src/utils/decryptData.js
Hibrit RSA+AES çözümleme
İlaçTarif
MobileEncrypter.cs
Hibrit RSA/AES şifreleme
İlaçTarif
Mobile2PostPrescriptionRequest.cs
Şifreli reçete gönderimi
İlaçTarif
Mobile2GetPublicKeyRequest.cs
Açık anahtar sorgulama
Veri Modelleri
Reçete (Prescription)
Prescription {
Id: UUID
Date: ISO8601
HospitalName: string // Hastane adı
ClinicName: string // Klinik adı
Drugs: Drug[] // İlaç listesi
IsArchived: boolean // Arşivlenmiş mi
}
İlaç (Drug)
Drug {
Id: UUID
DrugName: string // İlaç adı
DisplayName: string // Görünen ad (özelleştirilebilir)
Barcode: string // Barkod
Dosage1: int // İlk doz bilgisi
Dosage2: float // İkinci doz bilgisi
Period1: int // Kullanım periyodu 1
Period2: string // Kullanım periyodu 2 ("Günde", "Haftada")
UsagePurpose: string // Kullanım amacı
Description: string // Açıklama
Warning: string // Uyarı
BoxCount: number // Kutu adedi
PharmacistNote: string // Eczacı notu
CreationDate: ISO8601
ExpiredAt: ISO8601 | null // Son kullanma tarihi
ShouldExpire: boolean
}
Reçete Tutarı (PrescriptionAmount) — İlaçTarif Tarafı
PrescriptionAmount {
PrescriptionContribution_Hand: float // Reçete katkı payı (elden)
PrescriptionContribution_Salary: float // Reçete katkı payı (maaştan)
ExaminationContribution_Hand: float // Muayene katkı payı (elden)
PharmacyDiscountAmount: float // Eczane indirim tutarı
DrugContribution: float // İlaç katkı payı tutarı
PriceDifference: float // Fiyat farkı
Tax8: float // %8 KDV
Tax18: float // %18 KDV
TotalPrice: float // Toplam fiyat
TotalAmountDueToPharmacy: float // Hastanın eczaneye ödemesi gereken tutar
RetirementStatus: boolean // Emeklilik durumu
}
Kimlik Doğrulama Akışı
İlk Giriş (Mobile)
sequenceDiagram
participant U as 👤 Kullanıcı
participant M as 📱 Mobile
participant S as 🌐 Sunucu
U->>M: Telefon numarasını girecek
M->>S: POST /patient/login/request-sms
S->>U: SMS kodu gönderilecek
U->>M: SMS kodunu girecek
M->>M: RSA anahtar çifti üretilecek
M->>M: Özel anahtar Keychain'e kaydedilecek
M->>S: POST /patient/login/withPhoneNumber<br/>(telefon + kod + publicKey)
S->>M: patientId + kimlik bilgileri
M->>M: Redux'a kaydedilecek (phoneNumber, patientId, publicKey)
M->>U: Onboarding veya Ana Ekran
Loading
Otomatik Giriş (Sonraki Açılışlar)
flowchart TD
A["Uygulama açılacak"] --> B["Redux AsyncStorage'dan rehydrate"]
B --> C{phoneNumber var mı?}
C -->|Evet| D["Giriş atlanacak"]
C -->|Hayır| E["Login ekranına yönlendirilecek"]
D --> F["POST /patient/login/withPublicKey"]
F --> G["GET /mobile/device/authorized-modules"]
G --> H["Ana Ekran"]
style A fill:#61dafb,stroke:#333,color:#000
style H fill:#27ae60,stroke:#333,color:#fff
Loading
Cihaz Kayıt Akışı
sequenceDiagram
participant M as 📱 Mobile
participant R as 📦 Redux
participant S as 🌐 Sunucu
M->>R: DeviceId var mı?
alt DeviceId yok
M->>S: POST /mobile/device/register
S->>M: DeviceId dönecek
M->>M: react-native-device-info ile bilgi toplanacak
M->>S: PUT /mobile/device/info
M->>R: DeviceId kaydedilecek
end
M->>S: GET /mobile/device/{id}/authorized-modules
S->>M: Yetkili modüller (isPharmacist, modules[])
Loading
Bildirim Sistemi (Mobile)
Yerel Bildirimler
Notifee kütüphanesi ile yönetilecek
Alarm kanalları üzerinden ilaç hatırlatmaları gönderilecek
graph TD
A["Alarm Tipleri"] --> P["⏰ Periodic<br/>Günde 1 kez, Günde 3 kez"]
A --> W["📅 Weekly<br/>Pazartesi, Çarşamba, Cuma"]
A --> AL["🔄 Alternate<br/>Gün aşırı"]
P --> D["Her doz için"]
W --> D
AL --> D
D --> T["Saat ve dakika belirlenecek"]
T --> N["Bildirim tetiklenecek"]
N --> R{"Kullanıcı yanıtı"}
R -->|"✅"| TAKEN["Aldı"]
R -->|"❌"| MISSED["Kaçırdı"]
R -->|"⏳"| TBD["Beklemede"]
style A fill:#f5a623,stroke:#333,color:#000
style TAKEN fill:#27ae60,stroke:#333,color:#fff
style MISSED fill:#e74c3c,stroke:#333,color:#fff
style TBD fill:#95a5a6,stroke:#333,color:#fff
Loading
Arka Plan İşlemleri
flowchart LR
A["📱 Cihaz yeniden başlayacak"] --> B["HeadlessJS tetiklenecek"]
B --> C["Alarmlar yeniden kurulacak"]
D["Arka plan bildirimi"] --> E["Redux thunk çalışacak"]
E --> F["Durum güncellenecek"]
G["Redux Persist"] --> H["Tüm veriler çevrimdışı saklanacak"]
H --> I["AsyncStorage"]
style A fill:#e74c3c,stroke:#333,color:#fff
style G fill:#3498db,stroke:#333,color:#fff