BES (Bireysel Emeklilik Sistemi) tasarlandığında, tüm raporlama düzeneği — devlet katkısı hesaplamaları, EGM gönderimleri, katılımcı ekstreleri, aktüeryal mutabakatlar — tek bir para birimini varsayıyordu: Türk Lirası. Her tablodaki her sütun, düzenlemedeki her yuvarlama kuralı, bu ülkedeki her emeklilik şirketi tarafından yazılmış her mutabakat betiği bu varsayımı taşıyıcı bir duvar gibi taşır.
Ardından fon yöneticileri BES sözleşmeleri içinde yabancı para cinsinden fonlar sunmaya başladı. USD fonları. EUR fonları. Ons başına USD'ye göre fiyatlanan altın fonları. Ürün perspektifinden bu bir çeşitlendirme hikâyesidir. Boru hattı perspektifinden ise şemanın hiç temsil etmek üzere tasarlanmadığı bir kategori hatasıdır.
İlk Kırılan Varsayım
Yalnızca TL'nin olduğu bir dünyada, katılımcının katkı payının herhangi bir zaman noktasında tam olarak bir değeri vardır. Ödeme tutarını saklarsınız, işlem tarihindeki NAV'ı saklarsınız, satın alınan payları hesaplarsınız ve aşağı akıştaki her rapor — devlet katkısı hak edişi, hak ediş süresi, çıkışta stopaj — aynı denomine defterden okur.
USD cinsinden bir fon ekleyin ve şimdi aynı katkı payı için üç değeriniz olur:
- Katılımcının fiilen ödediği TL tutarı
- Saklama kuruluşunun pay satın almak için kullandığı işlem tarihi FX kurundaki USD karşılığı değer
- Rapor tarihindeki TL yeniden değerlemesi, ki EGM ve vergi dairesinin görmek istediği budur
Bunlar aynı sayı değildir. Aynı yönde giden sayılar bile değildir. Ve kritik olarak, yalnızca ilki zaman içinde stabildir.
Devlet Katkısı Hesaplamaları Neden Tuhaflaşır
%25 (veya şu anki %30) devlet katkısı, yasal olarak ödenen TL tutarına karşı tanımlanmıştır. Bu kısım net. İşlerin karıştığı yer raporlama sınırıdır: devlet katkısı, katılımcının seçtiği fonun paylarına tahakkuk eder. Eğer o fon USD cinsindense, artık USD cinsinden bir varlık pozisyonuna karşı TL tanımlı bir yükümlülük tutuyorsunuz demektir.
Birden fazla kez gördüğüm somut bir arıza:
- Katılımcı T gününde 10.000 TL katkı payı öder, bir USD fonuna tahsis edilir
- T'de USDTRY = 32,00, saklama kuruluşu yaklaşık 312 $ değerinde pay satın alır
- 3.000 TL devlet katkısı tahakkuk eder, T+n'de aynı USD fonuna tahsis edilir
- T+n'de USDTRY = 33,50
- Ay sonunda raporlama işi çalışır ve her şeyi 34,10'dan yeniden değerler
Katılımcı ekstresinde bu işlemin hangi bacağına hangi FX kuru uygulanır? Düzenleme bir şey söyler (TL nominal), saklama kuruluşunun defterleri başka bir şey (tutulan USD payları) ve EGM gönderimi üçüncü bir şey ister (rapor tarihi TL karşılığı). Boru hattınız tek bir amount_try sütunu saklıyorsa, bir hafta sonra FX zincirini sıfırdan yeniden hesaplamadan bu üç sayıdan hiçbirini yeniden üretemezsiniz.
Kimsenin Sizi Uyarmadığı Sürümleme Problemi
Bu, her ekibi ilk seferinde yakalayan kısımdır. TL cinsinden boru hatları etkin biçimde idempotenttir — dünkü işi yeniden çalıştırıp dünkü sayıları alabilirsiniz çünkü girdiler hareket etmez. FX'i devreye alın, girdiler sürekli hareket eder, ancak boru hattınız hangi FX anlık görüntüsünün hangi satırı ürettiğini kaydetmek üzere hiç tasarlanmamıştı.
Özellikle denetlediğim raporlama yığınlarının çoğu şunlardan en az üçünde başarısız olur:
- FX anlık görüntü tablosu yok. Her tarihsel işlem için kullanılan kuru saklamak yerine, iş çalışma zamanında Merkez Bankasi kurunu çağırıyorlar.
- İşlem tarihi FX ile rapor tarihi FX arasında ayrım yok. İkisi de en son çekilen kurla üzerine yazılıyor.
- Yabancı fonlardaki şirket işlemleri (temettü, bölünme, fon birleşmeleri) paylar cinsinden kaydediliyor ancak şirket işlemi tarihinde geçerli olan FX kuru cinsinden kaydedilmiyor.
- Saklama kuruluşunun NAV dosyasıyla mutabakat bir kuru; EGM ile mutabakat başka bir kuru kullanıyor; hangisinin hangisi olduğunu kimse belgelemiyor.
Semptom, saklama kuruluşuyla mutabık olan ancak EGM ile olmayan (veya tam tersi) bir katılımcı ekstresidir. Kök neden, üçünün işini yapan tek bir FX sütununuz olmasıdır.
Düzenlemenin Gerçekte Gerektirdikleri ile Şemanızın Varsaydıkları
SPK ve EGM teknik şartnamelerini dikkatle okuyun, düzenlemenin boru hattından daha sofistike olduğunu göreceksiniz. Şunları ayırt eder:
- Katılım payı — TL tutar, değiştirilemez, ödeme tarihinde denomine
- Fon değeri — fon değeri, yabancı fonlar için rapor tarihinde FX dönüşümü gerektiren türetilmiş bir sayı
- Devlet katkısı hakediş tutarı — devlet katkısı hakedişi, TL tanımlı ancak paylara tahakkuk eder
İç şemaların çoğu bunları iki sütuna indirger: contribution_amount ve current_value. Bu, yalnızca TL'nin olduğu bir evrende mükemmel çalışır. Yazma zamanında kayıplı bir dönüşüm olmadan bir USD fon pozisyonunu temsil etmek yapısal olarak imkânsızdır — bu da birinin "bu katılımcının Q2'nin son gününde vergi amaçları için bakiyesi neydi" diye sorduğu anda, doğru şekilde koruyup korumadığınız FX geçmişinden yeniden hesaplama yaptığınız anlamına gelir.
Gerçekten İşe Yarayan
Bu göçü operasyon tarafında yaşamış biri olarak, denetçilerle temasa dayanan örüntü şöyle görünür:
- Yerel para birimini açıkça saklayın. Her fon pozisyon satırı
native_currency,native_amountvenative_navtaşır. TL varsayılan değil, sadece başka bir para birimi haline gelir. - FX kurlarını sorgu zamanında değil, işlemle birlikte anlık görüntüleyin. (currency_pair, effective_date, source) ile anahtarlanmış özel bir
fx_rate_snapshotstablosu — CBRT, TCMB alış/satış, saklama kuruluşu mid — üçü de korunur. - TL karşılığını bir görünüm olarak hesaplayın, asla saklı veri olarak değil. Bir TL sayısını materyalize ettiğiniz anda, belirli bir FX yorumuna taahhüt etmiş ve alternatif sorulara cevap verme yeteneğinizi kaybetmiş olursunuz.
- Şemada işlem tarihi değerlemesini rapor tarihi değerlemesinden ayırın. Bunlar farklı iş kavramlarıdır. Bir sütunu paylaşmalarına izin vermeyin.
- Devlet katkısını, pay cinsinden gerçekleşmesi olan TL bazlı bir yükümlülük olarak ele alın. Bir hibrit satır değil, bağlantılı iki defter kaydı.
Meta Nokta
BES içindeki çoklu para birimli fonlar bir FX problemi değildir. FX kostümü giymiş zamansal bir sürümleme problemidir. Boru hattı, bir katkı payının tek bir gerçek değeri olduğu varsayımıyla inşa edildi; yabancı para cinsinden fonlar en az üç değeri olduğunu kanıtlıyor ve hangisinin "gerçek" olduğu kimin sorduğuna bağlı — katılımcı, saklama kuruluşu, vergi dairesi veya EGM.
Raporlama yığınınız para birimini veri modelinin birinci sınıf bir boyutu yerine bir biçimlendirme meselesi olarak ele alıyorsa, ürünün geri kalan ömrünü FX hatası gibi görünen ancak aslında şema borcu olan mutabakat kırılmalarını yamalamakla geçireceksiniz. Çözüm daha iyi bir kur kaynağı değildir. Çözüm, TL'nin her zaman bir para birimi olduğunu, para biriminin yokluğu olmadığını kabul etmektir.