Refah Bankası Döviz Bürosu için Döviz Havalesi Back Office Sistemi

2020 ve 2021'de Refah Bankası döviz bürosu için freelance full-stack geliştirici olarak çalıştım. Büronun döviz havalelerinin muhasebesi bir elektronik tabloda tutuluyordu. Onun yerini alan back office sistemini geliştirdim: havaleler, komisyonlar, merkez bankası ve NIMA tahsisleri ve her karşı tarafla olan cari bakiye tek bir SQL Server veritabanında kaydedildi ve tek bir yerde hesaplandı.

Bağlam

Bir döviz bürosu, müşterileri adına döviz gönderir ve alır. Tek bir havalede birden fazla taraf yer alabilir: müşteri, komisyon ya da kesinti alan diğer döviz büroları ve aracılar, tahsisli döviz söz konusuysa da merkez bankası ve NIMA döviz sistemi. Sonunda her taraf, belirli bir para biriminde belirli bir tutar kadar borçlu ya da alacaklı durumdadır.

Bu projeden önce bu iş, her havale için bir satır bulunan bir elektronik tabloda yürütülüyordu. Formül sütunları çevrilmiş tutarı, nihai havale tutarını, her döviz bürosunun ve aracının aldığı kesintileri ve her karşı tarafın cari bakiyesinin arkasındaki rakamları üretiyordu.

Mühendislik problemi

Elektronik tablo tek bir kişi için iyi, paylaşılan bir finansal kayıt için ise zayıf bir araçtır. Genel olarak bu işi bir sisteme taşımak dört şeyle uğraşmak demekti:

  • İş kuralları formüllerin ta kendisiydi. Her tutar bir elektronik tablo sütunundan geliyordu. Sistem aynı rakamları üretmek zorundaydı; yoksa kimse onu zaten bildikleriyle karşılaştırarak kontrol edemezdi.
  • Komisyonlar değişkendir. Farklı havale türleri ve para birimi çiftleri farklı komisyonlar taşır; bunlar döviz bürosu tarafında ya da aracı tarafında alınır ve bin birim başına, birim döviz başına ya da katsayı olarak uygulanır.
  • Bakiyeler türetilmiş veridir. Her karşı tarafın borcu ya da alacağı havalelerden çıkar. Bir havale değişir de ona ait bakiye kayıtları değişmezse, raporlar görünür hiçbir hata vermeden yanlış sonuç üretmeye başlar.
  • Geçmiş zaten vardı. Geçmiş havaleler elektronik tablodaydı; yeniden elle girilmeden, aynı hesaplamalarla aktarılmaları gerekiyordu.

Geliştirdiklerim

Sistemi SQL Server üzerinde çalışan bir ASP.NET Core MVC uygulaması olarak geliştirdim. Uygulama .NET Core 3.1 ile başladı; Aralık 2020'de .NET 5'e taşıdım. Ana parçaları:

  • Havale kayıtları. Her havale; kaynak ve hedef para birimini, bankayı ve ülkeyi, kuru, riyal karşılığını, müşteriyi, hesabı ve karşı tarafı, dosya ekleri ve Celali takvimine göre girilip gösterilen tarihli aşamalarla birlikte saklar.
  • Yapılandırılabilir bir ağaç olarak havale türleri. Döviz transferleri, merkez bankası tahsisleri, NIMA alımları ve iadeleri ve fon yönetimi bir ağaçtaki kategorilerdir; her biri yatırma, çekme ya da komisyon olarak işaretlenir. Bir tür, yeni kayıtları önceden dolduran varsayılan komisyonlar ve aşamalar taşır.
  • Tek bir hesaplama servisi. Sunucu tarafında çevrilmiş tutarı, nihai havale tutarını, döviz bürolarının ve aracıların kesintilerini ve her karşı taraf için borç ve alacak kayıtlarını hesaplar. Bu hesaplamalar, yerini aldıkları elektronik tablo sütunlarını yeniden üretir.
  • Eski elektronik tablo için bir CSV içe aktarıcısı. Eski dışa aktarımı okur; eksik müşterileri, müşteri gruplarını ve havale türlerini oluşturur ve geçmişteki her havaleyi kaydetmeden önce aynı hesaplama servisinden geçirir.
  • Raporlar. Müşteriye göre, aracıya göre ve aracı ile müşteriye göre, para birimi bazında, borç ve alacak olarak ayrılmış ve döviz bürosu ile aracı komisyonlarıyla birlikte gösterilen bakiyeler; ayrıca ayrıntılı bir ekstre. Tablolar sunucu tarafında sayfalanır ve aranır, CSV olarak dışa aktarılabilir.
  • Erişim kontrollü bir yönetim paneli. Kullanıcıların rolleri vardır ve kullanıcı gruplarına aittirler. Bir havalenin tamamlanma tarihi kaydedildikten sonra onu yalnızca bir yönetici düzenleyebilir.

Tasarım notları

Bu notlar tasarımın arkasındaki gerekçeyi açıklar. Bankanın daha geniş sistemlerini değil, uygulamayı anlatır.

Spesifikasyon olarak elektronik tablo

Hesaplama servisindeki her rakam, yerini aldığı elektronik tablo sütunuyla birlikte belgelenmiştir ve hesaplanan değerler havaleyle birlikte saklanır. Bu sayede sistemdeki herhangi bir rakamı orijinal tabloyla karşılaştırarak kontrol etmek mümkün oldu; kurallar da ekranlara dağılmak yerine tek bir serviste kaldı.

Bakiyeler saklanan değer değil, toplamdır

Hiçbir müşterinin ya da karşı tarafın zamanla güncellenen, saklanmış bir bakiyesi yoktur. Her havale kendi borç ve alacak kayıtlarını taşır; raporlar bunları toplar. Dolayısıyla bir bakiye, arkasındaki havalelerle çelişemez ve bir havaleyi düzeltmek, onu içeren her raporu da düzeltir.

Havale ve rakamları birlikte kaydedilir

Yeni bir havale; komisyonları, aşamaları, hesaplanan rakamları ve bakiye kayıtlarıyla birlikte tek bir nesne grafı olarak oluşturulur ve tek bir EF Core kaydetme işlemiyle yazılır. Düzenleme, rakamları yerinde yamamaz: eski kaydı siler ve yeniden hesaplanmış bir kopyasını aynı kaydetme işleminde ekler. EF Core her kaydetme işlemini tek bir veritabanı transaction'ı içinde çalıştırır; bu yüzden saklanan rakamlar her zaman havalenin güncel sürümünden gelir.

Veri olarak komisyon kuralları

Varsayılan komisyonlar kod değil, satırdır. Her biri bir havale türüne ve para birimi çiftine aittir, bir döviz bürosu değeri ve bir aracı değeri tutar ve nasıl uygulanacağını belirtir: bin birim başına, birim döviz başına ya da katsayı olarak. Yeni havaleler bu varsayılanlardan başlar ve gerektiğinde tek tek ayarlanabilir.

Teknoloji yığını

  • ASP.NET Core MVC: .NET Core 3.1, Aralık 2020'de .NET 5'e taşındı
  • EF Core ve SQL Server
  • ASP.NET Core Identity
  • Autofac ve AutoMapper
  • Serilog; hatalar bir SQL Server tablosuna loglanır
  • CsvHelper
  • jQuery ve DataTables, sunucu tarafı sayfalama ile

Sonuç

  • Havale muhasebesi bir elektronik tablodan tek bir SQL Server veritabanına taşındı; veri girişi, düzenleme ve geçmiş kayıtların içe aktarılması aynı hesaplama servisini paylaşıyor.
  • Aynı havale bazlı kayıtlardan üretilen ve CSV olarak dışa aktarılabilen; müşteriye, aracıya ve para birimine göre bakiye raporları.

İlgili

Bu sitedeki bir diğer finansal yazılım finansal gösterge dashboard'u. Finansal sistemler ya da şirket içi iş sistemleri üzerinde backend çalışması için Benimle çalışın sayfasına bakın.

Sık sorulan sorular

Mahdi Molavi, Refah Bankası döviz bürosu için ne geliştirdi?

2020 ve 2021'de freelance full-stack geliştirici olarak çalışırken, Refah Bankası döviz bürosunda döviz havalelerinin elektronik tabloyla tutulan muhasebesinin yerini alan bir back office sistemi geliştirdi.

Sistem neleri kaydediyor?

Kaynak ve hedef para birimi, banka, ülke, kur ve riyal karşılığıyla birlikte havaleleri; döviz bürolarının ve aracıların komisyon ve kesintilerini; merkez bankası tahsislerini, NIMA alımlarını ve iadelerini; ve her karşı tarafın borç ve alacak olarak cari bakiyesini.

Elektronik tablodaki mevcut verilere ne oldu?

Bir CSV içe aktarıcısı eski elektronik tablonun dışa aktarımını okudu, eksik müşterileri ve havale türlerini oluşturdu ve geçmişteki her havaleyi kaydetmeden önce yeni kayıtlarla aynı hesaplama servisinden geçirdi.

Projede hangi teknolojiler kullanıldı?

.NET Core 3.1 ile başlayıp Aralık 2020'de .NET 5'e taşınan ASP.NET Core MVC; EF Core ve SQL Server, ASP.NET Core Identity, Autofac, AutoMapper, Serilog ve CsvHelper.

Bu bölümdeki diğer sayfalar

Projeler