المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
السلام عليكم ورحمة الله تعالى وبركاته
احتاج الى التعديل على هذا الكود المتعلق بالضريبة على الدخل الإجمالي لسنة 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).
جزاكم الله عنا كل خير
كل من 2 users say قال شكرا ل medreg على المشاركة المفيدة2 users say Thank You to medreg for this post
• aymen, kito
المشاركات : 522
المواضيع 46
:
: 394
الإنتساب : Sep 2011
وعليك السلام و رحمة الله و بركاته
بالنسبة لـ أكثر من 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 فقط
كصورة التالية
أما ذوي الاحتياجات الخاصة
كود : 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;
المشاركات : 421
المواضيع 77
:
: 195
الإنتساب : Dec 2008
07-06-2020, 06:54 PM
(آخر تعديل لهذه المشاركة: 07-06-2020, 07:27 PM بواسطة ALG2009.)
وعليكم السلام
هل جربتم
كود : irg= ( المبلغ الخاضع للضريبة - 000 30 ) × 80 %
كود : function IRG (soumis:Real) :string;
begin
result:=FloatToStr((soumis-30000)*0.8);
end;
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
08-06-2020, 12:10 AM
(آخر تعديل لهذه المشاركة: 08-06-2020, 12:13 AM بواسطة medreg.)
بارك الله فيك اخي العربي هذا هو المطلوب جزاكم الله عنا كل خير (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]](https://www7.0zz0.com/2020/06/07/02/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 على المرور
بارك الله فيك انت ايضا وفي جميع اعضاء المنتدى الغالي
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(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
المشاركات : 421
المواضيع 77
:
: 195
الإنتساب : Dec 2008
08-06-2020, 02:27 PM
(آخر تعديل لهذه المشاركة: 08-06-2020, 03:09 PM بواسطة ALG2009.)
(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;
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(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]](https://www7.0zz0.com/2020/06/07/02/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;
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
16-06-2020, 07:51 PM
(آخر تعديل لهذه المشاركة: 16-06-2020, 07:53 PM بواسطة medreg.)
مرحبا اخي والله لم افهم قصدك
بعد الإطلاع على التغيير الذي تفضلت به
لم ارى اي تغيير على الكود
واذا كنت تقصد بالتغيير اضافتك للمتغير Imposable
و
Imposable := Soumis
فهنا اتساءل ما الفرق بين
if (soumis > 30000) and (soumis <= 35000)
و
if (Imposable > 30000) and (Imposable <= 35000)
اذا كان soumis هو نفسه imposable
او imposable هو نفسه soumis
ارجو التوضيح حتى نفهم اكثر
لأنه في نظري لا ارى اي تغيير وهذ حسب تحليلي المتواضع علما انني لست خبير لا في مجال البرمجة ولا في مجال المحاسبة
بل لازلت اطمع في الزيادة
اللهم علمنا ما ينفعنا وانفعنا بما علمتنا يا رب العالمين (امين)
يا اخي لا تعتبر ان تدخلي هذا تغليط او شيء من هذا القبيل لا والله كل ما اقصده التوضيح لما تفضلت به فعلا نريد ان نعرف ما الفرق فقط لا اكثر ولا اقل
وبالتوفيق اخي الفاضل
معذرة تدخلي كان مبني على تجربتي للكود السابق والكود المعدل من طرفك ولم اجد اي تغيير في حساب الضريبة بينهم
لهذا طرحت هذا التساءل
المشاركات : 55
المواضيع 0
:
: 17
الإنتساب : Mar 2008
(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
المشاركات : 501
المواضيع 136
:
: 11
الإنتساب : Feb 2008
فعلا بارك الله فيكم اخي على التوضيح
يعني عندما نأخذ القيمة الموجودة بالمتغير soumis ونضعها في المتغير imposable تختفي الأجزاء الناجمة عن عملية النسبة الحسابية
شكرا جزيلا
اللهم زدنا علما
ان لم اتدخل ربما الكثير من الأعضاء لم ينتبه
جزاكم الله عنا كل خير
كل من 1 user says قال شكرا ل medreg على المشاركة المفيدة1 user says Thank You to medreg for this post
• salah-78
|