Bugünün emeklilik hesaplama sistemleri, 20 satırlık bir Excel formülünden ibaret değil; dağıtık sistemlerde, sürüm kontrollü yasa metinlerini deterministik kural motorlarıyla işleyen, OpenTelemetry ile izlenen ve KVKK uyumlu çalışan mühendislik harikaları. Kademeli emeklilik, Türkiye'de son düzenlemelerle birlikte yalnızca bir sosyal güvenlik başlığı olmaktan çıktı; yazılım mimarları için parametrik bir karar sistemine dönüştü. Bu yazıda, "kademeli emeklilik" hesaplamasını sıfırdan kuracağınız bir API gibi ele alacak, kural setlerinin modellenmesinden gözlemlenebilirliğe kadar tüm katmanları üretim deneyimleriyle masaya yatıracağız.
Bir emeklilik hesaplama motoru, sigorta başlangıç tarihi, prim gün sayısı, yaş, cinsiyet ve mevzuat versiyonu gibi girdileri alıp aylık bağlama oranı ve kademe geçiş sürelerini döndürür. Ne var ki bu işlem, basit bir "if-else" zincirinden çok daha fazlasını gerektirir. Kanun değişiklikleri yalnızca yeni kurallar eklemekle kalmaz, geçici maddelerle geriye dönük hesaplamaları da şekillendirir. Dolayısıyla yazılımın, tarihsel bir durum makinesi gibi çalışması şarttır. Gelin, bunu aşama aşama inceleyelim.
Kademeli Emekliliğin Yasal Altyapısını Koda Dönüştürmek
Kademeli emeklilik, çalışanın belirli bir yaş ya da prim gününü tamamladıktan sonra kısmi olarak emeklilik maaşı almaya başlamasını, ancak çalışmaya devam ederek ek prim günü kazanmasını içeren bir geçiş modelidir. Türkiye'de 7438 sayılı Kanun'la getirilen düzenleme, özellikle EYT kapsamındaki sigortalılar için yaş şartını kaldırırken, hizmet süresine dayalı bir kademeli emeklilik mantığı oluşturdu. Bir yazılım mühendisi olarak bu metni okurken şu soruyu sormalısınız: Hangi parametreler hangi sırayla değerlendirilmeli?
İlk iş, mevzuatı karakter tabloları ve karar ağaçları şeklinde formalize etmek olmalıdır, and Örneğin, 0809. 1999 öncesi sigorta girişi olan bir erkek çalışan için 25 yıl sigortalılık süresi ve 5000 prim günü kademe hesaplamasında tetikleyici koşuldur. Bu bilgiyi, 7438 sayılı Kanun metni üzerinden çıkararak, kendi Domain-Specific Language'inizi (DSL) kurabilirsiniz. Ancak unutmayın; aynı kanunun geçici maddeleri, 2000 sonrası girişliler için tamamen farklı bir kademelendirme üretir. Bu da "zaman bağlamı" kavramını devreye sokar.
Üretimdeki bir sistemde, kanun metinlerini düz metin olarak saklamak yerine, serileştirilebilir kural nesneleri (JSON veya Protobuf) kullandık. Bu sayede her yasal değişiklikte yeni bir kural sürümü oluşturabiliyor, aynı API'yi farklı ruleVersion parametresiyle çağırabiliyoruz. Örneğin, POST /v1/calculate-pension endpoint'i içinde ruleVersion: "2024-Q1" geçmek, mükerrer hesaplamaların önüne geçiyor.
Girdi Parametrelerinin Normalizasyonu ve Zamansal Doğruluk
Kademeli emeklilik hesaplamasında en kritik hata kaynakları; tarih formatı karışıklığı, prim günü tipi (fiili hizmet zammı eklenmiş mi? ) ve askerlik/doğum borçlanması gibi ek sürelerdir. Ham veriyi işlemeye başlamadan önce tüm tarihleri ISO 8601 standardına (RFC 3339 ile uyumlu) çevirmek, milisaniye hassasiyetindeki hesaplamalarda bile determinizmi garanti eder. Java'da java time, and localDateNET'te DateTimeOffset kullanılması, saat dilimi kaynaklı kaymaları engeller.
Gün sayısı hesaplamalarında SGK'nın uyguladığı "aylık 30 gün" yöntemi ile gerçek takvim arasında farklar vardır. Bu nüansı, aktüeryal gün sayacı adını verdiğimiz bir yardımcı kütüphane ile soyutladık. Kütüphane, sigorta başlangıcından itibaren her takvim ayı için 30, her yıl için 360 gün kabul eden ISO 8601-2 ticari takvim kuralını uygular. Aksi takdirde, 28 Şubat ile 31 Mart arasındaki prim farkı, kademe geçiş tarihini bir ay kaydırabilir.
Ayrıca, emeklilik talebinde bulunan kişinin borçlanma sürelerinin doğruluğu için SGK'nın resmî hizmet döküm servisleri ile entegrasyon şart. SOAP tabanlı eski servislerin xpath ile parse edilmesi, RESTful API'ye dönüştürülmesi ve önbelleğe alınması (Redis, TTL=1 saat) ile yanıt süreleri 200 ms altına çekilebilir. Burada dikkat edilmesi gereken, SGK servislerinin "bugünkü durumu" döndürmesidir; geçmişe yönelik kademe simülasyonu yapıyorsanız, zamansal veri kaybını önlemek için her sorguyu kaynak sistemdeki transaction log'larla eşleştirmeniz gerekir.
Deterministik Kural Motoru: Drools ya da Homegrown DFA
Kademeli emeklilik kurallarını bir iş kural motoru ile yönetmek, kod tekrarını ortadan kaldırırken iş birimi tarafından doğrulanabilirlik sağlar. Red Hat'in Drools (KIE) platformu, DRL söz dizimi ile "when sigortaBaslangic = 5000 then kademe = ERKEN" benzeri kurallar yazmaya izin verir. Ancak, mevzuatın sürekli değişen doğası nedeniyle karar tablolarını dışsallaştırmak ve CI/CD hattına entegre etmek daha esnek bir çözüm olmuştur.
Kendi geliştirdiğimiz Deterministik Sonlu Durum Makinesi (DFA) yaklaşımında, her sigortalılık dönemi bir durum, prim günü ve yaş ise geçiş koşuludur. Örneğin, durum diyagramında "Bekleme", "Kısmi Emeklilik", "Tam Emeklilik" durumları; prim günü eklendikçe ok geçişleriyle ilerler. Bu DFA, bir YAML dosyasında tanımlanarak versiyonlanır ve uygulama başlatılırken statik bir map'e yüklenir. 50 KB'lık bir YAML ile 500 farklı sigorta giriş aralığının tüm kombinasyonlarını ifade edebiliyoruz. Test edilebilirliği arttırmak için her durum geçişini JSON çıktılarıyla kaydedip regresyon test
.Need a Custom App Built?
Let's discuss your project and bring your ideas to life.
Contact Me Today →