delphi4arab منتديات دلفي للعرب

نسخة كاملة : فيما يتعلق بالضريبة على الدخل حسب ما جاء في قانون المالية التكميلي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
السلام عليكم ورحمة الله تعالى وبركاته
احتاج الى التعديل على هذا الكود المتعلق بالضريبة على الدخل الإجمالي لسنة 2008
حسب ما جاء بقانون المالية التكميلي لسنة 2020
كود :
Function IRG2008(soumis:Real) : real; var   TRS  : array [0..5] of Real;   Tax  : array [0..5] of Real;   Impan : array [0..5] of Real;   brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;   ill :integer; begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end;
حسب المادة 9 من قانون المالية التكميلي 2020
والتي تنص على مايلي
تحسب الضريبة على الدخل الإجمالي وفقا للجدول التصاعدي .............(بدون تغيير حتى) أي ما بين 1000و 1500 دج/شهريا)
تستفيد المداخيل التي لاتتعدى مبلغ 30000دج من اعفاء كامل من الضريبة على الدخل الإجمالي.
تستفيد المداخيل التي تفوق مبلغ 30000 دج وتقل عن 35000 دج من تخفيض إضافي ويتم تحديد الضريبة على الدخل الإجمالي المستحقة بالنسبة لهذه الفئة من الدخل وفقا للصيغة الآتية :
- الضريبة على الدخل الإجمالي = الضريبة على الدخل الإجمالي (وفقا للتخفيض الأول) *(3/8) - (20000/3).
وعلاوة على ذلك تستفيد المداخيل التي تفوق 30000 دج وتقل عن 40000 دج التي يتقاضاها العمال المعوقين من تخفيض اضافي على مبلغ الضريبة على الدخل الإجمالي، على ألا يتراكم مع التخفيض الثاني المشار اليه أعلاه.
يتم تحديد الضريبة على الدخل الإجمالي بالنسبة الى هذه الفئة من الجدول، وفقا للصيغ الآتية :
- الضريبة على الدخل الإجمالي = الضريبة على الدخل الإجمالي (وفقا للتخفيض الأول) *(3/5) - (12500/3).

جزاكم الله عنا كل خير
وعليك السلام و رحمة الله و بركاته

بالنسبة لـ أكثر من 30.000 و أقل أو يساوي 35.000

كود :
Function IRG2008(soumis:Real) : real; var   TRS  : array [0..5] of Real;   Tax  : array [0..5] of Real;   Impan : array [0..5] of Real;   brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;   ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 35000) then begin IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)  ; end;

مثال : مثال مبلغ خاضع لضريبة 30.500 سابقا كان يخصم منه 2.650 أما الأن صيخصم منه 400 فقط

كصورة التالية
[صورة: 600123590.png]


أما ذوي الاحتياجات الخاصة

كود :
Function IRG2008(soumis:Real) : real; var   TRS  : array [0..5] of Real;   Tax  : array [0..5] of Real;   Impan : array [0..5] of Real;   brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;   ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 40000) then begin // if  (soumis > 30000) and (soumis <= 35000) then begin //IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)  ; IRG2008 :=  ( (RTS1* 5)  /3 ) - (12500 /3)  ; end; end;
وعليكم السلام

هل جربتم
كود :
irg= ( المبلغ الخاضع للضريبة - 000 30 ) × 80 %

كود :
function IRG (soumis:Real) :string; begin   result:=FloatToStr((soumis-30000)*0.8); end;
بارك الله فيك اخي العربي هذا هو المطلوب جزاكم الله عنا كل خير
(07-06-2020, 12:31 AM)larbiparadox كتب : [ -> ]وعليك السلام و رحمة الله و بركاته

بالنسبة لـ أكثر من 30.000 و أقل أو يساوي 35.000

كود :
Function IRG2008(soumis:Real) : real; var   TRS  : array [0..5] of Real;   Tax  : array [0..5] of Real;   Impan : array [0..5] of Real;   brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;   ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 35000) then begin IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)  ; end;

مثال : مثال مبلغ خاضع لضريبة 30.500 سابقا كان يخصم منه 2.650 أما الأن صيخصم منه 400 فقط

كصورة التالية
[صورة: 600123590.png]


أما ذوي الاحتياجات الخاصة

كود :
Function IRG2008(soumis:Real) : real; var   TRS  : array [0..5] of Real;   Tax  : array [0..5] of Real;   Impan : array [0..5] of Real;   brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;   ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 40000) then begin // if  (soumis > 30000) and (soumis <= 35000) then begin //IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)  ; IRG2008 :=  ( (RTS1* 5)  /3 ) - (12500 /3)  ; end; end;

(07-06-2020, 06:54 PM)ALG2009 كتب : [ -> ]وعليكم السلام

هل جربتم
كود :
irg= ( المبلغ الخاضع للضريبة - 000 30 ) × 80 %

كود :
function IRG (soumis:Real) :string; begin   result:=FloatToStr((soumis-30000)*0.8); end;

شكرا اخي ALG2009 على المرور
بارك الله فيك انت ايضا وفي جميع اعضاء المنتدى الغالي
(07-06-2020, 06:54 PM)ALG2009 كتب : [ -> ]وعليكم السلام

هل جربتم
كود :
irg= ( المبلغ الخاضع للضريبة - 000 30 ) × 80 %

كود :
function IRG (soumis:Real) :string; begin   result:=FloatToStr((soumis-30000)*0.8); end;

السلام عليكم

رياضيا الدالة التي وضعتها لا يمكن أن تساوي الدالة الأصلية لحساب IRG
(08-06-2020, 09:14 AM)ghostdz كتب : [ -> ]السلام عليكم
رياضيا الدالة التي وضعتها لا يمكن أن تساوي الدالة الأصلية لحساب IRG

وعليكم السلام

ولكن تحسب الضريبة على الدخل الجديد بين 30010 و35000 أي تفي بالغرض وإذا أردت حساب الضريبة الخاصة بالمعوقين والمتعاقدين نفس الدالة غير فقط 0.8 بـ 0.5

في النتيجة تساوي الدالة الأصلية

لحساب الضريبة أقل أو تساوي أو أكثر

كود :
function IRG (soumis:Real) :string; begin   if soumis <=30000 then     result:='0' else     if  (soumis > 30000) and (soumis <= 35000)  then     result:=FloatToStr((soumis-30000)*0.8)   else  // وضع كود حساب الضريبة 2008 end;
(07-06-2020, 12:31 AM)larbiparadox كتب : [ -> ]وعليك السلام و رحمة الله و بركاته

بالنسبة لـ أكثر من 30.000 و أقل أو يساوي 35.000

كود :
Function IRG2008(soumis:Real) : real; var    TRS   : array [0..5] of Real;    Tax   : array [0..5] of Real;    Impan : array [0..5] of Real;    brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;    ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 35000) then begin IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)   ; end;

مثال : مثال مبلغ خاضع لضريبة 30.500 سابقا كان يخصم منه 2.650 أما الأن صيخصم منه 400 فقط

كصورة التالية
[صورة: 600123590.png]


أما ذوي الاحتياجات الخاصة

كود :
Function IRG2008(soumis:Real) : real; var    TRS   : array [0..5] of Real;    Tax   : array [0..5] of Real;    Impan : array [0..5] of Real;    brts,taux,tb,n,td,impota,impm,abat,ret,RTS1 :real;    ill :integer; begin if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (soumis > 30000) and (soumis <= 40000) then begin // if  (soumis > 30000) and (soumis <= 35000) then begin //IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)   ; IRG2008 :=  ( (RTS1* 5)  /3 ) - (12500 /3)   ; end; end;

السلام عليكم
يوجد خطأ بسيط في الخوارزمية السابقة حيث بعد تجريب الكود في حالة القيمة بين 30001 و 30009 تكون النتيجة خاطئة وهذا بسبب أن المتغير soumis قد تم تغيير قيمته الأصلية
إليكم الكود بعد التعديل
كود :
Function IRG2008(soumis:Real) : real; var    TRS   : array [0..5] of Real;    Tax   : array [0..5] of Real;    Impan : array [0..5] of Real;    brts,taux,tb,n,td,impota,impm,abat,ret,RTS1, Imposable :real;    ill :integer; begin Imposable := soumis; if  soumis > 30000 then begin soumis := (Int(soumis / 10)) * 10; TRS[1] := 0; TRS[2] := 120000; TRS[3] := 360000; TRS[4] := 1440000; TRS[5] := 9999999; Tax[1] := 0; Tax[2] := 0; Tax[3] := 20; Tax[4] := 30; Tax[5] := 35; Impan[1] := 0; Impan[2] := 0; Impan[3] := 48000; Impan[4] := 372000; Impan[5] := 3367999.65; brts := soumis * 12; ill := 1; While (ill <= 5) and (brts >TRS[ill]) do ill := ill + 1; taux := Tax[ill]; ill := ill - 1; tb := TRS[ill]; td := Impan[ill]; n := brts - tb; impota := (n * taux / 100) + td; impm := impota / 12; abat := (40 * impm / 100); If abat < 1000 Then abat := 1000; If abat > 1500 Then abat := 1500; ret := impm - abat; If ret < 0 Then ret := 0; RTS1 := (ret * 10); RTS1 := Int(RTS1); RTS1 := RTS1 / 10; IRG2008 := RTS1; end else  begin IRG2008 := 0; end; if  (Imposable > 30000) and (Imposable <= 35000) then begin IRG2008 :=  ( (RTS1* 8)  /3 ) - (20000 /3)   ; end; end;
مرحبا اخي والله لم افهم قصدك
بعد الإطلاع على التغيير الذي تفضلت به
لم ارى اي تغيير على الكود
واذا كنت تقصد بالتغيير اضافتك للمتغير Imposable
و
Imposable := Soumis
فهنا اتساءل ما الفرق بين

if  (soumis > 30000) and (soumis <= 35000)
و
if  (Imposable > 30000) and (Imposable <= 35000)
اذا كان soumis هو نفسه imposable
او imposable هو نفسه soumis
ارجو التوضيح حتى نفهم اكثر
لأنه في نظري لا ارى اي تغيير وهذ حسب تحليلي المتواضع علما انني لست خبير لا في مجال البرمجة ولا في مجال المحاسبة
بل لازلت اطمع في الزيادة
اللهم علمنا ما ينفعنا وانفعنا بما علمتنا يا رب العالمين (امين)
يا اخي لا تعتبر ان تدخلي هذا تغليط او شيء من هذا القبيل لا والله كل ما اقصده التوضيح لما تفضلت به فعلا نريد ان نعرف ما الفرق فقط لا اكثر ولا اقل
وبالتوفيق اخي الفاضل

معذرة تدخلي كان مبني على تجربتي للكود السابق والكود المعدل من طرفك ولم اجد اي تغيير في حساب الضريبة بينهم
لهذا طرحت هذا التساءل
(16-06-2020, 07:51 PM)medreg كتب : [ -> ]مرحبا اخي والله لم افهم قصدك
بعد الإطلاع على التغيير الذي تفضلت به
لم ارى اي تغيير على الكود
واذا كنت تقصد بالتغيير اضافتك للمتغير Imposable
و
Imposable := Soumis
فهنا اتساءل ما الفرق بين

if  (soumis > 30000) and (soumis <= 35000)
و
if  (Imposable > 30000) and (Imposable <= 35000)
اذا كان soumis هو نفسه imposable
او imposable هو نفسه soumis
ارجو التوضيح حتى نفهم اكثر
لأنه في نظري لا ارى اي تغيير وهذ حسب تحليلي المتواضع علما انني لست خبير لا في مجال البرمجة ولا في مجال المحاسبة
بل لازلت اطمع في الزيادة
اللهم علمنا ما ينفعنا وانفعنا بما علمتنا يا رب العالمين (امين)
يا اخي لا تعتبر ان تدخلي هذا تغليط او شيء من هذا القبيل لا والله كل ما اقصده التوضيح لما تفضلت به فعلا نريد ان نعرف ما الفرق فقط لا اكثر ولا اقل
وبالتوفيق اخي الفاضل

معذرة تدخلي كان مبني على تجربتي للكود السابق والكود المعدل من طرفك ولم اجد اي تغيير في حساب الضريبة بينهم
لهذا طرحت هذا التساءل

إذا جربت الكود الأصلي بالقيم 30001 حتى 30009 تعطيك النتيجة 2500 وهي الحالات الوحيدة التي فيها الخطأ أما الباقي فلا 
والسبب هو أننا نقوم بتغيير قيمة soumis  في التعليمةالتالية soumis := int(soumis/10)*10 حيث تقوم بجعل رقم الأحاد يساوي الصفر 
ولهذا السبب أقوم بحفظ قيمة soumis في المتغير imposable لإسخدامها في المقارنة  if (soumis >30000) and (soumis <= 35000) then

لأنه لو أخذنا مثلا القيمة 30005 فهي أكبر من 30000 ولكن قيمة المتغير soumis تغيرت وأصبحت 30000 فإن الشرط لا يتحقق ولا يقوم بالتخفيظ فتكون النتيجة المعطاة هي 2500 بدلا عن 0
فعلا بارك الله فيكم اخي على التوضيح
يعني عندما نأخذ القيمة الموجودة بالمتغير soumis ونضعها في المتغير imposable تختفي الأجزاء الناجمة عن عملية النسبة الحسابية
شكرا جزيلا
اللهم زدنا علما
ان لم اتدخل ربما الكثير من الأعضاء لم ينتبه
جزاكم الله عنا كل خير
الصفحات : 1 2 3