İçeriğe geç

MS SQL ile Gelir vergisi hesaplayan kullanıcı tanımlı scalar fonksiyon

Güncelleme: 5.044 defa okundu

Konu: SQL Fonksiyonları

MS SQL ile Gelir vergisi hesaplayan kullanıcı tanımlı scalar fonksiyon

Ülkemizde gelir vergisi tarifesi artan tarifeli olup kümülatif kazanca göre ilgili vergi diliminden gelir vergi hesaplanmaktadır.
Eğer bu hesaplama işlemini database seviyesinde yapılması gerekirse aşağıdaki SQL için ile yazmış olduğum kullanıcı tanımlı fonksiyon ile Gelir Vergisi hesaplayabilirsiniz.

2026 dilimleriyle güncellendi. Fonksiyondaki @DILIM2–@DILIM5 değerleri 2026 tarifesine göredir (190.000 / 400.000 / 1.500.000 / 5.300.000; oranlar %15 / %20 / %27 / %35 / %40). Her yıl ocakta yeni tarifeye göre değiştirin: Gelir vergisi dilimleri

Bu fonksiyon Kümülatif vergi matrahı ve Vergi matrahını parametre olarak alır. Sonuç olarak gelir vergisi döndürür.

SQL
  1. CREATE FUNCTION FN_GELIRVERGISI (@KMATRAH AS FLOAT,@VMATRAH AS FLOAT)
  2. RETURNS FLOAT AS
  3. BEGIN
  4. DECLARE @SONUC AS FLOAT
  5. DECLARE @DILIM1 AS FLOAT
  6. DECLARE @DILIM2 AS FLOAT
  7. DECLARE @DILIM3 AS FLOAT
  8. DECLARE @DILIM4 AS FLOAT
  9. DECLARE @DILIM5 AS FLOAT
  10. DECLARE @ORAN1 AS INT
  11. DECLARE @ORAN2 AS INT
  12. DECLARE @ORAN3 AS INT
  13. DECLARE @ORAN4 AS INT
  14. DECLARE @ORAN5 AS INT
  15. DECLARE @GV1 AS FLOAT
  16. DECLARE @GV2 AS FLOAT
  17. DECLARE @GV3 AS FLOAT
  18. DECLARE @GV4 AS FLOAT
  19. DECLARE @GV5 AS FLOAT
  20. DECLARE @TMATRAH AS FLOAT
  21. DECLARE @SOR AS FLOAT
  22. SET @DILIM1 = 0
  23. SET @DILIM2 = 190000
  24. SET @DILIM3 = 400000
  25. SET @DILIM4 = 1500000
  26. SET @DILIM5 = 5300000
  27. SET @ORAN1 =15
  28. SET @ORAN2 =20
  29. SET @ORAN3 =27
  30. SET @ORAN4 =35
  31. SET @ORAN5 =40
  32. SET @TMATRAH = @KMATRAH + @VMATRAH
  33. IF @KMATRAH>=@DILIM1 AND @KMATRAH<@DILIM2
  34. BEGIN
  35. SET @GV1=CASE WHEN @TMATRAH>=@DILIM1 AND @TMATRAH<@DILIM2 THEN @VMATRAH*@ORAN1/100 ELSE 0 END
  36. SET @GV2=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@VMATRAH-(@DILIM2-@KMATRAH))*@ORAN2/100) ELSE 0 END
  37. SET @GV3=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@VMATRAH-(@DILIM3-@KMATRAH))*@ORAN3/100) ELSE 0 END
  38. SET @GV4=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
  39. SET @GV5=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@DILIM3-@DILIM2)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
  40. SET @SONUC= @GV1+@GV2+@GV3+@GV4+@GV5
  41. END
  42. IF @KMATRAH>=@DILIM2 AND @KMATRAH<@DILIM3
  43. BEGIN
  44. SET @GV1=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN @VMATRAH*@ORAN2/100 ELSE 0 END
  45. SET @GV2=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@VMATRAH-(@DILIM3-@KMATRAH))*@ORAN3/100) ELSE 0 END
  46. SET @GV3=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
  47. SET @GV4=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@DILIM4-@DILIM3)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
  48. SET @SONUC= @GV1+@GV2+@GV3+@GV4
  49. END
  50. IF @KMATRAH>=@DILIM3 AND @KMATRAH<@DILIM4
  51. BEGIN
  52. SET @GV1=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN @VMATRAH*@ORAN3/100 ELSE 0 END
  53. SET @GV2=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
  54. SET @GV3=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
  55. SET @SONUC= @GV1+@GV2+@GV3
  56. END
  57. IF @KMATRAH>=@DILIM4 AND @KMATRAH<@DILIM5
  58. BEGIN
  59. SET @GV1=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN @VMATRAH*@ORAN4/100 ELSE 0 END
  60. SET @GV2=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM5-@KMATRAH)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
  61. SET @SONUC= @GV1+@GV2
  62. END
  63. IF @KMATRAH>=@DILIM5
  64. BEGIN
  65. SET @GV1=CASE WHEN @TMATRAH>=@DILIM5 THEN @VMATRAH*@ORAN5/100 ELSE 0 END
  66. SET @SONUC= @GV1
  67. END
  68. RETURN @SONUC
  69. END

Fonksiyonun Kullanılışı :

Bu fonksiyon 2 parametre alır ve Gelir vergisi sonucunu verir.

SQL
  1. dbo.FN_GELIRVERGISI (Kümülatif Gelir Matrahı, Gelir Vergisi Matrahı)
  2. SELECT dbo.FN_GELIRVERGISI (10000,4000)

Sonuc : 600

Bu yazı işinize yaradı mı?

SQL Fonksiyonları konusundaki diğer yazılar

SQL Fonksiyonları: 13 yazının tümü →

WhatsApp'ta paylaş

İlgili Yazılar