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

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

Ülkemizde gelir vergisi 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.

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

CREATE FUNCTION FN_GELIRVERGISI (@KMATRAH AS FLOAT,@VMATRAH AS FLOAT)

RETURNS FLOAT AS
BEGIN
DECLARE @SONUC AS FLOAT
DECLARE @DILIM1 AS FLOAT
DECLARE @DILIM2 AS FLOAT
DECLARE @DILIM3 AS FLOAT
DECLARE @DILIM4 AS FLOAT
DECLARE @DILIM5 AS FLOAT

DECLARE @ORAN1 AS INT
DECLARE @ORAN2 AS INT
DECLARE @ORAN3 AS INT
DECLARE @ORAN4 AS INT
DECLARE @ORAN5 AS INT

DECLARE @GV1 AS FLOAT
DECLARE @GV2 AS FLOAT
DECLARE @GV3 AS FLOAT
DECLARE @GV4 AS FLOAT
DECLARE @GV5 AS FLOAT

DECLARE @TMATRAH AS FLOAT
DECLARE @SOR AS FLOAT

SET @DILIM1 = 0
SET @DILIM2 = 22000
SET @DILIM3 = 49000
SET @DILIM4 = 180000
SET @DILIM5 = 600000

SET @ORAN1 =15
SET @ORAN2 =20
SET @ORAN3 =27
SET @ORAN4 =35
SET @ORAN5 =40

SET @TMATRAH = @KMATRAH + @VMATRAH

IF @KMATRAH>=@DILIM1 AND @KMATRAH<@DILIM2
BEGIN
SET @GV1=CASE WHEN @TMATRAH>=@DILIM1 AND @TMATRAH<@DILIM2 THEN @VMATRAH*@ORAN1/100 ELSE 0 END
SET @GV2=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN ((@DILIM2-@KMATRAH)*@ORAN1/100)+((@VMATRAH-(@DILIM2-@KMATRAH))*@ORAN2/100) ELSE 0 END
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
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
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
SET @SONUC= @GV1+@GV2+@GV3+@GV4+@GV5
END

IF @KMATRAH>=@DILIM2 AND @KMATRAH<@DILIM3
BEGIN
SET @GV1=CASE WHEN @TMATRAH>=@DILIM2 AND @TMATRAH<@DILIM3 THEN @VMATRAH*@ORAN2/100 ELSE 0 END
SET @GV2=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN ((@DILIM3-@KMATRAH)*@ORAN2/100)+((@VMATRAH-(@DILIM3-@KMATRAH))*@ORAN3/100) ELSE 0 END
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
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
SET @SONUC= @GV1+@GV2+@GV3+@GV4
END

IF @KMATRAH>=@DILIM3 AND @KMATRAH<@DILIM4
BEGIN
SET @GV1=CASE WHEN @TMATRAH>=@DILIM3 AND @TMATRAH<@DILIM4 THEN @VMATRAH*@ORAN3/100 ELSE 0 END
SET @GV2=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@VMATRAH-(@DILIM4-@KMATRAH))*@ORAN4/100) ELSE 0 END
SET @GV3=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM4-@KMATRAH)*@ORAN3/100)+((@DILIM5-@DILIM4)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
SET @SONUC= @GV1+@GV2+@GV3
END

IF @KMATRAH>=@DILIM4 AND @KMATRAH<@DILIM5
BEGIN
SET @GV1=CASE WHEN @TMATRAH>=@DILIM4 AND @TMATRAH<@DILIM5 THEN @VMATRAH*@ORAN4/100 ELSE 0 END
SET @GV2=CASE WHEN @TMATRAH>=@DILIM5 THEN ((@DILIM5-@KMATRAH)*@ORAN4/100)+((@VMATRAH-(@DILIM5-@KMATRAH))*@ORAN5/100) ELSE 0 END
SET @SONUC= @GV1+@GV2
END

IF @KMATRAH>=@DILIM5
BEGIN
SET @GV1=CASE WHEN @TMATRAH>=@DILIM5 THEN @VMATRAH*@ORAN5/100 ELSE 0 END
SET @SONUC= @GV1
END
RETURN @SONUC
END

Fonksiyonun Kullanılışı :

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

dbo.FN_GELIRVERGISI (Kümülatif Gelir Matrahı, Gelir Vergisi Matrahı) 

SELECT dbo.FN_GELIRVERGISI (10000,4000)

Sonuc : 600


İlgili Yazılar