Sunteți pe pagina 1din 40

Pay roll for settlement employees.

• Proc_syst_cntl_upd(‘yyyymm’)

Objective of this procedure :-

The objective of this procedure is to update colomn with current year and month ctl_para_name = 'YYYYMM'
from table syst_cntl.

Code :

create procedure proc_syst_cntl_upd(yymm in varchar2)


as
begin
update syst_cntl
set ctl_valu=yymm
where ctl_form_name='WAGSJRNL'
and ctl_para_name = 'YYYYMM';
end;

syst_cntl table :

CTL_FORM_NAME VARCHAR2(40)
CTL_PARA_NAME VARCHAR2(40)
CTL_VALU VARCHAR2(40)
CTL_ENTR_DATE DATE
CTL_ENTR_UID VARCHAR2(8)
CTL_UPD_DATE DATE
CTL_UPD_UID VARCHAR2(8)

• Proc_del_emp(‘yyyymm)

Objective : This procedure accepts current year and month according to that it updates emp_type = ‘DEL’
and emp_pydy=2.where emp_san_date = the input date.

Code :

create or replace PROCEDURE PROC_DEL_EMP (yymm in varchar2)


is
t_from varchar2(4) ;
t_to varchar2(4) ;
begin
begin
update empl_mstr
set emp_type='DEL',
emp_pydy=2
where emp_type='LIV' and
emp_san_date=to_date(yymm,'yyyymm') and
emp_sep_sepc_code is not null;
END;

Table empl_mstr
EMP_PERS_NMBR NOT NULL VARCHAR2(6)
EMP_TTL_TITL_CODE VARCHAR2(8)
EMP_FRST_NAME NOT NULL VARCHAR2(20)
EMP_LAST_NAME VARCHAR2(20)
EMP_FTHR_FRST_NAME VARCHAR2(20)
EMP_FTHR_LAST_NAME VARCHAR2(20)
EMP_BLD_GRP VARCHAR2(3)
EMP_SEX_CODE CHAR(1)
EMP_MRTL_STS CHAR(1)
EMP_PAN VARCHAR2(20)
EMP_APPT_DATE DATE
EMP_BRTH_DATE DATE
EMP_INCR_DATE DATE
EMP_ID_MARK VARCHAR2(50)
EMP_TYPE VARCHAR2(3)
EMP_SEP_SEPC_CODE VARCHAR2(2)
EMP_PYDY NUMBER(2)
EMP_CTG_CATG_CODE CHAR(1)
EMP_PRFT_CNTR_CODE CHAR(1)
EMP_WRKS_CODE CHAR(1)
EMP_DIV_DIVN_CODE CHAR(1)
EMP_DSB_SUB_CODE CHAR(1)
EMP_FNC_FUNC_CODE CHAR(1)
EMP_DPT_DEPT_CODE VARCHAR2(3)
EMP_SEC_SECN_CODE VARCHAR2(2)
EMP_DPT_WORK_DEPT VARCHAR2(3)
EMP_GRD_GRAD_CODE VARCHAR2(3)
EMP_INC_INCN_GRP VARCHAR2(3)
EMP_DSG_DESG_CODE VARCHAR2(3)
EMP_LAST_PROM_DATE DATE
EMP_LAST_TRFR_DATE DATE
EMP_SAN_DATE DATE
EMP_EXTN_YRS NUMBER(1)
EMP_OFF_CODE CHAR(1)
EMP_HIER_NMBR NUMBER(7)
EMP_HOU_HOUS_CODE CHAR(1)
EMP_TEFB_INDC CHAR(1)
EMP_TOFB_INDC CHAR(1)
EMP_COOP_INDC CHAR(1)
EMP_TWU_INDC CHAR(1)
EMP_ITG_ITCG_CODE VARCHAR2(3)
EMP_MGN_MGZN_CODE VARCHAR2(2)
EMP_DUTY_CODE CHAR(1)
EMP_ESF_INDC CHAR(1)
EMP_DPU_DEPU_CODE CHAR(1)
EMP_CARD_NMBR VARCHAR2(6)
EMP_HOD_INDC CHAR(1)
EMP_RPAD_PERS_NMBR VARCHAR2(6)
EMP_RPFN_PERS_NMBR VARCHAR2(6)
EMP_UCM_INDC CHAR(1)
EMP_CDR_CDRE_CODE VARCHAR2(5)
EMP_DA_INDC CHAR(1)
EMP_PF_INDC CHAR(1)
EMP_EPF_INDC CHAR(1)
EMP_OT_FACT NUMBER(2,1)
EMP_SLC_SLRY_CODE CHAR(1)
EMP_PENS_FCTR NUMBER(5,2)
EMP_BSIC_RATE NUMBER(8)
EMP_DA_RATE NUMBER(8,2)
EMP_PERS_PAY_RATE NUMBER(8,2)
EMP_INCN_PROT_ALLW NUMBER(8,2)
EMP_SPL_PROT_ALLW NUMBER(8,2)
EMP_CONV_ALLW NUMBER(8,2)
EMP_HRA NUMBER(8,2)
EMP_LTA_AMNT NUMBER(8,2)
EMP_VEHC_TYPE CHAR(1)
EMP_VEHC_NMBR VARCHAR2(10)
EMP_VEHC_REGN_DATE DATE
EMP_FPF_ACCT_NMBR VARCHAR2(5)
EMP_SAN_MEMB_NMBR VARCHAR2(10)
EMP_BNK_BANK_CODE VARCHAR2(3)
EMP_BANK_ACCT_NMBR VARCHAR2(15)
EMP_LAST_BSIC_RATE NUMBER(8)
EMP_BANK_LDGR_NMBR VARCHAR2(8)
EMP_LAST_BSIC_CHNG DATE
EMP_LAST_PERS_NMBR VARCHAR2(6)
EMP_GRD_LAST_GRAD VARCHAR2(3)
EMP_NEXT_KIN VARCHAR2(20)
EMP_REL_NEXT_KIN_REL VARCHAR2(2)
EMP_RLG_RLGN_CODE VARCHAR2(2)
EMP_NID_NATL_ID VARCHAR2(20)
EMP_NTL_NATL_CODE VARCHAR2(20)
EMP_CST_CSTE_CODE VARCHAR2(3)
EMP_APP_APPT_CODE VARCHAR2(2)
EMP_ENTR_DATE DATE
EMP_ENTR_UID VARCHAR2(8)
EMP_UPD_DATE DATE
EMP_UPD_UID VARCHAR2(8)
EMP_TRNG_CMPL_DATE DATE
EMP_GRD_SUBS_CODE VARCHAR2(3)
EMP_BOND_INDC CHAR(1)
EMP_BOND_STRT_DATE DATE
EMP_BOND_END_DATE DATE
EMP_SRTY_PERS_NMBR VARCHAR2(6)
EMP_BOND_AMNT NUMBER(8,2)
EMP_STLD_DATE DATE
EMP_RENT_PAID NUMBER(7,2)
EMP_CLB_CLUB_CODE VARCHAR2(2)
EMP_MENTOR VARCHAR2(6)
EMP_ACCESS_STRING VARCHAR2(30)
EMP_CLUSTER_CODE VARCHAR2(2)
EMP_CCN_CODE VARCHAR2(5)

It updates another field txp_amnt_plan = 0 from table itax_plan_mstr .

Code:
Begin
select to_char(prd_from,'yyyy') ,to_char(prd_to,'yyyy')
into t_from,t_to
from syst_prds
where prd_name='ITAX_YEAR' ;

update itax_plan_mstr
set txp_amnt_plan = 0
where txp_from_year= t_from
and txp_to_year = t_to
and txp_emp_pers_nmbr in(select emp_pers_nmbr
from empl_mstr
where emp_type='LIV'
and emp_san_date is not null
);
end ;

end;

Table : Itax_plan_mstr

TXP_FROM_YEAR NOT NULL VARCHAR2(4)


TXP_TO_YEAR NOT NULL VARCHAR2(4)
TXP_REF NOT NULL NUMBER(6)
TXP_EMP_PERS_NMBR NOT NULL VARCHAR2(6)
TXP_SCD_SVNG_CODE NOT NULL VARCHAR2(5)
TXP_AMNT_ACTL NOT NULL NUMBER(10,2)
TXP_AMNT_PLAN NOT NULL NUMBER(10,2)
TXP_ENTR_DATE DATE
TXP_ENTR_UID VARCHAR2(8)
TXP_UPD_DATE DATE
TXP_UPD_UID VARCHAR2(8)
TXP_DESC VARCHAR2(100)

• Proc_atn_prds_upd(yyyymm)

Objective : This procedure will inserting values in table pyrl_mstr and pydy_mstr and updating atn_prds table
Fields are atp_prm_yymm=t_yyyymm and atp_prm_ref=99. where atp_yymm=t_yyyymm
and atp_ref in (99,1).

Code :

create or replace
procedure proc_atn_prds_upd(t_yyyymm in varchar2) as
mnth varchar2(10) := to_char(add_months(to_date(t_yyyymm,'yyyymm'),1),'MON-YYYY');
begin
insert into pyrl_mstr(prm_yymm,prm_ref,prm_rem,prm_prc_pyrl_code,prm_entr_date,
prm_entr_uid,prm_upd_date,prm_upd_uid,prm_rmks)
values(t_yyyymm,99,'Monthly Salary','M',sysdate,'HRM',null,null,
'NB: Excess recovery of Income Tax for the current month, if any, should be
brought to our notice by 8th '||mnth||'.');
insert into pydy_mstr
values(t_yyyymm,99,1,null,null,sysdate,'HRM',null,null);
update atn_prds
set atp_prm_yymm=t_yyyymm,
atp_prm_ref=99
where atp_yymm=t_yyyymm
and atp_ref in (99,1);
end;

Table : pyrl_mstr

PRM_YYMM NOT NULL VARCHAR2(6)


PRM_REF NOT NULL NUMBER(2)
PRM_REM VARCHAR2(20)
PRM_PRC_PYRL_CODE CHAR(1)
PRM_ENTR_DATE DATE
PRM_ENTR_UID VARCHAR2(8)
PRM_UPD_DATE DATE
PRM_UPD_UID VARCHAR2(8)
PRM_RMKS VARCHAR2(1000)
PRM_GLR_DEBT_MH VARCHAR2(2)
PRM_GLR_DEBT_SH VARCHAR2(2)

Table ; pydy_mstr

PDM_PRM_YYMM NOT NULL VARCHAR2(6)


PDM_PRM_REF NOT NULL NUMBER(2)
PDM_PYDY NOT NULL NUMBER(2)
PDM_GRSS_DATE DATE
PDM_NET_DATE DATE
PDM_ENTR_DATE DATE
PDM_ENTR_UID VARCHAR2(8)
PDM_UPD_DATE DATE
PDM_UPD_UID VARCHAR2(8)

Table : atn_prds

ATP_YYMM NOT NULL VARCHAR2(6)


ATP_REF NOT NULL NUMBER(2)
ATP_DESC VARCHAR2(20)
ATP_CLOS_DATE DATE
ATP_PRM_YYMM VARCHAR2(6)
ATP_PRM_REF NUMBER(2)
ATP_ENTR_DATE DATE
ATP_ENTR_UID VARCHAR2(8)
ATP_UPD_DATE DATE
ATP_UPD_UID VARCHAR2(8)

• Proc_date_ins(‘yyyymm’)

Objective : This procedure will inserting date into date_mstr table when new employee entry will made .

Code :

create or replace procedure proc_date_ins ( t_yymm in varchar2 )


is
curr_date date default to_date(t_yymm, 'yyyymm');
begin
while curr_date between to_date(t_yymm, 'yyyymm') and
last_day(to_date(t_yymm, 'yyyymm'))
loop
insert into date_mstr values (curr_date, sysdate, substr(user, 1, 8),
null, null );
curr_date := curr_date + 1;
end loop;
end;
/

Table : Date_Mstr

DTM_DATE NOT NULL DATE


DTM_ENTR_DATE DATE
DTM_ENTR_USID VARCHAR2(8)
DTM_UPD_DATE DATE
DTM_UPD_USID VARCHAR2(8)

First A/c. Dept. made some entry, after that check working dept in empl profile screen check duty code in empl code detl
screen.

• Proc_ofab_updt(‘yyyymm’,pno)

Objective : This procedure will update the off days in atn_mstr table for new joined employees. It will take date
from empl_mstr and date_mstr tables in a cursor.

Code :

create or replace procedure proc_ofab_updt (t_yymm in varchar2,


t_pno in varchar2)
as
cursor c1 is select t_yymm, 99, emp_pers_nmbr, dtm_date,
decode (emp_off_code,to_char(dtm_date,'d'),8,
0) off
from empl_mstr, date_mstr
where
emp_type = 'LIV' and
emp_pers_nmbr = t_pno and
to_char(dtm_date,'yyyymm') = t_yymm and
dtm_date not in ( select atn_date from atn_mstr
where atn_emp_pers_nmbr = t_pno
and atn_atp_yymm = t_yymm );
begin
for c1rec in c1 loop
exit when c1%notfound;
insert into atn_mstr (atn_atp_yymm, atn_atp_ref, atn_emp_pers_nmbr,
atn_date, atn_off_hrs, atn_abs_fhlf_hrs,
atn_abs_shlf_hrs)
values (t_yymm,99,t_pno,c1rec.dtm_date, c1rec.off, 4, 4);
end loop;
end;

Table : atn_mstr

ATN_DATE NOT NULL DATE


ATN_EMP_PERS_NMBR NOT NULL VARCHAR2(6)
ATN_ATP_YYMM NOT NULL VARCHAR2(6)
ATN_ATP_REF NOT NULL NUMBER(2)
ATN_IN_BADG_READ VARCHAR2(2)
ATN_OUT_BADG_READ VARCHAR2(2)
ATN_IN_TIME NUMBER(4)
ATN_OUT_TIME NUMBER(4)
ATN_SFT_SHFT_CODE VARCHAR2(2)
ATN_LATE_MNTS NUMBER(4)
ATN_ERLY_MNTS NUMBER(4)
ATN_SFT_EDIT_SHFT_CODE VARCHAR2(2)
ATN_FHLF_HRS NUMBER(5,2)
ATN_SHLF_HRS NUMBER(5,2)
ATN_LEAV_FHLF_HRS NUMBER(5,2)
ATN_LEAV_SHLF_HRS NUMBER(5,2)
ATN_HPAY_FHLF_HRS NUMBER(5,2)
ATN_HPAY_SHLF_HRS NUMBER(5,2)
ATN_LWP_FHLF_HRS NUMBER(5,2)
ATN_LWP_SHLF_HRS NUMBER(5,2)
ATN_ABS_FHLF_HRS NUMBER(5,2)
ATN_ABS_SHLF_HRS NUMBER(5,2)
ATN_SPLV_FHLF_HRS NUMBER(5,2)
ATN_SPLV_SHLF_HRS NUMBER(5,2)
ATN_LVIN_FHLF_HRS NUMBER(5,2)
ATN_LVIN_SHLF_HRS NUMBER(5,2)
ATN_SATN_FHLF_HRS NUMBER(5,2)
ATN_SATN_SHLF_HRS NUMBER(5,2)
ATN_OFF_HRS NUMBER(5,2)
ATN_OFF_NINC_HRS NUMBER(5,2)
ATN_GRD_ACTG_GRAD VARCHAR2(3)
ATN_INC_ACTG_INCN VARCHAR2(3)
ATN_DPT_WORK_DEPT VARCHAR2(3)
ATN_OT_HRS NUMBER(5,2)
ATN_AUTO_LEAV_INDC CHAR(1)
ATN_ENTR_DATE DATE
ATN_ENTR_UID VARCHAR2(8)
ATN_EDIT_DATE DATE
ATN_EDIT_UID VARCHAR2(8)
ATN_UPD_DATE DATE
ATN_UPD_UID VARCHAR2(8)
ATN_ACTG_PNO VARCHAR2(6)
• Pac_itax_calc.proc_itax_calc(‘p’,yyyymm,’200203’,’200302’) Financial Year.

Objective : As per name this procedure will calculate the Income Tax for the month . It is a package which contains
number of functions i.e. function f_cded_txbl_grss, function func_txbl_hrd, function func_grss_for_tax etc.

Code :

create or replace
package pac_itax_calc as
function f_cded_txbl_grss (
PYRL_ref IN number
, P_PNO IN VARCHAR2
, P_YYMM IN VARCHAR2
) return number;
pragma restrict_references(f_cded_txbl_grss,wnds,wnps,rnps);
function func_txbl_hrd(
pno in varchar2
, prcyymm in varchar2
, proc_yymm in varchar2
, fyymm in varchar2
, tyymm in varchar2
, instl in number
) return number;
pragma restrict_references(func_txbl_hrd,wnds,wnps,rnps);
function func_grss_for_tax(
type in char
, pno in varchar2
, prjmnth in number
, frmprd in varchar2
, toprd in varchar2
, prcyyyymm in varchar2
, proc_yymm in varchar2
) return number;
pragma restrict_references(func_grss_for_tax,wnds,wnps,rnps);
function func_paygrs(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number;
pragma restrict_references(func_paygrs,wnds,wnps,rnps);
function func_sal(
pno in varchar2
, prcyyyymm in varchar2
, proc_yymm in varchar2
, prjmnth in number
) return number;
pragma restrict_references(func_sal,wnds,wnps,rnps);
function func_hra_proj(
pno in varchar2
, yyyymm in varchar2
) return number;
pragma restrict_references(func_hra_proj,wnds,wnps,rnps);
function func_grss_rebt(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
) return number;
pragma restrict_references(func_grss_rebt,wnds,wnps,rnps);
function func_inst_mnth(
pers_nmbr in varchar2
, itax_from_period in varchar2
, itax_to_period in varchar2
, current_period in varchar2
) return number;
pragma restrict_references(func_inst_mnth,wnds,wnps,rnps);
function func_std_dedn(
grss in number
, frmyy in varchar2
, toyy in varchar2
) return number;
pragma restrict_references(func_std_dedn,wnds,wnps,rnps);
function func_totl_svng(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
) return number;
pragma restrict_references(func_totl_svng,wnds,wnps,rnps);
function func_plnsvg(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
) return number;
pragma restrict_references(func_plnsvg,wnds,wnps,rnps);
function func_svgact(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number;
pragma restrict_references(func_svgact,wnds,wnps,rnps);
function func_svgprj(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
) return number;
pragma restrict_references(func_svgprj,wnds,wnps,rnps);
function func_svg_pay_prj(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
) return number;
pragma restrict_references(func_svg_pay_prj,wnds,wnps,rnps);
function func_rebt(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
, grss in number
) return number;
pragma restrict_references(func_rebt,wnds,wnps,rnps);
function func_plnsvg_rebt(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
, schm in varchar2
) return number;
pragma restrict_references(func_plnsvg_rebt,wnds,wnps,rnps);
function func_svgact_rebt(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
, schm in varchar2
) return number;
pragma restrict_references(func_svgact_rebt,wnds,wnps,rnps);
function func_svgprj_rebt(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
, schm in varchar2
) return number;
pragma restrict_references(func_svgprj_rebt,wnds,wnps,rnps);
function func_tax_cnvy_paid(
pno in varchar2
, proc_yymm in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number;
pragma restrict_references(func_tax_cnvy_paid,wnds,wnps,rnps);
function func_txbl_conv(
pno in varchar2
, proc_yymm in varchar2
) return number;
pragma restrict_references(func_txbl_conv,wnds,wnps,rnps);
function func_nontax_conv(
pno in varchar2
, proc_yymm in varchar2
, fromyymm in varchar2
, toyymm in varchar2
, inst in number
) return number ;
pragma restrict_references(func_nontax_conv,wnds,wnps,rnps);
function func_txbl_lta(
pno in varchar2
, frmyymm in varchar2
, toyymm in varchar2
) return number;
pragma restrict_references(func_txbl_lta,wnds,wnps,rnps);
function func_non_tax_hra(
pno in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number;
pragma restrict_references(func_non_tax_hra,wnds,wnps,rnps);
function func_tax_comp(
p_pno varchar2
, grss number
, taxfrm varchar2
, taxto varchar2
) return number;
pragma restrict_references(func_tax_comp,wnds,wnps,rnps);
function func_surcharge_comp(
grss number
, taxfrm varchar2
, taxto varchar2
, taxamnt number
) return number;
pragma restrict_references(func_surcharge_comp,wnds,wnps,rnps);
function func_tax_rcvd(
pno in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number ;
pragma restrict_references(func_tax_rcvd,wnds,wnps,rnps);
function func_pln_rebt(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
, schm in varchar2
) return number;
pragma restrict_references(func_pln_rebt,wnds,wnps,rnps);
function func_grss_plus(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
) return number;
pragma restrict_references(func_grss_plus,wnds,wnps,rnps);
function func_svg_pay_act(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number;
pragma restrict_references(func_svg_pay_act,wnds,wnps,rnps);
function func_txbl_elec(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number ;
pragma restrict_references(func_txbl_elec,wnds,wnps,rnps);
function func_txbl_waterchrg(
pno in varchar2
, prcyyyymm in varchar2
, procyymm in varchar2
, frmprd in varchar2
, toprd in varchar2
, instl in number
) return number ;
pragma restrict_references(func_txbl_waterchrg,wnds,wnps,rnps);
function func_txbl_loan(
pno in varchar2
, prev_yymm in varchar2
, proc_yymm in varchar2
, fyymm in varchar2
) return number ;
pragma restrict_references(func_txbl_loan,wnds,wnps,rnps);
function func_pf_perq(
p_pno in varchar2
) return number ;
pragma restrict_references(func_pf_perq,wnds,wnps,rnps);
function func_88d(
p_pno varchar2
, grss number
, taxfrm varchar2
, taxto varchar2
) return number ;
pragma restrict_references(func_88d,wnds,wnps,rnps);
procedure proc_itax_calc(
type in char
, proc_yymm in varchar2
, frmym in varchar2
, toym in varchar2
);
end pac_itax_calc;
/
create or replace
package body pac_itax_calc as
function f_cded_txbl_grss (
PYRL_ref IN number
, P_PNO IN VARCHAR2
, P_YYMM IN VARCHAR2
) return number as
retval number(9,2) :=0;
begin
begin
select /*+ ordered */
sum(decode ( ptm_ptc_trns_indc, 'E', ptm_finl_amnt
, ptm_finl_amnt * (-1)))
into retval
from
pay_trns_mstr
, atn_prds
, pay_trns_code
where ptm_emp_pers_nmbr= p_pno and
ptm_atp_yymm = p_yymm and
ptm_trns_date < add_months(to_date(p_yymm, 'YYYYMM'), 1) and
ptm_cncl_indc is null and
ptm_atp_yymm = atp_yymm and
ptm_atp_ref = atp_ref and
atp_prm_ref = pyrl_ref and
ptm_ptc_trns_indc = ptc_trns_indc and
ptm_ptc_code = ptc_code and
ptc_tax_indc='X' and
ptc_grss_indc = 'X';
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
/*
** Taxble hrd changed on 25mar2002
*/
function func_txbl_hrd(
pno in varchar2
, prcyymm in varchar2
, proc_yymm in varchar2
, fyymm in varchar2
, tyymm in varchar2
, instl in number
) return number as
cursor c1 is
select ptm_emp_pers_nmbr tpno,ptm_atp_yymm t_yymm,sum(ptm_finl_amnt) amnt
from pay_trns_mstr
where ptm_emp_pers_nmbr=pno
and ptm_atp_yymm >= fyymm
and ptm_atp_yymm <= tyymm
and ptm_atp_ref = 99
and ptm_ptc_code= '0402'
and ptm_ptc_trns_indc='R'
and ptm_cncl_indc is null
-- and (ptm_syst_indc is null or ptm_syst_indc<>'R')
group by ptm_emp_pers_nmbr,ptm_atp_yymm;
retval number(12,2):= 0;
tnos number(4) ;
proj_amnt1 number(8,2);
proj_amnt number(8,2);
paygrss number(8,2) := 0;
hrd_actl number(8,2) := 0;
prev_actl number(8,2) := 0;
t_fctr number(5,2) := 1;
t_fctr1 number(5,2) := 1;
begin
begin
select count(*)
into tnos
from hous_data
where hdt_emp_pers_nmbr=pno
and hdt_proc_yymm>= fyymm-1 -- should see the last month of itax year also.
and hdt_proc_yymm<= tyymm ;
end;
if tnos =0 then
retval:=0;
else
begin
select (pac_itax_calc.func_sal(pno,prcyymm,proc_yymm,instl)+
abs(func_hrd_grss_plus(pno,fyymm,tyymm,'P')))*(.2)
into proj_amnt1
from dual;
select (sum(hdt_totl_rent)*instl)
into proj_amnt
from hous_data
where hdt_emp_pers_nmbr = pno
and hdt_proc_yymm = prcyymm
and hdt_vacn_yymm is null ;
if proj_amnt is null then
proj_amnt :=0 ;
else
proj_amnt := proj_amnt1-nvl(proj_amnt,0) ;
end if ;
exception when no_data_found then
proj_amnt := 0 ;
end;
begin
paygrss := 0 ;
for c1rec in c1 loop
exit when c1%notfound;
/* -- added on 29/07/2004 by rashid -- */
Begin
select (last_day(to_date(c1rec.t_yymm,'yyyymm'))-hdt_allt_date)/30
into t_fctr
from hous_data
where hdt_emp_pers_nmbr = c1rec.tpno
and hdt_proc_yymm = c1rec.t_yymm
and to_char(hdt_allt_date,'yyyymm')=hdt_proc_yymm
and rownum < 2 ;
exception when no_data_found then
t_fctr := 1 ;
end ;
---- end ----
-- dbms_output.put_line('yyyymm:'||c1rec.t_yymm||'fctr:'||t_fctr);
----dbms_output.put_line('yyyymm'||c1rec.t_yymm);
/* -- added on 01/04/2006 by rashid
begin
select (to_date(c1rec.t_yymm,'yyyymm')-hdt_vacn_date)/30
into t_fctr1
from hous_data
where hdt_emp_pers_nmbr = c1rec.tpno
and hdt_proc_yymm = c1rec.t_yymm
and HDT_VACN_YYMM=hdt_proc_yymm
and rownum < 2 ;
exception when no_data_found then
t_fctr1 := 1 ;
end ; */
-- dbms_output.put_line('yyyymm:'||c1rec.t_yymm||'fctr1:'||t_fctr1);
hrd_actl:= nvl(pac_itax_calc.func_paygrs(c1rec.tpno,c1rec.t_yymm
,c1rec.t_yymm)*t_fctr*
(.2),0)-c1rec.amnt;
-- dbms_output.put_line(hrd_actl);
paygrss := paygrss+hrd_actl ;
end loop ;
end;
/* --- added on 10/08/2004 by rashid --- */
retval:= nvl(proj_amnt,0)+nvl(paygrss,0) ;
if pno = '304538' then
retval := retval - 3187 ;
elsif
pno = '304756' then
retval := retval - 715 ;
end if;
end if ;
return nvl(retval,0);

end;
function func_grss_for_tax(
type in char
, pno in varchar2
, prjmnth in number
, frmprd in varchar2
, toprd in varchar2
, prcyyyymm in varchar2
, proc_yymm in varchar2
) return number as
retval number(10,2):=0;
begin
select nvl(pac_itax_calc.func_paygrs(pno,frmprd,toprd),0) +
nvl(pac_itax_calc.func_sal(pno,prcyyyymm,proc_yymm,prjmnth ),0) +
nvl(pac_itax_calc.f_cded_txbl_grss(99,pno,proc_yymm),0) +
(nvl(pac_itax_calc.func_hra_proj(pno,proc_yymm),0) * prjmnth) +
nvl(pac_itax_calc.func_txbl_conv(pno,proc_yymm)*prjmnth,0)+
nvl(pac_itax_calc.func_txbl_hrd(pno,prcyyyymm,proc_yymm,frmprd
,toprd,prjmnth),0) +
nvl(pac_itax_calc.func_txbl_waterchrg(pno,prcyyyymm,proc_yymm
,frmprd,toprd,prjmnth),0) +
nvl(pac_itax_calc.func_txbl_elec(pno,frmprd,toprd),0) +
nvl(pac_itax_calc.func_tax_cnvy_paid(pno,proc_yymm
,frmprd,toprd),0) +
nvl(pac_itax_calc.func_txbl_loan(pno,prcyyyymm,proc_yymm,frmprd)
,0) +
nvl(pac_itax_calc.func_txbl_lta(pno,frmprd,toprd),0) +
-- nvl(pac_itax_calc.func_pf_perq(pno),0) +
nvl(pac_itax_calc.func_grss_plus(pno,frmprd,toprd,type),0)
into retval
from dual;
return nvl(round(retval),0);
end;
function func_paygrs(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number as
retval number(9,2) :=0;
begin
begin
select sum (nvl (pay_work_bsic, 0) +
nvl (pay_leav_bsic , 0) +
nvl (pay_work_da , 0) +
nvl (pay_leav_da , 0) +
nvl (pay_actg_amnt , 0) +
nvl (pay_incn_amnt , 0) +
nvl (pay_actg_incn_amnt , 0) +
nvl (pay_prot_amnt , 0) +
nvl (pay_enc_amnt , 0) +
nvl (pay_csft_amnt , 0) +
nvl (pay_ot_amnt , 0) +
nvl (func_cded_ern_txbl (pay_prm_ref,
pay_emp_pers_nmbr,
pay_prm_yymm),0))
into retval
from pay_mstr
where pay_emp_pers_nmbr = pno
and pay_prm_yymm between frmprd and toprd;
exception when no_data_found then
retval :=0;
end;
return retval;
end;
function func_sal(
pno in varchar2
, prcyyyymm in varchar2
, proc_yymm in varchar2
, prjmnth in number
) return number as
retval number(10,2) :=0;
begin
begin
select f_bsic(pno,proc_yymm) +
nvl(pay_incn_amnt,0) +
func_fxd(pno,proc_yymm)
into retval
from pay_mstr
where pay_emp_pers_nmbr = pno
and pay_prm_yymm = prcyyyymm
and pay_prm_ref=99;
exception when no_data_found then
select f_bsic(pno,proc_yymm) +
func_fxd(pno,
proc_yymm)
into retval
from dual;
end;
return nvl(retval * prjmnth,0);
end;
function func_hra_proj(
pno in varchar2
, yyyymm in varchar2
) return number as
retval number :=0;
hou_cd char(1);
rent number :=0;
txindc char(1);
begin
begin
select /*+ ordered */
emp_hou_hous_code
, emp_rent_paid
, hou_txbl_indc
into
hou_cd
, rent
, txindc
from
empl_mstr
, hous_code
where emp_pers_nmbr = pno and
emp_hou_hous_code=hou_hous_code;
exception when no_data_found then
retval :=0;
end;
if txindc is null then
retval :=0;
else
retval :=f_hra(pno,yyyymm,rent,hou_cd) ;
end if;
return nvl(retval,0);
end;
function func_grss_rebt(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
) return number as
schm_amnt number(10,2) :=0;
totl_amnt number(10,2) :=0;
retval number(10,2) :=0;
cursor c1 is select * from itax_schm_mstr
where scm_itax_tret='G'
and scm_itax_schm <> '88G' ;
begin
for c1rec in c1
loop
exit when c1%notfound;
select nvl(pac_itax_calc.func_pln_rebt(pno,prdfrm,prdto,type,
c1rec.scm_itax_schm),0)
into schm_amnt
from dual;
if nvl(schm_amnt,0) > nvl(c1rec.scm_itax_limt,0)
then
schm_amnt:=nvl(c1rec.scm_itax_limt,0);
end if;
totl_amnt := nvl(totl_amnt,0) +nvl(schm_amnt,0);
end loop;
return nvl(round(totl_amnt),0);
end;
/*
** func_san_yymm removed and func_san_date added on 30-7-99 ra/bsj
*/
function func_inst_mnth(
pers_nmbr in varchar2
, itax_from_period in varchar2
, itax_to_period in varchar2
, current_period in varchar2
) return number as
project_months number (3, 0) := 0;
san_period varchar2 (6);
begin
san_period := to_char( func_san_date (pers_nmbr)-1,'yyyymm');
if san_period > itax_to_period then
return months_between (to_date (itax_to_period, 'yyyymm'),
to_date (current_period, 'yyyymm'));
elsif san_period < current_period then
return 0;
else
return months_between (to_date (san_period, 'yyyymm'),
to_date (current_period, 'yyyymm'));
end if;
end;
function func_std_dedn(
grss in number
, frmyy in varchar2
, toyy in varchar2
) return number as
retval number(10,2) :=0;
std number(10,2) :=0;
prc number(10,2) :=0;
begin
if grss <= 500000 then
begin
select itl_chek_amnt , itl_perc/100
into std , prc
from itax_logc
where itl_from_year=frmyy and
itl_to_year=toyy and
substr(itl_para_name,1,7)='STDDED1';
end;
elsif grss > 500000 then
begin
select itl_chek_amnt , itl_perc/100
into std , prc
from itax_logc
where itl_from_year=frmyy and
itl_to_year=toyy and
substr(itl_para_name,1,7)='STDDED2';
end;
else std := 0;
end if;
if grss*prc < std then
retval:=grss*prc;
else
retval := std;
end if;
return nvl(retval,0);
end;
function func_totl_svng(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
) return number as
retval number(10,2) :=0;
begin
select nvl(pac_itax_calc.func_plnsvg(pno,prdfrm,prdto,
type),0) +
nvl(pac_itax_calc.func_svgact(pno,prdfrm,prdto),0) +
nvl(pac_itax_calc.func_svgprj(pno,prjnmnt,prcyymm),0) +
nvl(pac_itax_calc.func_svg_pay_prj(pno,prjnmnt,
prcyymm),0)
into retval
from dual;
return nvl(round(retval,0),0);
end;
function func_plnsvg(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered index(itax_plan_mstr itax_plan_mstr_ak1) */
sum(decode(type,'P',nvl(txp_amnt_plan,0) +
nvl(txp_amnt_actl,0),
nvl(txp_amnt_actl,0)
)
)
into retval
from
itax_plan_mstr
, svng_code_mstr
, itax_schm_mstr
where txp_emp_pers_nmbr = pno and
txp_from_year = substr(prdfrm,1,4) and
txp_to_year =substr(prdto,1,4) and
txp_scd_svng_code = scd_svng_code and
scd_scm_itax_schm = scm_itax_schm and
scm_itax_tret = 'S';
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
function func_svgact(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number as
retval number(10,2) :=0;
retval1 number(10,2) :=0;
retval2 number(10,2) :=0;
begin
begin
select sum( nvl(pay_pf_cntb_amnt,0)+ nvl(pay_teps_amnt,0))
into retval
from pay_mstr
where pay_emp_pers_nmbr=pno and
pay_prm_yymm >= frmprd and
pay_prm_yymm <= toprd;
exception when no_data_found then
retval :=0;
end;
begin
select sum(decode ( ptm_ptc_trns_indc, 'R', ptm_finl_amnt,
ptm_finl_amnt * (-1)))
into retval1
from pay_trns_mstr
where ptm_emp_pers_nmbr= pno and
ptm_atp_yymm >= frmprd and
ptm_atp_yymm <= toprd and
ptm_atp_ref in(1,97,99) and
ptm_cncl_indc is null and
ptm_ptc_code in('0101','0103','0801','0802','0808','0809','0810');
exception when no_data_found then
retval1 :=0;
end;
begin
select nvl(f_vpf_csh_deposit(pno,'ITAX_YEAR'),0) into retval2 from dual;
exception when no_data_found then
retval2 :=0;
end ;
return (nvl(retval,0)+nvl(retval1,0)+nvl(retval2,0));
end;
function func_svgprj(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered */
sum(nvl(svg_inst_amnt,0)) * (prjnmnt )
into retval
from svng_mstr,svng_code_mstr,pay_trns_code
where svg_emp_pers_nmbr = pno and
nvl(svg_mtty_date,add_months(to_date(prcyymm,'yyyymm'),1))
> to_date(prcyymm,'yyyymm') and
svg_scd_svng_code = scd_svng_code and
scd_svng_code <> 'CTD' and
scd_ptc_trns_indc = ptc_trns_indc and
scd_ptc_code = ptc_code;
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0) ;
end;
function func_svg_pay_prj(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
) return number as
retval number(10,2) :=0;
retval1 number(10,2) :=0;
proc_yymm varchar2(6) := to_char(add_months(to_date(prcyymm,'yyyymm'),1),'yyyymm');
begin
begin
select
decode(emp_pf_indc,'X',
(f_bsic(emp_pers_nmbr,proc_yymm)+
f_da(emp_pers_nmbr,proc_yymm)) * .12,0),
decode(emp_ctg_catg_code,'N',(decode(emp_pf_indc,'X',
(f_bsic(emp_pers_nmbr,proc_yymm)+
f_da(emp_pers_nmbr,proc_yymm)) * .02,0)),
'S',(decode(emp_pf_indc,'X',
(f_bsic(emp_pers_nmbr,proc_yymm)+
f_da(emp_pers_nmbr,proc_yymm)) * .02,0)),0)
into retval,retval1
from empl_mstr
where emp_pers_nmbr =pno;
exception when no_data_found then
retval :=0;
retval1:=0;
end;
return nvl((round(retval,0) +round(retval1,0)) * (prjnmnt ),0);
end;
function func_rebt(
type in char
, prdfrm in varchar2
, prdto in varchar2
, pno in varchar2
, prcyymm in varchar2
, prjnmnt in number
, grss in number
) return number as
a88a_amnt number(10,2) :=0;
schm_amnt number(10,2) :=0;
rebt_amnt number(10,2) :=0;
totl_amnt number(10,2) :=0;
retval number(10,2) :=0;
cursor c1 is
select *
from itax_schm_mstr
where scm_itax_tret = 'S';
begin
for c1rec in c1
loop
select nvl (pac_itax_calc.func_plnsvg_rebt(
pno
, prdfrm
, prdto
, type
, c1rec.scm_itax_schm
), 0) +
nvl (pac_itax_calc.func_svgact_rebt (
pno
, prdfrm
, prdto
, c1rec.scm_itax_schm
), 0) +
nvl (pac_itax_calc.func_svgprj_rebt (
pno
, prjnmnt
, prcyymm
, c1rec.scm_itax_schm
), 0)
into schm_amnt
from dual;
if c1rec.scm_itax_schm = '88' then
schm_amnt := nvl(schm_amnt,0) +
nvl(pac_itax_calc.func_svg_pay_act(pno,prdfrm,prdto),0) +
nvl(pac_itax_calc.func_svg_pay_prj(pno,prjnmnt,prcyymm),0);
end if;
if nvl(schm_amnt,0) > nvl(c1rec.scm_itax_limt,0) then
schm_amnt:=nvl(c1rec.scm_itax_limt,0);
end if;
if c1rec.scm_itax_schm ='88A' then
a88a_amnt :=nvl(schm_amnt,0);
end if;
totl_amnt := nvl(totl_amnt,0) + nvl(schm_amnt,0);
end loop;
if totl_amnt > 70000 then
totl_amnt := nvl(totl_amnt,0) - nvl(a88a_amnt,0) ;
if totl_amnt > 70000 then
totl_amnt :=70000 + nvl(a88a_amnt,0) ;
else
totl_amnt :=totl_amnt + nvl(a88a_amnt,0);
end if;
end if;
--- included on 29th May 2002 by Rashid
if grss <= 100000 then
rebt_amnt :=nvl(totl_amnt,0) * .30;
if rebt_amnt>30000 then
rebt_amnt:=30000;
end if;
elsif grss > 100000 and grss <= 150000 then
rebt_amnt :=nvl(totl_amnt,0) * .20;
if rebt_amnt>20000 then
rebt_amnt:=20000;
end if;
elsif grss > 150000 and grss <= 500000 then
rebt_amnt :=nvl(totl_amnt,0) * .15;
if rebt_amnt>15000 then
rebt_amnt:=15000;
end if;
else
rebt_amnt:= 0 ;
end if;
-- dbms_output.put_line('total ' || to_char(totl_amnt));
-- dbms_output.put_line('rebt ' || to_char(rebt_amnt));
return nvl(round(rebt_amnt,0),0);
end;
function func_plnsvg_rebt(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
, schm in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered index(itax_plan_mstr itax_plan_mstr_ak1) */
sum(decode(type,'P',nvl(txp_amnt_plan,0) +
nvl(txp_amnt_actl,0),
nvl(txp_amnt_actl,0)
)
)
into retval
from
itax_plan_mstr
, svng_code_mstr
, itax_schm_mstr
where txp_emp_pers_nmbr = pno and
txp_from_year = substr(prdfrm,1,4) and
txp_to_year =substr(prdto,1,4) and
txp_scd_svng_code = scd_svng_code and
scd_scm_itax_schm = scm_itax_schm and
scm_itax_schm = schm and
scm_itax_tret = 'S' ;
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
function func_svgact_rebt(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
, schm in varchar2
) return number as
retval number(10,2) :=0;
retval1 number(10,2) :=0;
begin
begin
select nvl(f_vpf_csh_deposit(pno,'ITAX_YEAR'),0) into retval1 from dual;
exception when no_data_found then
retval1 :=0;
end ;
begin
select /*+ ordered index(pay_trns_mstr pay_trns_mstr_ak3) */
sum(decode(ptm_ptc_trns_indc,'R',nvl(ptm_finl_amnt,0),
'E',nvl(ptm_finl_amnt,0) * -1
)
)
into retval
from
pay_trns_mstr
, pay_trns_code
, svng_code_mstr
where ptm_emp_pers_nmbr=pno and
ptm_atp_yymm >= frmprd and
ptm_atp_yymm <= toprd and
ptm_cncl_indc is null and
ptm_ptc_trns_indc = ptc_trns_indc and
ptm_ptc_code = ptc_code and
ptm_ptc_code = scd_ptc_code and
scd_scm_itax_schm = schm and
scd_svng_code <> 'CTD';
exception when no_data_found then
retval :=0;
end;
if schm='88' then
return (nvl(retval,0)+nvl(retval1,0));
else
return (nvl(retval,0));
end if;
end;
function func_svgprj_rebt(
pno in varchar2
, prjnmnt in number
, prcyymm in varchar2
, schm in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered */
sum(nvl(svg_inst_amnt,0))
into retval
from
svng_mstr
, svng_code_mstr
, pay_trns_code
where svg_emp_pers_nmbr =pno and
nvl(svg_mtty_date,add_months(to_date(prcyymm,'yyyymm'),1))
> to_date(prcyymm,'yyyymm') and
svg_scd_svng_code = scd_svng_code and
scd_scm_itax_schm = schm and
scd_svng_code <> 'CTD' and
scd_ptc_trns_indc = ptc_trns_indc and
scd_ptc_code = ptc_code ;
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0) * nvl(prjnmnt,0);
end;
function func_tax_cnvy_paid(
pno in varchar2
, proc_yymm in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number as
retval number(10,2) :=0;
pay_cnvy number(9,2) :=0;
ptm_cnvy_ern number(9,2) :=0;
ptm_cnvy_ded number(9,2) :=0;
conv_type varchar2(2);
ctg varchar2(2);
begin
select emp_ctg_catg_code into ctg from empl_mstr
where emp_pers_nmbr = pno ;
if ctg in('S','N') then
retval := 0 ;
else
begin
select sum(decode(pay_cnvy_type,'2',
(decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-800),1,
(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-800),0)),
-- '4',
-- (decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-1200),1,
-- (nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-1200),0)),
0))
into pay_cnvy
from pay_mstr
where pay_emp_pers_nmbr=pno
and pay_prm_yymm >= fromyymm
and pay_prm_yymm <= proc_yymm ;
exception when no_data_found then
pay_cnvy := 0 ;
end;
retval := nvl(pay_cnvy,0) ;
end if;
return nvl(retval,0);
end;
function func_txbl_conv(
pno in varchar2
, proc_yymm in varchar2
) return number as
retval number(10,2) :=0;
conv_type varchar2(2) ;
begin
begin
select f_vhtp(pno,proc_yymm) into conv_type from dual;
if conv_type = '2' then
select f_conv(pno,proc_yymm)-800 into retval from dual;
if retval < 0 then
retval := 0;
end if;
/* elsif conv_type = '4' then
select f_conv(pno,proc_yymm)-1200 into retval from dual;
if retval < 0 then
retval := 0;
end if; */
else
retval := 0;
end if;
exception when no_data_found then
retval := 0 ;
end;
return retval;
end ;
function func_nontax_conv(
pno in varchar2
, proc_yymm in varchar2
, fromyymm in varchar2
, toyymm in varchar2
, inst in number
) return number as
retval number(10,2) :=0;
pay_cnvy number(9,2) :=0;
ptm_cnvy_ern number(9,2) :=0;
ptm_cnvy_ded number(9,2) :=0;
conv_type varchar2(2);
pay_proj number(12,2) :=0;
begin
begin
select decode(pay_cnvy_type,'2',
(decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-800),1,
800*inst,(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0))*inst)),
'4',
(decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-1200),1,
1200*inst,(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0))*inst)),
0)
into pay_proj
from pay_mstr
where pay_emp_pers_nmbr=pno
and pay_prm_yymm = to_char(to_date(proc_yymm,'yyyymm')-1,'yyyymm')
and pay_prm_ref = 99 ;
exception when no_data_found then
pay_cnvy := 0 ;
end;

begin
select sum(decode(pay_cnvy_type,'2',
(decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-800),1,
800,(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)))),
'4',
(decode(sign(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)-1200),1,
1200,(nvl(pay_cnvy_amnt,0)+nvl(pay_actg_conv_amnt,0)))),
0))
into pay_cnvy
from pay_mstr
where pay_emp_pers_nmbr=pno
and pay_prm_yymm >= fromyymm
and pay_prm_yymm <= toyymm
and pay_prm_ref in(99,1);
exception when no_data_found then
pay_cnvy := 0 ;
end;

begin
select sum(decode(ptm_ptc_trns_indc,'E',nvl(ptm_finl_amnt,0),
'R',nvl(ptm_finl_amnt,0) * -1))
into ptm_cnvy_ern
from pay_trns_mstr
where ptm_emp_pers_nmbr = pno and
ptm_atp_yymm >= fromyymm and
ptm_atp_yymm <= toyymm and
ptm_ptc_code in('1010','1017','1023') and
ptm_cncl_indc is null ;
exception when no_data_found then
ptm_cnvy_ern :=0;
end;
retval :=nvl(ptm_cnvy_ern,0) + nvl(pay_cnvy,0)+nvl(pay_proj,0);
return nvl(retval,0);
end;
function func_txbl_lta(
pno in varchar2
, frmyymm in varchar2
, toyymm in varchar2
) return number as
retval number(10,2) :=0;
ltfrm date;
ltto date;
ltacnt number(4) :=0;
begin
select count(*) into ltacnt
from lta_mstr
where lta_emp_pers_nmbr = pno and
lta_sts ='L' and
lta_advn_indc is null and
lta_aplc_date between to_date(frmyymm,'yyyymm') and
to_date(toyymm,'yyyymm');
if ltacnt = 0 then
retval :=0;
else
select sum(lta_paid_amnt - lta_clam_amnt)
into retval
from lta_mstr
where lta_emp_pers_nmbr = pno and
lta_sts = 'L' and
lta_advn_indc is null and
lta_aplc_date between to_date(frmyymm,'yyyymm') and
to_date(toyymm,'yyyymm');
if retval < 0 then
retval :=0;
end if;
end if;
return nvl(retval,0);
end;
function func_non_tax_hra(
pno in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select sum(decode(ptm_ptc_trns_indc,'E',nvl(ptm_finl_amnt,0),
'R',nvl(ptm_finl_amnt,0) * -1
)
)
into retval
from pay_trns_mstr
where ptm_emp_pers_nmbr=pno
and ptm_atp_yymm >= fromyymm
and ptm_atp_yymm <= toyymm
and ptm_ptc_code = '1032';
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
function func_tax_comp(
p_pno varchar2
, grss number
, taxfrm varchar2
, taxto varchar2
) return number as
lowr number(10,2) :=0;
prc number(10,2) :=0;
plus number(10,2) :=0;
taxgrs number(10,2) :=0;
t_sex char(1) ;
begin
taxgrs := round (nvl (grss, 0), -1);
select emp_sex_code
into t_sex
from empl_mstr
where emp_pers_nmbr=p_pno ;
if t_sex = 'F' and taxgrs <= 135000 then
return 0 ;
elsif t_sex = 'F' and taxgrs <= 150000 and taxgrs> 135000 then
return round((taxgrs - 135000)*.1) ;
elsif t_sex = 'F' and taxgrs <= 250000 and taxgrs > 150000 then
return round(1500 + (taxgrs - 150000)*.2) ;
elsif t_sex = 'F' and taxgrs > 250000 then
return round(21500 + (taxgrs - 250000)*.3) ;
else
select nvl (itl_lowr_limt, 0),
nvl (itl_perc, 0),
nvl (itl_plus_amnt, 0)
into lowr,
prc,
plus
from itax_logc
where itl_from_year = taxfrm and
itl_to_year = taxto and
substr (itl_para_name, 1, 4) = 'SLAB' and
itl_lowr_limt <= taxgrs and
itl_uppr_limt >= taxgrs ;
return round (nvl (plus, 0) + ((taxgrs - lowr) * prc * .01));
end if;
exception when no_data_found then
return (0);
end;
function func_88d( p_pno varchar2,grss number , taxfrm varchar2 , taxto varchar2)
return number as
t_x number(7,2) := 0 ;
t_y number(7,2) := 0 ;
retval number(7,2) := 0 ;
begin
if grss <= 100000 then
retval := func_tax_comp( p_pno,grss , taxfrm , taxto ) ;
elsif grss > 100000 and grss <= 111240 then
t_x := func_tax_comp( p_pno,grss , taxfrm , taxto ) ;
t_y := grss - 100000 ;
retval := t_x - t_y ;
else
retval := 0 ;
end if;
return (retval);
end ;

function func_surcharge_comp(
grss number
, taxfrm varchar2
, taxto varchar2
, taxamnt number
) return number as
taxgrs number(10,2) :=0;
surcharge number(10,2) :=0;
surcharge_perc number(10,2) :=0;
begin
taxgrs := round (nvl (grss, 0), -1);
if taxgrs <= 1000000 then
surcharge := 0 ;
else
begin
select taxamnt * nvl (itl_surcharge_perc, 0) * .01
into surcharge_perc
from itax_logc
where itl_lowr_limt <= taxgrs and
itl_uppr_limt >= taxgrs and
itl_from_year = taxfrm and
itl_to_year = taxto and
substr (itl_para_name, 1, 4) = 'SLAB';
exception when no_data_found then
surcharge_perc := 0 ;
end ;
surcharge := least(taxgrs-1000000,surcharge_perc) ;
end if;
return nvl(round(surcharge),0);
end;
function func_tax_rcvd(
pno in varchar2
, fromyymm in varchar2
, toyymm in varchar2
) return number as
retval number(10,2) :=0;
retval1 number(10,2) :=0;
begin
begin
/* changed on 31-03-2000 by rashid */
select sum(decode(ptm_ptc_trns_indc,'R',nvl(ptm_finl_amnt,0)
,nvl(ptm_finl_amnt,0) * -1))
into retval
from pay_trns_mstr
where ptm_emp_pers_nmbr=pno and
ptm_trns_date between to_date(fromyymm,'yyyymm') and
last_day(to_date(toyymm,'yyyymm')) and
ptm_ptc_code in ('0107','0108') and
ptm_cncl_indc is null ;
exception when no_data_found then
retval :=0;
end;
select f_vchr_tax_recv(pno) into retval1 from dual;
retval := retval+retval1 ;
return nvl(retval,0);
end;
function func_pln_rebt(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
, schm in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered index(itax_plan_mstr itax_plan_mstr_ak1) */
sum(decode(type,'P',nvl(txp_amnt_plan,0) +
nvl(txp_amnt_actl,0),
nvl(txp_amnt_actl,0)
)
)
into retval
from
itax_plan_mstr
, svng_code_mstr
, itax_schm_mstr
where txp_emp_pers_nmbr = pno and
txp_from_year = substr(prdfrm,1,4) and
txp_to_year =substr(prdto,1,4) and
txp_scd_svng_code = scd_svng_code and
scd_scm_itax_schm = scm_itax_schm and
scm_itax_schm = schm and
scm_itax_tret = 'G';
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
/* added on 15-02-2002' */
function func_grss_plus(
pno in varchar2
, prdfrm in varchar2
, prdto in varchar2
, type in char
) return number as
retval number(10,2) :=0;
begin
begin
select /*+ ordered index(itax_plan_mstr itax_plan_mstr_ak1) */
sum(decode(type,'P',nvl(txp_amnt_plan,0) +
nvl(txp_amnt_actl,0),
nvl(txp_amnt_actl,0)
)
)
into retval
from
itax_plan_mstr
where txp_emp_pers_nmbr = pno and
txp_from_year = substr(prdfrm,1,4) and
txp_to_year =substr(prdto,1,4) and
txp_amnt_actl< 0 ;
exception when no_data_found then
retval :=0;
end;
return nvl(abs(retval),0);
end;
function func_svg_pay_act(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number as
retval number(10,2) :=0;
begin
begin
select sum(nvl(pay_pf_cntb_amnt,0) +
nvl(pay_teps_amnt,0) +
nvl(f_any_cded_recv(pay_prm_ref,pay_emp_pers_nmbr,
pay_prm_yymm,'0101'),0) +
nvl(f_any_cded_recv(pay_prm_ref,pay_emp_pers_nmbr,
pay_prm_yymm,'0103'),0))
into retval
from pay_mstr
where pay_emp_pers_nmbr=pno and
pay_prm_yymm >= frmprd and
pay_prm_yymm <= toprd;
exception when no_data_found then
retval :=0;
end;
return nvl(retval,0);
end;
function func_txbl_elec(
pno in varchar2
, frmprd in varchar2
, toprd in varchar2
) return number as
retval number(10,2) :=0;
t_unit number(10,2) :=0;
unitpmnth number(10,2) :=0;
t_amnt number(10,2) :=0;
t_amnt1 number(10,2) :=0;
t_mnth number(6,2) ;
last_yymm varchar(6);
month_nos number(4);
begin
begin
select sum(etd_unit),sum(etd_amnt),sum(etd_mnth)
into t_unit,t_amnt,t_mnth
from elec_data
where etd_emp_pers_nmbr = pno
and etd_proc_yymm >= frmprd
and etd_proc_yymm <> '200409' ;
unitpmnth := t_unit/nvl(t_mnth,1) ;
t_amnt1:= unitpmnth*t_mnth*(1.64) ;
retval := nvl(t_amnt1,0)-nvl(t_amnt,0) ;
exception when no_data_found then
retval := 0;
end ;
if pno = '071366' then
retval := 0 ;
end if;
return nvl(retval,0);
end ;
--------- Taxble Water Charges calculation by Rashid on 26/12/2001 -------
function func_txbl_waterchrg(
pno in varchar2
, prcyyyymm in varchar2
, procyymm in varchar2
, frmprd in varchar2
, toprd in varchar2
, instl in number
) return number as
retval number(10,2) :=0;
t_unit number(10,2) :=0;
t_amnt number(10,2) :=0;
t_amnt1 number(10,2) :=0;
t_yymm varchar2(6) ;
t_inst number;
begin
select count(*) into t_unit
from hous_data
where hdt_proc_yymm = procyymm ;
if t_unit > 0 then
t_yymm := procyymm ;
t_inst := instl-1 ;
if t_inst < 0 then
t_inst := 0 ;
end if;
else
t_yymm := prcyyyymm ;
t_inst := instl ;
end if ;
begin
select sum(((hdt_hous_area*5.75)/100)-(hdt_watr_chrg))
into t_amnt
from hous_data
where hdt_emp_pers_nmbr=pno
and hdt_proc_yymm<=t_yymm
and hdt_proc_yymm>=frmprd
and hdt_vacn_yymm is null ;
exception when no_data_found then
t_amnt:=0 ;
end;
begin
select (((hdt_hous_area*5.75)/100)-(hdt_watr_chrg))*t_inst
into t_amnt1
from hous_data
where hdt_emp_pers_nmbr=pno
and hdt_proc_yymm= t_yymm
and hdt_vacn_yymm is null
and rownum=1 ;
exception when no_data_found then
t_amnt1:=0 ;
end;
retval := nvl(t_amnt1,0)+nvl(t_amnt,0) ;
if pno = '071366' then
retval := 0 ;
end if;
return nvl(retval,0);
end ;
--------- Taxble Loan Interest calculation by Rashid on 26/12/2001 -------
function func_txbl_loan(pno in varchar2
,prev_yymm in varchar2
,proc_yymm in varchar2
,fyymm in varchar2)
return number is
tbal number(10,2) := 0;
retval number(10,2) := 0;
intr_bal number(8,2) := 0;
intr_bal1 number(8,2) := 0;
intr_eta number(8,2) := 0;
intr_eta1 number(8,2) := 0;
intr_prev number(8,2) := 0;

begin
begin
----------- Checking for Total loan balance >= Rs. 20000 --------
select sum(f_loan_bal(lnm_emp_pers_nmbr,lnm_lcd_loan_code,proc_yymm))
into tbal
from loan_mstr
where lnm_emp_pers_nmbr = pno
and lnm_lcd_loan_code not in('01','02','03','04','18','21','22',
'39','40')
and lnm_sts_code = 'LIV' ;
if tbal > 20000 then
declare
----------- Records of NHB loans and 2/4 wheeler Loans --------------
cursor c1 is select lnm_aplc_nmbr aplc,lnm_emp_pers_nmbr,lnm_prnc_amnt,
lnm_loan_yrop,lnm_lcd_loan_code,lnm_to_date,
lnm_intr_due,lcd_intr_rate,
nvl(f_loan_bal(lnm_emp_pers_nmbr,lnm_lcd_loan_code
,proc_yymm) , 0) loan_bal
from loan_mstr,loan_code_mstr
where lnm_emp_pers_nmbr = pno
and lnm_sts_code = 'LIV'
and lnm_lcd_loan_code = lcd_loan_code
and (( lcd_lcl_calc_code='P'
and lcd_loan_code not in('03','04','18','21','22',
'39','40','54')
)
or lcd_loan_code in('06','14')
);
----------- Records of ETA type loans and WellDone Loans ------------
cursor c2 is select lnm_aplc_nmbr aplc,lnm_emp_pers_nmbr,lnm_prnc_amnt,
lnm_loan_yrop,lnm_lcd_loan_code,lnm_to_date,
lnm_intr_due,lcd_intr_rate,
nvl(f_loan_bal(lnm_emp_pers_nmbr,lnm_lcd_loan_code
,proc_yymm) , 0) loan_bal
from loan_mstr,loan_code_mstr
where lnm_emp_pers_nmbr = pno
and lnm_sts_code = 'LIV'
and lnm_lcd_loan_code = lcd_loan_code
and (( lcd_lcl_calc_code='E'
and lcd_loan_code not in('06','14')
)
or lcd_loan_code in('19','38','54')
);
begin
for c1rec in c1 loop
exit when c1%notfound ;
intr_bal:=( c1rec.loan_bal*(10-c1rec.lcd_intr_rate)/1200);
if intr_bal < 0 then
intr_bal:=0;
end if;
intr_bal1 := intr_bal+intr_bal1 ;
end loop ;
for c2rec in c2 loop
exit when c2%notfound ;
intr_eta:=c2rec.loan_bal*(13-c2rec.lcd_intr_rate)/1200;
if intr_eta < 0 then
intr_eta:=0;
end if;
intr_eta1 := intr_eta+intr_eta1 ;
end loop ;
end ;
retval := nvl(intr_bal1,0)+nvl(intr_eta1,0);
else retval := 0;
end if;
exception when no_data_found then
retval := 0 ;
end;
------ Previous accomulated txbl intr ------
begin
select sum(nvl(itx_txbl_intr,0))
into intr_prev
from itax_mstr
where itx_month = prev_yymm
and itx_month>= fyymm
and itx_emp_pers_nmbr = pno ;
exception
when no_data_found then
intr_prev :=0;
end ;
-------------- end -----------------------
retval:= nvl(retval,0)+nvl(intr_prev,0) ;
return (retval) ;
end ;
function func_pf_perq(p_pno in varchar2)
return number is
retval number(10,2) ;
begin
select sum(intr_amnt)
into retval
from pf_perq
where pno = p_pno
group by pno;
return nvl(retval,0) ;
exception
when no_data_found then
retval := 0 ;
return nvl(retval,0) ;
end ;
procedure proc_itax_calc(
type in char
, proc_yymm in varchar2
, frmym in varchar2
, toym in varchar2
) is
grss number (10, 2) := 0;
inst number (7, 2) := 0;
stnd_dedn number (10, 2) := 0;
taxamnt number (10, 2) := 0;
grssrebt number (10, 2) := 0;
splrebt number (10, 2) := 0;
rebt number (10, 2) := 0;
surcharge number (10, 2) := 0;
txbl_conv number (10,2) := 0;
txbl_elec number (10,2) := 0;
txbl_acco number (10,2) := 0;
txbl_loan number (10,2) := 0;
txbl_watr number (10,2) := 0;
nontxbl_conv number (10,2) := 0;
txbl_hrd number (10,2) := 0;
txbl_pf number (10,2) := 0;
p_type varchar2(1) ;
t_grss_paid number(17,2):= 0;
t_grss_proj number(17,2):= 0;
t_88d number (7, 2) := 0;
t_svng number (8, 2) := 0;
prcyyyymm varchar2(6) := to_char(add_months(to_date(proc_yymm,'yyyymm'),-1),
'yyyymm') ;
cursor c1 is select *
from empl_mstr
where
emp_type='LIV'
order by emp_pers_nmbr;
begin
begin
if substr(proc_yymm,5,6) in ('02','03') then
p_type := 'F' ;
else
p_type := 'P' ;
end if;
end ;
for c1rec in c1
loop
exit when c1%notfound;
-- dbms_output.put_line('001 : ' || 'Pno-'||c1rec.emp_pers_nmbr);
inst := pac_itax_calc.func_inst_mnth(
c1rec.emp_pers_nmbr
, frmym
, toym
, prcyyyymm
);
dbms_output.put_line('002 : ' || 'Instl-'||to_char(inst));
grss := pac_itax_calc.func_grss_for_tax(
p_type
, c1rec.emp_pers_nmbr
, inst
, frmym
, toym
, prcyyyymm
, proc_yymm);
-- dbms_output.put_line('003 : ' || 'Grss-'||to_char(grss));
txbl_conv := pac_itax_calc.func_txbl_conv(c1rec.emp_pers_nmbr,proc_yymm)*inst
+nvl(pac_itax_calc.func_tax_cnvy_paid(c1rec.emp_pers_nmbr,proc_yymm
,frmym
,toym
),0)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'CONV'),0);

-- dbms_output.put_line('004 : ' || 'conv-'||to_char(txbl_conv));


txbl_elec := pac_itax_calc.func_txbl_elec(c1rec.emp_pers_nmbr,frmym,toym)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'ELECT'),0);
txbl_acco := pac_itax_calc.func_txbl_hrd(c1rec.emp_pers_nmbr,prcyyyymm,proc_yymm
,frmym,toym,inst)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'ACCOM'),0);
txbl_loan := pac_itax_calc.func_txbl_loan(c1rec.emp_pers_nmbr,prcyyyymm
,proc_yymm,frmym)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'LNINT'),0);
txbl_watr := pac_itax_calc.func_txbl_waterchrg(c1rec.emp_pers_nmbr,prcyyyymm,
proc_yymm,frmym,toym,inst)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'WATER'),0);
nontxbl_conv:=pac_itax_calc.func_nontax_conv(c1rec.emp_pers_nmbr,prcyyyymm
,frmym
,toym
,inst
);
txbl_pf := 0 ; -- (changed on 26/06/2004)
/* nvl(func_pf_perq(c1rec.emp_pers_nmbr),0)
+nvl(f_itax_plan_conv(c1rec.emp_pers_nmbr,frmym,p_type,'PFINT'),0) ;
*/
t_grss_paid:= nvl(pac_itax_calc.func_paygrs(c1rec.emp_pers_nmbr,frmym,toym),0)
+nvl( f_gplus(c1rec.emp_pers_nmbr),0) ;
t_grss_proj:= pac_itax_calc.func_sal(c1rec.emp_pers_nmbr,prcyyyymm,proc_yymm,inst);
-- dbms_output.put_line('004 : ' || 'nonconv-'||to_char(nontxbl_conv));

/* stnd_dedn := pac_itax_calc.func_std_dedn (
grss
, substr (frmym, 1, 4)
, substr (toym, 1, 4)
); */
stnd_dedn := 0 ;
-- dbms_output.put_line('004 : ' || 'stnd_dedn-'||to_char(stnd_dedn));
t_svng := pac_itax_calc.func_totl_svng(
p_type
, frmym
, toym
, c1rec.emp_pers_nmbr
, prcyyyymm
, inst );
if t_svng > 100000 then
t_svng := 100000 ;
end if ;
splrebt := pac_itax_calc.func_grss_rebt (
p_type
, substr (frmym, 1, 4)
, substr (toym, 1, 4)
, c1rec.emp_pers_nmbr
, prcyyyymm
, inst
);
grssrebt := nvl(splrebt,0)+nvl(t_svng,0) ;

taxamnt := pac_itax_calc.func_tax_comp(
c1rec.emp_pers_nmbr
, grss - stnd_dedn - grssrebt
, substr (frmym, 1, 4)
, substr (toym, 1, 4)
);
-- dbms_output.put_line('006 : ' || 'taxamnt-'||to_char(taxamnt));
t_88d := 0 ;
rebt := 0 ;
-- dbms_output.put_line('007 : ' || to_char(sysdate, 'MI:SS'));
surcharge := pac_itax_calc.func_surcharge_comp (
grss - stnd_dedn - grssrebt
, substr (frmym, 1, 4)
, substr (toym, 1, 4)
, taxamnt - rebt
);
-- dbms_output.put_line('010 : ' || to_char(sysdate, 'MI:SS'));
begin
Insert into itax_mstr (
ITX_MONTH
, ITX_EMP_PERS_NMBR
, ITX_GRSS_SAL
, ITX_STND_DEDN
, ITX_TOTL_SVNG
, ITX_REBT_SVNG
, ITX_CONV_ALLW
, ITX_TXBL_CONV
, ITX_TXBL_LTA
, ITX_NON_TXBL_HRA
, ITX_TOTL_TAX
, ITX_SURCHARGE
, ITX_TAX_RCVD
, ITX_CERT_NMBR
, ITX_SPCL_REBT
, ITX_TXBL_ACCO
, ITX_TXBL_INTR
, ITX_TXBL_ELEC
, ITX_TXBL_WATERCHRG
, ITX_STATUS
, ITX_CATG
, ITX_TXBL_PF
, ITX_GRSS_PAID
, ITX_GRSS_PROJ
, ITX_88D
) values(
proc_yymm
, c1rec.emp_pers_nmbr
, grss - grssrebt
, stnd_dedn
, t_svng
, rebt
,0 -- nontxbl_conv
,0 -- txbl_conv
, pac_itax_calc.func_txbl_lta(
c1rec.emp_pers_nmbr
, frmym,toym)
, pac_itax_calc.func_non_tax_hra(
c1rec.emp_pers_nmbr
, frmym
, toym
) + nvl(f_any_cded(
99
, c1rec.emp_pers_nmbr
, prcyyyymm
, '1032'
),0)*inst
, taxamnt
, surcharge
, nvl(pac_itax_calc.func_tax_rcvd(c1rec.emp_pers_nmbr,frmym,toym),0)
,0
, splrebt
, txbl_acco
, txbl_loan
, txbl_elec
, txbl_watr
, '1LIV'
, c1rec.emp_ctg_catg_code
, txbl_pf
, t_grss_paid
, t_grss_proj
, t_88d
);
end;
---- dbms_output.put_line('011 : ' || to_char(sysdate, 'MI:SS'));
commit;
end loop;
end proc_itax_calc;
end pac_itax_calc;
/

S-ar putea să vă placă și