بتاريخ: 15 نوفمبر 200619 سنة comment_82932 السلام عليكم و رحمة الله و بركاتهارجو المساعدة ممن وهبه الله علماً في هذا المجال .شرح مشكلتي :فحوى نظام التامينات الاجتماعية :ان الموظف يتم التأمين عليه من بداية السنة الى نهايتها كما يلي (الراتب الاساسي(في بداية السنة)+بدل السكن(في بداية السنة))= راتب التأمينات الاجتماعيةيخصم من راتب الموظف السعودي 9%(من راتب التأمينات الاجتماعية)و من الموظف الاجنبي 2% أخطار .اذا مثلا جات للموظف زيادة في نصف السنة المفروض ان راتب التأمينات الاجتماعية لا يتأثر ب الزيادة و انما يؤمن عليه بنفس الراتب الى ان تبدأ السنة الميلاددية الجديدة فإذا بدأت السنة الجديدة يتم احتساب راتب التأمينات الاجتماعية علة الراتب الجديد .------------------------المشكلة :هي انه عندي في الشركة يتأثر راتب التأمينات الاجتماعية بالزيادة حيث انه جات زياداة ارواتب هذه السنة 2006 م متأجرة تقريباً في نصف السنة . فتأثر الراتب بحيث يحسب راتب التأمينات الاجتماعية على الراتب بعد الزيادة و في نصف السنة تقريبا و الصحيح ان يحتسب الزيادة في بداية العام الجديد 2007 . ---------------------------مكان المشكلة تقنيا في نظام الاوراكل هو في الفورميلا التي تقوم بإجراء الحسبة -------------------------نص الفورميلا :ALIAS PER_EMP_NUMBER AS acEmpNumALIAS ASG_SALARY AS amCurrentSalaryALIAS PAY_PROC_PERIOD_START_DATE AS adPeriodStartDateALIAS PAY_PROC_PERIOD_END_DATE AS adPeriodEndDateDEFAULT FOR ASG_SALARY IS 0DEFAULT FOR acEmpNum IS '0'DEFAULT FOR adPeriodStartDate IS '01-JAN-1900' (date)DEFAULT FOR adPeriodEndDate IS '01-JAN-1900' (date)Default for SCL_ASG_SA_GOSI_ANNUITIES is ' 'Default for SCL_ASG_SA_GOSI_HAZARDS is ' 'Default for SA_PERSON_TERMINATION_DATE is '4712/12/31 00:00:00' (DATE)Default for PAY_PROC_PERIOD_END_DATE_DP is '4712/12/31 00:00:00' (DATE)/*Check for definition of Local Nationality Profile*/l_exists = SA_LOCAL_NATIONALITY_NOT_DEFINED()IF l_exists = 'NOTEXISTS' THEN(l_msg = SA_GET_MESSAGE('PAY','HR_374812_SA_LOC_NAT_NOT_DEF')return l_msg)viCurrentYear = SUBSTR( TO_CHAR( adPeriodStartDate, 'DD-MON-YYYY' ) , 8, 4 )vdGosiDate = TO_DATE( '01-JAN-' + viCurrentYear, 'DD-MON-YYYY' )vmGosiSalary = Salary_at( acEmpNum , vdGosiDate )IF vmGosiSalary = 0 THEN( vmGosiSalary = amCurrentSalary)vmGosiHousing = LEAST( (GREATEST( ( ASG_SALARY * 3 ), 11000 ) / 12 ) , 9000 )/*Only do GOSI calculation if employee is subject to at least one type of GOSI deduction.*/IF (SCL_ASG_SA_GOSI_ANNUITIES = 'Y') OR (SCL_ASG_SA_GOSI_HAZARDS = 'Y') THEN( /* Do not process if the employee has been terminated before 28th of the month being processed. */ IF SA_PERSON_TERMINATION_DATE >= PAY_PROC_PERIOD_END_DATE_DP /*OR (TO_NUMBER(TO_CHAR(SA_PERSON_TERMINATION_DATE,'DD')) > 27 AND MONTHS_BETWEEN(SA_PERSON_TERMINATION_DATE ,PAY_PROC_PERIOD_END_DATE_DP) < 1) Commented By Abhijit on 09/07/05*/ THEN ( /* Get the GOSI base on which to base the calculation.*/ gosi_base = GOSI_REFERENCE_EARNINGS_ASG_YTD If gosi_base = 0 Then ( gosi_base = SA_USER_GOSI_REFERENCE_FORMULA() ee_gosi_reference_earnings = SA_USER_GOSI_REFERENCE_FORMULA() ) If gosi_base = 0 Then ( gosi_base = SUBJECT_TO_GOSI_ASG_RUN ee_gosi_reference_earnings = SUBJECT_TO_GOSI_ASG_RUN ) /* Adjust the GOSI base based on the upper and lower GOSI limits.*/ gosi_base =LEAST(GREATEST(gosi_base, SA_GOSI_BASE_LOWER_LIMIT),SA_GOSI_BASE_UPPER_LIMIT) gosi_base = ( vmGosiSalary + vmGosiHousing ) /* GOSI Annuities calculation.*/ If SCL_ASG_SA_GOSI_ANNUITIES = 'Y' Then ( er_gosi_annuities = gosi_base * SA_ER_ANNUITIES_PCT/100 ee_gosi_annuities = gosi_base * SA_EE_ANNUITIES_PCT/100 er_rate_annuities = SA_ER_ANNUITIES_PCT ee_rate_annuities = SA_EE_ANNUITIES_PCT annuities_gosi_base = gosi_base /* Employees net pay is too small to meet the GOSI deduction so employer pays the difference NB. employee will receive zero net pay in this case.*/ IF NET_ASG_RUN < ee_gosi_annuities THEN ( ee_gosi_arrears = ee_gosi_annuities - NET_ASG_RUN ee_gosi_annuities = NET_ASG_RUN ) ) /*GOSI Hazards calculation. */ IF SCL_ASG_SA_GOSI_HAZARDS = 'Y' THEN ( er_gosi_hazards = gosi_base * SA_ER_HAZARDS_PCT/100 er_rate_hazards = SA_ER_HAZARDS_PCT hazards_gosi_base = gosi_base ) RETURN hazards_gosi_base ,annuities_gosi_base ,er_rate_hazards ,er_rate_annuities ,ee_rate_annuities ,er_gosi_hazards ,er_gosi_annuities ,ee_gosi_annuities ,ee_gosi_arrears ,ee_gosi_reference_earnings )) -------------------------ارجوا مساعدتي بحيث يتم التعديل عليها لتحسب التأثير بعد بداية السنة الجديدة .و جزاكم الله خير الجزاء اخوكم م / عوض الحربي تقديم بلاغ
بتاريخ: 15 نوفمبر 200619 سنة comment_82976 أخي حربي :: من الصعب جدا تتبع هذا ال code الا في حالة تنفيذه , ولكن أنا اشك في جملة statement معينة وهي .. viCurrentYear = SUBSTR( TO_CHAR( adPeriodStartDate, 'DD-MON-YYYY' ) , 8, 4 ) vdGosiDate = TO_DATE( '01-JAN-' + viCurrentYear, 'DD-MON-YYYY' ) vmGosiSalary = Salary_at( acEmpNum , vdGosiDate ) IF vmGosiSalary = 0 THEN ( vmGosiSalary = amCurrentSalary ) حيث في الجملة الشرطية لهذه الجملة بالذات يقع الخطا , لان اتوقع هنا انت تحدد ال Total لل Gosi من ال Basic Salary الذي تريد الاعتماد في احتسابه .ولكن المشكلة عندك انه هنا دائما سيأخذ الراتب الجديد "هذا شئ اكيد" لأنك تاخذ السنة التي بها الراتب من المتغير adPeriodStartDate وهو 1900 وسيعطيك دائما الراتب = 0 لانه ليس عنده راتب للموظف في تلك السنة وبالتالي سيأخذ الراتب الحالي vmGosiSalary = amCurrentSalaryوالذي يكون الراتب الجديد والذي تم فيه حصول الزيادة عليه ...لذلك الخطأ هو من المتغير adPeriodStartDate خذ دائما السنة اللتي انت بها .. مثلا 2006 ثم جمع التاريخ مع الشهر واليوم ليكون .. 2006 - 01janبداية السنة ..انشاء الله هذا يكون السبب. تقديم بلاغ
بتاريخ: 15 نوفمبر 200619 سنة comment_82978 ولكن هناك سؤال للاخ حربي من ناحية ال Business وهو ::لماذا للموظف المستقيل اذا كانت تاريخ استقالته قبل 28 من الشهر لا انفذ الجملة "اقتطع من راتبه التامين" ?!!بالنسبة للموظف المتعين جديد هل يجب ان يكون عدد ايام عمله في اول شهر تعين فيه "يجب ان يتجاوز مثلا 15 او 20 يوم عمل في ذلك الشهر" حتى ابدأ باقتطاع مبلغ التامينات منه في ذلك الشهر !??.الرجاء التوضيح. ( /* Do not process if the employee has been terminated before 28th of the month being processed. */ ) وشكراا. تقديم بلاغ
بتاريخ: 15 نوفمبر 200619 سنة comment_83009 الاخ حربيبصراحة انته الي بتحكي فيه صح 100/100 لانه هاد النظام العامل بالمملكلة العربية السعودية و اوراكل عامله شغل مقرف لا يغني من جوع يعني لو ما كتبوا هاي الفورمولا احسنلهم على كل حال اذا بتلاحظ اول الفورمولا فيه جمله asg_salary و هاد الداتا بيس ايتم برجع آخر راتب تقاضاه الموظف وهون هي مشكلتك الحل: انه إعمل الك فنكشن يجيبلك راتب الموظف بتاريخ بداية السنة و استخدمة بدل الموجود و انشاء الله يحللك المشكله . تقديم بلاغ
بتاريخ: 15 نوفمبر 200619 سنة comment_83010 بالنسبة للاخ baslit اخوي هاد نظاميا صحيح و هاد نظام التأمينات الإجتماعية المعمول فية بالمملكة بتخصم تأمينات بأول شهر تعيين و ما بتخصم بآخر شهر أو العكس تقديم بلاغ
بتاريخ: 18 نوفمبر 200619 سنة comment_83211 .. أنا ما حكيت انو النظام غير صحيح اطلاقا .. ,واذا لاحظت انو ردي الاول عن المشكلة نفس الرد الذي يخصك تقريبا .. ولكن في ردي الثاني ..كنت فقط استفسر "سؤال يعني" عن ما هو ال Business الذي تعامل معه الاخ حربي بالنسبة للموظف المستقيل !؟ ( /* Do not process if the employee has been terminated before 28th of the month being processed. */ ) << هل تستطيع الاجابة اخ Ora_Consultant بخصوص الموظف المستقيل !!?? تقديم بلاغ
بتاريخ: 18 نوفمبر 200619 سنة comment_83297 شكرا على الموضوع والتوضيح .. ومنكم نستفيد ......@@@@@ تم تعديل 18 نوفمبر 200619 سنة بواسطة يحي القاضي تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.