· 2026
ICAP — uzman hekim nöbet sistemi
Uzman hekimlerin kendi nöbet günlerini seçtiği çok kullanıcılı bir web uygulaması. Çizelgeyi üretmiyor; hekimlerin kendi seçimlerini çakışmadan yapmasını sağlıyor.
Sorun
Pratisyen ve hemşire çizelgelerinde problem belliydi: bir kişi, herkes için adil bir çizelge kurmak zorunda. Uzman hekim nöbetlerinde durum farklı. Uzmanlar kendilerine hazır bir çizelge verilmesini istemiyor — kendi icap nöbet günlerini, kendi hayatlarının etrafında seçmek istiyorlar. Buradaki iş çizelge üretmek değil, koordinasyon: herkes kendi parçasını seçerken sistemin çakışmaları engellemesi.
Bu daha önce WhatsApp üzerinden yürütülüyordu. Herkes “ben şu ve şu günleri alıyorum” yazıyordu, ben bir Excel dosyasını güncelliyordum, son anda karar değişiklikleri olabiliyor ve hızlıca eklenmek üzere bana iletilmesi gerekiyordu. Herkes kendi saat hesabını tutmak zorunda kalıyordu.
Ne yaptım
Çok kullanıcılı bir web uygulaması. Her uzman hekimin kendi girişi var; sisteme girip bir sonraki ayın takviminde kendi nöbet günlerini seçiyor. Seçimler anlık olarak takvime işliyor — başka hekimlerin seçtiği günler de görünüyor, yani herkes ortak tabloyu aynı anda görüyor.
Sistemin tek katı kuralı şu: aynı uzmanlıktan iki hekim aynı güne nöbet yazamıyor. İki ortopedi uzmanı varsa, farklı günler seçmek zorundalar — sistem ikinci seçimi engelliyor. Bunun dışında her şey hekimin kendi tercihinde.
Takvimin altında her hekimin o ana kadarki toplam nöbet saati canlı güncelleniyor (iş günü 16 saat, hafta sonu ve resmi tatil 24 saat). Türk resmi tatilleri — sabit olanlar ve Hicri takvimden hesaplanan dini bayramlar — otomatik işaretleniyor. Hekimler seçimlerini tablo hâlinde önizleyip kesinleştirebiliyor; kesinleştirdikten sonra kilidi açıp tekrar düzenlemek de mümkün. Her ayın son günü çizelge otomatik olarak arşivleniyor ve geçmiş kayıtlar Excel olarak indirilebiliyor.
Teknik olarak ilginç olan ne
Bu projede ilginç olan, optimizasyon değil — burada üretilen bir çizelge yok. İlginç olan, çok kullanıcılı durumun kendisi.
İlk teknik mesele, mimarinin kendisinin yarattığı bir problemdi: eşzamanlılık. Excel döneminde eşzamanlılık diye bir sorun yoktu, çünkü tek yazan bendim — ama tek yazanın ben olmam zaten asıl sorundu. ICAP bu işi ~12-15 kişiye dağıtınca, eşzamanlılık otomatik olarak ortaya çıkan bir koşul hâline geldi: birden çok hekim aynı anda seçim yaptığında, herkesin ekranında ortak tablonun tutarlı kalması gerekiyor. Bu kadar kişi er ya da geç aynı anda aynı güne seçim yapacak; sistem bunu varsaymak ve kontrol etmek zorunda. Bunu sunucu tarafında doğrulama ile çözdüm — seçim istemcide değil sunucuda kontrol ediliyor; istemci sadece sonucu gösteriyor.
İkinci mesele kimlik doğrulamaydı. Bu, daha önce yazdığım tek dosyalık araçlarda hiç olmayan bir katman: her hekimin kendi hesabı, kendi şifresi, kendi seçim yetkisi. Flask’in oturum yönetimini ve şifrelenmiş parola saklamayı bu proje için öğrendim.
Üçüncüsü, zamanlanmış arşivleme: her ayın son günü, otomatik olarak o ayın çizelgesini kaydetmesi gerekiyordu. Sunucunun, kimse tetiklemese bile belirli bir zamanda iş yapması — bu da tek dosyalık araçlarda olmayan bir kalıcı-servis davranışı.
ICAP, Railway üzerinde kalıcı bir servis olarak çalışıyor. Tek dosyalık araçlardan farklı olarak bu bir dosya değil; ayakta kalması, güncellenmesi, çalışır durumda tutulması gereken bir uygulama. Bu projeyle birlikte “dağıtılan bir dosya” ile “işletilen bir servis” arasındaki farkı ilk kez pratik olarak öğrenmiş oldum.
Sonuç
Uzman hekim nöbetleri birkaç aydır bu sistemle yürüyor. İsteyen hekim istediği gibi seçimlerini yapıp her ayın son günü son saatine kadar değişiklik yapabiliyor. Aradaki insan iletişiminden dolayı ortaya çıkan gecikmeler kayboldu. Saat hesabı uygulamada dinamik olarak gösterildiği için bir hekimin 320 diğerinin 250 saat icapçı olması gibi dengesizlikler artık yok.
Repo herkese açık. Kendi servisinde benzer bir sistem kurmak isteyen biri kodu klonlayıp kendi örneğini dağıtabilir — ama çalışan örnek bizim hastanemizin, kendi hekim hesaplarıyla.